ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Django入门教程(二十九):博客项目实战(十)——打包上线部署到Railway

Django入门教程(二十九):博客项目实战(十)——打包上线部署到Railway 一、生产环境配置开发环境中DEBUGTrueDjango 会显示详细的错误信息和调试页面。生产环境中必须关闭DEBUG并正确配置安全选项。python# 文件路径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) STATIC_URL /static/配置项解析配置项开发环境生产环境SECRET_KEY可硬编码从环境变量读取DEBUGTrueFalseALLOWED_HOSTS[]或[localhost]必须配置域名STATIC_ROOT不需要必须配置重要提醒SECRET_KEY是 Django 最重要的安全密钥用于加密 session、CSRF token 等。绝对不能硬编码在代码中或提交到 Git。生产环境中通过环境变量注入。代码解析os.environ.get(DEBUG, True).lower() true从环境变量读取DEBUG默认True。字符串True转小写后与true比较得到布尔值。.split(,)将逗号分隔的字符串转为列表方便配置多个域名。二、依赖管理与 requirements.txt生成依赖列表部署平台用它来安装项目所需的包。bash(venv) $ pip freeze requirements.txt检查文件内容确保包含以下关键依赖textDjango5.0,6.0 gunicorn21.0 # 生产级 WSGI 服务器 whitenoise6.0 # 静态文件服务可选如果没有 gunicorn先安装bash(venv) $ pip install gunicorn (venv) $ pip freeze requirements.txt各依赖的作用包名作用DjangoWeb 框架本体gunicorn生产级 WSGI 服务器替代runserverwhitenoise让 Gunicorn 直接提供静态文件服务三、配置 Gunicorn WhitenoiseDjango 自带的runserver不适合生产环境。Gunicorn是 Python 生产级 WSGI 服务器处理并发请求。Whitenoise让 Gunicorn 能直接提供静态文件服务CSS、JS、图片。python# 文件路径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, ]Whitenoise 中间件的顺序要求textSecurityMiddleware → WhiteNoiseMiddleware → 其他所有中间件必须放在SecurityMiddleware之后、其他中间件之前否则静态文件可能无法正常服务。在项目根目录创建 Procfiletextweb: gunicorn blog_project.wsgi --log-file -Procfile 解析部分含义web:声明这是一个 Web 服务进程gunicorn使用 Gunicorn 启动blog_project.wsgiWSGI 入口模块路径--log-file -日志输出到标准输出平台可捕获四、收集静态文件生产环境下Django 不自动提供静态文件服务需要用collectstatic收集到统一目录。bash(venv) $ python manage.py collectstatic这个命令会把 Admin 后台的静态文件、blog 应用的静态文件都复制到STATIC_ROOT目录staticfiles/。开发环境 vs 生产环境环境静态文件处理开发环境一般不需要运行collectstaticDjango 自动查找各 App 的static目录生产环境部署前必须运行确保所有静态文件集中到一个目录五、将项目推送到 GitHub1. 创建 .gitignore确保敏感文件和临时文件不被提交textvenv/ __pycache__/ *.pyc db.sqlite3 staticfiles/ .env各条目说明条目原因venv/虚拟环境体积大且可重建__pycache__/Python 字节码缓存*.pyc编译后的 Python 文件db.sqlite3开发数据库不应提交staticfiles/收集的静态文件部署时重新生成.env环境变量文件含敏感信息2. 推送到 GitHubbash$ 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 这类全栈应用支持良好。部署步骤访问 railway.app用 GitHub 账号登录。点击New Project→Deploy from GitHub repo→ 选择django-blog仓库。Railway 会自动检测Procfile识别启动命令。在Variables中设置环境变量。点击Deploy等待构建和部署完成。环境变量配置变量名值说明SECRET_KEY随机生成的长字符串Django 安全密钥DEBUGFalse关闭调试模式ALLOWED_HOSTS.railway.app允许 Railway 域名访问快速生成 SECRET_KEYbash$ python -c import secrets; print(secrets.token_urlsafe(50))部署成功后获得链接如https://django-blog.up.railway.app温馨提示Railway 免费额度有限每月 $5 或 500 小时。如果只是测试学习用完记得暂停项目。Heroku 已取消免费计划所以本教程推荐 Railway 作为替代。七、部署流程图八、常见部署问题排查问题现象可能原因解决方案部署后 500 错误DEBUGFalse且未配ALLOWED_HOSTS设置ALLOWED_HOSTS.railway.app静态文件 404未运行collectstatic或未配 Whitenoise检查中间件顺序确认已收集DisallowedHost域名不在ALLOWED_HOSTS添加 Railway 域名应用启动失败Procfile 路径错误确认blog_project.wsgi与实际项目名一致SECRET_KEY报错环境变量未设置在 Railway Variables 中添加数据库报错未执行迁移在部署命令中加入migrate构建超时依赖过多精简requirements.txt在 Procfile 中加入迁移命令textweb: python manage.py migrate --noinput gunicorn blog_project.wsgi --log-file -说明--noinput表示不提示确认适合自动化部署。九、下一步学习方向学习方向适合谁推荐起点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通过环境变量管理。依赖管理pip freeze requirements.txt生成依赖清单。生产服务器Gunicorn Whitenoise 替代runserver。Procfile定义启动命令让平台识别如何运行应用。静态文件collectstatic收集到统一目录。GitHub 推送.gitignore排除敏感文件。Railway 部署关联仓库、配置环境变量、一键上线。至此你的 Django 博客已经从零到一完整上线。整个系列走完了从环境搭建、模型设计、视图模板、用户系统到生产部署的全流程。接下来你可以基于这个项目继续扩展评论、标签、RSS 订阅等功能或转向 DRF 构建 API 服务。
返回列表