Как бесплатно разместить Python‑сайт на Heroku

Вы только что завершили простое портфолио на Python и хотите бесплатно опубликовать его в интернете. Heroku — популярный PaaS (Platform as a Service), который упрощает деплой приложений: он берёт на себя поддержку инфраструктуры и позволяет вам сосредоточиться на коде.
Этот материал объясняет весь процесс шаг за шагом. Предполагается базовое знание Python и одного из фреймворков (в примерах используется Django). Примеры рассчитаны на Python 3.7 и Django 2.1.7, но подходы применимы и для других версий с небольшими изменениями.
Зачем выбирать Heroku
Heroku упрощает публикацию приложений и управляет «dynos» — контейнерами, где работает ваш код. Бесплатный уровень удобен для портфолио, демонстрационных проектов и экспериментов. Основные плюсы:
- Простая интеграция с Git и автоматический установщик зависимостей (requirements.txt).
- Быстрый старт: создание приложения и запуск занимают минуты.
- Удобная панель управления и buildpack‑ая архитектура.
Ограничения бесплатного уровня:
Важно: бесплатные dyno могут «спать» при простое и имеют ограничения по ресурсам и времени запуска. Если ожидаете высокий трафик или постоянную доступность — подумайте о платном тарифе.
Альтернативы: Amazon Web Services, PythonAnywhere, Vercel (для отдельных стэк‑ов), DigitalOcean App Platform. Эти платформы имеют свои особенности и порог вхождения — в статье в разделе «Альтернативные подходы» мы сравним их с Heroku.
Краткие термины
- Dyno: единица вычислительных ресурсов на Heroku.
- Buildpack: набор правил и скриптов, которые подготавливают ваше приложение для запуска.
- Procfile: файл, указывающий Heroku, какие процессы запускать.
Подготовка: Git и Heroku CLI
- Установите Git: скачайте с https://git-scm.com/ и следуйте инструкциям для вашей ОС.
- Зарегистрируйтесь на Heroku: https://signup.heroku.com/.
- Установите Heroku CLI: https://devcenter.heroku.com/articles/heroku-cli. Он позволяет логиниться, создавать приложения и взаимодействовать с удалённым репозиторием.
Если вы не знакомы с Git: пройдите краткую вводную по версиям и основным командам (git init, git add, git commit, git push).
Создание и подготовка Django‑проекта
Если у вас ещё нет проекта, создайте виртуальное окружение и установите нужную версию Django:
pip install django==2.1.7Создайте проект и приложение:
django-admin.py startproject project_name
python manage.py startapp app_nameЗамените project_name и app_name на ваши имена. Для работы на Heroku потребуется WSGI‑сервер gunicorn:
pip install gunicornДобавьте gunicorn в зависимости (requirements.txt) и убедитесь, что в настройках проекта (settings.py) указаны необходимые переменные.

Не забудьте выполнить миграции базы данных локально:
python manage.py migrateСоветы по локальной разработке:
- Используйте виртуальные окружения (venv, virtualenv, pipenv, poetry).
- Храните конфиденциальные настройки (SECRET_KEY, доступ к БД) в переменных окружения.
- Тестируйте проект локально через python manage.py runserver перед деплоем.
Подготовка файлов для Heroku
Heroku смотрит на несколько ключевых файлов в корне проекта:
- requirements.txt — список зависимостей.
- Procfile — команда запуска.
- runtime.txt — (опционально) версия Python.
Создайте требования:
pip freeze > requirements.txtProcfile: создайте файл с именем Procfile (без расширения) в корне проекта. В Windows иногда по умолчанию добавляется .txt — снимите расширение.

Откройте Procfile и добавьте строку (замените project_name на ваш проект):
web: gunicorn project_name.wsgiОпционально создайте runtime.txt, чтобы указать версию Python:
python-3.7.6Если не указывать runtime.txt, Heroku попытается применить дефолтную (обычно более новую) версию Python.
Регистрация приложения и сборка на Heroku
В командной строке выполните вход в Heroku:
heroku loginСоздайте приложение (можете выбрать имя сами):
heroku create ademosapp2Если имя занято, Heroku попросит выбрать другое. В панели Heroku вы увидите созданное приложение.

