128 lines
3.6 KiB
YAML
128 lines
3.6 KiB
YAML
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
|
|
depends_on:
|
|
- mongodb
|
|
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:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.moderation
|
|
args:
|
|
VITE_API_URL: ${VITE_API_URL:-http://localhost:3000/api}
|
|
container_name: nakama-moderation
|
|
restart: unless-stopped
|
|
ports:
|
|
- "5174:80"
|
|
networks:
|
|
- nakama-network
|
|
depends_on:
|
|
- backend
|
|
|
|
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
|
|
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:
|
|
driver: local
|
|
nakama-media:
|
|
driver: local
|
|
nakama-backups:
|
|
driver: local
|
|
|