# ============================================================================ # 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="948080782@qq.com" ARG DB=mysql ENV TZ=Asia/Shanghai \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ LANG=C.UTF-8 \ DB=${DB} WORKDIR /home # 依赖清单先复制(layer 缓存:只改代码时不重装依赖) COPY ./backend/requirements/ /home/requirements/ # 只装所选数据库的驱动 + 存储与加密依赖 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、缓存、真实 .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"]