fix(docker): resolve nginx and backend path configuration issues
All checks were successful
continuous-integration/drone/push Build is passing

- 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
This commit is contained in:
2026-01-17 10:32:46 +06:00
parent d188cec1f0
commit e02789ef53
5 changed files with 245 additions and 3 deletions

1
.gitignore vendored
View File

@@ -17,6 +17,7 @@ dist/
# Servers
backend/servers/
backend/.env.exemple
servers
# IDE
.vscode/

174
DOCKER_FIX.md Normal file
View File

@@ -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!**

View File

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

View File

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

62
nginx/default.conf Normal file
View File

@@ -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;
}
}