# 🚀 Руководство по развертыванию Nakama ## 📋 Содержание 1. [Требования](#требования) 2. [Настройка удаленного сервера](#настройка-удаленного-сервера) 3. [Настройка базы данных](#настройка-базы-данных) 4. [Настройка автоматических бекапов](#настройка-автоматических-бекапов) 5. [Развертывание с Docker](#развертывание-с-docker) 6. [Настройка nginx](#настройка-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 ```bash ssh root@103.80.87.247 ``` ### 2. Установка MongoDB ```bash # Обновить систему 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 для удаленного доступа ```bash # Редактировать конфигурацию nano /etc/mongod.conf ``` Изменить `bindIp`: ```yaml net: port: 27017 bindIp: 0.0.0.0 # Разрешить подключения со всех IP ``` Настроить аутентификацию (рекомендуется): ```bash # Подключиться к 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: ```bash systemctl restart mongod ``` ### 4. Создание директорий для хранения данных ```bash # Создать директории mkdir -p /var/nakama/media mkdir -p /var/nakama/db mkdir -p /var/nakama/backups # Установить права доступа chmod -R 755 /var/nakama ``` --- ## 💾 Настройка базы данных ### Строка подключения Обновите `.env` файл: ```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 на удаленном сервере ```bash # Скопировать скрипт бекапа на удаленный сервер 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 ночи: ```cron 0 3 * * 0 /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1 ``` Для ежедневных бекапов в 3:00 ночи: ```cron 0 3 * * * /usr/local/bin/backup-cron.sh >> /var/log/nakama-backup.log 2>&1 ``` ### 3. Проверка работы бекапов ```bash # Запустить бекап вручную /usr/local/bin/backup-cron.sh # Проверить созданные бекапы ls -lh /var/nakama/backups/ # Просмотреть лог tail -f /var/log/nakama-backup.log ``` ### 4. Восстановление из бекапа ```bash # Распаковать бекап 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. Подготовка ```bash cd /Users/glpshchn/Desktop/nakama # Скопировать и настроить .env cp .env.example .env nano .env # Заполнить необходимые переменные ``` ### 2. Монтирование удаленных директорий (опционально) Если вы хотите хранить медиа и бекапы на удаленном сервере: ```bash # Запустить скрипт настройки ./setup-remote-storage.sh ``` ### 3. Сборка и запуск контейнеров ```bash # Собрать все сервисы docker-compose build # Запустить в фоновом режиме docker-compose up -d # Проверить статус docker-compose ps # Просмотреть логи docker-compose logs -f ``` ### 4. Проверка работы ```bash # Проверить backend curl http://localhost:3000/health # Проверить frontend curl http://localhost:5173 # Проверить moderation curl http://localhost:5174 ``` ### 5. Остановка и обновление ```bash # Остановить все сервисы docker-compose down # Пересобрать и перезапустить docker-compose up -d --build # Перезапустить конкретный сервис docker-compose restart backend ``` --- ## 🌐 Настройка nginx (reverse proxy) ### Конфигурация для production Создайте файл `/etc/nginx/sites-available/nakama`: ```nginx # 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; } } ``` Активировать конфигурацию: ```bash # Создать символическую ссылку ln -s /etc/nginx/sites-available/nakama /etc/nginx/sites-enabled/ # Проверить конфигурацию nginx -t # Перезапустить nginx systemctl restart nginx ``` ### SSL сертификаты (Let's Encrypt) ```bash # Установить 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 ``` --- ## 📊 Мониторинг и обслуживание ### Просмотр логов ```bash # Логи backend docker-compose logs -f backend # Логи всех сервисов docker-compose logs -f # Логи MongoDB на удаленном сервере ssh root@103.80.87.247 'tail -f /var/log/mongodb/mongod.log' ``` ### Мониторинг ресурсов ```bash # Использование Docker контейнеров docker stats # Использование диска df -h # Статус MongoDB (на удаленном сервере) ssh root@103.80.87.247 'systemctl status mongod' ``` ### Обновление приложения ```bash # 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 ``` ### Очистка ```bash # Удалить неиспользуемые образы docker image prune -a # Удалить неиспользуемые volumes docker volume prune # Полная очистка Docker docker system prune -a --volumes ``` --- ## 🔧 Решение проблем ### База данных недоступна ```bash # Проверить подключение к 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' ``` ### Контейнеры не запускаются ```bash # Проверить логи docker-compose logs # Пересоздать контейнеры docker-compose down -v docker-compose up -d --force-recreate ``` ### Проблемы с медиа ```bash # Проверить монтирование директорий df -h | grep nakama # Проверить права доступа ls -la /mnt/nakama-media ``` --- ## 📝 Дополнительные команды ### Создание ручного бекапа ```bash docker-compose exec mongodb mongodump --uri="mongodb://103.80.87.247:27017/nakama" --out=/backups/manual_backup ``` ### Экспорт/импорт данных ```bash # Экспорт коллекции 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: ```bash docker-compose up -d --scale backend=3 ``` --- ## 📞 Поддержка При возникновении проблем: 1. Проверьте логи: `docker-compose logs -f` 2. Проверьте статус сервисов: `docker-compose ps` 3. Создайте issue на GitHub или напишите в https://t.me/NakamaReportbot