Откройте settings.py вашего проекта и укажите допустимые хосты. В Django это переменная ALLOWED_HOSTS. Для быстрой проверки можно временно указать:
ALLOWED_HOSTS = ['*']Важно: [‘*’] разрешает все хосты — это удобно для теста, но небезопасно для продакшена. Для публичного релиза указывайте конкретные домены.
В панели Heroku выберите приложение → Settings → Add buildpack и добавьте Python buildpack. Сохраните изменения.

Установите пакет django-heroku (упрощает интеграцию настроек Django с Heroku):
pip install django-heroku
pip freeze > requirements.txtВ settings.py импортируйте модуль и активируйте его в конце файла:
import django_heroku
# ... ваши настройки
django_heroku.settings(locals())
# убедитесь, что закомментируете или корректно настроите после деплояПримечание: django-heroku автоматически настраивает DATABASES (Postgres), STATIC_ROOT, логирование и другие параметры. Перед продакшен‑релизом проверьте конфигурации вручную.
Инициализация git, привязка к Heroku и первый пуш
Инициализируйте git‑репозиторий (если ещё не сделали):
git init
git add --all
git commit -m "initial-commit"Привяжите удалённый репозиторий Heroku:
heroku git:remote -a ademosapp2Установите переменную, чтобы временно отключить автоматический сбор статики (collectstatic), если он вызывает ошибки при первом деплое:
heroku config:set DISABLE_COLLECTSTATIC=1И наконец, запушьте на Heroku:
git push heroku masterПосле успешного пуша приложение будет доступно по адресу https://app_name.herokuapp.com (замените app_name на ваше имя).

