134 lines
8.6 KiB
Plaintext
134 lines
8.6 KiB
Plaintext
Инструкция по Деплою:
|
||
|
||
Шаг 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 заблокирован). |