Сборка для продакшена — развертывание на Railway
В этой главе вы узнаете, как настроить продакшен-окружение, развернуть приложение Django-блога на Railway и получить публичную ссылку для доступа.
Настройка продакшен-окружения
В среде разработки DEBUG=True, и Django отображает подробную информацию об ошибках и страницы отладки.
В производственной среде DEBUG должен быть отключён, а параметры безопасности должны быть настроены правильно.
settings.py конфигурация для продакшена
Пример
import os
# Чтение секретного ключа из переменной окружения (не прописывайте его жёстко в коде)
SECRET_KEY = os.environ.get('SECRET_KEY', 'Секретный ключ по умолчанию для среды разработки')
# DEBUG управляется через переменные окружения.
DEBUG = os.environ.get('DEBUG', 'True').lower() == 'true'
# Разрешённые имена хостов
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '127.0.0.1,localhost').split(',')
# Каталог сбора статических файлов
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # staticfiles/ в каталоге проекта
STATIC_URL = '/static/'
SECRET_KEYЭто самый важный ключ безопасности Django, используемый для шифрования сессий, CSRF-токенов и т. д. Он никогда не должен быть жёстко закодирован в коде или зафиксирован в Git. В production-среде он внедряется через переменные окружения.
Управление зависимостями и requirements.txt
Создайте список зависимостей; платформа развёртывания использует его для установки пакетов, необходимых проекту.
(venv) $ pip freeze > requirements.txt
Проверьте содержимое файла, чтобы убедиться, что включены следующие ключевые зависимости:
Django>=5.0,<6.0 gunicorn>=21.0 # 生产级 WSGI 服务器 whitenoise>=6.0 # 静态文件服务(可选)
Если gunicorn отсутствует, сначала установите его:
(venv) $ pip install gunicorn (venv) $ pip freeze > requirements.txt
Настройте Gunicorn + Whitenoise
Встроенный в DjangorunserverНе подходит для production-среды.
GunicornЭто промышленный WSGI-сервер для Python, который обрабатывает одновременные запросы.
WhitenoiseПозволяет Gunicorn напрямую обслуживать статические файлы (CSS, JS, изображения).
Пример
# Промежуточное ПО Whitenoise должно быть размещено после SecurityMiddleware и перед другими middleware.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # Добавить: middleware для статических файлов
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Создайте в корневом каталоге проектаProcfileсообщает Railway, как запустить приложение:
web: gunicorn blog_project.wsgi --log-file -
Собрать статические файлы
В производственной среде Django не обслуживает статические файлы автоматически; необходимо использоватьcollectstaticСоберите в единый каталог.
(venv) $ python manage.py collectstatic
Эта команда скопирует статические файлы бэкенда Admin и приложения blog вSTATIC_ROOTКаталог (staticfiles/).
В среде разработки обычно не нужно запускать collectstatic (Django автоматически находит каталог статических файлов каждого приложения). Однако перед развёртыванием его необходимо запустить, чтобы все статические файлы были собраны в один каталог для использования веб-сервером.
Отправьте проект на GitHub
Создайте .gitignore
Убедитесь, что конфиденциальные и временные файлы не попадают в коммит:
venv/ __pycache__/ *.pyc db.sqlite3 staticfiles/ .env
Отправьте на GitHub
$ git init $ git add . $ git commit -m "初始化 Django 博客项目" $ git branch -M main $ git remote add origin https://github.com/你的用户名/django-blog.git $ git push -u origin main
Развёртывание на Railway
RailwayЭто развивающаяся облачная платформа для развёртывания с хорошей поддержкой full-stack приложений, таких как Django.
Шаги развёртывания
- Посетитеrailway.app, войдите с учетной записью GitHub
- Нажмите "New Project" → "Deploy from GitHub repo" → Выберите репозиторий django-blog
- Railway автоматически обнаруживает Procfile и распознаёт команду запуска.
- Задайте переменные окружения в Variables.
- Нажмите Deploy и дождитесь завершения сборки и развёртывания.
Настройка переменных окружения
| Имя переменной | Значение | Описание |
|---|---|---|
| SECRET_KEY | Случайно сгенерированная длинная строка | Секретный ключ Django |
| DEBUG | False | Отключите режим отладки |
| ALLOWED_HOSTS | .railway.app | Разрешить доступ с домена Railway. |
Быстро сгенерировать SECRET_KEY:
$ python -c "import secrets; print(secrets.token_urlsafe(50))"
После успешного развёртывания вы получите ссылку вида:https://django-blog.up.railway.app
Бесплатный тариф Railway ограничен ($5 в месяц или 500 часов). Если вы просто тестируете или учитесь, не забудьте приостановить проект после того, как израсходуете лимит. Heroku отменил бесплатный план, поэтому в этом руководстве в качестве альтернативы рекомендуется Railway.
Следующее направление обучения
| Направление обучения | Кому это подходит | Рекомендуемая отправная точка |
|---|---|---|
| Django REST Framework (DRF) | Нужно создать API-бэкенд для фронтенд-фреймворков (Vue3/React). | Изучите Serializer + ViewSet, чтобы превратить блог в API-сервис |
| PostgreSQL | Требуется база данных промышленного уровня | Замените SQLite и используйте django-environ для управления конфигурацией базы данных |
| Асинхронная задача Celery | Нужны фоновые задачи (отправка писем, генерация отчётов). | Интегрируйте Redis + Celery для реализации очереди асинхронных задач. |
| Django + Vue3/React: разделение фронтенда и бэкенда | Нужна архитектура с разделением фронтенда и бэкенда | Создайте API-бэкенд с помощью DRF, создайте фронтенд с помощью Vue3/React и обменивайтесь данными через fetch |
Итоги главы
В этой главе вы выполнили заключительный шаг: настроили продакшн-окружение (SECRET_KEY/DEBUG/ALLOWED_HOSTS), сгенерировали requirements.txt, настроили Gunicorn + Procfile, отправили код на GitHub и выполнили развёртывание на Railway в один клик.
Другие расширения