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

打包上线 — 部署到 Railway

本章你将学会 FastAPI 的生产环境配置,并用 Railway 将博客部署上线。


生产环境配置管理

(venv) $ pip install pydantic-settings python-dotenv

实例

# 文件路径:config.py
from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    """应用配置(自动从 .env 文件中读取)"""
    app_name: str = "RUNOOB 博客"
    debug: bool = False
    secret_key: str = "dev-secret-key-change-me"
    database_url: str = "sqlite:///./blog.db"
    access_token_expire_minutes: int = 60 * 24 * 7   # 7 天

    class Config:
        env_file = ".env"     # 指定环境变量文件

settings = Settings()

创建 .env 文件:

SECRET_KEY=a1b2c3d4...your-real-secret-key
DATABASE_URL=sqlite:///./blog.db
DEBUG=False

生成依赖文件

(venv) $ pip freeze > requirements.txt

确保包含核心依赖:fastapi、uvicorn、sqlalchemy、jinja2、alembic、passlib、python-jose、python-multipart、sqladmin、pydantic-settings。


配置 Procfile 和启动命令

FastAPI 使用 ASGI 服务器,与 Flask/Django 的 WSGI 不同:

web: uvicorn main:app --host 0.0.0.0 --port $PORT

如果需要多 worker(生产环境推荐):

web: gunicorn -k uvicorn.workers.UvicornWorker -w 4 main:app

WSGI vs ASGI:Django/Flask 用 Gunicorn(WSGI 服务器),FastAPI 用 Uvicorn(ASGI 服务器)。Gunicorn 本身是 WSGI,但可以通过 uvicorn.workers.UvicornWorker 跑 ASGI 应用。


推送到 GitHub

$ git init
$ echo "venv/" > .gitignore
$ echo "__pycache__/" >> .gitignore
$ echo "*.pyc" >> .gitignore
$ echo ".env" >> .gitignore
$ git add .
$ git commit -m "初始化 FastAPI 博客项目"
$ git branch -M main
$ git remote add origin https://github.com/你的用户名/fastapi-blog.git
$ git push -u origin main

Railway 部署

  1. 访问 railway.app,用 GitHub 登录
  2. New Project → Deploy from GitHub repo → 选择 fastapi-blog
  3. Railway 自动检测 Procfile
  4. 在 Variables 中设置环境变量
  5. 点击 Deploy

环境变量配置

变量名说明
SECRET_KEY随机生成的长字符串JWT 签名密钥
DATABASE_URL由 Railway 注入生产数据库

部署成功后获得链接,访问 /docs 能看到 Swagger 文档,访问 /admin 进入后台管理。


框架对比

功能FastAPIDjangoFlask
ORMSQLAlchemyDjango ORM(内置)Flask-SQLAlchemy
数据验证PydanticDjango FormsFlask-WTF
路由组织APIRouterurls.pyBlueprint
用户认证JWT + OAuth2Session Auth(内置)Flask-Login(Session)
数据库迁移Alembicmakemigrations / migrateFlask-Migrate
后台管理sqladminDjango AdminFlask-Admin
API 文档/docs(自动)需 drf-spectacular需 Flasgger
服务器Uvicorn(ASGI)Gunicorn(WSGI)Gunicorn(WSGI)

下一步学习方向

学习方向适合谁推荐起点
异步 SQLAlchemy需要更高并发性能将同步 Session 切换为 AsyncSession
FastAPI + Vue3/React 前后端分离SPA + API 架构将 Jinja2 模板替换为 Vue3/React,FastAPI 纯做 API 后端
WebSocket需要实时推送(聊天、通知)FastAPI 原生支持 WebSocket:@app.websocket()
PostgreSQL生产级数据库替换 DATABASE_URL,安装 asyncpg 或 psycopg2