nakama/DEPLOYMENT_GUIDE.md

478 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 Руководство по развертыванию 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