| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- name: stylist
- services:
- mysql:
- image: mysql:8.0
- command: --default-authentication-plugin=mysql_native_password
- restart: unless-stopped
- environment:
- MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456}
- MYSQL_DATABASE: ${MYSQL_DATABASE:-aitori_stylist}
- 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: 30
- redis:
- image: redis:7-alpine
- command: ["redis-server", "--requirepass", "${REDIS_PASSWORD:-123456}"]
- restart: unless-stopped
- environment:
- REDIS_PASSWORD: ${REDIS_PASSWORD:-123456}
- volumes:
- - redis-data:/data
- healthcheck:
- test: ["CMD-SHELL", "redis-cli -a $${REDIS_PASSWORD:-123456} ping | grep PONG"]
- interval: 5s
- timeout: 3s
- retries: 30
- backend:
- image: ${REGISTRY:-ghcr.io/gyj2032-byte}/${IMAGE_PREFIX:-stylist}-backend:${IMAGE_TAG:-latest}
- restart: unless-stopped
- environment:
- PORT: 3000
- APP_BASE_URL: ${APP_BASE_URL:-http://localhost:8080}
- DATABASE_URL: mysql://root:${MYSQL_ROOT_PASSWORD:-123456}@mysql:3306/${MYSQL_DATABASE:-aitori_stylist}
- REDIS_URL: redis://:${REDIS_PASSWORD:-123456}@redis:6379
- JWT_SECRET: ${JWT_SECRET:-replace-me}
- JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d}
- INITIAL_STYLIST_ID: ${INITIAL_STYLIST_ID:-1}
- INITIAL_STYLIST_USERNAME: ${INITIAL_STYLIST_USERNAME:-Ogawa}
- INITIAL_STYLIST_EMAIL: ${INITIAL_STYLIST_EMAIL:-stylist@example.com}
- INITIAL_STYLIST_PASSWORD: ${INITIAL_STYLIST_PASSWORD:-Passw0rd!}
- CORS_ORIGIN: ${CORS_ORIGIN:-http://localhost:8080}
- NODE_ENV: production
- STORAGE_DRIVER: ${STORAGE_DRIVER:-gcs}
- GCS_BUCKET: ${GCS_BUCKET:-aitori-public}
- GCS_PROJECT_ID: ${GCS_PROJECT_ID:-app-aitori-jp}
- GCS_CLIENT_EMAIL: ${GCS_CLIENT_EMAIL:-oss-227@app-aitori-jp.iam.gserviceaccount.com}
- GCS_PRIVATE_KEY: ${GCS_PRIVATE_KEY:------BEGIN PRIVATE KEY-----\nreplace-me\n-----END PRIVATE KEY-----\n}
- CUSTOMER_DEFAULT_AVATAR_URL: ${CUSTOMER_DEFAULT_AVATAR_URL:-https://storage.googleapis.com/aitori-public/style/sample/066c7ba22ea149268444bc2d919d5b97.png}
- AI_SIMULATION_BASE_URL: ${AI_SIMULATION_BASE_URL:-http://host.docker.internal:8084}
- AI_SIMULATION_REFRESH_INTERVAL_MS: ${AI_SIMULATION_REFRESH_INTERVAL_MS:-10000}
- AI_SIMULATION_HTTP_TIMEOUT_MS: ${AI_SIMULATION_HTTP_TIMEOUT_MS:-15000}
- SEED_DEMO_DATA: ${SEED_DEMO_DATA:-false}
- extra_hosts:
- - "host.docker.internal:host-gateway"
- depends_on:
- mysql:
- condition: service_healthy
- redis:
- condition: service_healthy
- healthcheck:
- test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:3000/api/v1/health >/dev/null"]
- interval: 10s
- timeout: 5s
- retries: 30
- frontend:
- image: ${REGISTRY:-ghcr.io/gyj2032-byte}/${IMAGE_PREFIX:-stylist}-frontend:${IMAGE_TAG:-latest}
- restart: unless-stopped
- ports:
- - "${FRONTEND_PORT:-8080}:80"
- depends_on:
- backend:
- condition: service_healthy
- volumes:
- mysql-data:
- redis-data:
|