diff --git a/readme b/readme new file mode 100644 index 0000000..e4d9320 --- /dev/null +++ b/readme @@ -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 заблокирован). \ No newline at end of file