diff --git a/DOCKER_FIX.md b/DOCKER_FIX.md index a234f3d..85cead1 100644 --- a/DOCKER_FIX.md +++ b/DOCKER_FIX.md @@ -5,137 +5,29 @@ 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` для использования правильного пути +### 1. Исправлена nginx конфигурация +- Обновлен файл `nginx/default.conf` с полной конфигурацией включая секцию `events` +- Обновлен `docker-compose.yml` для монтирования как основной конфигурации nginx -### 2. ✅ Исправлен путь к папке данных +### 2. Исправлен путь к папке данных - В `backend/daemons.py` изменен путь с `backend/data/daemons.json` на `data/daemons.json` - Добавлена проверка существования файла пользователей -## Что нужно сделать +### 3. Создан упрощенный docker-compose +- Файл `docker-compose-simple.yml` без nginx для быстрого запуска -### Вариант 1: Обновить файлы и перезапустить +## Решения + +### Вариант 1: С исправленным nginx 1. **Скопируйте обновленные файлы**: - `backend/daemons.py` - - `nginx/default.conf` (новый файл) + - `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. **Создайте папки вручную**: +2. **Создайте папку data**: ```bash mkdir -p data touch data/users.json @@ -143,32 +35,103 @@ SECRET_KEY=your-secret-key-here 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 + docker-compose down + docker-compose up --build -d ``` +### Вариант 2: Без nginx (РЕКОМЕНДУЕТСЯ) + +1. **Используйте упрощенный docker-compose**: + ```bash + # Остановите текущие контейнеры + docker-compose down + + # Создайте папку data + mkdir -p data + touch data/users.json + touch data/tickets.json + touch data/daemons.json + + # Запустите с упрощенной конфигурацией + docker-compose -f docker-compose-simple.yml up --build -d + ``` + +2. **Панель будет доступна напрямую на порту 80** + +### Вариант 3: Быстрое исправление текущей проблемы + +Если не хотите менять файлы: + +```bash +# 1. Остановите nginx +docker-compose stop nginx + +# 2. Создайте папку data +mkdir -p data +echo '{"admin":{"username":"admin","password":"$2b$12$PAaomoUWn3Ip5ov.S/uYPeTIRiDMq7DbA57ahyYQnw3QHT2zuYMlG","role":"owner","servers":[],"permissions":{"manage_users":true,"manage_roles":true,"manage_servers":true,"manage_tickets":true,"manage_files":true,"delete_users":true,"view_all_resources":true},"resource_access":{"servers":[],"tickets":[],"files":[]}}}' > data/users.json +echo '{}' > data/tickets.json +echo '{}' > data/daemons.json + +# 3. Измените порты mc-panel в docker-compose.yml +# Замените "8000:8000" на "80:8000" + +# 4. Перезапустите только mc-panel +docker-compose up -d mc-panel +``` + +## Проверка + +После любого из вариантов: + +1. **Проверьте статус**: + ```bash + docker-compose ps + # или для упрощенной версии: + docker-compose -f docker-compose-simple.yml ps + ``` + +2. **Проверьте логи**: + ```bash + docker-compose logs mc-panel + ``` + +3. **Откройте панель**: + - Перейдите на IP сервера + - Должна открыться панель управления + - Логин: `admin`, пароль: `Admin` + +## Структура файлов + +``` +📁 Проект +├── 📁 nginx/ +│ └── default.conf # ✅ Полная nginx конфигурация +│ +├── 📁 backend/ +│ └── daemons.py # ✅ Исправлен путь к data/ +│ +├── docker-compose.yml # ✅ С nginx +├── docker-compose-simple.yml # ✅ Без nginx (рекомендуется) +│ +└── 📁 data/ # Создать вручную + ├── users.json + ├── tickets.json + └── daemons.json +``` + +## Рекомендация + +**Используйте Вариант 2 (docker-compose-simple.yml)** - это самое простое и надежное решение: + +1. Нет проблем с nginx +2. Прямой доступ к панели +3. Меньше компонентов = меньше проблем +4. Панель доступна на порту 80 + +Если нужен nginx (для SSL, доменов и т.д.), используйте Вариант 1 с исправленной конфигурацией. + --- -**После исправления панель должна работать на IP сервера через порт 80!** \ No newline at end of file +**Backend уже работает! Проблема только в nginx. Используйте упрощенную версию без nginx для быстрого запуска.** \ No newline at end of file diff --git a/docker-compose-simple.yml b/docker-compose-simple.yml new file mode 100644 index 0000000..ff93566 --- /dev/null +++ b/docker-compose-simple.yml @@ -0,0 +1,51 @@ +version: '3.8' + +services: + # MC Panel приложение + mc-panel: + build: + context: . + dockerfile: Dockerfile + container_name: mc-panel + restart: unless-stopped + ports: + - "80:8000" # Прямой доступ через порт 80 + environment: + # ZITADEL OpenID Connect + - ZITADEL_ISSUER=${ZITADEL_ISSUER} + - ZITADEL_CLIENT_ID=${ZITADEL_CLIENT_ID} + - ZITADEL_CLIENT_SECRET=${ZITADEL_CLIENT_SECRET} + + # URLs + - BASE_URL=${BASE_URL:-http://localhost} + - FRONTEND_URL=${FRONTEND_URL:-http://localhost} + + # Security + - SECRET_KEY=${SECRET_KEY:-change-this-in-production} + + # Python + - PYTHONUNBUFFERED=1 + volumes: + # Персистентное хранилище для серверов + - ./data/servers:/app/backend/servers + # Персистентное хранилище для пользователей и тикетов + - ./data/users.json:/app/backend/users.json + - ./data/tickets.json:/app/backend/tickets.json + # Папка для данных демонов + - ./data:/app/data + networks: + - mc-panel-network + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/api/auth/oidc/providers"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + +networks: + mc-panel-network: + driver: bridge + +volumes: + servers-data: + users-data: \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 467b84b..c5fe9b1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -49,7 +49,7 @@ services: - "80:80" - "443:443" volumes: - - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro + - ./nginx/default.conf:/etc/nginx/nginx.conf:ro - ./nginx/ssl:/etc/nginx/ssl:ro depends_on: - mc-panel diff --git a/nginx/default.conf b/nginx/default.conf index a2bef1e..3508a03 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -1,62 +1,78 @@ -upstream mc_panel { - server mc-panel:8000; +events { + worker_connections 1024; } -server { - listen 80; - server_name _; +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; 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; + upstream mc_panel { + server mc-panel:8000; } - # 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; - } + server { + listen 80; + server_name _; - # Статические файлы фронтенда - 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; - } + # 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; + } - # Health check - location /health { - access_log off; - return 200 "healthy\n"; - add_header Content-Type text/plain; + # 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