Создание отдельного telegram-сервиса FAM

Бывают ситуации, когда нужно взаимодействие с Telegram вынести в DMZ, несмотря на то, что telegram-сервис не требует открытия обратного канала взаимодействия. В таком случае можно вынести взаимодействие на другой сервер в DMZ, разместив на нем отдельно telegram-сервис без компонента FAM Server.

В архиве Avanpost FAM Server входит telegram-сервис, он располагается в директории tg_service. В этой директории файлы tg_service_linux_amd64 и config.example.toml.

  • tg_service_linux_amd64 - исполняемый файл, собственно то, что будет наш telegram-сервис запускать;
  • config.example.toml - пример файла конфигурации, мы воспользуемся им, чтобы на его основе сделать config.toml для нашего сервиса.

Итак, разместим на сервере в DMZ эти файлы в директорию /opt/tg. Передадим права на директорию и содержимое пользователю idp (создайте, если его нет):

sudo chown -R idp:idp /opt/tg

Переименуем файл config.example.toml в config.toml и откроем на редактирование. Приведем к такому виду:

accessToken = '1234567890:AABBOjqHwySi2RdyE45_6RRwTg_gGHYEDvk'
botTimeout = 30
electionTimeout = 5
backAddress = '0.0.0.0:5000'
electionServices = []
secret = '11'
debug = true

Здесь

  • accessToken - токен телеграм-бота, выдается в Bot Father;
  • botTimeout - время таймаута (в секундах) при неактивности телеграм-бота;
  • electionTimeout - время (в секундах), которое должно пройти до того момента, когда сервис Avanpost FAM Server начнет обращаться к другим сервисам Avanpost FAM Server, в нашем случае не будет влиять на процесс, потому что сервис FAM Server у нас один;
  • backAddress - адрес телеграм-сервиса.
  • electionServices - перечень сервисов Avanpost FAM Server, взаимодействующих с данным токеном, поскольку в нашем случае FAM Server взаимодействовать с телеграмом не будет, оставляем пустым;
  • secret - секрет, который позже нужно будет ввести в настройках метода аутентификации telegram;
  • debug - установить в значение true для подробного логирования.

Далее нужно создать службу telegram. Создаем файл telegram.service в /etc/systemd/system и приводим к такому виду:

[Unit]
Description=Telegram

[Service]
WorkingDirectory=/opt/tg
ExecStart=/opt/tg/tg_service_linux_amd64
Restart=always
RestartSec=10
SyslogIdentifier=telegram
User=idp
Environment="TG_SERV_CONF=/opt/tg/config.toml"

[Install]
WantedBy=multi-user.target

После этого создаем службу и запускаем ее:

systemctl daemon-reload
systemctl enable telegram
systemctl start telegram

Теперь в веб-интерфейсе администратора нужно зайти в Сервис - Настройки методов аутентификации, и добавить метод аутентификации Telegram. При этом поставить галочку “Использовать отдельный телеграм сервис” и указать данные раннее нами настроенного сервиса: IP-адрес, порт и секрет.