mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-10-14 13:06:51 +00:00
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:
+33
-13
@@ -1,26 +1,46 @@
|
||||
# 使用 python:3.12-slim 镜像作为基础镜像
|
||||
# ============================================================================
|
||||
# FastapiAdmin 后端镜像(源码构建路径)
|
||||
#
|
||||
# 构建参数 DB 决定安装哪套数据库驱动:
|
||||
# docker build --build-arg DB=mysql -f docker/backend/Dockerfile . # 默认
|
||||
# docker build --build-arg DB=postgres -f docker/backend/Dockerfile .
|
||||
#
|
||||
# 注意:正式部署建议用 deploy-artifacts.sh(本地构建镜像 → docker save/load),
|
||||
# 这样服务器上不需要源码,也不需要构建工具链。
|
||||
# ============================================================================
|
||||
FROM python:3.12-slim
|
||||
|
||||
# 使用 LABEL 替代 MAINTAINER
|
||||
LABEL maintainer="948080782@qq.com"
|
||||
|
||||
# 设置时区
|
||||
ENV TZ Asia/Shanghai
|
||||
ARG DB=mysql
|
||||
|
||||
ENV TZ=Asia/Shanghai \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
PYTHONDONTWRITEBYTECODE=1 \
|
||||
LANG=C.UTF-8 \
|
||||
DB=${DB}
|
||||
|
||||
# 设置容器内工作目录
|
||||
WORKDIR /home
|
||||
|
||||
# 先复制依赖清单并安装(利用 layer 缓存:代码变更时不重装依赖)
|
||||
COPY ./backend/requirements.txt .
|
||||
# 依赖清单先复制(layer 缓存:只改代码时不重装依赖)
|
||||
COPY ./backend/requirements/ /home/requirements/
|
||||
|
||||
# 安装依赖
|
||||
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
# 只装所选数据库的驱动 + 存储与加密依赖
|
||||
RUN pip install --no-cache-dir \
|
||||
-r /home/requirements/base.txt \
|
||||
-r /home/requirements/db/${DB}.txt \
|
||||
-r /home/requirements/storage.txt \
|
||||
-i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
# 复制应用代码(backend/.venv、logs、缓存等由根 .dockerignore 排除)
|
||||
COPY ./backend/ .
|
||||
# 应用代码(backend/.venv、logs、缓存、真实 .env.* 由根 .dockerignore 排除)
|
||||
COPY ./backend/ /home/
|
||||
|
||||
# 以非 root 用户运行;运行时需要写的目录预先建好并交给该用户
|
||||
RUN useradd --uid 1000 --create-home --shell /usr/sbin/nologin app \
|
||||
&& mkdir -p /home/logs /home/static/upload /home/alembic/versions \
|
||||
&& chown -R app:app /home
|
||||
USER app
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8001
|
||||
|
||||
# 运行应用
|
||||
CMD ["python", "main.py", "run", "--env=prod"]
|
||||
|
||||
Reference in New Issue
Block a user