services: tenant-service: image: ${REGISTRY}/tenant-service:${IMAGE_TAG} profiles: ["base"] env_file: - ./config/xuqm.env - ./config/secrets.env - ./config/tenant/bootstrap.env environment: # Override application.yml hardcoded URLs; these vars take precedence over env_file SPRING_DATASOURCE_URL: "jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT:-3306}/${MYSQL_DATABASE:-xuqm_private}?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true" SPRING_DATASOURCE_USERNAME: "${MYSQL_USERNAME:-xuqm}" SPRING_DATASOURCE_PASSWORD: "${MYSQL_PASSWORD}" SPRING_DATA_REDIS_HOST: "${REDIS_HOST}" SPRING_DATA_REDIS_PORT: "${REDIS_PORT:-6379}" SPRING_DATA_REDIS_PASSWORD: "${REDIS_PASSWORD}" SPRING_DATA_REDIS_DATABASE: "${REDIS_DATABASE:-0}" restart: unless-stopped file-service: image: ${REGISTRY}/file-service:${IMAGE_TAG} profiles: ["base"] env_file: - ./config/xuqm.env - ./config/secrets.env environment: SPRING_DATASOURCE_URL: "jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT:-3306}/${MYSQL_DATABASE:-xuqm_private}?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true" SPRING_DATASOURCE_USERNAME: "${MYSQL_USERNAME:-xuqm}" SPRING_DATASOURCE_PASSWORD: "${MYSQL_PASSWORD}" SPRING_DATA_REDIS_HOST: "${REDIS_HOST}" SPRING_DATA_REDIS_PORT: "${REDIS_PORT:-6379}" SPRING_DATA_REDIS_PASSWORD: "${REDIS_PASSWORD}" SPRING_DATA_REDIS_DATABASE: "${REDIS_DATABASE:-0}" volumes: - ./data/uploads:/data/uploads restart: unless-stopped tenant-web: image: ${REGISTRY}/tenant-web:${IMAGE_TAG} profiles: ["base"] restart: unless-stopped ops-web: image: ${REGISTRY}/ops-web:${IMAGE_TAG} profiles: ["base"] restart: unless-stopped docs-site: image: ${REGISTRY}/docs-site:${IMAGE_TAG} profiles: ["base"] volumes: - ./config/docs/docs-runtime.json:/app/config/docs-runtime.json:ro - ./config/sdk/xuqm-private-sdk.json:/app/config/xuqm-private-sdk.json:ro restart: unless-stopped nginx: image: nginx:1.27-alpine profiles: ["base"] ports: - "80:80" - "443:443" volumes: - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./config/nginx/conf.d:/etc/nginx/conf.d:ro depends_on: - tenant-service - tenant-web - ops-web docs-site: condition: service_started required: false restart: unless-stopped im-service: image: ${REGISTRY}/im-service:${IMAGE_TAG} profiles: ["im"] env_file: - ./config/xuqm.env - ./config/secrets.env restart: unless-stopped push-service: image: ${REGISTRY}/push-service:${IMAGE_TAG} profiles: ["push"] env_file: - ./config/xuqm.env - ./config/secrets.env - ./config/vendors/push.env restart: unless-stopped update-service: image: ${REGISTRY}/update-service:${IMAGE_TAG} profiles: ["update"] env_file: - ./config/xuqm.env - ./config/secrets.env - ./config/vendors/store-submit.env volumes: - ./data/update:/data/update restart: unless-stopped license-service: image: ${REGISTRY}/license-service:${IMAGE_TAG} profiles: ["license"] env_file: - ./config/xuqm.env - ./config/secrets.env restart: unless-stopped