fix(docker): resolve nginx and backend path configuration issues
All checks were successful
continuous-integration/drone/push Build is passing
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:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -17,6 +17,7 @@ dist/
|
|||||||
# Servers
|
# Servers
|
||||||
backend/servers/
|
backend/servers/
|
||||||
backend/.env.exemple
|
backend/.env.exemple
|
||||||
|
servers
|
||||||
|
|
||||||
# IDE
|
# IDE
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|||||||
174
DOCKER_FIX.md
Normal file
174
DOCKER_FIX.md
Normal 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!**
|
||||||
@@ -15,11 +15,16 @@ router = APIRouter()
|
|||||||
security = HTTPBearer(auto_error=False)
|
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)
|
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)
|
# Настройки JWT (должны совпадать с main.py)
|
||||||
SECRET_KEY = "your-secret-key-change-this-in-production-12345"
|
SECRET_KEY = "your-secret-key-change-this-in-production-12345"
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ services:
|
|||||||
- "80:80"
|
- "80:80"
|
||||||
- "443:443"
|
- "443:443"
|
||||||
volumes:
|
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
|
- ./nginx/ssl:/etc/nginx/ssl:ro
|
||||||
depends_on:
|
depends_on:
|
||||||
- mc-panel
|
- mc-panel
|
||||||
|
|||||||
62
nginx/default.conf
Normal file
62
nginx/default.conf
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user