# ============================================================ # 测试环境自包含部署(复用 verify compose + nginx 转发) # crm-app 不直接暴露端口,全部经 nginx 80 转发访问。 # # docker compose -f docker-compose-test.yml up -d --build # docker compose -f docker-compose-test.yml down -v # ============================================================ services: mysql: image: mysql:8.4.8 environment: MYSQL_ROOT_PASSWORD: verify123 MYSQL_DATABASE: crm # 空库,表结构由 crm-app 的 ddl-auto:update 自动建 TZ: Asia/Shanghai command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ports: - "13306:3306" # 对外暴露给本机数据库工具(避开宿主机可能已占用的 3306) healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-pverify123"] interval: 5s timeout: 3s retries: 20 volumes: - mysql-data:/var/lib/mysql redis: image: redis:7-alpine command: ["redis-server", "--requirepass", "verify123"] healthcheck: test: ["CMD", "redis-cli", "-a", "verify123", "ping"] interval: 5s timeout: 3s retries: 20 volumes: - redis-data:/data minio: image: minio/minio:RELEASE.2025-04-08T15-41-24Z command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin ports: - "9001:9001" # 控制台(可选,浏览器看缩略图对象是否落地) healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 5s timeout: 3s retries: 20 volumes: - minio-data:/data # 一次性任务:等 minio 就绪后创建 crm bucket(对齐 application.yml 的 crm.file.minio.bucket=crm) minio-init: image: minio/mc:latest depends_on: minio: condition: service_healthy entrypoint: > /bin/sh -c " mc alias set local http://minio:9000 minioadmin minioadmin && mc mb --ignore-existing local/crm && echo 'bucket crm ready'; " crm-app: build: context: . dockerfile: Dockerfile depends_on: mysql: condition: service_healthy redis: condition: service_healthy minio: condition: service_healthy environment: SPRING_PROFILES_ACTIVE: verify CRM_DB_URL: "jdbc:mysql://mysql:3306/crm?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&rewriteBatchedStatements=true" CRM_DB_USERNAME: root CRM_DB_PASSWORD: verify123 CRM_REDIS_HOST: redis CRM_REDIS_PORT: "6379" CRM_REDIS_DATABASE: "0" CRM_REDIS_PASSWORD: verify123 CRM_MINIO_ENDPOINT: http://minio:9000 CRM_MINIO_AK: minioadmin CRM_MINIO_SK: minioadmin CRM_KKFILEVIEW_URL: "" # 不直接暴露 8080,由 nginx 转发 expose: - "8080" nginx: image: nginx:stable-alpine depends_on: - crm-app ports: - "80:80" # 对外只开 nginx 80,crm-app 8080 不可达 volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/docs:/usr/share/nginx/docs:ro # API 文档静态页 volumes: mysql-data: redis-data: minio-data: