Skip to content

第 02 章 环境准备与快速开始 ​

学习目标 ​

学完本章,你应该能:

  1. 了解运行 fba 需要哪些前置环境
  2. 掌握两种初始化方式(自动 / 手动)
  3. 成功启动后端服务并打开接口文档

一、前置知识要求 ​

官方明确提示:fba 面向有一定 Python 后端经验的开发者。如果你刚开始学 FastAPI,建议先补这些基础:

  • Python 异步编程(async/await)
  • FastAPI 基础用法
  • SQLAlchemy 基础用法
  • Pydantic 基础用法

即使基础薄弱也没关系,本指南会在每个章节对必要概念做通俗解释,跟着走也能上手。

二、准备本地环境 ​

你需要准备以下软件:

软件版本要求作用
Python3.12+运行语言
uv最新稳定版包管理工具(推荐,替代 pip)
PostgreSQL 或 MySQLPostgreSQL 16.0+ / MySQL 8.0+数据库
Redis最新稳定版缓存/内存库

补充:使用 MySQL 需注意数据库配置(详见官方文档「切换数据库」章节);如需用雪花主键 ID,见「切换主键」章节。

名词解释 ​

  • uv:一个极快的 Python 包管理工具,fba 官方推荐用它来管理依赖。安装方法见官方说明。
  • PostgreSQL / MySQL:两种主流关系型数据库,fba 都支持,二选一即可。
  • Redis:内存数据库,用于缓存、存 token、限流计数等,跑 fba 需要它。

环境依赖关系图 ​

三、准备源码(二选一) ​

方式 A:直接拉取源码 ​

shell
git clone https://github.com/fastapi-practices/fastapi-best-architecture.git

方式 B:创建模板仓库(推荐用于自己的项目) ​

在 GitHub 项目首页点 Use this template 按钮,创建一个属于你自己的仓库(非 fork),然后 clone 你自己的仓库。这样你的项目就是独立的,方便长期维护。

区别:fork 出来的仓库还关联原项目,template 创建的是全新的独立仓库。

四、初始化项目 ​

初始化前,先完成 第 0 步:启动 PostgreSQL/MySQL 和 Redis(否则后续建表、连库会失败)。

初始化本身有自动和手动两种方式。

方式一:自动初始化(最简单) ​

在项目根目录打开终端,执行:

shell
uv run fba init --auto

方式二:手动初始化(更可控,推荐理解原理) ​

手动初始化分 5 步,理解这 5 步,你就理解了 fba 启动的完整链路:

各步骤详细命令:

第 1 步:创建数据库

创建一个名为 fba 的数据库,MySQL 用户记得选择 utf8mb4 编码。

第 2 步:创建环境变量文件

进入 backend 目录:

shell
cp .env.example .env

第 3 步:修改配置

按需修改 backend/core/conf.py 和 .env(数据库连接信息在这里配置)。

第 4 步:安装依赖(二选一)

shell
# 方式 a:uv sync(推荐)
uv sync

# 方式 b:传统 pip
uv pip install -r requirements.txt

第 5 步:创建数据库表和测试数据(二选一)

执行以下命令前,确保已激活虚拟环境(在根目录打开终端)。

方式 a:CLI 命令

shell
fba init

方式 b:Alembic 迁移 + 手动脚本

shell
# 生成迁移文件
fba alembic revision
# 执行迁移(建表)
fba alembic upgrade

然后初始化测试数据(用 fba --sql 执行对应 SQL 脚本)。注意要区分两类脚本,且都按主键模式选择:

shell
# ① 架构脚本:backend/sql/{mysql|postgresql}/ 目录下对应主键模式的脚本
fba --sql backend/sql/mysql/xxx.sql

# ② 插件脚本:backend/plugin/{plugin}/sql/{mysql|postgresql}/ 目录下对应主键模式的脚本
fba --sql backend/plugin/xxx/sql/mysql/xxx.sql

为什么要分"架构脚本"和"插件脚本"? 架构脚本初始化主工程的表和数据,插件脚本初始化你安装的插件所需的表和数据,两者缺一不可(装了插件才需要跑插件脚本)。

术语解释 ​

  • .env 文件:存放环境变量(如数据库密码、密钥)的配置文件,通过 cp .env.example .env 从模板复制而来。
  • Alembic:SQLAlchemy 官方的数据库迁移工具,用来管理数据库表结构的版本升级,相当于"数据库版本的 Git"。

