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