Тестирование и отладка после деплоя
Основные команды для мониторинга и отладки:
- heroku logs –tail — поток логов в реальном времени.
- heroku ps — статус dyno.
- heroku run python manage.py migrate — запуск миграций на Heroku (если вы используете Heroku Postgres).
Частые ошибки и решения:
- H10 (App crashed): проверьте Procfile и логи. Убедитесь, что gunicorn установлен и requirements.txt актуален.
- Ошибки с collectstatic: либо исправьте конфигурацию staticfiles, либо временно выключите collectstatic (DISABLE_COLLECTSTATIC=1) и собирайте статику вручную.
- Ошибки базы данных: проверьте DATABASE_URL в конфигурации Heroku и убедитесь, что выполняются миграции.
Безопасность и конфиденциальность
- Не храните SECRET_KEY и пароли в settings.py — используйте переменные окружения (heroku config:set KEY=VALUE).
- Настройте DEBUG = False для продакшна.
- Ограничьте ALLOWED_HOSTS точными доменами.
- Для пользовательских данных учтите требования локального законодательства по персональным данным (например, GDPR, если вы обрабатываете данные граждан ЕС).
Внимание: бесплатная среда ограничена уровнем безопасности и поддержкой. Для обработки персональных данных в продакшене рассмотрите платный тариф и сертификаты безопасности.
Альтернативные подходы и когда Heroku не подходит
Когда Heroku — хорошее решение:
- Нужна быстрая публикация портфолио или демо.
- Нет высоких требований по трафику и ресурсам.
- Вы хотите минимальной конфигурации и интеграции с Git.
Когда рассмотреть альтернативы:
- Если нужно постоянное время отклика и отсутствие «сна» dyno — Heroku free может быть неудобен.
- Если у вас специфические требования к окружению (низкоуровневые зависимости, специфические системные пакеты) — VPS или контейнерные решения (DigitalOcean, AWS EC2, Kubernetes) дают больше контроля.
Коротко о вариантах:
- AWS: гибкость и мощность, но выше порог вхождения.
- PythonAnywhere: удобен для новичков и небольших проектов.
- Vercel/Netlify: отличны для фронтенд‑ориентированных проектов и серверлесс‑функций.
Чек-лист для быстрого деплоя (SOP)
- Настроить виртуальное окружение и установить зависимости.
- Создать проект Django и выполнить migrate локально.
- Установить gunicorn и django-heroku.
- Сгенерировать requirements.txt.
- Создать Procfile и (опционально) runtime.txt.
- Зарегистрироваться на Heroku и установить Heroku CLI.
- heroku create
и heroku git:remote -a . - git add, git commit, git push heroku master.
- Проверить логи (heroku logs –tail) и устранить ошибки.
- Настроить переменные окружения и вернуть DEBUG=False.
Ролевые чек-листы
Для разработчика:
- Проверил миграции локально.
- Добавил gunicorn и обновил requirements.txt.
- Проверил Procfile и runtime.txt.
Для менеджера или владельца проекта:
- Утвердил безопасную конфигурацию (DEBUG=False, SECRET_KEY в env).
- Проверил доменное имя и SSL (при необходимости покупал отдельный домен).
Для девопса:
- Настроил автоматические бэкапы БД (если используются данные).
- Настроил мониторинг и уведомления.
Миграция с бесплатного уровня на платный
Если проект растёт, переход на платный тариф обычно включает:
- Переход на постоянные dyno (без «сна»).
- Подключение кастомного домена и SSL.
- Расширение баз данных (Heroku Postgres paid план).
Шаги для миграции:
- Перейдите в Dashboard → Resources и добавьте нужные add‑ons.
- Включите платный тариф для dyno в разделе Resources.
- Обновите конфигурации ALLOWED_HOSTS и произведите тестирование.
Критерии приёмки
- Приложение доступно по https://
.herokuapp.com и отображает ожидаемую страницу. - Логи не содержат критических ошибок при старте.
- Миграции выполнены (если используются модели).
- Переменные окружения настроены корректно (SECRET_KEY, DEBUG=False для прод).
Decision flow: стоит ли использовать Heroku для вашего проекта?
flowchart TD
A[Нужен быстрый и бесплатный деплой?] -->|Да| B{Ожидаемый трафик}
B -->|Низкий/тестовый| C[Использовать Heroku Free]
B -->|Средний/высокий| D[Рассмотреть платный Heroku или VPS]
A -->|Нет| E[Рассмотреть альтернативы: AWS, DigitalOcean, PythonAnywhere]
D --> F[Планируйте миграцию: масштабируемая БД, постоянные dyno]Частые ошибки и готовые тесты (acceptance)
- Тест 1: Страница отвечает 200 → OK.
- Тест 2: heroku logs –tail не показывает падения приложения при старте → OK.
- Тест 3: Статические файлы загружаются корректно (если collectstatic включён) → OK.
Риски и минимальные меры по их снижению
- Риск: утечка SECRET_KEY — мерa: хранить в переменных окружения.
- Риск: простои из‑за спящего dyno — мерa: перейти на платные dyno.
- Риск: проблемы с collectstatic — мерa: настроить WHITE_NOISE или правильный STATIC_ROOT заранее.
Локализация и особенности для русскоязычной аудитории
- При регистрации на платформах учитывать правила передачи персональных данных при взаимодействии с пользователями из ЕС.
- Локальные платёжные и доменные провайдеры актуальны для покупки домена и SSL в РФ/регионе; настройки в Heroku одинаковы для любой локали.
Когда Heroku не сработает: примеры
- Нужна поддержка специфичных системных библиотек, которые невозможно установить через pip — лучше VPS/контейнер.
- Требуются длительные фоновые задачи с высоким потреблением CPU — рассмотреть отдельные платные воркеры или специализированную инфраструктуру.
Краткое руководство по откату и аварийному восстановлению
- Если приложение перестало работать после пуша — откатиться на предыдущий коммит: git revert или git push heroku
:master. - Включите DEBUG=True временно только для отладки локально (не в продакшене).
- Проверьте логи и переменные окружения.
Заключение
Heroku остаётся удобным решением для быстрого и бесплатного размещения небольших Python/Django‑проектов. Для портфолио и демонстраций он практически идеален: простой workflow через Git, автоматическая установка зависимостей и понятная панель управления. Если проект перерастёт бесплатные ограничения, переход на платные тарифы или перенос на более гибкую инфраструктуру — естественный следующий шаг.
Итоговое резюме
- Heroku подходит для быстрого бесплатного деплоя Python/Django приложений.
- Подготовьте requirements.txt, Procfile и (опционально) runtime.txt.
- Всегда храните секреты в переменных окружения и проверяйте DEBUG/ALLOWED_HOSTS перед релизом.
Ключевые выводы
- Быстрый старт и простота интеграции с Git.
- Ограничения бесплатного уровня (спящий dyno, ресурсы).
- Альтернативы существуют и имеют свои преимущества для разных сценариев.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone