Files
jczxw-java/iam-api/docker-compose.yml
gxwebsoft 5e86ebe6b7 feat(auth): 实现统一认证模块及登录策略
- 新增 ApiResult 统一响应封装类,规范前端接口返回结构
- 添加 AuthController,支持多种登录方式及用户信息接口
- 实现 AuthService,包含登录、登出、密码修改、绑定手机号、重置密码等功能
- 集成图形验证码校验和登录失败锁定机制,增强安全性
- 支持邮箱登录和手机号验证码登录,完善多样化认证策略
- 实现 JWT 令牌签发与吊销,确保会话安全管理
- 配置不同环境 application.yml 及配置,支持多租户和灵活缓存配置
- 增加 .gitignore 规则,屏蔽构建产物、IDE 文件和敏感配置
- 引入 AuthProperties 以配置登录与验证码策略参数
2026-09-23 11:59:45 +08:00

82 lines
2.8 KiB
YAML

# 1Panel / docker compose 部署示例。
# 数据库与 Redis 若已有实例,删掉对应 service 并改环境变量指向外部地址即可。
services:
iam-api:
build: .
image: iam-api:0.1.0
container_name: iam-api
restart: unless-stopped
ports:
- "${IAM_API_PORT:-8900}:8900"
environment:
SPRING_PROFILES_ACTIVE: prod
DB_HOST: mysql
DB_PORT: "3306"
DB_NAME: ${DB_NAME:-iam}
DB_USERNAME: ${DB_USERNAME:-iam}
DB_PASSWORD: ${DB_PASSWORD:?数据库密码必须设置}
# Flyway 迁移账号:需要 iam 库的 DDL 权限 + performance_schema.user_variables_by_thread 的 SELECT
# 不设置这两项会启动失败(application-prod.yml 里故意没有默认值)
FLYWAY_USER: ${FLYWAY_USER:?Flyway 迁移账号必须设置}
FLYWAY_PASSWORD: ${FLYWAY_PASSWORD:?Flyway 迁移账号密码必须设置}
REDIS_HOST: redis
REDIS_PORT: "6379"
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
# 必填:生产没有默认值,缺失会启动失败
JWT_SECRET: ${JWT_SECRET:?会话令牌密钥必须设置}
INTERNAL_KEY: ${INTERNAL_KEY:?内部自证密钥必须设置}
# 内网自证密钥轮换期可配多值(逗号分隔)由网关处理,此处仅单值
HEALTH_REDIS_ENABLED: "true"
volumes:
# RS256 私钥:宿主机 ./config/iam-jwt.properties 挂进容器,禁止打进镜像
- ./config:/app/config:ro
- ./logs:/app/logs
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
mysql:
image: mysql:8.0
container_name: iam-mysql
restart: unless-stopped
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?MySQL root 密码必须设置}
MYSQL_DATABASE: ${DB_NAME:-iam}
MYSQL_USER: ${DB_USERNAME:-iam}
MYSQL_PASSWORD: ${DB_PASSWORD:?数据库密码必须设置}
TZ: Asia/Shanghai
volumes:
- iam-mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 10
redis:
image: redis:7-alpine
container_name: iam-redis
restart: unless-stopped
command: >
sh -c 'if [ -n "$$REDIS_PASSWORD" ]; then
exec redis-server --appendonly yes --requirepass "$$REDIS_PASSWORD";
else
exec redis-server --appendonly yes;
fi'
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
volumes:
- iam-redis-data:/data
healthcheck:
test: ["CMD-SHELL", "redis-cli ${REDIS_PASSWORD:+-a $REDIS_PASSWORD} ping | grep PONG"]
interval: 10s
timeout: 5s
retries: 10
volumes:
iam-mysql-data:
iam-redis-data: