5.1 KiB
5.1 KiB
Исправление ошибки сборки 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
Две проблемы:
aiogram 3.13.0требуетaiofiles~=23.2.1, а указанаaiofiles==24.1.0Dockerfile.simpleкопировал неправильный файл
✅ Решение:
- В
requirements.txtизменена версия aiofiles:
# Было: aiofiles==24.1.0
# Стало: aiofiles==23.2.1 # Совместимо с aiogram
- В
Dockerfile.simpleисправлен копируемый файл:
# Было: 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 интерфейс на главной странице
- Меньше ресурсов, быстрее развертывание
Результат
Теперь система корректно работает независимо от наличия всех модулей и автоматически адаптируется к доступным компонентам.