nakama/DEPLOYMENT_GUIDE.md

478 lines
12 KiB
Markdown
Raw Normal View History

2025-11-20 21:32:48 +00:00
# 🚀 Руководство по развертыванию 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