五、fba CLI 命令行工具速览 ​

fba 内置了便利的 CLI(命令行工具),安装依赖后即可使用。前面用到的 fba init、fba run、fba alembic、fba celery 都是它的子命令。

查看所有命令和帮助:

shell
fba -h
# 或
fba --help

常用命令分类:

命令用途
fba init初始化数据库(建表 + 测试数据)
fba run启动后端服务
fba alembic revision/upgrade数据库迁移(生成/执行迁移)
fba celery worker/beat/flower启动 Celery 相关服务
fba --sql 脚本路径执行 SQL 初始化脚本

提示:使用 AI 执行初始化、迁移、格式化、插件安装等流程时,建议在提示词中附上 fba skills,确保命令顺序与 fba CLI 约定一致。

六、启动服务 ​

在根目录执行:

shell
fba run

启动成功后,打开浏览器访问:

http://127.0.0.1:8000/docs

这里就是 FastAPI 自带的 Swagger 交互式文档,你可以直接在网页上测试接口。

七、可选:启动 Celery 服务 ​

Celery 用于异步任务,初次学习可以跳过。需要时再启动:

shell
# Worker:真正执行任务的进程
fba celery worker

# Beat:定时调度器,按计划触发任务
fba celery beat

# Flower:任务监控面板
fba celery flower

注意:如果从未启动过 worker 和 beat,任务结果表会缺失,调用任务相关接口会报错,至少启动一次后自动恢复。

八、开发流程(重要,先记住框架) ​

fba 官方推荐的标准开发流程(开发一个新业务模块时按此顺序):

这个流程从第 05 章开始会逐个详解。务必先记住这个顺序,它是 fba 开发的"主干线"。

官方补充提示:

  • 使用 AI 辅助开发时,建议先安装 fba skills,再按 model、schema、router、service、crud 的顺序生成或审查代码。
  • 此顺序仅供参考,实际以个人开发习惯为准。

九、单元测试(进阶了解) ​

fba 集成了 pytest,运行测试需要以下步骤:

  1. 创建测试数据库 fba_test:选择 utf8mb4 编码(PostgreSQL 用户可忽略编码)
  2. 创建数据库表:利用工具生成 fba 库所有表的 DDL 脚本,再通过 fba_test 库执行
  3. 初始化测试数据:通过 backend/sql/{mysql|postgresql}/ 目录下对应主键模式的脚本初始化
  4. 执行测试:在项目根目录打开终端,执行:
shell
pytest -vs --disable-warnings

注意:官方提示,项目内仅提供基础测试示例,并不是完整的业务测试套件。如需覆盖实际业务,请按项目需求自行补充测试用例。

DDL 脚本:Data Definition Language(数据定义语言)脚本,即"建表语句"。可以把它理解为"数据库表结构的说明书"。

十、常见问题(FAQ) ​

Q1:自动初始化和手动初始化该选哪个? 学习阶段建议先走一遍手动,理解每一步在做什么;实际项目用自动更省事。

Q2:fba init 和 fba init --auto 有什么区别?--auto 是"全自动"(含建库、建表、初始化数据等),fba init 需要先手动建库。

Q3:启动时报数据库连接失败怎么办? 检查 .env 里的数据库地址、端口、用户名、密码是否正确,以及数据库是否已启动。

Q4:初始化测试数据时,架构脚本和插件脚本都要跑吗? 主工程的架构脚本一定要跑;插件脚本只在安装了对应插件时才需要跑(没装插件就没有插件脚本)。

Q5:MySQL 和 PostgreSQL 的初始化脚本有区别吗? 有。脚本按 backend/sql/mysql/ 和 backend/sql/postgresql/ 分目录存放,选你实际用的数据库对应目录即可。

本章小结 ​

关键要点回顾:

  • 环境:Python 3.12+、uv、PostgreSQL/MySQL、Redis
  • 初始化最快路径:uv run fba init --auto
  • 启动命令:fba run,访问 /docs 查看接口文档
  • 标准开发流程:model → schema → router → service → crud(务必记住顺序)
  • 可选服务:Celery worker/beat/flower

你现在应该已经能把 fba 跑起来了。 下一章我们深入项目目录结构,搞清楚每个文件夹是干什么的。


对应官方文档:快速开始(backend/summary/quick-start.html)