- 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>
36 lines
1.1 KiB
YAML
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}
|