services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root123456 MYSQL_DATABASE: mydb MYSQL_USER: user MYSQL_PASSWORD: password123 ports: - "3309:3306" volumes: - mysql_data:/var/lib/mysql networks: - app-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"] interval: 5s timeout: 3s retries: 30 start_period: 20s redis: image: redis:7.4.1 ports: - "6381:6379" volumes: - redis_data:/data networks: - app-network restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 30 start_period: 5s backend: build: context: ../backend dockerfile: Dockerfile env_file: - ../backend/.env environment: DB_HOST: mysql DB_PORT: "3306" DB_NAME: mydb DB_USER: user DB_PASSWORD: password123 REDIS_ADDR: redis:6379 PUBLIC_BASE_URL: http://localhost:8080 ports: - "8080:8080" volumes: - backend_uploads:/app/static/upload depends_on: mysql: condition: service_healthy redis: condition: service_healthy networks: - app-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:8080/healthz >/dev/null 2>&1 || exit 1"] interval: 5s timeout: 3s retries: 30 start_period: 10s admin: build: context: ../admin dockerfile: Dockerfile ports: - "5173:80" depends_on: backend: condition: service_healthy networks: - app-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "wget -qO- http://127.0.0.1/ >/dev/null 2>&1 || exit 1"] interval: 10s timeout: 3s retries: 10 start_period: 10s swagger: image: swaggerapi/swagger-ui:latest container_name: meishiditu-swagger ports: - "8081:8080" environment: SWAGGER_JSON: /openapi.yaml volumes: - ../docs/openapi.yaml:/openapi.yaml:ro networks: - app-network depends_on: - backend volumes: mysql_data: redis_data: backend_uploads: networks: app-network: driver: bridge