docker-compose.prod.yml 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. version: "3.9"
  2. x-common: &common
  3. restart: unless-stopped
  4. networks:
  5. - photoplaces
  6. services:
  7. postgres:
  8. <<: *common
  9. image: postgis/postgis:16-3.4-alpine
  10. environment:
  11. POSTGRES_DB: photoplaces
  12. POSTGRES_USER: photoplaces
  13. POSTGRES_PASSWORD: ${DB_PASSWORD}
  14. volumes:
  15. - pgdata:/var/lib/postgresql/data
  16. healthcheck:
  17. test: ["CMD-SHELL", "pg_isready -U photoplaces"]
  18. interval: 10s
  19. retries: 5
  20. redis:
  21. <<: *common
  22. image: redis:7-alpine
  23. command: redis-server --requirepass ${REDIS_PASSWORD}
  24. volumes:
  25. - redisdata:/data
  26. healthcheck:
  27. test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
  28. interval: 10s
  29. retries: 5
  30. minio:
  31. <<: *common
  32. image: minio/minio:latest
  33. command: server /data
  34. volumes:
  35. - miniodata:/data
  36. environment:
  37. MINIO_ROOT_USER: ${S3_ACCESS_KEY}
  38. MINIO_ROOT_PASSWORD: ${S3_SECRET_KEY}
  39. healthcheck:
  40. test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
  41. interval: 10s
  42. retries: 5
  43. migrations:
  44. <<: *common
  45. image: migrate/migrate:v4.17
  46. command:
  47. -path=/migrations -database "postgres://photoplaces:${DB_PASSWORD}@postgres:5432/photoplaces?sslmode=disable" up
  48. volumes:
  49. - ./backend/migrations:/migrations
  50. depends_on:
  51. postgres:
  52. condition: service_healthy
  53. backend:
  54. <<: *common
  55. build:
  56. context: ./backend
  57. dockerfile: Dockerfile
  58. ports:
  59. - "127.0.0.1:8080:8080"
  60. environment:
  61. APP_ENV: production
  62. SERVER_PORT: "8080"
  63. DATABASE_URL: postgres://photoplaces:${DB_PASSWORD}@postgres:5432/photoplaces?sslmode=disable
  64. REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379/0
  65. S3_ENDPOINT: http://minio:9000
  66. S3_PUBLIC_ENDPOINT: ${S3_PUBLIC_ENDPOINT}
  67. S3_ACCESS_KEY: ${S3_ACCESS_KEY}
  68. S3_SECRET_KEY: ${S3_SECRET_KEY}
  69. S3_BUCKET: photoplaces
  70. JWT_SECRET: ${JWT_SECRET}
  71. JWT_REFRESH_SECRET: ${JWT_REFRESH_SECRET}
  72. CLOUDPAYMENTS_PUBLIC_ID: ${CLOUDPAYMENTS_PUBLIC_ID}
  73. CLOUDPAYMENTS_API_SECRET: ${CLOUDPAYMENTS_API_SECRET}
  74. ALLOWED_ORIGINS: ${ALLOWED_ORIGINS}
  75. depends_on:
  76. migrations:
  77. condition: service_completed_successfully
  78. frontend:
  79. <<: *common
  80. build:
  81. context: ./frontend
  82. dockerfile: Dockerfile
  83. args:
  84. NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL}
  85. NEXT_PUBLIC_MAP_PROVIDER: yandex
  86. NEXT_PUBLIC_YANDEX_MAPS_API_KEY: ${YANDEX_MAPS_API_KEY}
  87. ports:
  88. - "127.0.0.1:3000:3000"
  89. depends_on:
  90. - backend
  91. volumes:
  92. pgdata:
  93. redisdata:
  94. miniodata:
  95. networks:
  96. photoplaces: