feat: Phase 0 FBA 部署包——docker-compose + nginx 反代 + env 模板(issue #159)

This commit is contained in:
2026-08-06 08:41:59 +08:00
parent 8b68d015c2
commit 70c680a612
5 changed files with 284 additions and 0 deletions
+102
View File
@@ -0,0 +1,102 @@
# =============================================================================
# iAOP · FBA(fastapi-best-architecture)最小化部署编排
# Epic issue #159 · Phase 0 基础设施
#
# 只包含 iAOP 需要的 3 个服务:fba_server / fba_postgres / fba_redis。
# 已移除 FBA 官方 compose 中的 celery / rabbitmq / nginx / 监控组件
# (iAOP 无定时任务需求,对外由宿主机现有 nginx 统一反代)。
#
# 前置条件:
# 1. 宿主机安装 Docker + Docker Compose 插件
# 2. 将 FBA 源码克隆到本仓库的同级目录:
# git clone https://github.com/fastapi-practices/fastapi-best-architecture ../fba-backend
# 或通过环境变量 FBA_SRC 指定其他路径(见下)
# 3. 按 fba.env 模板填写配置(务必更换 TOKEN_SECRET_KEY 与数据库密码)
#
# 启动:
# cd deploy/fba
# docker compose --env-file compose.env up -d --build
#
# 停止:
# docker compose --env-file compose.env down
# =============================================================================
networks:
fba_network:
name: fba_network
driver: bridge
volumes:
fba_postgres:
name: fba_postgres
fba_redis:
name: fba_redis
fba_static:
name: fba_static
fba_static_upload:
name: fba_static_upload
services:
# FBA 后端 API 服务(FastAPI + Casbin RBAC)
fba_server:
build:
# FBA 源码根目录(含其官方 Dockerfile)。默认取 iAOP 仓库同级目录 fba-backend,
# 可通过 compose.env 中的 FBA_SRC 覆盖。
context: ${FBA_SRC:-../../../fba-backend}
dockerfile: Dockerfile
image: fba_server:latest
container_name: fba_server
restart: always
environment:
- TZ=Asia/Shanghai
ports:
# 仅绑定回环地址:不直接对外,由宿主机 nginx 以 /fba/ 前缀反代
- "127.0.0.1:${DOCKER_MAP_SERVER_PORT:-8001}:8001"
depends_on:
- fba_postgres
- fba_redis
volumes:
# 用本目录下的 fba.env 作为 FBA 后端配置,避免改动 FBA 源码树
- ./fba.env:/fba/backend/.env:ro
- fba_static:/fba/backend/app/static
- fba_static_upload:/fba/backend/static/upload
- ./logs/fba:/var/log/fba
networks:
- fba_network
# 等待数据库与缓存就绪后再启动 supervisord(复用官方启动方式)
command:
- bash
- -c
- |
wait-for-it -s fba_postgres:5432 -s fba_redis:6379 -t 300
supervisord -c /etc/supervisor/supervisord.conf
supervisorctl restart
# PostgreSQL 16:FBA 的数据库(用户/角色/菜单/Casbin 规则等)
fba_postgres:
image: postgres:16
container_name: fba_postgres
restart: always
environment:
POSTGRES_DB: fba
# 必须与 fba.env 中 DATABASE_PASSWORD 一致
POSTGRES_PASSWORD: ${FBA_PG_PASSWORD:-123456}
TZ: Asia/Shanghai
# 不映射宿主端口,仅 fba_network 内可达
volumes:
- fba_postgres:/var/lib/postgresql/data
networks:
- fba_network
# Redis:Token 黑名单、验证码、限流
fba_redis:
image: redis:latest
container_name: fba_redis
restart: always
environment:
- TZ=Asia/Shanghai
# 不映射宿主端口,仅 fba_network 内可达
volumes:
- fba_redis:/data
networks:
- fba_network