name: firstleg-test x-common: &common restart: "on-failure:3" stop_grace_period: ${STOP_GRACE_PERIOD:-45s} networks: [firstleg-network, infra-network] # 测试机复用宿主机的 MySQL、Redis、Nacos 时,容器通过此别名访问宿主机。 extra_hosts: - "host.docker.internal:host-gateway" environment: &common-environment DEPLOY_ENV: test BAIYUE_RELEASE_ID: ${RELEASE_ID:-local} BAIYUE_RUNTIME_SCHEDULING_ENABLED: ${BAIYUE_RUNTIME_SCHEDULING_ENABLED:-true} SERVER_SHUTDOWN: graceful SPRING_LIFECYCLE_TIMEOUT_PER_SHUTDOWN_PHASE: ${SHUTDOWN_PHASE_TIMEOUT:-30s} SPRING_PROFILES_ACTIVE: test NACOS_SERVER_ADDR: ${NACOS_SERVER_ADDR} NACOS_USERNAME: ${NACOS_USERNAME} NACOS_PASSWORD: ${NACOS_PASSWORD} NACOS_GROUP: ${NACOS_GROUP:-BAIYUE} NACOS_NAMESPACE: ${NACOS_NAMESPACE:?actual TEST namespace ID required} REDIS_HOST: ${REDIS_HOST} REDIS_PORT: ${REDIS_PORT:-6379} REDIS_PASSWORD: ${REDIS_PASSWORD} REDIS_USERNAME: ${REDIS_USERNAME:-default} SPRING_DATA_REDIS_USERNAME: ${REDIS_USERNAME:-default} REDIS_DATABASE: ${REDIS_DATABASE:-0} AUTH_SESSION_VALIDATION_URL: http://auth:9100/internal/auth/accounts/sessions/validate JWT_ISSUER: ${JWT_ISSUER:-auth-service} JWT_AUDIENCE: ${JWT_AUDIENCE:-lastleg-api} JWT_JWKS_URI: http://auth:9100/api/auth/.well-known/jwks.json REDIS_TOKEN_KEY_PREFIX: ${REDIS_TOKEN_KEY_PREFIX:-baiyue:auth} SPRING_SQL_INIT_MODE: never ROCKETMQ_NAME_SERVER: ${ROCKETMQ_NAME_SERVER} MQ_TOPIC_PREFIX: test- INTERNAL_SERVICE_TOKEN: ${INTERNAL_SERVICE_TOKEN} BAIYUE_AUDIT_ENDPOINT: http://audit-service:9700/internal/audit/events SERVER_MAX_HTTP_REQUEST_HEADER_SIZE: ${SERVER_MAX_HTTP_REQUEST_HEADER_SIZE:-32KB} AUDIT_OUTBOX_ENABLED: ${AUDIT_OUTBOX_ENABLED:-false} AUDIT_OUTBOX_PUBLISHER_ENABLED: ${AUDIT_OUTBOX_PUBLISHER_ENABLED:-false} TZ: Asia/Shanghai logging: # 应用只写 stdout/stderr;json-file 兼容宝塔查看,大小与数量均受控。 driver: ${DOCKER_LOG_DRIVER:-json-file} options: max-size: ${DOCKER_LOG_MAX_SIZE:-50m} max-file: "${DOCKER_LOG_MAX_FILE:-3}" services: gateway: <<: *common image: ${IMAGE_REPOSITORY}/gateway:${IMAGE_TAG} container_name: firstleg-test-gateway ports: ["${PUBLISHED_BIND_ADDRESS:-127.0.0.1}:${GATEWAY_PUBLISHED_PORT:-${GATEWAY_PORT:-9000}}:9000"] environment: <<: *common-environment SERVER_PORT: 9000 SWAGGER_ENABLED: ${SWAGGER_ENABLED:-false} CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS} CORS_ALLOW_CREDENTIALS: ${CORS_ALLOW_CREDENTIALS:-false} auth: <<: *common image: ${IMAGE_REPOSITORY}/auth:${IMAGE_TAG} container_name: firstleg-test-auth expose: ["9100"] environment: <<: *common-environment SERVER_PORT: 9100 JWT_RSA_JWK_SET: ${JWT_RSA_JWK_SET} JWT_CURRENT_KID: ${JWT_CURRENT_KID} AUTH_DB_URL: ${AUTH_DB_URL} AUTH_DB_USERNAME: ${AUTH_DB_USERNAME} AUTH_DB_PASSWORD: ${AUTH_DB_PASSWORD} iam: <<: *common image: ${IMAGE_REPOSITORY}/iam:${IMAGE_TAG} container_name: firstleg-test-iam expose: ["9201"] environment: <<: *common-environment SERVER_PORT: 9201 NOTIFICATION_SCHEDULER_ENABLED: ${NOTIFICATION_SCHEDULER_ENABLED:-false} NOTIFICATION_MQ_CONSUMER_ENABLED: ${NOTIFICATION_MQ_CONSUMER_ENABLED:-false} IAM_DB_URL: ${IAM_DB_URL} IAM_DB_USERNAME: ${IAM_DB_USERNAME} IAM_DB_PASSWORD: ${IAM_DB_PASSWORD} firstleg: <<: *common image: ${IMAGE_REPOSITORY}/firstleg:${IMAGE_TAG} container_name: firstleg-test-business expose: ["9202"] environment: <<: *common-environment SERVER_PORT: 9202 EVENT_CONNECT_TIMEOUT_MS: ${EVENT_CONNECT_TIMEOUT_MS:-3000} EVENT_READ_TIMEOUT_MS: ${EVENT_READ_TIMEOUT_MS:-15000} EVENT_LEASE_SECONDS: ${EVENT_LEASE_SECONDS:-60} EVENT_MAX_ATTEMPTS: ${EVENT_MAX_ATTEMPTS:-12} EVENT_BASE_DELAY_SECONDS: ${EVENT_BASE_DELAY_SECONDS:-5} EVENT_MAX_DELAY_SECONDS: ${EVENT_MAX_DELAY_SECONDS:-1800} EVENT_JITTER: ${EVENT_JITTER:-0.1} EVENT_OPERATIONS_TOKEN: ${EVENT_OPERATIONS_TOKEN:-} LASTLEG_SERVICE_URL: http://lastleg-service:9303 FIRSTLEG_SERVICE_URL: http://firstleg:9202 FINANCE_SERVICE_URL: http://finance:9203 FIRSTLEG_DB_URL: ${FIRSTLEG_DB_URL} FIRSTLEG_DB_USERNAME: ${FIRSTLEG_DB_USERNAME} FIRSTLEG_DB_PASSWORD: ${FIRSTLEG_DB_PASSWORD} MATSON_TRACKING_ENABLED: ${MATSON_TRACKING_ENABLED:-false} SML_TRACKING_ENABLED: ${SML_TRACKING_ENABLED:-false} ZIM_TRACKING_ENABLED: ${ZIM_TRACKING_ENABLED:-false} COSCO_OPEN_API_ENABLED: ${COSCO_OPEN_API_ENABLED:-false} EMC_TRACKING_ENABLED: ${EMC_TRACKING_ENABLED:-false} HEDE_TRACKING_ENABLED: ${HEDE_TRACKING_ENABLED:-false} CARRIER_SCHEDULE_SCHEDULER_ENABLED: ${CARRIER_SCHEDULE_SCHEDULER_ENABLED:-false} CARRIER_SCHEDULE_ZONE: ${CARRIER_SCHEDULE_ZONE:-Asia/Shanghai} CARRIER_SCHEDULE_SCAN_FIXED_DELAY: ${CARRIER_SCHEDULE_SCAN_FIXED_DELAY:-PT1M} CARRIER_SCHEDULE_SCAN_INITIAL_DELAY: ${CARRIER_SCHEDULE_SCAN_INITIAL_DELAY:-PT10S} CARRIER_SCHEDULE_BATCH_SIZE: ${CARRIER_SCHEDULE_BATCH_SIZE:-20} CARRIER_SCHEDULE_MAX_TASKS_PER_TRIGGER: ${CARRIER_SCHEDULE_MAX_TASKS_PER_TRIGGER:-2000} CARRIER_SCHEDULE_LEASE_DURATION: ${CARRIER_SCHEDULE_LEASE_DURATION:-PT5M} TERMINAL_DRAYAGE_MAIL_ENABLED: ${TERMINAL_DRAYAGE_MAIL_ENABLED:-false} TERMINAL_DRAYAGE_MAIL_HOST: ${TERMINAL_DRAYAGE_MAIL_HOST:-} TERMINAL_DRAYAGE_MAIL_PORT: ${TERMINAL_DRAYAGE_MAIL_PORT:-587} TERMINAL_DRAYAGE_MAIL_USERNAME: ${TERMINAL_DRAYAGE_MAIL_USERNAME:-} TERMINAL_DRAYAGE_MAIL_PASSWORD: ${TERMINAL_DRAYAGE_MAIL_PASSWORD:-} TERMINAL_DRAYAGE_MAIL_SSL: ${TERMINAL_DRAYAGE_MAIL_SSL:-false} TERMINAL_DRAYAGE_MAIL_SCAN_DELAY: ${TERMINAL_DRAYAGE_MAIL_SCAN_DELAY:-10000} finance: <<: *common image: ${IMAGE_REPOSITORY}/finance:${IMAGE_TAG} container_name: firstleg-test-finance expose: ["9203"] environment: <<: *common-environment SERVER_PORT: 9203 EVENT_CONNECT_TIMEOUT_MS: ${EVENT_CONNECT_TIMEOUT_MS:-3000} EVENT_READ_TIMEOUT_MS: ${EVENT_READ_TIMEOUT_MS:-15000} EVENT_LEASE_SECONDS: ${EVENT_LEASE_SECONDS:-60} EVENT_MAX_ATTEMPTS: ${EVENT_MAX_ATTEMPTS:-12} EVENT_BASE_DELAY_SECONDS: ${EVENT_BASE_DELAY_SECONDS:-5} EVENT_MAX_DELAY_SECONDS: ${EVENT_MAX_DELAY_SECONDS:-1800} EVENT_JITTER: ${EVENT_JITTER:-0.1} EVENT_OPERATIONS_TOKEN: ${EVENT_OPERATIONS_TOKEN:-} LASTLEG_SERVICE_URL: http://lastleg-service:9303 FIRSTLEG_SERVICE_URL: http://firstleg:9202 FINANCE_SERVICE_URL: http://finance:9203 FINANCE_DB_URL: ${FINANCE_DB_URL} FINANCE_DB_USERNAME: ${FINANCE_DB_USERNAME} FINANCE_DB_PASSWORD: ${FINANCE_DB_PASSWORD} order: <<: *common image: ${IMAGE_REPOSITORY}/order:${IMAGE_TAG} container_name: firstleg-test-order expose: ["9204"] environment: <<: *common-environment SERVER_PORT: 9204 ORDER_DB_URL: ${ORDER_DB_URL} ORDER_DB_USERNAME: ${ORDER_DB_USERNAME} ORDER_DB_PASSWORD: ${ORDER_DB_PASSWORD} warehouse: <<: *common image: ${IMAGE_REPOSITORY}/warehouse:${IMAGE_TAG} container_name: firstleg-test-warehouse expose: ["9205"] environment: <<: *common-environment SERVER_PORT: 9205 WAREHOUSE_DB_URL: ${WAREHOUSE_DB_URL} WAREHOUSE_DB_USERNAME: ${WAREHOUSE_DB_USERNAME} WAREHOUSE_DB_PASSWORD: ${WAREHOUSE_DB_PASSWORD} file: <<: *common image: ${IMAGE_REPOSITORY}/file:${IMAGE_TAG} container_name: firstleg-test-file expose: ["9206"] volumes: - "${FILE_UPLOADS_HOST_DIR:-/data/firstleg/uploads}:/data/files" environment: <<: *common-environment SERVER_PORT: 9206 FILE_DB_URL: ${FILE_DB_URL} FILE_DB_USERNAME: ${FILE_DB_USERNAME} FILE_DB_PASSWORD: ${FILE_DB_PASSWORD} FILE_STORAGE_ROOT: /data/files PDA_UPDATE_PUBLIC_BASE_URL: ${PDA_UPDATE_PUBLIC_BASE_URL:-} JAVA_TOOL_OPTIONS: "-Xms1g -Xmx2g -XX:+ExitOnOutOfMemoryError -Dfile.encoding=UTF-8" # Compose 会插值整份文件,即使只部署 auth 等其他服务;File 的必填校验由 deploy-services.sh 按服务执行。 FILE_EXPORT_CONSUMER_ENABLED: ${FILE_EXPORT_CONSUMER_ENABLED:-false} FILE_EXPORT_CONSUMER_CONCURRENCY: ${FILE_EXPORT_CONSUMER_CONCURRENCY:-4} FILE_EXPORT_PUBLISHER_ENABLED: ${FILE_EXPORT_PUBLISHER_ENABLED:-false} FILE_EXPORT_RECONCILER_ENABLED: ${FILE_EXPORT_RECONCILER_ENABLED:-false} print: <<: *common image: ${IMAGE_REPOSITORY}/print:${IMAGE_TAG} container_name: firstleg-test-print expose: ["9207"] environment: <<: *common-environment SERVER_PORT: 9207 JAVA_TOOL_OPTIONS: "-Xms512m -Xmx1g -XX:+ExitOnOutOfMemoryError -Dfile.encoding=UTF-8" integration-service: <<: *common image: ${IMAGE_REPOSITORY}/integration-service:${IMAGE_TAG} container_name: firstleg-test-integration expose: ["9210"] environment: <<: *common-environment SERVER_PORT: 9210 BAIDU_OCR_ENABLED: ${BAIDU_OCR_ENABLED:-false} BAIDU_OCR_API_KEY: ${BAIDU_OCR_API_KEY:-} BAIDU_OCR_SECRET_KEY: ${BAIDU_OCR_SECRET_KEY:-} AMAZON_SP_API_ENABLED: ${AMAZON_SP_API_ENABLED:-false} AMAZON_SP_API_CLIENT_ID: ${AMAZON_SP_API_CLIENT_ID:-} AMAZON_SP_API_CLIENT_SECRET: ${AMAZON_SP_API_CLIENT_SECRET:-} AMAZON_SP_API_REFRESH_TOKEN: ${AMAZON_SP_API_REFRESH_TOKEN:-} AMAZON_SP_API_AWS_ACCESS_KEY: ${AMAZON_SP_API_AWS_ACCESS_KEY:-} AMAZON_SP_API_AWS_SECRET_KEY: ${AMAZON_SP_API_AWS_SECRET_KEY:-} AMAZON_SP_API_REGION: ${AMAZON_SP_API_REGION:-} MATSON_TRACKING_ENABLED: ${MATSON_TRACKING_ENABLED:-false} MATSON_TRACKING_PAGE_URL: ${MATSON_TRACKING_PAGE_URL:-https://www.matson.com/shipment-tracking.html} MATSON_TRACKING_QUERY_URL: ${MATSON_TRACKING_QUERY_URL:-https://www.matson.com/wp-content/plugins/matson-plugin/Api_calls/tracking_booking_proxy.php} MATSON_TRACKING_CONNECT_TIMEOUT: ${MATSON_TRACKING_CONNECT_TIMEOUT:-10s} MATSON_TRACKING_REQUEST_TIMEOUT: ${MATSON_TRACKING_REQUEST_TIMEOUT:-30s} MATSON_TRACKING_MIN_REQUEST_INTERVAL: ${MATSON_TRACKING_MIN_REQUEST_INTERVAL:-5s} SML_TRACKING_ENABLED: ${SML_TRACKING_ENABLED:-false} SML_TRACKING_QUERY_URL: ${SML_TRACKING_QUERY_URL:-https://esvc.smlines.com/smline/CUP_HOM_3301GS.do} SML_TRACKING_CONNECT_TIMEOUT: ${SML_TRACKING_CONNECT_TIMEOUT:-10s} SML_TRACKING_REQUEST_TIMEOUT: ${SML_TRACKING_REQUEST_TIMEOUT:-30s} SML_TRACKING_MIN_REQUEST_INTERVAL: ${SML_TRACKING_MIN_REQUEST_INTERVAL:-5s} ZIM_TRACKING_ENABLED: ${ZIM_TRACKING_ENABLED:-false} ZIM_AUTHORIZATION_URL: ${ZIM_AUTHORIZATION_URL:-https://apigw.zim.com/authorize/v1} ZIM_TRACING_BASE_URL: ${ZIM_TRACING_BASE_URL:-https://apigw.zim.com/tracing/v2} ZIM_CLIENT_ID: ${ZIM_CLIENT_ID:-} ZIM_CLIENT_SECRET: ${ZIM_CLIENT_SECRET:-} ZIM_TRACKING_SUBSCRIPTION_KEY: ${ZIM_TRACKING_SUBSCRIPTION_KEY:-} ZIM_TRACKING_CONNECT_TIMEOUT: ${ZIM_TRACKING_CONNECT_TIMEOUT:-10s} ZIM_TRACKING_REQUEST_TIMEOUT: ${ZIM_TRACKING_REQUEST_TIMEOUT:-30s} ZIM_TRACKING_MAX_CONCURRENCY: ${ZIM_TRACKING_MAX_CONCURRENCY:-10} EMC_TRACKING_ENABLED: ${EMC_TRACKING_ENABLED:-false} EMC_TRACKING_QUERY_URL: ${EMC_TRACKING_QUERY_URL:-https://www.evergreen-shipping.cn/servlet/TDB1_CargoTracking.do} EMC_TRACKING_CONNECT_TIMEOUT: ${EMC_TRACKING_CONNECT_TIMEOUT:-10s} EMC_TRACKING_REQUEST_TIMEOUT: ${EMC_TRACKING_REQUEST_TIMEOUT:-30s} EMC_TRACKING_MIN_REQUEST_INTERVAL: ${EMC_TRACKING_MIN_REQUEST_INTERVAL:-5s} HEDE_TRACKING_ENABLED: ${HEDE_TRACKING_ENABLED:-false} HEDE_TRACKING_QUERY_URL: ${HEDE_TRACKING_QUERY_URL:-http://elines.hedehk.com/getVBilldynamic} HEDE_TRACKING_CONNECT_TIMEOUT: ${HEDE_TRACKING_CONNECT_TIMEOUT:-10s} HEDE_TRACKING_REQUEST_TIMEOUT: ${HEDE_TRACKING_REQUEST_TIMEOUT:-30s} HEDE_TRACKING_MIN_REQUEST_INTERVAL: ${HEDE_TRACKING_MIN_REQUEST_INTERVAL:-5s} audit-service: <<: *common image: ${IMAGE_REPOSITORY}/audit-service:${IMAGE_TAG} container_name: firstleg-test-audit expose: ["9700"] environment: <<: *common-environment SERVER_PORT: 9700 AUDIT_DB_URL: ${AUDIT_DB_URL} AUDIT_DB_USERNAME: ${AUDIT_DB_USERNAME} AUDIT_DB_PASSWORD: ${AUDIT_DB_PASSWORD} AUDIT_MQ_CONSUMER_ENABLED: ${AUDIT_MQ_CONSUMER_ENABLED:-false} AUDIT_DLQ_CONSUMER_ENABLED: ${AUDIT_DLQ_CONSUMER_ENABLED:-false} AUDIT_DLQ_COMPENSATION_ENABLED: ${AUDIT_DLQ_COMPENSATION_ENABLED:-false} lastleg-service: <<: *common image: ${IMAGE_REPOSITORY}/lastleg-service:${IMAGE_TAG} container_name: firstleg-test-lastleg expose: ["9303"] environment: <<: *common-environment SERVER_PORT: 9303 EVENT_CONNECT_TIMEOUT_MS: ${EVENT_CONNECT_TIMEOUT_MS:-3000} EVENT_READ_TIMEOUT_MS: ${EVENT_READ_TIMEOUT_MS:-15000} EVENT_LEASE_SECONDS: ${EVENT_LEASE_SECONDS:-60} EVENT_MAX_ATTEMPTS: ${EVENT_MAX_ATTEMPTS:-12} EVENT_BASE_DELAY_SECONDS: ${EVENT_BASE_DELAY_SECONDS:-5} EVENT_MAX_DELAY_SECONDS: ${EVENT_MAX_DELAY_SECONDS:-1800} EVENT_JITTER: ${EVENT_JITTER:-0.1} EVENT_OPERATIONS_TOKEN: ${EVENT_OPERATIONS_TOKEN:-} LASTLEG_SERVICE_URL: http://lastleg-service:9303 FIRSTLEG_SERVICE_URL: http://firstleg:9202 FINANCE_SERVICE_URL: http://finance:9203 LASTLEG_DB_URL: ${LASTLEG_DB_URL} LASTLEG_DB_USERNAME: ${LASTLEG_DB_USERNAME} LASTLEG_DB_PASSWORD: ${LASTLEG_DB_PASSWORD} DOMESTIC_WAREHOUSE_URL: ${DOMESTIC_WAREHOUSE_URL:-http://warehouse:9205} FILE_SERVICE_URL: ${FILE_SERVICE_URL:-http://file:9206} PRINT_SERVICE_URL: ${PRINT_SERVICE_URL:-http://print:9207} WAREHOUSE_OVERSEAS_SERVICE_URL: ${WAREHOUSE_OVERSEAS_SERVICE_URL:-http://warehouse-overseas-service:9305} warehouse-overseas-service: <<: *common image: ${IMAGE_REPOSITORY}/warehouse-overseas-service:${IMAGE_TAG} container_name: firstleg-test-warehouse-overseas expose: ["9305"] environment: <<: *common-environment SERVER_PORT: 9305 WAREHOUSE_DB_URL: ${WAREHOUSE_OVERSEAS_DB_URL} WAREHOUSE_DB_USERNAME: ${WAREHOUSE_OVERSEAS_DB_USERNAME} WAREHOUSE_DB_PASSWORD: ${WAREHOUSE_OVERSEAS_DB_PASSWORD} DOMESTIC_WAREHOUSE_URL: ${DOMESTIC_WAREHOUSE_URL} PRINT_SERVICE_URL: ${PRINT_SERVICE_URL:-http://print:9207} networks: firstleg-network: name: firstleg-test-network infra-network: external: true name: ${INFRA_NETWORK:-firstleg-test-infra-network}