fix(docker): simplify deployment with nginx fixes and alternative compose config
All checks were successful
continuous-integration/drone/push Build is passing

- Update nginx/default.conf with complete configuration including events section
- Add docker-compose-simple.yml for simplified deployment without nginx
- Update docker-compose.yml to properly mount nginx configuration
- Revise DOCKER_FIX.md with clearer instructions and recommended solutions
- Provide three deployment variants: with nginx, without nginx (recommended), and quick fix
- Include data folder structure and environment setup documentation
This change addresses nginx configuration errors and FileNotFoundError by providing both a corrected nginx setup and a simplified alternative deployment method without nginx for faster troubleshooting and deployment.
This commit is contained in:
2026-01-17 10:50:00 +06:00
parent e02789ef53
commit c0125f3962
4 changed files with 225 additions and 195 deletions

View File

@@ -5,137 +5,29 @@
1. **Nginx**: `no "events" section in configuration` 1. **Nginx**: `no "events" section in configuration`
2. **Backend**: `FileNotFoundError: [Errno 2] No such file or directory: 'backend/data'` 2. **Backend**: `FileNotFoundError: [Errno 2] No such file or directory: 'backend/data'`
## Исправления ## Исправления сделаны
### 1. Исправлена nginx конфигурация ### 1. Исправлена nginx конфигурация
- Создан файл `nginx/default.conf` с упрощенной конфигурацией - Обновлен файл `nginx/default.conf` с полной конфигурацией включая секцию `events`
- Обновлен `docker-compose.yml` для использования правильного пути - Обновлен `docker-compose.yml` для монтирования как основной конфигурации nginx
### 2. Исправлен путь к папке данных ### 2. Исправлен путь к папке данных
- В `backend/daemons.py` изменен путь с `backend/data/daemons.json` на `data/daemons.json` - В `backend/daemons.py` изменен путь с `backend/data/daemons.json` на `data/daemons.json`
- Добавлена проверка существования файла пользователей - Добавлена проверка существования файла пользователей
## Что нужно сделать ### 3. Создан упрощенный docker-compose
- Файл `docker-compose-simple.yml` без nginx для быстрого запуска
### Вариант 1: Обновить файлы и перезапустить ## Решения
### Вариант 1: С исправленным nginx
1. **Скопируйте обновленные файлы**: 1. **Скопируйте обновленные файлы**:
- `backend/daemons.py` - `backend/daemons.py`
- `nginx/default.conf` (новый файл) - `nginx/default.conf`
- `docker-compose.yml` - `docker-compose.yml`
2. **Остановите контейнеры**: 2. **Создайте папку data**:
```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 ```bash
mkdir -p data mkdir -p data
touch data/users.json touch data/users.json
@@ -143,32 +35,103 @@ SECRET_KEY=your-secret-key-here
touch data/daemons.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. **Перезапустите**: 3. **Перезапустите**:
```bash ```bash
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 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!** **Backend уже работает! Проблема только в nginx. Используйте упрощенную версию без nginx для быстрого запуска.**

51
docker-compose-simple.yml Normal file
View File

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

View File

@@ -49,7 +49,7 @@ services:
- "80:80" - "80:80"
- "443:443" - "443:443"
volumes: 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 - ./nginx/ssl:/etc/nginx/ssl:ro
depends_on: depends_on:
- mc-panel - mc-panel

View File

@@ -1,3 +1,20 @@
events {
worker_connections 1024;
}
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;
upstream mc_panel { upstream mc_panel {
server mc-panel:8000; server mc-panel:8000;
} }
@@ -6,8 +23,6 @@ server {
listen 80; listen 80;
server_name _; server_name _;
client_max_body_size 100M;
# API endpoints # API endpoints
location /api/ { location /api/ {
proxy_pass http://mc_panel; proxy_pass http://mc_panel;
@@ -60,3 +75,4 @@ server {
add_header Content-Type text/plain; add_header Content-Type text/plain;
} }
} }
}