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
|
||
|