uploader-bot/docs/DOCKER_BUILD_FIX.md

5.1 KiB
Raw Blame History

Исправление ошибки сборки 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'
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 добавлен git:

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 копировал неправильный файл

Решение:

# Было: aiofiles==24.1.0
# Стало: aiofiles==23.2.1  # Совместимо с aiogram
# Было: COPY requirements_new.txt ./requirements.txt
# Стало: COPY requirements.txt ./requirements.txt

5. Обновленные управляющие скрипты

  • start.sh - умный запуск с fallback логикой
  • rebuild.sh - пересборка с учетом доступных модулей
  • systemd_start.sh - обертка для systemd service

Поведение системы

Если web2-client модуль доступен:

✅ Запущены все сервисы основной ноды (включая web2-client)

Если web2-client модуль недоступен:

⚠️  Web2-client недоступен, запускаем основные сервисы...
✅ Запущены основные сервисы (web2-client пропущен)

Команды для проверки

Проверка статуса:

sudo /home/myuploader/uploader-bot/status.sh

Ручной запуск с профилем:

# Основная нода с 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

Проверка доступных сервисов:

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 интерфейс на главной странице
  • Меньше ресурсов, быстрее развертывание

Результат

Теперь система корректно работает независимо от наличия всех модулей и автоматически адаптируется к доступным компонентам.