feat: Docker Compose 最小编排——postgres:18 + 双无状态服务容器(ADR-007)
- 新增 docker-compose.yml、两服务 Dockerfile(eclipse-temurin:17-jre、非 root、仅装 exec jar)与 deploy/init-secrets.sh(幂等生成 RS256 密钥对与 .env 随机机密,产物入 .gitignore) - 容器配置复用 application.yml.sample(SPRING_CONFIG_LOCATION 挂载)+ PATBOND_* 环境变量,与本机运行同一套约定;DB 端口不对宿主机发布 - spring-boot-maven-plugin 显式绑定 repackage(本工程无 starter-parent,此前 package 产物不可执行),exec classifier 保留普通 jar 供 auth 模块 E2E 依赖 - 验收:docker compose up -d --build 后完整冒烟通过(register→me→refresh→旧 token 重用 40102→/internal 无凭证 401→logout),down -v 无残留;./mvnw clean test 全绿 74 测试 - README 新增 Docker Compose 一节 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# Patbond MVP 编排(ADR-007):应用容器无状态,PostgreSQL 数据落 volume。
|
||||
# 使用步骤见 Readme.md「Docker Compose」一节:
|
||||
# 1) ./deploy/init-secrets.sh 生成 RS256 密钥对与 .env(均不入库)
|
||||
# 2) JAVA_HOME=... ./mvnw -DskipTests package
|
||||
# 3) docker compose up -d --build
|
||||
#
|
||||
# 配置来源:容器内挂载各服务的 application.yml.sample 作为配置文件,
|
||||
# 其中的 ${PATBOND_*} 占位由下方 environment 注入 —— 与本机运行同一套约定。
|
||||
name: patbond
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:18
|
||||
environment:
|
||||
POSTGRES_DB: ${PATBOND_DB_NAME:-patbond}
|
||||
POSTGRES_USER: ${PATBOND_DB_USER:-patbond}
|
||||
POSTGRES_PASSWORD: ${PATBOND_DB_PASSWORD:?先运行 deploy/init-secrets.sh 生成 .env}
|
||||
volumes:
|
||||
# postgres:18 官方镜像的挂载点是 /var/lib/postgresql(含版本子目录)
|
||||
- pgdata:/var/lib/postgresql
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${PATBOND_DB_USER:-patbond} -d ${PATBOND_DB_NAME:-patbond}"]
|
||||
interval: 2s
|
||||
timeout: 3s
|
||||
retries: 30
|
||||
# 数据库不对宿主机发布端口;调试需要时可临时加 ports: ["15432:5432"]
|
||||
|
||||
user:
|
||||
build: ./patbond-user
|
||||
environment:
|
||||
SPRING_CONFIG_LOCATION: file:/config/application.yml
|
||||
PATBOND_DB_URL: jdbc:postgresql://postgres:5432/${PATBOND_DB_NAME:-patbond}
|
||||
PATBOND_DB_USER: ${PATBOND_DB_USER:-patbond}
|
||||
PATBOND_DB_PASSWORD: ${PATBOND_DB_PASSWORD:?先运行 deploy/init-secrets.sh 生成 .env}
|
||||
PATBOND_INTERNAL_TOKEN: ${PATBOND_INTERNAL_TOKEN:?先运行 deploy/init-secrets.sh 生成 .env}
|
||||
PATBOND_JWT_PUBLIC_KEY: /run/patbond/keys/jwt-public.pem
|
||||
volumes:
|
||||
- ./patbond-user/src/main/resources/application.yml.sample:/config/application.yml:ro
|
||||
- ./deploy/keys:/run/patbond/keys:ro
|
||||
# MVP 直连暴露 8082 供客户端访问 /api/v1/me;/internal/** 已有服务间鉴权,
|
||||
# 规模化阶段应由网关统一入口并停止直接暴露本端口。
|
||||
ports:
|
||||
- "${PATBOND_USER_PORT:-8082}:8082"
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
|
||||
auth:
|
||||
build: ./patbond-auth
|
||||
environment:
|
||||
SPRING_CONFIG_LOCATION: file:/config/application.yml
|
||||
PATBOND_USER_SERVICE_URL: http://user:8082
|
||||
PATBOND_INTERNAL_TOKEN: ${PATBOND_INTERNAL_TOKEN:?先运行 deploy/init-secrets.sh 生成 .env}
|
||||
PATBOND_JWT_PRIVATE_KEY: /run/patbond/keys/jwt-private.pem
|
||||
volumes:
|
||||
- ./patbond-auth/src/main/resources/application.yml.sample:/config/application.yml:ro
|
||||
- ./deploy/keys:/run/patbond/keys:ro
|
||||
ports:
|
||||
- "${PATBOND_AUTH_PORT:-8081}:8081"
|
||||
depends_on:
|
||||
- user
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
Reference in New Issue
Block a user