deploy(single-stack): 单栈收敛——v2 并入 deploy compose,v1 退役

- docker-compose.yml 重写为单栈 4 容器(admin 边缘 + v2-api/v2-admin/v2-postgres),
  v2 数据卷 deploy-v2_pgdata/uploads 以 external 引用,数据零迁移
- nginx:/uploads/ /assets/ 上游改 v2-api(product-center 覆盖块随之冗余移除),
  / 跳转 /v2/admin/;docker-compose.v2.yml 删除(血统已并入 develop)
- v1 api+postgres 已停用未删,终档/快照/回滚手册见 deploy/backups/consolidation-*/
- 切换验证:v2 库切换前后行数完全一致;/v2-api /public /v2/admin /v2/h5
  /assets 全路由冒烟 + 公网端到端通过
This commit is contained in:
yeuimu
2026-09-03 02:09:24 +08:00
parent a554b77379
commit 0d2a954153
5 changed files with 52 additions and 108 deletions
-75
View File
@@ -1,75 +0,0 @@
# v2 部署(refactor/v2 分支):与现网 deploy 项目完全隔离(独立库/独立卷/独立网络),
# 对外复用 official.inkreach.cc 域名,由现网 nginx 按路径分流:
# https://official.inkreach.cc/v2/admin/ -> 本栈 adminSPA
# https://official.inkreach.cc/v2-api/ -> 本栈 api(去掉前缀后转发)
# 本栈两容器挂到外部网络 inkreach-shared,与 deploy-admin-1 互通(别名 v2-api / v2-admin)。
name: deploy-v2
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: inkreach
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: inkreach
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U inkreach -d inkreach"]
interval: 10s
timeout: 5s
retries: 10
networks:
- default
api:
build:
context: ..
dockerfile: deploy/api.Dockerfile
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
NODE_ENV: production
PORT: 3001
DATABASE_URL: postgresql://inkreach:${POSTGRES_PASSWORD}@postgres:5432/inkreach
JWT_SECRET: ${JWT_SECRET}
CORS_ORIGINS: "*"
# 激活 product-family 聚合公开读路径(现网 v1 未设置,保持旧行为,便于对比)
PUBLIC_DETAIL_FROM_FAMILY: "true"
volumes:
- uploads:/app/uploads
networks:
default:
shared:
aliases:
- v2-api
admin:
build:
context: ..
dockerfile: deploy/admin.Dockerfile
args:
VITE_API_BASE: /v2-api/
restart: unless-stopped
depends_on:
- api
volumes:
- ./nginx/admin.v2.conf:/etc/nginx/conf.d/default.conf:ro
networks:
default:
shared:
aliases:
- v2-admin
networks:
default:
shared:
external: true
name: inkreach-shared
volumes:
pgdata:
uploads:
+35 -23
View File
@@ -1,5 +1,12 @@
# 单栈部署(2026-09-03 主干收敛后,一切以 v2 为准):
# https://official.inkreach.cc/v2/admin/ -> v2-adminSPA
# https://official.inkreach.cc/v2-api/ -> v2-api(小程序/后台同路径,去前缀转发)
# https://official.inkreach.cc/public/ -> v2-apiH5 历史构建同源 API
# /uploads/ /assets/ -> v2-api;证书续期走 certbot 挂载;边缘入口为 admin 服务。
# v1(旧栈 api+postgres)已退役:容器停用未删,最终档案在 deploy/backups/consolidation-*/。
# v2 数据卷沿用原 deploy-v2 项目卷(external 引用),数据未迁移未改动。
services:
postgres:
v2-postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
@@ -7,40 +14,54 @@ services:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: inkreach
volumes:
- pgdata:/var/lib/postgresql/data
- v2-pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U inkreach -d inkreach"]
interval: 10s
timeout: 5s
retries: 10
# No ports exposed: only reachable from the compose network
api:
v2-api:
build:
context: ..
dockerfile: deploy/api.Dockerfile
restart: unless-stopped
depends_on:
postgres:
v2-postgres:
condition: service_healthy
environment:
NODE_ENV: production
PORT: 3001
DATABASE_URL: postgresql://inkreach:${POSTGRES_PASSWORD}@postgres:5432/inkreach
DATABASE_URL: postgresql://inkreach:${POSTGRES_PASSWORD}@v2-postgres:5432/inkreach
JWT_SECRET: ${JWT_SECRET}
CORS_ORIGINS: "*"
# 激活 product-family 聚合公开读路径
PUBLIC_DETAIL_FROM_FAMILY: "true"
volumes:
- uploads:/app/uploads
- v2-uploads:/app/uploads
v2-admin:
build:
context: ..
dockerfile: deploy/admin.Dockerfile
args:
VITE_API_BASE: /v2-api/
restart: unless-stopped
depends_on:
- v2-api
volumes:
- ./nginx/admin.v2.conf:/etc/nginx/conf.d/default.conf:ro
# 边缘入口:80/443、证书、全站路由与静态资源(/、/admin/、/h5/ 为历史构建,保留展示)
admin:
build:
context: ..
dockerfile: deploy/admin.Dockerfile
args:
VITE_API_BASE: /api
VITE_API_BASE: /v2-api/
restart: unless-stopped
depends_on:
- api
- v2-api
ports:
- "80:80"
- "443:443"
@@ -48,20 +69,11 @@ services:
- ./nginx/admin.conf:/etc/nginx/conf.d/default.conf:ro
- ./certbot/www:/var/www/certbot:ro
- ./certbot/acme:/etc/nginx/certs:ro
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
default:
shared:
# 接入 v2 栈的共享网络,使 /v2/* 的 proxy_pass 能解析 v2-admin / v2-api
aliases:
- v1-admin
volumes:
pgdata:
uploads:
networks:
shared:
v2-pgdata:
external: true
name: inkreach-shared
name: deploy-v2_pgdata
v2-uploads:
external: true
name: deploy-v2_uploads
+3 -10
View File
@@ -88,25 +88,18 @@ server {
# Uploaded files served by the API
location /uploads/ {
proxy_pass http://api:3001/uploads/;
proxy_pass http://v2-api:3001/uploads/;
proxy_set_header Host $host;
}
# Static product assets served by the API
location /assets/ {
proxy_pass http://api:3001/assets/;
proxy_set_header Host $host;
}
# Product-center icons maintained in the v2 repo — serve from the v2 api
# (more specific prefix than /assets/, so it takes precedence)
location /assets/product-center/ {
proxy_pass http://v2-api:3001/assets/product-center/;
proxy_pass http://v2-api:3001/assets/;
proxy_set_header Host $host;
}
# Website placeholder until the public site is deployed
location / {
return 302 /admin/;
return 302 /v2/admin/;
}
}