- docker-compose.yml: backend + frontend 两服务,挂 NPM 所在外部网络、不暴露宿主端口; data/uploads 用 bind mount 持久化(deploy/ 下,gitignored) - backend/Dockerfile: python:3.12-slim + 清华 PyPI 镜像(ARG 可覆盖) - frontend/Dockerfile: 多阶段 node:22 + npm ci + next build(NEXT_PUBLIC_API_BASE 构建期 注入,npmmirror 默认)→ next start - .env.example: 全量部署环境变量模板(compose 替换变量 + 后端密钥) - deploy/README.md: 服务器部署手册(NPM 配置 / DNS / 数据迁移 / 运维 / 大陆网络) Co-Authored-By: Claude Code <noreply@anthropic.com>
24 lines
911 B
Docker
24 lines
911 B
Docker
# BookMate 后端镜像:FastAPI + SQLAlchemy async + SQLite
|
|
# 构建上下文是仓库根目录(docker-compose context: .),COPY 路径相对仓库根。
|
|
FROM python:3.12-slim
|
|
|
|
WORKDIR /app
|
|
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PYTHONIOENCODING=utf-8 \
|
|
PIP_NO_CACHE_DIR=1
|
|
|
|
# 先装依赖(利用层缓存)。大陆网络默认走清华 PyPI 镜像;可在构建时用 --build-arg 覆盖:
|
|
# docker compose build --build-arg PIP_INDEX_URL=https://pypi.org/simple backend
|
|
ARG PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
|
|
COPY backend/requirements.txt /app/requirements.txt
|
|
RUN pip install -i "$PIP_INDEX_URL" -r /app/requirements.txt
|
|
|
|
# 应用代码;密钥与数据不打包进镜像(.env 由 compose env_file 注入,data/uploads 由卷挂载)
|
|
COPY backend/app /app/app
|
|
|
|
EXPOSE 8000
|
|
|
|
# 生产用:不挂 --reload
|
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|