Files
novalon-website/docker-compose.yml
T
zhangxiang a0328a623f chore(qa): 验收台账与证据入库 + 构建/部署配置同步
- docs/acceptance/qa-tracker.md:跨周期缺陷单一真源台账(§7=第五轮)。
- 周期 1/2 + iPhone SE/axe 验收证据目录、ACCEPTANCE_REVIEW 快照入库。
- 同步 README/CONTEXT/CLAUDE/DESIGN/testing/deployment/lessons-learned 口径;
  next.config/Dockerfile/nginx/Jenkinsfile/docker-compose/sentry/prisma 对齐
  standalone 产物装配与部署形态。
2026-09-28 10:48:09 +08:00

45 lines
2.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 单机应用容器:跑 Next.js 16 standalone 服务(不是静态 HTML 站点)。
# 服务契约见 Dockerfile 顶部注释(output: 'standalone' → node server.js + HOSTNAME=0.0.0.0)。
# TLS/HTTP→HTTPS 跳转/HSTS/gzip/limit_req 属于边缘,见 nginx-static.conf。
#
# 历史缺陷:本文件曾用 `Dockerfile`(把 dist/ 当静态 HTML 交给 nginx、暴露 80/443 并挂载
# nginx-static.conf + ./ssl),在 standalone 产物下部署即白屏/404(ACCEPTANCE_REVIEW §5)。
services:
novalon-website:
build:
context: .
dockerfile: Dockerfile
image: novalon-website:1.0.0
container_name: novalon-website
restart: unless-stopped
ports:
# 容器内 server.js 监听 0.0.0.0:3000;边缘 nginx 的 upstream 默认写 127.0.0.1:3000,
# 若把本服务加入 nginx 所在网络,可改用容器名 novalon-website:3000。
- "3000:3000"
environment:
- NODE_ENV=production
- HOSTNAME=0.0.0.0
- PORT=3000
# .dockerignore 排除了 .env*,镜像内没有 env 文件,数据库路径必须显式给出
- DATABASE_URL=file:/app/data/prod.db
# 无需 Dockerfile.prod 里的 PRISMA_QUERY_ENGINE_LIBRARY 覆盖:那条是为「宿主机(darwin)
# 构建的 dist 被直接 COPY」准备的;本镜像在 alpine 内 npm ci + build,query engine
# 本身就是 linux-musl 版本并被 standalone 追踪进 /app/src/generated/prisma/。
env_file:
# 与 docker-compose.server.yml 保持一致(CDN_DOMAIN / NEXT_PUBLIC_* 等)
- .env.production
volumes:
# SQLite 落盘
- ./data:/app/data
# 媒体上传目录:src/lib/media/storage.ts 默认写 <cwd>/public/uploads
# (对照:docker-compose.server.yml 挂的是 ./uploads:/app/uploads,与应用实际读取的
# public/uploads 不一致,属该文件的问题,本次未改——不在本次授权范围内)
- ./uploads:/app/public/uploads
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:3000/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s