Files
my_bookmate/docker-compose.yml
T
gavindiazandClaude Code f63c0c55c9 feat: Docker 化部署(nginx-proxy-manager 反代,单域名 /api 路由)
- 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>
2026-10-25 15:35:20 +08:00

36 lines
1.1 KiB
YAML

services:
backend:
build:
context: .
dockerfile: backend/Dockerfile
# 后端全部环境变量(含密钥)从根目录 .env 注入;pydantic 会忽略额外键
env_file: ./.env
volumes:
- ./deploy/data:/app/data # SQLite 数据库(迁移时把本机 backend/data 拷到这里)
- ./deploy/uploads:/app/uploads # EPUB 原文件
restart: unless-stopped
networks:
- bookmate
- npm-proxy
frontend:
build:
context: .
dockerfile: frontend/Dockerfile
args:
# 构建期内联到浏览器代码;务必改成你实际使用的域名(带 /api 后缀)
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:-https://bookmate.example.com/api}
depends_on:
- backend
restart: unless-stopped
networks:
- bookmate
- npm-proxy
networks:
bookmate: {} # 两服务互通(backend 内部调用,无宿主端口)
npm-proxy:
external: true
# 服务器上 nginx-proxy-manager 容器所在网络名,用 `docker network ls` 查到后填到 .env 的 NPM_NETWORK
name: ${NPM_NETWORK:-npm_default}