version: '3.8' services: backend: build: context: . dockerfile: Dockerfile.backend container_name: nakama-backend restart: unless-stopped ports: - "3000:3000" environment: - NODE_ENV=production - PORT=3000 - MONGODB_URI=${MONGODB_URI:-mongodb://103.80.87.247:27017/nakama} - JWT_SECRET=${JWT_SECRET} - JWT_ACCESS_SECRET=${JWT_ACCESS_SECRET} - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET} - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} - MODERATION_BOT_TOKEN=${MODERATION_BOT_TOKEN} - MODERATION_OWNER_USERNAMES=${MODERATION_OWNER_USERNAMES:-glpshchn00} - MODERATION_CHANNEL_USERNAME=${MODERATION_CHANNEL_USERNAME:-@reichenbfurry} - GELBOORU_API_KEY=${GELBOORU_API_KEY} - GELBOORU_USER_ID=${GELBOORU_USER_ID} - FRONTEND_URL=${FRONTEND_URL:-http://localhost:5173} - CORS_ORIGIN=${CORS_ORIGIN:-*} - REDIS_URL=${REDIS_URL} # MinIO Configuration (подключение к внешнему серверу) - MINIO_ENABLED=${MINIO_ENABLED:-true} - MINIO_ENDPOINT=${MINIO_ENDPOINT:-103.80.87.247} - MINIO_PORT=${MINIO_PORT:-9000} - MINIO_USE_SSL=${MINIO_USE_SSL:-false} - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY} - MINIO_SECRET_KEY=${MINIO_SECRET_KEY} - MINIO_BUCKET=${MINIO_BUCKET:-nakama-media} - MINIO_REGION=${MINIO_REGION:-us-east-1} - MINIO_PUBLIC_URL=${MINIO_PUBLIC_URL} volumes: # Fallback локальное хранилище (если MinIO недоступен) - nakama-media:/app/backend/uploads networks: - nakama-network healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"] interval: 30s timeout: 10s retries: 3 start_period: 40s frontend: build: context: . dockerfile: Dockerfile.frontend args: VITE_API_URL: ${VITE_API_URL:-http://localhost:3000/api} container_name: nakama-frontend restart: unless-stopped ports: - "5173:80" networks: - nakama-network depends_on: - backend moderation-backend: build: context: . dockerfile: Dockerfile.moderation-backend container_name: nakama-moderation-backend restart: unless-stopped ports: - "127.0.0.1:3001:3001" # Проброс порта на хост для Nginx environment: - NODE_ENV=production - PORT=3001 - MODERATION_PORT=3001 - MONGODB_URI=${MONGODB_URI:-mongodb://103.80.87.247:27017/nakama} - MODERATION_BOT_TOKEN=${MODERATION_BOT_TOKEN} - MODERATION_OWNER_USERNAMES=${MODERATION_OWNER_USERNAMES:-glpshchn00} - MODERATION_CORS_ORIGIN=${MODERATION_CORS_ORIGIN:-https://moderation.nkm.guru} - JWT_SECRET=${JWT_SECRET} - JWT_ACCESS_SECRET=${JWT_ACCESS_SECRET} - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET} - REDIS_URL=${REDIS_URL} - EMAIL_PROVIDER=${EMAIL_PROVIDER:-aws} - EMAIL_FROM=${EMAIL_FROM:-noreply@nakama.guru} - AWS_SES_ACCESS_KEY_ID=${AWS_SES_ACCESS_KEY_ID} - AWS_SES_SECRET_ACCESS_KEY=${AWS_SES_SECRET_ACCESS_KEY} - AWS_SES_REGION=${AWS_SES_REGION:-us-east-1} - YANDEX_SMTP_USER=${YANDEX_SMTP_USER} - YANDEX_SMTP_PASSWORD=${YANDEX_SMTP_PASSWORD} - SMTP_HOST=${SMTP_HOST} - SMTP_PORT=${SMTP_PORT} - SMTP_USER=${SMTP_USER} - SMTP_PASSWORD=${SMTP_PASSWORD} - SMTP_SECURE=${SMTP_SECURE:-false} # MinIO Configuration - MINIO_ENABLED=${MINIO_ENABLED:-true} - MINIO_ENDPOINT=${MINIO_ENDPOINT:-103.80.87.247} - MINIO_PORT=${MINIO_PORT:-9000} - MINIO_USE_SSL=${MINIO_USE_SSL:-false} - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY} - MINIO_SECRET_KEY=${MINIO_SECRET_KEY} - MINIO_BUCKET=${MINIO_BUCKET:-nakama-media} networks: - nakama-network healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:3001/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"] interval: 30s timeout: 10s retries: 3 start_period: 40s moderation-frontend: build: context: . dockerfile: Dockerfile.moderation args: VITE_API_URL: ${VITE_MODERATION_API_URL:-https://moderation.nkm.guru/api} container_name: nakama-moderation-frontend restart: unless-stopped expose: - "80" networks: - nakama-network depends_on: - moderation-backend nginx-moderation: image: nginx:alpine container_name: nakama-nginx-moderation restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx-moderation-production.conf:/etc/nginx/conf.d/default.conf:ro - /etc/letsencrypt:/etc/letsencrypt:ro - /var/www/certbot:/var/www/certbot:ro - /var/log/nginx:/var/log/nginx networks: - nakama-network depends_on: - moderation-backend - moderation-frontend # MongoDB находится на удаленном сервере (103.80.87.247:27017) # Локальный MongoDB контейнер не нужен # mongodb: # image: mongo:7 # container_name: nakama-mongodb # restart: unless-stopped # ports: # - "27017:27017" # environment: # - MONGO_INITDB_DATABASE=nakama # volumes: # - /mnt/nakama-db:/data/db # networks: # - nakama-network # command: mongod --bind_ip_all backup: image: mongo:7 container_name: nakama-backup restart: "no" environment: - MONGODB_URI=${MONGODB_URI:-mongodb://103.80.87.247:27017/nakama} volumes: - /mnt/nakama-backups:/backups - ./backend/scripts/backup.js:/backup.js networks: - nakama-network # MongoDB на удаленном сервере, depends_on не нужен # depends_on: # - mongodb entrypoint: /bin/bash command: -c "echo 'Backup container ready. Run manual backups or set up cron.'" # MinIO запущен на отдельном сервере 103.80.87.247 # Локальный MinIO не нужен networks: nakama-network: driver: bridge volumes: # nakama-db больше не нужен, так как MongoDB на удаленном сервере # nakama-db: # driver: local nakama-media: driver: local nakama-backups: driver: local