青核后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

91 lines
3.2 KiB

# 在 campus-server 目录执行;仅默认启动基础设施,backend 需显式启用 app profile。
services:
mysql:
image: mysql:8.4
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?请先设置 MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME:-qinghe_local}
MYSQL_USER: ${DB_USERNAME:-qinghe}
MYSQL_PASSWORD: ${DB_PASSWORD:?请先设置 DB_PASSWORD}
TZ: Asia/Shanghai
command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
ports:
- "127.0.0.1:${DB_PORT:-13306}:3306"
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "MYSQL_PWD=\"$$MYSQL_PASSWORD\" mysql --protocol=TCP -h 127.0.0.1 -u\"$$MYSQL_USER\" \"$$MYSQL_DATABASE\" -e 'SELECT 1' >/dev/null"]
interval: 10s
timeout: 5s
retries: 20
start_period: 40s
redis:
image: redis:7.4-alpine
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD:?请先设置 REDIS_PASSWORD}
command: ["sh", "-c", "exec redis-server --appendonly yes --requirepass \"$$REDIS_PASSWORD\""]
ports:
- "127.0.0.1:${REDIS_PORT:-16379}:6379"
volumes:
- redis-data:/data
healthcheck:
test: ["CMD-SHELL", "REDISCLI_AUTH=\"$$REDIS_PASSWORD\" redis-cli ping | grep -q PONG"]
interval: 10s
timeout: 5s
retries: 10
rabbitmq:
image: rabbitmq:4.1-management
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USERNAME:-qinghe}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:?请先设置 RABBITMQ_PASSWORD}
ports:
- "127.0.0.1:${RABBITMQ_PORT:-15672}:5672"
- "127.0.0.1:${RABBITMQ_MANAGEMENT_PORT:-15673}:15672"
volumes:
- rabbitmq-data:/var/lib/rabbitmq
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"]
interval: 10s
timeout: 10s
retries: 20
start_period: 30s
backend:
profiles: ["app"]
build:
context: .
dockerfile: Dockerfile
env_file:
- .env
environment:
DB_HOST: mysql
DB_PORT: "3306"
REDIS_HOST: redis
REDIS_PORT: "6379"
RABBITMQ_HOST: rabbitmq
RABBITMQ_PORT: "5672"
SERVER_PORT: "8009"
JWT_SECRET: ${JWT_SECRET:?请先设置 JWT_SECRET}
# env_file 中空值不会触发 Spring 的默认值,这里统一回落到明确的本地占位值。
OSS_ENDPOINT: ${OSS_ENDPOINT:-http://127.0.0.1:19000}
OSS_ACCESS_KEY_ID: ${OSS_ACCESS_KEY_ID:-your-local-placeholder}
OSS_ACCESS_KEY_SECRET: ${OSS_ACCESS_KEY_SECRET:-your-local-placeholder}
OSS_BUCKET_NAME: ${OSS_BUCKET_NAME:-qinghe-local-placeholder}
OSS_DOMAIN: ${OSS_DOMAIN:-http://127.0.0.1:19000}
SMS_ACCESS_KEY_ID: ${SMS_ACCESS_KEY_ID:-your-local-placeholder}
SMS_ACCESS_KEY_SECRET: ${SMS_ACCESS_KEY_SECRET:-your-local-placeholder}
SMS_SIGN_NAME: ${SMS_SIGN_NAME:-local-placeholder}
SMS_TEMPLATE_CODE: ${SMS_TEMPLATE_CODE:-local-placeholder}
SMS_REGION_ID: ${SMS_REGION_ID:-cn-hangzhou}
ports:
- "127.0.0.1:${SERVER_PORT:-8009}:8009"
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
rabbitmq:
condition: service_healthy
volumes:
mysql-data:
redis-data:
rabbitmq-data: