docker-compose.prod.yml 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. name: stylist
  2. services:
  3. mysql:
  4. image: mysql:8.0
  5. command: --default-authentication-plugin=mysql_native_password
  6. restart: unless-stopped
  7. environment:
  8. MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456}
  9. MYSQL_DATABASE: ${MYSQL_DATABASE:-aitori_stylist}
  10. volumes:
  11. - mysql-data:/var/lib/mysql
  12. healthcheck:
  13. test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"]
  14. interval: 5s
  15. timeout: 3s
  16. retries: 30
  17. redis:
  18. image: redis:7-alpine
  19. command: ["redis-server", "--requirepass", "${REDIS_PASSWORD:-123456}"]
  20. restart: unless-stopped
  21. environment:
  22. REDIS_PASSWORD: ${REDIS_PASSWORD:-123456}
  23. volumes:
  24. - redis-data:/data
  25. healthcheck:
  26. test: ["CMD-SHELL", "redis-cli -a $${REDIS_PASSWORD:-123456} ping | grep PONG"]
  27. interval: 5s
  28. timeout: 3s
  29. retries: 30
  30. backend:
  31. image: ${REGISTRY:-ghcr.io/gyj2032-byte}/${IMAGE_PREFIX:-stylist}-backend:${IMAGE_TAG:-latest}
  32. restart: unless-stopped
  33. environment:
  34. PORT: 3000
  35. APP_BASE_URL: ${APP_BASE_URL:-http://localhost:8080}
  36. DATABASE_URL: mysql://root:${MYSQL_ROOT_PASSWORD:-123456}@mysql:3306/${MYSQL_DATABASE:-aitori_stylist}
  37. REDIS_URL: redis://:${REDIS_PASSWORD:-123456}@redis:6379
  38. JWT_SECRET: ${JWT_SECRET:-replace-me}
  39. JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d}
  40. INITIAL_STYLIST_ID: ${INITIAL_STYLIST_ID:-1}
  41. INITIAL_STYLIST_USERNAME: ${INITIAL_STYLIST_USERNAME:-Ogawa}
  42. INITIAL_STYLIST_EMAIL: ${INITIAL_STYLIST_EMAIL:-stylist@example.com}
  43. INITIAL_STYLIST_PASSWORD: ${INITIAL_STYLIST_PASSWORD:-Passw0rd!}
  44. CORS_ORIGIN: ${CORS_ORIGIN:-http://localhost:8080}
  45. NODE_ENV: production
  46. STORAGE_DRIVER: ${STORAGE_DRIVER:-gcs}
  47. GCS_BUCKET: ${GCS_BUCKET:-aitori-public}
  48. GCS_PROJECT_ID: ${GCS_PROJECT_ID:-app-aitori-jp}
  49. GCS_CLIENT_EMAIL: ${GCS_CLIENT_EMAIL:-oss-227@app-aitori-jp.iam.gserviceaccount.com}
  50. GCS_PRIVATE_KEY: ${GCS_PRIVATE_KEY:------BEGIN PRIVATE KEY-----\nreplace-me\n-----END PRIVATE KEY-----\n}
  51. CUSTOMER_DEFAULT_AVATAR_URL: ${CUSTOMER_DEFAULT_AVATAR_URL:-https://storage.googleapis.com/aitori-public/style/sample/066c7ba22ea149268444bc2d919d5b97.png}
  52. AI_SIMULATION_BASE_URL: ${AI_SIMULATION_BASE_URL:-http://host.docker.internal:8084}
  53. AI_SIMULATION_REFRESH_INTERVAL_MS: ${AI_SIMULATION_REFRESH_INTERVAL_MS:-10000}
  54. AI_SIMULATION_HTTP_TIMEOUT_MS: ${AI_SIMULATION_HTTP_TIMEOUT_MS:-15000}
  55. SEED_DEMO_DATA: ${SEED_DEMO_DATA:-false}
  56. extra_hosts:
  57. - "host.docker.internal:host-gateway"
  58. depends_on:
  59. mysql:
  60. condition: service_healthy
  61. redis:
  62. condition: service_healthy
  63. healthcheck:
  64. test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:3000/api/v1/health >/dev/null"]
  65. interval: 10s
  66. timeout: 5s
  67. retries: 30
  68. frontend:
  69. image: ${REGISTRY:-ghcr.io/gyj2032-byte}/${IMAGE_PREFIX:-stylist}-frontend:${IMAGE_TAG:-latest}
  70. restart: unless-stopped
  71. ports:
  72. - "${FRONTEND_PORT:-8080}:80"
  73. depends_on:
  74. backend:
  75. condition: service_healthy
  76. volumes:
  77. mysql-data:
  78. redis-data: