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