uploader-bot/docs/DOCKER_BUILD_FIX.md

127 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Исправление ошибки сборки Docker Compose
## Проблема
Система пыталась собрать и запустить сервис `web2-client`, который может отсутствовать на некоторых нодах, что приводило к ошибке:
```
target web2-client: failed to solve: failed to read dockerfile: open Dockerfile: no such file or directory
```
## Решение
Исправлены **ЧЕТЫРЕ** критические проблемы:
### 1. Docker Compose исправления
В `docker-compose.production.yml`:
- Добавлен профиль для web2-client: `profiles: ["main-node"]`
- Удалена зависимость nginx на web2-client (nginx теперь зависит только от app)
- Удалена устаревшая строка `version: '3.8'`
```yaml
web2-client:
profiles: ["main-node"] # Only build for main nodes
# ... остальная конфигурация
nginx:
depends_on:
- app # Убрано: - web2-client
```
### 2. Умная логика сборки и запуска
Обновлен `setup_production_server.sh` с graceful fallback логикой:
**Для основной ноды (main):**
- Сначала пытается собрать/запустить с профилем `main-node` (включая web2-client)
- Если не удается, fallback к основным сервисам: `app postgres redis`
**Для обычной ноды (regular):**
- Сразу собирает/запускает только основные сервисы без web2-client
### 3. Исправление Dockerfile зависимостей
**Проблема:** `ERROR: Cannot find command 'git' - do you have 'git' installed and in your PATH?`
В [`Dockerfile.simple`](my-uploader-bot/Dockerfile.simple:13) добавлен git:
```dockerfile
RUN apt-get update && apt-get install -y \
build-essential \
curl \
git \ # ✅ Добавлено для установки tonsdk из GitHub
ffmpeg \
libmagic1 \
libpq-dev \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
```
### 4. Исправление конфликта зависимостей Python
**Проблема:** `ERROR: Cannot install -r requirements.txt ... because these package versions have conflicting dependencies`
**Две проблемы:**
1. `aiogram 3.13.0` требует `aiofiles~=23.2.1`, а указана `aiofiles==24.1.0`
2. [`Dockerfile.simple`](my-uploader-bot/Dockerfile.simple:23) копировал неправильный файл
**✅ Решение:**
- В [`requirements.txt`](my-uploader-bot/requirements.txt:31) изменена версия aiofiles:
```txt
# Было: aiofiles==24.1.0
# Стало: aiofiles==23.2.1 # Совместимо с aiogram
```
- В [`Dockerfile.simple`](my-uploader-bot/Dockerfile.simple:23) исправлен копируемый файл:
```dockerfile
# Было: COPY requirements_new.txt ./requirements.txt
# Стало: COPY requirements.txt ./requirements.txt
```
### 5. Обновленные управляющие скрипты
- `start.sh` - умный запуск с fallback логикой
- `rebuild.sh` - пересборка с учетом доступных модулей
- `systemd_start.sh` - обертка для systemd service
## Поведение системы
### Если web2-client модуль доступен:
```bash
✅ Запущены все сервисы основной ноды (включая web2-client)
```
### Если web2-client модуль недоступен:
```bash
⚠️ Web2-client недоступен, запускаем основные сервисы...
✅ Запущены основные сервисы (web2-client пропущен)
```
## Команды для проверки
### Проверка статуса:
```bash
sudo /home/myuploader/uploader-bot/status.sh
```
### Ручной запуск с профилем:
```bash
# Основная нода с web2-client
docker-compose -f docker-compose.production.yml --profile main-node up -d
# Только основные сервисы
docker-compose -f docker-compose.production.yml up -d app postgres redis
```
### Проверка доступных сервисов:
```bash
docker-compose -f docker-compose.production.yml config --services
```
## Типы нод
### Main Node (основная)
- Полный стек: uploader-bot + converter-module + web2-client
- Web интерфейс доступен на главной странице
- API доступен через `/api/`
### Regular Node (обычная)
- Основной стек: uploader-bot + converter-module
- Только API интерфейс на главной странице
- Меньше ресурсов, быстрее развертывание
## Результат
Теперь система корректно работает независимо от наличия всех модулей и автоматически адаптируется к доступным компонентам.