Бесплатный хостинг Python‑сайта на Heroku — пошаговое руководство

Важно: инструкция основана на исходных предположениях автора (Python 3.7, Django 2.1.7). Перед развёртыванием проверьте версии и совместимость пакетов.
Почему выбрать Heroku?
Heroku — это платформа как услуга (PaaS), которая скрывает от вас низкоуровневую инфраструктуру и работает через «dyno» (контейнеры для приложений). Плюсы для быстрого размещения портфолио:
- Простая интеграция с Git; деплой — одной командой.
- Быстрая настройка buildpack для Python.
- Нет необходимости настраивать виртуальные машины и балансировщики для простого проекта.
Ограничения бесплатных тарифов (типичные для подобных сервисов): ограничения по ресурсам, возможный спящий режим dyno при простое, лимиты на количество инстансов. Если вы планируете серьёзную нагрузку или гарантированные SLA — стоит рассмотреть платные решения.
Кому подходит этот гайд
Этот материал рассчитан на разработчиков, у которых есть базовые навыки Python и знакомство с Django. Если вы совсем новичок в Git — сначала пройдите краткий урок по системе контроля версий.
Перед началом — что проверить
- Наличие виртуального окружения (venv/virtualenv) и установленного Python (рекомендовано использовать версию, совместимую с вашим стеком).
- Установлен Git и настроен локальный репозиторий.
- Зарегистрирован аккаунт на Heroku и установлен Heroku CLI.
- Ваш проект корректно запускается локально (manage.py runserver) и миграции применяются.
Установка Git и Heroku CLI
- Скачайте и установите Git с официального сайта git-scm. Следуйте инструкциям для вашей ОС.
- Зарегистрируйтесь на Heroku, если у вас ещё нет аккаунта.
- Скачайте и установите Heroku CLI с официального сайта Heroku.
После установки проверьте версии:
git --version
heroku --version
python --versionЕсли вы не уверены с командами Git, ознакомьтесь с кратким руководством по командам git init, git add, git commit, git push.
Создание и настройка проекта Django
Если у вас ещё нет проекта, создайте виртуальное окружение и установите нужную версию Django:
python -m venv venv
# на Windows
venv\Scripts\activate
# на macOS / Linux
source venv/bin/activate
pip install django==2.1.7Создайте проект и приложение:
django-admin.py startproject project_name
cd project_name
python manage.py startapp app_nameЗамените project_name и app_name на ваши имена. Установите gunicorn — WSGI‑сервер, который используют в продакшне на Heroku:
pip install gunicornНе путайте gunicorn с добавлением в INSTALLED_APPS — gunicorn не является Django‑приложением, поэтому его не нужно включать в INSTALLED_APPS. (Если в вашем проекте есть сторонние пакеты, убедитесь, что они корректно указаны в requirements.txt — см. ниже.)
Выполните миграции локально:
python manage.py migrateПроверьте локальный запуск:
python manage.py runserverЕсли сайт работает локально, можно готовить файлы для Heroku.
Подготовка файлов для Heroku
Heroku смотрит на несколько ключевых файлов в корне репозитория:
- requirements.txt — список зависимостей Python
- Procfile — команда запуска приложения
- runtime.txt — (опционально) версия Python
Создайте requirements.txt:
pip freeze > requirements.txtProcfile — файл без расширения, с единой строкой, описывающей веб‑процессы. В корне проекта создайте файл Procfile и добавьте:
web: gunicorn project_name.wsgiГде project_name — ваш Django‑проект (папка с settings.py).
Если вы создаёте Procfile на Windows и видите расширение .txt, включите отображение расширений в проводнике (View → File name extensions), затем уберите расширение .txt.
Опционально укажите runtime.txt, чтобы задать версию Python:
python-3.7.6Если не указывать, Heroku попытается использовать поддерживаемую версию Python по умолчанию.
Настройки Django для размещения
- Откройте settings.py и в DEBUG установите False перед продакшеном. Для тестового бесплатного хостинга можно временно оставить DEBUG=True, но это рискованно для публичного сайта.
- Настройте ALLOWED_HOSTS:
ALLOWED_HOSTS = ['*']Использование ‘*’ удобно для разработки, но в продакшене лучше указывать конкретные домены.
- Для простой интеграции с Heroku можно использовать пакет django-heroku. Установите его:
pip install django-heroku
pip freeze > requirements.txtЗатем в settings.py добавьте в конец:
import django_heroku
django_heroku.settings(locals())
# Рекомендуется задокументировать и при необходимости закомментировать эту строку после деплояВажно: django-heroku автоматически настраивает DATABASES и другие параметры под Heroku. Если вы предпочитаете контролировать все параметры вручную — не используйте автоматическую конфигурацию и настройте настройки подключения к базе и staticfiles сами.
Развёртывание на Heroku — шаг за шагом
- Войдите в Heroku через CLI:
heroku login- Создайте приложение (замените имя приложения на своё):
heroku create my-portfolio-app- Свяжите удалённый репозиторий Heroku (если не создан автоматически):
heroku git:remote -a my-portfolio-app- Инициализируйте git (если ещё не):
git init
git add --all
git commit -m "initial commit"- Предотвратите ошибки сборки связанных со статическими файлами Django (если хотите отложить collectstatic):
heroku config:set DISABLE_COLLECTSTATIC=1- Отправьте код в Heroku:
git push heroku master- Просмотрите логи в реальном времени, если потребуется отладка:
heroku logs --tail- Откройте приложение в браузере:
heroku openИли вручную: https://my-portfolio-app.herokuapp.com
Добавление buildpack и другие настройки в Dashboard
В панели управления Heroku (Dashboard) откройте приложение → Settings → Add buildpack → выберите Python и нажмите Save changes. Это нужно, если Heroku не распознал автоматически ваш проект как Python.
Также в Dashboard можно подключать переменные окружения (Config Vars), настраивать домены, просматривать метрики и логирование.
Типичные ошибки и способы устранения
- Ошибка при запуске Procfile: файл имеет расширение (Procfile.txt) или неверный путь к wsgi. Проверьте имя файла и строку
web: gunicorn project_name.wsgi. - collectstatic падает: если Django пытается собрать статические файлы, но не настроены STATIC_ROOT или отсутствует пакет whitenoise, лучше временно отключить collectstatic с DISABLE_COLLECTSTATIC=1 и настроить сбор статических отдельно.
- Миграции базы данных: если вы используете базу данных Heroku Postgres, выполните
heroku run python manage.py migrate. - Проблемы с зависимостями: убедитесь, что все пакеты из requirements.txt совместимы с выбранной версией Python.
- Разное поведение локально и на Heroku: проверьте переменные окружения и DEBUG.
Команды для отладки:
heroku logs --tail
heroku run bash
heroku run python manage.py migrate
heroku config --app my-portfolio-appЧто делать после успешного развёртывания
- Настройте переменные окружения (например, SECRET_KEY, настройки базы) через Heroku Dashboard → Settings → Config Vars.
- Подумайте о serving static: используйте WhiteNoise или CDN для статических файлов.
- Настройте резервные копии и мониторинг, если на проекте появилась полезная информация пользователей.
Миграция на платный план и подключение домена
Если вы хотите подключить собственный домен или масштабировать приложение, Heroku предоставляет платные тарифы и простую привязку доменов через Dashboard → Settings → Domains. Помните, что домен и платные dyno оплачиваются отдельно.
Когда Heroku не подходит — альтернативы и причины
Heroku удобен для быстрых проектов и прототипов. Однако рассмотрите другие варианты, если:
- Нужны гарантированные ресурсы и контроль над инфраструктурой.
- Проект требует специфичной сетевой конфигурации.
- Требуется низкая латентность работы с файловой системой или специфичные фичи уровня VM.
Альтернативы: AWS Elastic Beanstalk, DigitalOcean App Platform, Render, PythonAnywhere, Vercel/Netlify (подходит для фронтенда), самоуправляемые VPS. Каждый сервис имеет свои плюсы и минусы по цене, управлению и функционалу.
Безопасность и конфиденциальность
- Никогда не хардкодьте секретные ключи в settings.py. Используйте переменные окружения (Heroku Config Vars).
- Для сбора персональных данных убедитесь, что политики конфиденциальности соответствуют требованиям локального законодательства (например, GDPR в ЕС).
- Переведите DEBUG в False перед открытием публичного сайта.
Контроль версий и CI/CD (рекомендации)
- Храните код в GitHub/GitLab и используйте CI для тестов перед деплоем.
- Можно подключить автоматический деплой Heroku из ветки GitHub (Heroku → Deploy → GitHub integration).
Критерии приёмки
- Сайт доступен по адресу https://
.herokuapp.com без ошибки 500. - Все статические файлы корректно загружаются (CSS/JS/изображения) или корректно настроен WhiteNoise/CDN.
- Выполнены миграции базы данных и страницы администрирования доступны (при необходимости).
- Конфигурации секретных ключей и чувствительных переменных вынесены в Config Vars.
Быстрый чеклист (роль‑ориентированный)
Разработчик:
- Локально проходит migrate и runserver
- requirements.txt обновлён
- Procfile и runtime.txt в корне репозитория
- ALLOWED_HOSTS настроен
Reviewer / Тестировщик:
- Проверил базовую функциональность после деплоя
- Протестировал формы и основные пути
- Проверил логи на ошибки
Оператор / DevOps:
- Настроил Config Vars и buildpack
- Проверил логи и мониторинг
- Настроил бэкапы (для базы данных)
Playbook: быстрый план развертывания
- Подготовить проект локально (venv, миграции, requirements).
- Создать Procfile и runtime.txt.
- Протестировать запуск локально.
- Создать приложение в Heroku и связать git remote.
- Выполнить git push heroku master.
- Применить migrate и проверить логи.
- Настроить переменные окружения и статические файлы.
Частые случаи, когда этот подход не сработает
- Если приложение интенсивно использует фоновые задачи, потребуется внести Celery/worker‑процессы и, возможно, платные dyno.
- Для приложений с большой загрузкой медленная бесплатная среда и спящий режим могут быть неприемлемы.
- Если проект зависит от нестандартных системных библиотек, их нужно заранее проверить на поддерживаемость в окружении Heroku.
Мини‑методология проверки работоспособности после деплоя
- Открыть приложение (
heroku open). - Проверить логи (
heroku logs --tail) на ошибки import/migrate/collectstatic. - Выполнить
heroku run python manage.py migrate. - Проверить страницы, формы и внешний вид (CSS/JS).
- Настроить мониторинг и оповещения на будущие ошибки.
Визуальная схема развёртывания
flowchart TD
A[Локальный репозиторий] --> B[git commit]
B --> C[git push heroku master]
C --> D[Heroku build system]
D --> E[Запуск dyno: gunicorn project_name.wsgi]
E --> F[Доступ через https://app.herokuapp.com]Резюме
Heroku остаётся удобным инструментом для быстрого, минимального по усилиям размещения Python/Django‑проекта, особенно если ваша цель — портфолио или прототип. Главное — правильно подготовить файлы requirements.txt, Procfile и runtime.txt, настроить параметры Django для продакшена и знать команды Heroku CLI для деплоя и отладки.
Важно: перед переносом проекта в продакшен оцените требования по безопасности, резервному копированию и доступности — возможно, потребуется перейти на платный тариф или выбрать другую платформу.
Краткие рекомендации:
- Тестируйте локально прежде, чем пушить на Heroku.
- Храните секреты в Config Vars.
- Используйте WhiteNoise/CDN для статики в продакшене.
Полезные команды поборочно
git init
git add --all
git commit -m "initial commit"
heroku create
heroku git:remote -a
git push heroku master
heroku logs --tail
heroku run python manage.py migrate
heroku config:set DISABLE_COLLECTSTATIC=1 Завершение: если после прочтения остались вопросы по конкретным ошибкам или по использованию другого фреймворка (Flask, FastAPI), опишите свой стек и сообщение об ошибке — я помогу с отладкой.
Important: следите за обновлениями политик провайдера — условия бесплатных тарифов могут меняться, и инструкция может требовать адаптации.
Похожие материалы
Панель быстрого доступа MS Office — настройка
Как проверить Windows Experience Index в Windows 10
Хорошее письмо — это хорошая коммуникация
Ошибка «Failed to download file» в Minecraft — как исправить