daily_digest/readme
2025-04-11 21:29:38 +03:00

134 lines
8.6 KiB
Plaintext
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.

Инструкция по Деплою:
Шаг 1: Подготовка docker-compose.yml и Секретов
Определитесь со сборкой образа:
Вариант А (Portainer собирает образ): В docker-compose.yml убедитесь, что строка build: . раскомментирована, а строка image: закомментирована или удалена. Этот вариант требует, чтобы Portainer имел доступ к исходному коду (лучше всего через Git).
Вариант Б (Вы собираете и загружаете образ):
Соберите образ локально: docker build -t ваше_имя/имя_образа:тег .
Авторизуйтесь: docker login
Загрузите образ: docker push ваше_имя/имя_образа:тег
В docker-compose.yml закомментируйте build: . и укажите правильное имя образа в строке image: ваше_имя/имя_образа:тег.
Проверьте docker-compose.yml:
Убедитесь, что TelegramClient__SessionPath указывает на путь внутри контейнера, куда монтируется том (например, /app/session/telegram_session.dat).
Убедитесь, что том session_data объявлен и монтируется (- session_data:/app/session).
Решите, как передавать секреты:
Вариант 1 (Безопаснее): Подготовьте все секреты (токены, ключи, ID) для ввода через интерфейс Portainer (см. Шаг 4). В docker-compose.yml в секции environment: оставьте только ключи без значений или с плейсхолдерами.
Вариант 2 (Проще для теста, небезопасно для Git): Впишите реальные значения секретов прямо в docker-compose.yml в секцию environment:. Не делайте так, если коммитите этот файл в публичный репозиторий!
Шаг 2: Обработка Первой Авторизации WTelegramClient
Помните, что при первом запуске контейнера файла сессии не будет, и WTelegramClient запросит код/пароль в логах. Вы не сможете ввести их через Portainer напрямую. Выберите один из методов ДО основного деплоя или будьте готовы сделать это сразу после:
Метод 1 (Интерактивный запуск):
Соберите образ (если еще не собран): docker build -t ваше_имя/имя_образа:тег .
Запустите контейнер один раз вручную в интерактивном режиме, подключив том и передав все переменные окружения:
docker run -it --rm \
-v session_data:/app/session \
-e TelegramClient:SessionPath="/app/session/telegram_session.dat" \
-e BotConfiguration__BotToken="YOUR_BOT_TOKEN" \
-e TelegramClient__ApiId="YOUR_API_ID" \
-e TelegramClient__ApiHash="YOUR_API_HASH" \
-e TelegramClient__PhoneNumber="YOUR_PHONE_NUMBER" \
-e TelegramClient__TargetChannelUsername="your_target_channel_username" \
-e ApiKeys__OpenWeatherMap="YOUR_OWM_KEY" \
-e ApiKeys__Gemini="YOUR_GEMINI_KEY" \
-e BotConfiguration__TargetChatId="YOUR_TARGET_CHAT_ID" \
# Добавьте другие переменные при необходимости
ваше_имя/имя_образа:тег
Use code with caution.
Bash
Дождитесь запроса кода/пароля в терминале и введите их.
После успешного запуска и создания сессии остановите контейнер (Ctrl+C). Теперь файл сессии сохранен в томе session_data.
Метод 2 (Копирование файла):
Запустите приложение локально (dotnet run), пройдите авторизацию, чтобы создался файл telegram_session.dat.
Найдите путь к тому session_data на хосте Docker: docker volume inspect session_data (ищите Mountpoint).
Используя SFTP/SSH или прямой доступ к хосту, скопируйте ваш локальный telegram_session.dat в папку _data внутри папки тома (например, /var/lib/docker/volumes/session_data/_data/telegram_session.dat). Убедитесь, что имя файла совпадает.
Шаг 3: Учет Геоблокировки Gemini
Помните об ошибке User location is not supported. Если вы не находитесь в разрешенном регионе:
Настройте VPN/Прокси: Либо на всем хосте Docker, либо настройте Docker для использования прокси (более сложная тема, ищите "docker set http_proxy").
Используйте Хостинг: Выберите VPS/VDS в разрешенной стране.
Если ничего из этого не подходит, Gemini работать не будет, и блок новостей в дайджесте будет пустым.
Шаг 4: Развертывание Стека в Portainer
Войдите в Portainer.
Выберите ваш Docker Endpoint (обычно local или имя вашего сервера).
Перейдите в "Stacks" в меню слева.
Нажмите "+ Add stack".
Name: Введите имя для стека (например, daily-digest).
Build method:
Git Repository (Рекомендуется, если используете build: .):
Введите URL вашего репозитория (HTTPS или SSH).
Укажите Compose path (путь к docker-compose.yml внутри репозитория, обычно просто docker-compose.yml).
Выберите ветку (Branch).
Настройте аутентификацию, если репозиторий приватный.
Web editor: Скопируйте все содержимое вашего docker-compose.yml и вставьте в редактор.
Upload: Загрузите ваш файл docker-compose.yml.
Environment variables (Если вы выбрали безопасный способ передачи секретов):
Нажмите на переключатель "Advanced options" (если он есть).
В разделе "Environment variables" нажмите "Add environment variable".
Добавьте каждую переменную окружения (например, BotConfiguration__BotToken) и ее реальное значение. Повторите для всех секретов и важных настроек.
Deploy: Нажмите кнопку "Deploy the stack". Portainer начнет процесс (сборку, если нужно, и запуск контейнера).
Шаг 5: Проверка и Мониторинг
Статус Стека: Убедитесь, что стек запустился без ошибок в Portainer.
Статус Контейнера: Перейдите в раздел "Containers". Найдите контейнер daily-digest-worker. Он должен быть в состоянии "running".
Логи Контейнера: Нажмите на иконку "Logs" для вашего контейнера. Внимательно изучите логи:
Нет ли ошибок при запуске?
Видны ли логи инициализации Worker'а?
Если вы не сделали Шаг 2 (авторизация WTelegramClient): Ищите здесь запрос на ввод кода/пароля. Если он есть, вам нужно выполнить один из методов из Шага 2.
Дождитесь времени запуска дайджеста.
Смотрите логи выполнения задачи: запросы к API, получение данных, вызов Gemini (успешно или с ошибкой геоблокировки?), формирование текста, отправка в Telegram.
Проверка Telegram: Убедитесь, что дайджест приходит в ваш канал/чат в назначенное время и содержит ожидаемые данные (возможно, без новостей, если Gemini заблокирован).