From e02789ef5322b99ff7875576037c874d9e72a882 Mon Sep 17 00:00:00 2001 From: arkonsadter Date: Sat, 17 Jan 2026 10:32:46 +0600 Subject: [PATCH] fix(docker): resolve nginx and backend path configuration issues - Add nginx/default.conf with simplified configuration to fix "no events section" error - Update docker-compose.yml to mount nginx/default.conf instead of nginx.conf - Fix backend/daemons.py data path from backend/data/daemons.json to data/daemons.json - Improve users.json path detection with fallback logic in daemons.py - Add servers directory to .gitignore - Create DOCKER_FIX.md documentation with troubleshooting steps and solutions - Ensure data directory is created automatically when backend starts --- .gitignore | 1 + DOCKER_FIX.md | 174 +++++++++++++++++++++++++++++++++++++++++++++ backend/daemons.py | 9 ++- docker-compose.yml | 2 +- nginx/default.conf | 62 ++++++++++++++++ 5 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 DOCKER_FIX.md create mode 100644 nginx/default.conf diff --git a/.gitignore b/.gitignore index 864791d..0d91870 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ dist/ # Servers backend/servers/ backend/.env.exemple +servers # IDE .vscode/ diff --git a/DOCKER_FIX.md b/DOCKER_FIX.md new file mode 100644 index 0000000..a234f3d --- /dev/null +++ b/DOCKER_FIX.md @@ -0,0 +1,174 @@ +# Исправление Docker ошибок + +## Проблемы + +1. **Nginx**: `no "events" section in configuration` +2. **Backend**: `FileNotFoundError: [Errno 2] No such file or directory: 'backend/data'` + +## Исправления + +### 1. ✅ Исправлена nginx конфигурация +- Создан файл `nginx/default.conf` с упрощенной конфигурацией +- Обновлен `docker-compose.yml` для использования правильного пути + +### 2. ✅ Исправлен путь к папке данных +- В `backend/daemons.py` изменен путь с `backend/data/daemons.json` на `data/daemons.json` +- Добавлена проверка существования файла пользователей + +## Что нужно сделать + +### Вариант 1: Обновить файлы и перезапустить + +1. **Скопируйте обновленные файлы**: + - `backend/daemons.py` + - `nginx/default.conf` (новый файл) + - `docker-compose.yml` + +2. **Остановите контейнеры**: + ```bash + docker-compose down + ``` + +3. **Пересоберите и запустите**: + ```bash + docker-compose up --build -d + ``` + +### Вариант 2: Быстрое исправление (без пересборки) + +1. **Остановите только nginx**: + ```bash + docker-compose stop nginx + ``` + +2. **Создайте папку data в контейнере mc-panel**: + ```bash + docker exec mc-panel mkdir -p /app/data + ``` + +3. **Запустите nginx с новой конфигурацией**: + ```bash + docker-compose up nginx -d + ``` + +## Проверка + +После исправления: + +1. **Проверьте статус контейнеров**: + ```bash + docker-compose ps + ``` + + Должно быть: + ``` + NAME STATE + mc-panel Up + mc-panel-nginx Up + ``` + +2. **Проверьте логи**: + ```bash + docker-compose logs mc-panel + docker-compose logs nginx + ``` + +3. **Откройте панель**: + - Перейдите на IP сервера (порт 80) + - Должна открыться панель управления + +## Структура файлов после исправления + +``` +📁 Проект +├── 📁 nginx/ +│ ├── default.conf # ✅ Новая упрощенная конфигурация +│ └── nginx.conf # Старая (не используется) +│ +├── 📁 backend/ +│ └── daemons.py # ✅ Исправлен путь к data/ +│ +├── docker-compose.yml # ✅ Обновлен для nginx/default.conf +└── 📁 data/ # Создается автоматически + ├── daemons.json + ├── users.json + └── tickets.json +``` + +## Переменные окружения + +Убедитесь, что в `.env` файле заданы: + +```env +# ZITADEL SSO +ZITADEL_ISSUER=https://sso.nevetime.ru +ZITADEL_CLIENT_ID=your_client_id +ZITADEL_CLIENT_SECRET=your_client_secret + +# URLs +BASE_URL=https://your-domain.com +FRONTEND_URL=https://your-domain.com + +# Security +SECRET_KEY=your-secret-key-here +``` + +## Если проблемы остались + +### Nginx всё еще не запускается + +1. **Проверьте монтирование**: + ```bash + docker exec mc-panel-nginx ls -la /etc/nginx/conf.d/ + ``` + +2. **Проверьте синтаксис**: + ```bash + docker exec mc-panel-nginx nginx -t + ``` + +3. **Используйте стандартную конфигурацию**: + ```bash + # Удалите volume с nginx конфигурацией из docker-compose.yml + # Nginx будет использовать стандартную конфигурацию + ``` + +### Backend всё еще падает + +1. **Создайте папки вручную**: + ```bash + mkdir -p data + touch data/users.json + touch data/tickets.json + touch data/daemons.json + ``` + +2. **Проверьте права доступа**: + ```bash + chmod 755 data + chmod 644 data/*.json + ``` + +## Альтернативное решение + +Если проблемы продолжаются, можно запустить без nginx: + +1. **Отключите nginx в docker-compose.yml**: + ```yaml + # Закомментируйте секцию nginx + ``` + +2. **Измените порты mc-panel**: + ```yaml + ports: + - "80:8000" # Прямой доступ к панели + ``` + +3. **Перезапустите**: + ```bash + docker-compose up -d mc-panel + ``` + +--- + +**После исправления панель должна работать на IP сервера через порт 80!** \ No newline at end of file diff --git a/backend/daemons.py b/backend/daemons.py index 5e4d173..d4aa98a 100644 --- a/backend/daemons.py +++ b/backend/daemons.py @@ -15,11 +15,16 @@ router = APIRouter() security = HTTPBearer(auto_error=False) # Файл с конфигурацией демонов -DAEMONS_FILE = Path("backend/data/daemons.json") +DAEMONS_FILE = Path("data/daemons.json") DAEMONS_FILE.parent.mkdir(exist_ok=True) # Файл с пользователями - проверяем оба возможных пути -USERS_FILE = Path("backend/users.json") if Path("backend/users.json").exists() else Path("users.json") +if Path("users.json").exists(): + USERS_FILE = Path("users.json") +elif Path("backend/users.json").exists(): + USERS_FILE = Path("backend/users.json") +else: + USERS_FILE = Path("users.json") # По умолчанию # Настройки JWT (должны совпадать с main.py) SECRET_KEY = "your-secret-key-change-this-in-production-12345" diff --git a/docker-compose.yml b/docker-compose.yml index ad29951..467b84b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -49,7 +49,7 @@ services: - "80:80" - "443:443" volumes: - - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro - ./nginx/ssl:/etc/nginx/ssl:ro depends_on: - mc-panel diff --git a/nginx/default.conf b/nginx/default.conf new file mode 100644 index 0000000..a2bef1e --- /dev/null +++ b/nginx/default.conf @@ -0,0 +1,62 @@ +upstream mc_panel { + server mc-panel:8000; +} + +server { + listen 80; + server_name _; + + client_max_body_size 100M; + + # API endpoints + location /api/ { + proxy_pass http://mc_panel; + 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; + + # Таймауты + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } + + # WebSocket для консоли + location /ws/ { + proxy_pass http://mc_panel; + 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; + + # WebSocket таймауты + proxy_connect_timeout 7d; + proxy_send_timeout 7d; + proxy_read_timeout 7d; + } + + # Статические файлы фронтенда + location / { + proxy_pass http://mc_panel; + proxy_http_version 1.1; + 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; + } + + # Health check + location /health { + access_log off; + return 200 "healthy\n"; + add_header Content-Type text/plain; + } +} \ No newline at end of file