72 lines
2.9 KiB
YAML
72 lines
2.9 KiB
YAML
# 生产部署 compose(放在前端仓库根;服务器结构见仓库 README)
|
||
# 前端仓: /opt/fashion/test (本文件所在)
|
||
# 后端仓: /opt/fashion/backend (已对齐到当前活跃开发的后端,仅支持 PostgreSQL + pgvector)
|
||
services:
|
||
# ---- 数据库 (PostgreSQL + pgvector) ----
|
||
# 注意:后端代码仅支持 PostgreSQL + pgvector(gorm pgx 驱动),切勿换回 MySQL。
|
||
db:
|
||
image: ankane/pgvector:latest # 预编译好 pgvector 的 PG 镜像(latest 当前底层为 PG17)
|
||
restart: unless-stopped
|
||
environment:
|
||
POSTGRES_USER: fashion
|
||
POSTGRES_PASSWORD: ${DB_PASSWORD:-fashion_dev_2026} # 生产务必换强密码
|
||
POSTGRES_DB: fashion
|
||
volumes:
|
||
- db_data:/var/lib/postgresql/data
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "pg_isready -U fashion -d fashion"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 10
|
||
|
||
# ---- 后端 (Go) ----
|
||
backend:
|
||
build:
|
||
context: ../backend
|
||
restart: unless-stopped
|
||
environment:
|
||
SERVER_PORT: 8090
|
||
SSG_PORT: 8091 # SSG 内部端口(见下 ports 绑定)
|
||
SSG_TOKEN: ${SSG_TOKEN:-} # 可选:非空则 SSG 接口需带 token(防御纵深)
|
||
HASHID_SECRET: ${HASHID_SECRET:-} # 公开 ID 混淆盐值:生产务必注入随机串(改值会使旧链接失效,谨慎变更)
|
||
GIN_MODE: release
|
||
JWT_SECRET: ${JWT_SECRET:-change-me-in-prod}
|
||
CORS_ALLOW_ORIGINS: ${CORS_ALLOW_ORIGINS:-https://xisoa.com,https://www.xisoa.com}
|
||
RATE_LIMIT_ENABLED: ${RATE_LIMIT_ENABLED:-false}
|
||
RATE_LIMIT_RPS: ${RATE_LIMIT_RPS:-20}
|
||
RATE_LIMIT_BURST: ${RATE_LIMIT_BURST:-40}
|
||
DB_HOST: db
|
||
DB_PORT: 5432
|
||
DB_USER: ${DB_USER:-fashion}
|
||
DB_PASSWORD: ${DB_PASSWORD:-fashion_dev_2026}
|
||
DB_NAME: ${DB_NAME:-fashion}
|
||
ports:
|
||
- "8090:8090" # 对外公开 API(运行期由 nginx 反代);生产可去掉此发布,改由前端 nginx 直接反代 backend:8090
|
||
- "127.0.0.1:8091:8091" # ⚠️ SSG 内部端口:只绑宿主回环,外部网络不可达;nginx 也绝不反代它
|
||
depends_on:
|
||
db:
|
||
condition: service_healthy
|
||
healthcheck:
|
||
test: ["CMD", "wget", "-qO-", "http://localhost:8090/api/v1/public/brands?size=1"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 10
|
||
|
||
# ---- 前端 (Astro node server + nginx 反代) ----
|
||
frontend:
|
||
build:
|
||
context: .
|
||
args:
|
||
BASE_API_SSG: http://localhost:8091 # 构建期 SSG 拉数据:指向 backend 的 SSG 内部端口(配合 network: host 访问回环绑定的 8091)
|
||
SSG_TOKEN: ${SSG_TOKEN:-} # 与 backend 的 SSG_TOKEN 保持一致;为空则构建期无需携带 token
|
||
network: host
|
||
restart: unless-stopped
|
||
ports:
|
||
- "80:80"
|
||
depends_on:
|
||
backend:
|
||
condition: service_healthy
|
||
|
||
volumes:
|
||
db_data:
|