Добавить readme
This commit is contained in:
parent
99084c26e3
commit
4951a0ce32
134
readme
Normal file
134
readme
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
Инструкция по Деплою:
|
||||||
|
|
||||||
|
Шаг 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 заблокирован).
|
Loading…
x
Reference in New Issue
Block a user