docker-compose.yml 3.1 KB

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