现在位置: 首页 > Django 教程 > 正文

打包上线 — 部署到 Railway

本章你将学会配置生产环境,将 Django 博客应用部署到 Railway,获得公开访问链接。


生产环境配置

开发环境中 DEBUG=True,Django 会显示详细的错误信息和调试页面。

生产环境中必须关闭 DEBUG,并正确配置安全选项。

settings.py 生产配置

实例

# 文件路径:blog_project/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 最重要的安全密钥,用于加密 session、CSRF token 等。绝对不能硬编码在代码中或提交到 Git。生产环境中通过环境变量注入。


依赖管理与 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

Django 自带的 runserver 不适合生产环境。

Gunicorn 是 Python 生产级 WSGI 服务器,处理并发请求。

Whitenoise 让 Gunicorn 能直接提供静态文件服务(CSS、JS、图片)。

实例

# 文件路径:blog_project/settings.py

# Whitenoise 中间件必须放在 SecurityMiddleware 之后,其他中间件之前
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',   # 新增:静态文件中间件
    '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 会自动查找各 App 的 static 目录)。但部署前必须运行,确保所有静态文件集中到一个目录供 Web 服务器使用。


将项目推送到 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 是新兴的云部署平台,对 Django 这类全栈应用支持良好。

部署步骤

  1. 访问 railway.app,用 GitHub 账号登录
  2. 点击 "New Project" → "Deploy from GitHub repo" → 选择 django-blog 仓库
  3. Railway 会自动检测 Procfile,识别启动命令
  4. 在 Variables 中设置环境变量
  5. 点击 Deploy,等待构建和部署完成

环境变量配置

变量名说明
SECRET_KEY随机生成的长字符串Django 安全密钥
DEBUGFalse关闭调试模式
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)需要为前端框架(Vue3/React)构建 API 后端学习 Serializer + ViewSet,将博客改造为 API 服务
PostgreSQL需要生产级数据库替换 SQLite,使用 django-environ 管理数据库配置
Celery 异步任务需要后台任务(发邮件、生成报表)接入 Redis + Celery,实现异步任务队列
Django + Vue3/React 前后端分离想要前后端分离架构用 DRF 构建 API 后端,Vue3/React 构建前端,通过 fetch 通信

本章小结

本章你完成了最后一步:配置生产环境(SECRET_KEY/DEBUG/ALLOWED_HOSTS)、生成 requirements.txt、配置 Gunicorn + Procfile、推送到 GitHub、Railway 一键部署上线。