chore(deploy): 成品部署链路、依赖分组与运维基建

部署方式:服务器不再接收源码、不执行构建,改为本地构建成品后交付
- deploy-artifacts.sh:构建→备份→校验→原子替换,支持回滚、镜像/备份轮转、
  mysql 与 postgres 双变体镜像;后端以 docker save|ssh|docker load 交付
- 依赖分组:requirements/{base,storage}.txt + db/{mysql,postgres,sqlite}.txt,
  镜像按所选数据库只装对应驱动(MySQL 变体 565MB → 521MB)

编排与运行时加固
- compose:MySQL/Redis/backend 端口仅绑 127.0.0.1;密钥(SECRET_KEY、
  DATA_ENCRYPTION_KEY、DATA_ENCRYPTION_OLD_KEYS)、PROD_CORS_ORIGINS、
  FORWARDED_ALLOW_IPS、DEMO_ENABLE 一律由 docker/.env 注入
- Dockerfile:对齐依赖分组、以非 root(uid=1000) 运行;.dockerignore 排除全部真实 .env.*
- nginx:静态资源长缓存、隐藏文件拒绝、接口文档仅内网可访问、放行 ACME http-01 校验路径

工程基建
- 新增 CI:backend(uv sync + ruff + pytest)与 frontend(web type-check+vitest、app type-check)
- 新增 DEPLOYMENT.md 运维手册(部署/回滚/密钥轮换/每日巡检/证书/排查)
This commit is contained in:
zhangtao
2026-10-04 04:26:03 +08:00
parent 0cf2e24b92
commit ce9401196a
20 changed files with 851 additions and 91 deletions
+14 -41
View File
@@ -1,41 +1,14 @@
# 与 pyproject.toml [project] dependencies 一致(生产 pip;不含 dev 组:pytest / ruff / fakeredis)
agno==2.5.8 # AI agent框架
aiofiles==24.1.0 # 文件操作
aiosqlite==0.22.1 # sqlite 异步操作数据库
alembic==1.18.4 # 数据库迁移
apscheduler==3.11.0 # 定时任务
croniter==6.2.4 # cron 表达式校验
aiomysql>=0.2.0 # 异步mysql操作数据库
asyncpg==0.31.0 # 异步postgresql操作数据库
bleach==6.4.0 # 过滤 HTML 标签
tinycss2==1.5.1 # bleach CSS 清洗依赖
click==8.1.7 # 命令行参数解析
fastapi==0.138.2 # fastapi 框架
greenlet==3.5.2 # 协程核心依赖(SQLAlchemy 异步)
httpx==0.28.1 # HTTP 客户端
jinja2==3.1.6 # 模板引擎
loguru==0.7.3 # 日志
openai==2.46.0 # OpenAI API
openpyxl==3.1.5 # Excel
psutil==7.2.2 # 系统信息
py-ip2region==3.0.4 # IP归属地离线查询(ip2region官方binding,内置xdb本地解析)
psycopg[binary]==3.3.2 # postgresql 同步驱动(含预编译 libpq,开箱即用)
pydantic[email]>=2.12.5 # 邮箱校验
pydantic-settings>=2.6.1,<3 # 配置设置
pyjwt==2.13.0 # OAuth2
pymysql==1.2.0 # MySQL 异步操作数据库
python-multipart==0.0.32 # request.form() 对表单进行「解析」时安装
redis==7.1.0 # Redis 异步操作数据库
rich==15.0.0 # 终端打印美化
sqlalchemy==2.0.51 # 数据库ORM
sqlglot[rs]==27.8.0 # sql 解析
typer==0.26.7 # 命令行工具
ua-parser==1.0.2 # 获取用户UA
uvicorn==0.49.0 # ASGI 框架
websockets>=16.0,<17.0 # websocket 通信
cryptography==50.0.0 # Fernet 对称加密(存储源密码加密)
paramiko==5.0.0 # SFTP 协议
boto3==1.43.72 # S3 协议
esdk-obs-python==3.26.6 # 华为云 OBS 协议
alibabacloud-oss-v2==1.3.2 # 阿里云 OSS 协议
cos-python-sdk-v5==1.9.44 # 腾讯云 COS 协议
# ============================================================================
# 完整依赖入口(核心 + 全部数据库驱动 + 对象存储)
# 适用于:源码部署、本机开发、以及需要「一个镜像同时支持 mysql/postgres/sqlite」的场景。
#
# 想要更小的生产镜像,请按需组合,例如:
# MySQL : -r requirements/base.txt -r requirements/db/mysql.txt -r requirements/storage.txt
# Postgres : -r requirements/base.txt -r requirements/db/postgres.txt -r requirements/storage.txt
# SQLite : -r requirements/base.txt -r requirements/db/sqlite.txt
# ============================================================================
-r requirements/base.txt
-r requirements/db/mysql.txt
-r requirements/db/postgres.txt
-r requirements/db/sqlite.txt
-r requirements/storage.txt