2025-11-20 21:32:48 +00:00
|
|
|
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}
|
2025-11-20 22:07:37 +00:00
|
|
|
# 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}
|
2025-11-20 21:32:48 +00:00
|
|
|
volumes:
|
2025-11-20 22:07:37 +00:00
|
|
|
# Fallback локальное хранилище (если MinIO недоступен)
|
|
|
|
|
- nakama-media:/app/backend/uploads
|
2025-11-20 21:32:48 +00:00
|
|
|
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
|
|
|
|
|
|
2025-12-08 23:42:32 +00:00
|
|
|
moderation-backend:
|
|
|
|
|
build:
|
|
|
|
|
context: .
|
|
|
|
|
dockerfile: Dockerfile.moderation-backend
|
|
|
|
|
container_name: nakama-moderation-backend
|
|
|
|
|
restart: unless-stopped
|
2025-12-09 00:51:07 +00:00
|
|
|
ports:
|
|
|
|
|
- "127.0.0.1:3001:3001" # Проброс порта на хост для Nginx
|
2025-12-08 23:42:32 +00:00
|
|
|
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:
|
2025-11-20 21:32:48 +00:00
|
|
|
build:
|
|
|
|
|
context: .
|
|
|
|
|
dockerfile: Dockerfile.moderation
|
|
|
|
|
args:
|
2025-12-08 23:42:32 +00:00
|
|
|
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
|
2025-11-20 21:32:48 +00:00
|
|
|
restart: unless-stopped
|
|
|
|
|
ports:
|
2025-12-08 23:42:32 +00:00
|
|
|
- "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
|
2025-11-20 21:32:48 +00:00
|
|
|
networks:
|
|
|
|
|
- nakama-network
|
|
|
|
|
depends_on:
|
2025-12-08 23:42:32 +00:00
|
|
|
- moderation-backend
|
|
|
|
|
- moderation-frontend
|
2025-11-20 21:32:48 +00:00
|
|
|
|
2025-12-08 13:49:40 +00:00
|
|
|
# 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
|
2025-11-20 21:32:48 +00:00
|
|
|
|
|
|
|
|
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
|
2025-12-08 13:49:40 +00:00
|
|
|
# MongoDB на удаленном сервере, depends_on не нужен
|
|
|
|
|
# depends_on:
|
|
|
|
|
# - mongodb
|
2025-11-20 21:32:48 +00:00
|
|
|
entrypoint: /bin/bash
|
|
|
|
|
command: -c "echo 'Backup container ready. Run manual backups or set up cron.'"
|
|
|
|
|
|
2025-11-20 22:07:37 +00:00
|
|
|
# MinIO запущен на отдельном сервере 103.80.87.247
|
|
|
|
|
# Локальный MinIO не нужен
|
|
|
|
|
|
2025-11-20 21:32:48 +00:00
|
|
|
networks:
|
|
|
|
|
nakama-network:
|
|
|
|
|
driver: bridge
|
|
|
|
|
|
|
|
|
|
volumes:
|
2025-12-08 13:49:40 +00:00
|
|
|
# nakama-db больше не нужен, так как MongoDB на удаленном сервере
|
|
|
|
|
# nakama-db:
|
|
|
|
|
# driver: local
|
2025-11-20 21:32:48 +00:00
|
|
|
nakama-media:
|
|
|
|
|
driver: local
|
|
|
|
|
nakama-backups:
|
|
|
|
|
driver: local
|
|
|
|
|
|