nakama/DEPLOYMENT_GUIDE.md

12 KiB
Raw Blame History

🚀 Руководство по развертыванию Nakama

📋 Содержание

  1. Требования
  2. Настройка удаленного сервера
  3. Настройка базы данных
  4. Настройка автоматических бекапов
  5. Развертывание с Docker
  6. Настройка nginx
  7. Мониторинг и обслуживание

Требования

Локальный сервер (где запускается приложение)

  • Docker 20.10+
  • Docker Compose 2.0+
  • SSHFS (для монтирования удаленных директорий)
  • 2GB+ RAM
  • 10GB+ свободного места на диске

Удаленный сервер (103.80.87.247)

  • SSH доступ
  • MongoDB 7+
  • 50GB+ свободного места для базы данных и медиа
  • Открытый порт 27017 для MongoDB

🗄️ Настройка удаленного сервера

1. Подключение по SSH

ssh root@103.80.87.247

2. Установка MongoDB

# Обновить систему
apt update && apt upgrade -y

# Импортировать GPG ключ MongoDB
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
   sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor

# Добавить репозиторий MongoDB
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | \
   sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

# Установить MongoDB
apt update
apt install -y mongodb-org

# Запустить MongoDB
systemctl start mongod
systemctl enable mongod

3. Настройка MongoDB для удаленного доступа

# Редактировать конфигурацию
nano /etc/mongod.conf

Изменить bindIp:

net:
  port: 27017
  bindIp: 0.0.0.0  # Разрешить подключения со всех IP

Настроить аутентификацию (рекомендуется):

# Подключиться к MongoDB
mongosh

# Создать администратора
use admin
db.createUser({
  user: "admin",
  pwd: "your_secure_password",
  roles: [ { role: "root", db: "admin" } ]
})

# Создать пользователя для приложения
use nakama
db.createUser({
  user: "nakama_user",
  pwd: "your_app_password",
  roles: [ { role: "readWrite", db: "nakama" } ]
})

Перезапустить MongoDB:

systemctl restart mongod

4. Создание директорий для хранения данных

# Создать директории
mkdir -p /var/nakama/media
mkdir -p /var/nakama/db
mkdir -p /var/nakama/backups

# Установить права доступа
chmod -R 755 /var/nakama

💾 Настройка базы данных

Строка подключения

Обновите .env файл:

# Без аутентификации
MONGODB_URI=mongodb://103.80.87.247:27017/nakama

# С аутентификацией
MONGODB_URI=mongodb://nakama_user:your_app_password@103.80.87.247:27017/nakama

🔄 Настройка автоматических бекапов

1. Установка cron на удаленном сервере

# Скопировать скрипт бекапа на удаленный сервер
scp backup-cron.sh root@103.80.87.247:/usr/local/bin/

# Подключиться к удаленному серверу
ssh root@103.80.87.247

# Сделать скрипт исполняемым
chmod +x /usr/local/bin/backup-cron.sh

# Открыть crontab
crontab -e

2. Добавить задачу в crontab

Добавьте следующую строку для запуска бекапа каждое воскресенье в 3:00 ночи:

0 3 * * 0 /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1

Для ежедневных бекапов в 3:00 ночи:

0 3 * * * /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1

3. Проверка работы бекапов

# Запустить бекап вручную
/usr/local/bin/backup-cron.sh

# Проверить созданные бекапы
ls -lh /var/nakama/backups/

# Просмотреть лог
tail -f /var/log/nakama-backup.log

4. Восстановление из бекапа

# Распаковать бекап
cd /var/nakama/backups
tar -xzf nakama_backup_YYYY-MM-DD_HH-MM-SS.tar.gz

# Восстановить базу данных
mongorestore --uri="mongodb://103.80.87.247:27017" --gzip --db nakama nakama_backup_YYYY-MM-DD_HH-MM-SS/nakama/

🐳 Развертывание с Docker

1. Подготовка

cd /Users/glpshchn/Desktop/nakama

# Скопировать и настроить .env
cp .env.example .env
nano .env  # Заполнить необходимые переменные

2. Монтирование удаленных директорий (опционально)

Если вы хотите хранить медиа и бекапы на удаленном сервере:

# Запустить скрипт настройки
./setup-remote-storage.sh

3. Сборка и запуск контейнеров

# Собрать все сервисы
docker-compose build

