From 8b46e535c55571eeb53a9dbcedf64c5b829b8e2a Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Fri, 16 Oct 2026 14:32:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(deploy):=20=E4=BF=AE=E6=AD=A3=20PG18=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8D=B7=E6=8C=82=E8=BD=BD=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E4=B8=BA=20/var/lib/postgresql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit docker-library/postgres 自 18 起把数据目录改成 /var/lib/postgresql//, 卷继续挂 /var/lib/postgresql/data 会被 entrypoint 判定为"残留数据"并拒绝启动; 表现为 db 容器反复 Restarting,依赖它的三个服务一起起不来。 改挂父目录后本地实测:docker compose up -d 正常,db 进入 healthy。 --- docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0e8fe30..b73ca55 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,7 +24,8 @@ services: # 中文与印尼语内容需要 UTF-8(镜像默认已是 UTF8,这里显式一次) POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" volumes: - - db-data:/var/lib/postgresql/data + # PostgreSQL 18 起镜像把数据放在 /var/lib/postgresql//,卷必须挂到父目录 + - db-data:/var/lib/postgresql # 首次启动自动建表 + 造种子数据;顺序即文件名顺序(脚本本身幂等,可重复执行) - ./sql/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql:ro - ./sql/schema-phase1.sql:/docker-entrypoint-initdb.d/02-schema-phase1.sql:ro From 4c4f64323a6fdd72bd802395667d1f9b5e760d2b Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Fri, 16 Oct 2026 14:32:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(worker):=20=E8=A1=A5=E9=BD=90=20prod=20?= =?UTF-8?q?=E5=AF=86=E9=92=A5=E4=B8=8E=20CORS=20=E6=98=A0=E5=B0=84?= =?UTF-8?q?=E4=BB=A5=E9=80=9A=E8=BF=87=E5=AF=86=E9=92=A5=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit worker 的 application-prod.yml 没把 JWT_ADMIN_SECRET / JWT_APP_SECRET / MEDIA_SIGNATURE_SECRET / CORS_ALLOWED_ORIGINS 映射成 fruitshorts.* 属性, ProdSecretGuard 读到空值即拒绝启动,compose 里 worker 一直 Restarting。 按两个入口同一口径补齐映射:不写 dev 默认值,漏配仍 fail-fast; 并显式置 signature-required=true,与两个入口一致。 门禁:mvn test 全模块 BUILD SUCCESS(0 失败 0 错误,1 项 ffmpeg smoke 按用例设计跳过)。 --- .../src/main/resources/application-prod.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/fruitshorts-transcode-worker/src/main/resources/application-prod.yml b/fruitshorts-transcode-worker/src/main/resources/application-prod.yml index 2acb6a8..ca001a1 100644 --- a/fruitshorts-transcode-worker/src/main/resources/application-prod.yml +++ b/fruitshorts-transcode-worker/src/main/resources/application-prod.yml @@ -11,12 +11,23 @@ spring: timeout-per-shutdown-phase: 30s fruitshorts: + jwt: + # worker 本身不签发/校验令牌,但 ProdSecretGuard 要求 prod 下密钥齐全; + # 不给 dev 默认值,漏配即启动失败(与两个入口同一口径) + admin-secret: ${JWT_ADMIN_SECRET:} + app-secret: ${JWT_APP_SECRET:} media: + # 生产必开播放签名(与两个入口一致,fail-fast 也要求为 true) + signature-secret: ${MEDIA_SIGNATURE_SECRET:} + signature-required: true transcode: # 生产此进程必须真的跑转码 worker-enabled: true # 生产按小时级重试间隔,避免坏片源把队列打满 poll-delay-ms: ${TRANSCODE_POLL_DELAY_MS:5000} + cors: + # worker 不对外提供接口,仅为通过 prod fail-fast 校验 + allowed-origins: ${CORS_ALLOWED_ORIGINS:} logging: level: