274 lines
6.0 KiB
Markdown
274 lines
6.0 KiB
Markdown
|
|
# 🐳 Docker запуск - Python Moderation Backend
|
|||
|
|
|
|||
|
|
## Быстрый запуск
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd moderation/backend-py
|
|||
|
|
./docker-start.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Скрипт автоматически:
|
|||
|
|
1. Соберет Docker образ
|
|||
|
|
2. Остановит старый контейнер (если есть)
|
|||
|
|
3. Запустит новый контейнер
|
|||
|
|
4. Покажет логи
|
|||
|
|
|
|||
|
|
## Ручной запуск
|
|||
|
|
|
|||
|
|
### 1. Сборка образа
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd moderation/backend-py
|
|||
|
|
docker build -t nakama-moderation-py .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Запуск контейнера
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
docker run -d \
|
|||
|
|
--name nakama-moderation-py \
|
|||
|
|
-p 3001:3001 \
|
|||
|
|
--env-file ../../.env \
|
|||
|
|
--restart unless-stopped \
|
|||
|
|
nakama-moderation-py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. Проверка
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Логи
|
|||
|
|
docker logs nakama-moderation-py
|
|||
|
|
|
|||
|
|
# Логи в реальном времени
|
|||
|
|
docker logs -f nakama-moderation-py
|
|||
|
|
|
|||
|
|
# Health check
|
|||
|
|
curl http://localhost:3001/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Docker Compose
|
|||
|
|
|
|||
|
|
### Вариант 1: Отдельный запуск
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd moderation/backend-py
|
|||
|
|
docker-compose -f docker-compose.moderation-py.yml up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Вариант 2: Интеграция в основной docker-compose
|
|||
|
|
|
|||
|
|
Добавьте в корневой `docker-compose.yml`:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
moderation-backend-py:
|
|||
|
|
build:
|
|||
|
|
context: ./moderation/backend-py
|
|||
|
|
dockerfile: Dockerfile
|
|||
|
|
container_name: nakama-moderation-backend-py
|
|||
|
|
restart: unless-stopped
|
|||
|
|
ports:
|
|||
|
|
- "127.0.0.1:3001:3001"
|
|||
|
|
env_file:
|
|||
|
|
- .env
|
|||
|
|
networks:
|
|||
|
|
- nakama-network
|
|||
|
|
healthcheck:
|
|||
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:3001/health')"]
|
|||
|
|
interval: 30s
|
|||
|
|
timeout: 10s
|
|||
|
|
retries: 3
|
|||
|
|
start_period: 40s
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Затем:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Из корня проекта
|
|||
|
|
docker-compose up -d moderation-backend-py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Управление контейнером
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Остановить
|
|||
|
|
docker stop nakama-moderation-py
|
|||
|
|
|
|||
|
|
# Запустить
|
|||
|
|
docker start nakama-moderation-py
|
|||
|
|
|
|||
|
|
# Перезапустить
|
|||
|
|
docker restart nakama-moderation-py
|
|||
|
|
|
|||
|
|
# Удалить
|
|||
|
|
docker rm -f nakama-moderation-py
|
|||
|
|
|
|||
|
|
# Логи
|
|||
|
|
docker logs nakama-moderation-py
|
|||
|
|
docker logs -f nakama-moderation-py # real-time
|
|||
|
|
|
|||
|
|
# Зайти в контейнер
|
|||
|
|
docker exec -it nakama-moderation-py bash
|
|||
|
|
|
|||
|
|
# Проверить статус
|
|||
|
|
docker ps | grep moderation-py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Обновление
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Пересобрать образ
|
|||
|
|
docker build -t nakama-moderation-py .
|
|||
|
|
|
|||
|
|
# Перезапустить контейнер
|
|||
|
|
docker stop nakama-moderation-py
|
|||
|
|
docker rm nakama-moderation-py
|
|||
|
|
./docker-start.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Проверка работы
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. Health check
|
|||
|
|
curl http://localhost:3001/health
|
|||
|
|
|
|||
|
|
# 2. Config
|
|||
|
|
curl http://localhost:3001/api/moderation-auth/config
|
|||
|
|
|
|||
|
|
# 3. Логи
|
|||
|
|
docker logs --tail 50 nakama-moderation-py
|
|||
|
|
|
|||
|
|
# Должны увидеть:
|
|||
|
|
# ============================================================
|
|||
|
|
# 🚀 Запуск сервера модерации (Python)...
|
|||
|
|
# ✅ MongoDB подключена (база: nakama)
|
|||
|
|
# ============================================================
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Production deployment
|
|||
|
|
|
|||
|
|
### С PM2 (если Docker не используется)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd moderation/backend-py
|
|||
|
|
source venv/bin/activate
|
|||
|
|
|
|||
|
|
pm2 start "uvicorn main:app --host 0.0.0.0 --port 3001 --workers 2" \
|
|||
|
|
--name moderation-backend-py \
|
|||
|
|
--cwd $(pwd) \
|
|||
|
|
--interpreter python3
|
|||
|
|
|
|||
|
|
pm2 save
|
|||
|
|
pm2 startup
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### С Docker в production
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Из корня проекта
|
|||
|
|
docker-compose up -d moderation-backend-py
|
|||
|
|
|
|||
|
|
# Или с отдельным compose файлом
|
|||
|
|
cd moderation/backend-py
|
|||
|
|
docker-compose -f docker-compose.moderation-py.yml up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Nginx интеграция
|
|||
|
|
|
|||
|
|
Если используете Nginx как reverse proxy, добавьте:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
upstream moderation_backend_py {
|
|||
|
|
server 127.0.0.1:3001;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server {
|
|||
|
|
listen 443 ssl http2;
|
|||
|
|
server_name moderation.nkm.guru;
|
|||
|
|
|
|||
|
|
# SSL certificates
|
|||
|
|
ssl_certificate /etc/letsencrypt/live/moderation.nkm.guru/fullchain.pem;
|
|||
|
|
ssl_certificate_key /etc/letsencrypt/live/moderation.nkm.guru/privkey.pem;
|
|||
|
|
|
|||
|
|
# API
|
|||
|
|
location /api/ {
|
|||
|
|
proxy_pass http://moderation_backend_py;
|
|||
|
|
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;
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# WebSocket
|
|||
|
|
location /socket.io/ {
|
|||
|
|
proxy_pass http://moderation_backend_py;
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Перезагрузите Nginx:
|
|||
|
|
```bash
|
|||
|
|
sudo nginx -t
|
|||
|
|
sudo systemctl reload nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Troubleshooting
|
|||
|
|
|
|||
|
|
### Контейнер не запускается
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Проверить логи
|
|||
|
|
docker logs nakama-moderation-py
|
|||
|
|
|
|||
|
|
# Проверить .env
|
|||
|
|
ls -la ../../.env
|
|||
|
|
|
|||
|
|
# Проверить MongoDB доступность
|
|||
|
|
docker run --rm mongo:7 mongosh "mongodb://103.80.87.247:27017/nakama" --eval "db.adminCommand('ping')"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Email не работает
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Войти в контейнер и проверить
|
|||
|
|
docker exec -it nakama-moderation-py python test_email.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Порт занят
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Проверить, что запущено на порту 3001
|
|||
|
|
sudo lsof -i :3001
|
|||
|
|
# или
|
|||
|
|
sudo netstat -tulpn | grep 3001
|
|||
|
|
|
|||
|
|
# Остановить Node.js версию
|
|||
|
|
pm2 stop moderation-backend
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Мониторинг
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Статус контейнера
|
|||
|
|
docker ps | grep moderation-py
|
|||
|
|
|
|||
|
|
# Использование ресурсов
|
|||
|
|
docker stats nakama-moderation-py
|
|||
|
|
|
|||
|
|
# Логи с меткой времени
|
|||
|
|
docker logs -f --timestamps nakama-moderation-py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Готово! Запускайте через `./docker-start.sh`** 🚀
|
|||
|
|
|