# Запустить в фоновом режиме
docker-compose up -d

# Проверить статус
docker-compose ps

# Просмотреть логи
docker-compose logs -f

4. Проверка работы

# Проверить backend
curl http://localhost:3000/health

# Проверить frontend
curl http://localhost:5173

# Проверить moderation
curl http://localhost:5174

5. Остановка и обновление

# Остановить все сервисы
docker-compose down

# Пересобрать и перезапустить
docker-compose up -d --build

# Перезапустить конкретный сервис
docker-compose restart backend

🌐 Настройка nginx (reverse proxy)

Конфигурация для production

Создайте файл /etc/nginx/sites-available/nakama:

# Frontend (основное приложение)
server {
    listen 80;
    server_name nakama.yourdomain.com;
    
    location / {
        proxy_pass http://localhost:5173;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

# Moderation (система модерации)
server {
    listen 80;
    server_name mod.nakama.yourdomain.com;
    
    location / {
        proxy_pass http://localhost:5174;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

# Backend API
server {
    listen 80;
    server_name api.nakama.yourdomain.com;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
        
        # WebSocket support
        proxy_read_timeout 86400;
    }
}

Активировать конфигурацию:

# Создать символическую ссылку
ln -s /etc/nginx/sites-available/nakama /etc/nginx/sites-enabled/

# Проверить конфигурацию
nginx -t

# Перезапустить nginx
systemctl restart nginx

SSL сертификаты (Let's Encrypt)

# Установить certbot
apt install certbot python3-certbot-nginx

# Получить сертификаты
certbot --nginx -d nakama.yourdomain.com -d mod.nakama.yourdomain.com -d api.nakama.yourdomain.com

# Автоматическое обновление
certbot renew --dry-run

📊 Мониторинг и обслуживание

Просмотр логов

# Логи backend
docker-compose logs -f backend

# Логи всех сервисов
docker-compose logs -f

# Логи MongoDB на удаленном сервере
ssh root@103.80.87.247 'tail -f /var/log/mongodb/mongod.log'

Мониторинг ресурсов

# Использование Docker контейнеров
docker stats

# Использование диска
df -h

# Статус MongoDB (на удаленном сервере)
ssh root@103.80.87.247 'systemctl status mongod'

Обновление приложения

# 1. Создать бекап
./backup-cron.sh

# 2. Получить обновления
git pull

# 3. Остановить контейнеры
docker-compose down

# 4. Пересобрать и запустить
docker-compose up -d --build

# 5. Проверить работу
docker-compose ps
docker-compose logs -f

Очистка

# Удалить неиспользуемые образы
docker image prune -a

# Удалить неиспользуемые volumes
docker volume prune

# Полная очистка Docker
docker system prune -a --volumes

🔧 Решение проблем

База данных недоступна

# Проверить подключение к MongoDB
mongosh --host 103.80.87.247 --port 27017

# Проверить статус MongoDB на удаленном сервере
ssh root@103.80.87.247 'systemctl status mongod'

# Проверить логи
ssh root@103.80.87.247 'tail -100 /var/log/mongodb/mongod.log'

Контейнеры не запускаются

# Проверить логи
docker-compose logs

# Пересоздать контейнеры
docker-compose down -v
docker-compose up -d --force-recreate

Проблемы с медиа

# Проверить монтирование директорий
df -h | grep nakama

# Проверить права доступа
ls -la /mnt/nakama-media

📝 Дополнительные команды

Создание ручного бекапа

docker-compose exec mongodb mongodump --uri="mongodb://103.80.87.247:27017/nakama" --out=/backups/manual_backup

Экспорт/импорт данных

# Экспорт коллекции
docker-compose exec mongodb mongoexport --uri="mongodb://103.80.87.247:27017/nakama" --collection=posts --out=/backups/posts.json

# Импорт коллекции
docker-compose exec mongodb mongoimport --uri="mongodb://103.80.87.247:27017/nakama" --collection=posts --file=/backups/posts.json

Масштабирование

Для горизонтального масштабирования backend:

docker-compose up -d --scale backend=3

📞 Поддержка

При возникновении проблем:

  1. Проверьте логи: docker-compose logs -f
  2. Проверьте статус сервисов: docker-compose ps
  3. Создайте issue на GitHub или напишите в https://t.me/NakamaReportbot