- Dockerfile(oven/bun 多阶段:构建 dist + 全量 node_modules 运行时) - deploy/docker-compose.yml(postgres:18 + app,uploads 双挂载同宿主目录) - .dockerignore(uploads 经卷挂载不进镜像,避免 3GB 膨胀) - prod-server /uploads/* 运行时直读磁盘(媒体上传后无需重启即可访问,含路径穿越防护) - README Docker 部署章节
38 lines
1.2 KiB
YAML
38 lines
1.2 KiB
YAML
# dusuniot 生产部署编排(放在 /home/docker/dusuniot/ 下使用,源码 rsync 到 ./app)
|
||
# 用法:docker compose up -d --build
|
||
name: dusuniot
|
||
services:
|
||
# # 数据库服务 PostgreSQL 18(数据落 ./data/pg,不对外暴露端口)
|
||
db:
|
||
image: postgres:18
|
||
restart: unless-stopped
|
||
environment:
|
||
POSTGRES_USER: dusuniot
|
||
POSTGRES_PASSWORD: dusuniot
|
||
POSTGRES_DB: dusuniot
|
||
volumes:
|
||
- ./data/pg:/var/lib/postgresql
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "pg_isready -U dusuniot -d dusuniot"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 12
|
||
|
||
# # 应用服务 TanStack Start + Bun(nginx 反代 127.0.0.1:3320)
|
||
app:
|
||
build: ./app
|
||
restart: unless-stopped
|
||
depends_on:
|
||
db:
|
||
condition: service_healthy
|
||
environment:
|
||
DATABASE_URL: postgres://dusuniot:dusuniot@db:5432/dusuniot
|
||
PORT: "3312"
|
||
ports:
|
||
- "127.0.0.1:3320:3312"
|
||
volumes:
|
||
# 双挂载同一宿主目录:adminUploadMedia 写 public/uploads(cwd 相对),
|
||
# prod-server 的 /uploads 直读与启动静态表走 dist/client/uploads
|
||
- ./data/uploads:/app/public/uploads
|
||
- ./data/uploads:/app/dist/client/uploads
|