services: mysql: image: mysql:8.4 restart: unless-stopped environment: MYSQL_DATABASE: ${MYSQL_DATABASE:-iqudo_top1} MYSQL_USER: ${MYSQL_USER:-iqudo} MYSQL_PASSWORD: ${MYSQL_PASSWORD:?set MYSQL_PASSWORD in .env} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?set MYSQL_ROOT_PASSWORD in .env} TZ: Asia/Shanghai command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] volumes: - mysql-data:/var/lib/mysql healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent"] interval: 5s timeout: 3s retries: 20 start_period: 20s app: build: context: . args: GOPROXY: ${GOPROXY:-https://goproxy.cn,direct} restart: unless-stopped environment: APP_ENV: prod APP_SERVER_HOST: 0.0.0.0 APP_SERVER_PORT: 8080 APP_DATABASE_HOST: mysql APP_DATABASE_PORT: 3306 APP_DATABASE_NAME: ${MYSQL_DATABASE:-iqudo_top1} APP_DATABASE_USER: ${MYSQL_USER:-iqudo} APP_DATABASE_PASSWORD: ${MYSQL_PASSWORD:?set MYSQL_PASSWORD in .env} APP_AUTH_JWT_SECRET: ${APP_AUTH_JWT_SECRET:?set APP_AUTH_JWT_SECRET in .env} APP_SEED_ADMIN_USERNAME: ${APP_SEED_ADMIN_USERNAME:-admin} APP_SEED_ADMIN_PASSWORD: ${APP_SEED_ADMIN_PASSWORD:?set APP_SEED_ADMIN_PASSWORD in .env} APP_SEED_ADMIN_DISPLAY_NAME: ${APP_SEED_ADMIN_DISPLAY_NAME:-平台管理员} TZ: Asia/Shanghai depends_on: mysql: condition: service_healthy expose: - "8080" healthcheck: test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:8080/api/v1/health"] interval: 10s timeout: 3s retries: 10 start_period: 10s nginx: image: nginx:1.27-alpine restart: unless-stopped ports: - "${APP_HTTP_PORT:-18090}:80" volumes: - ./deploy/nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: app: condition: service_healthy volumes: mysql-data: