На днях наконец-то решил добраться до такой хайповой темы как Docker:
Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами. Изначально использовал возможности LXC, с 2015 года применял собственную библиотеку, абстрагирующую виртуализационные возможности ядра Linux — libcontainer.
В продолжение темы про конфигурационные файлы, остановлюсь на формате .INI. .INI - формат конфигурационных файлов, применяемый, в основном в ОС Windows. Тем не менее, ничто не мешает его использовать и в других окружениях. Данный формат значительно проще, чем рассмотренные ранее TOML и YAML, но в некоторых (на самом деле большинстве, как мне кажется) случаях, его возможностей может оказаться достаточно.
Синтаксис INI файлы имеют понятный синтаксис и имеют простой для чтения и изменения человеком формат.
В продолжение темы про конфигурационные файлы, взглянем на более распространённый формат YAML. YAML (YAML Ain’t Markup Language) - это надмножество над JSON с упрощенным синтаксисом.
Синтаксис Основные типы Аналогично TOML, про который я писал ранее, в YAML можно использовать различные типы данных:
# Комментарии начинаются со знака "#" # Пары ключ-значение разделяются через ":" # Строки, как значения, могут быть заключены в кавычки (одинарные, двойные), # но не обязаны key: значение another_key: еще одно значение # Числа можно использовать в экспоненциальной форме a_number_value: 100 scientific_notation: 1e+12 # Логические значения требуется записывать как true или false.
Если вы в IT более 15 минут, то должны знать, что практически каждая программа зависит от некоторых внешних переменных. Например, как я писал в статье про разработку бота для Telegram, к ним можно отнести API- ключи внешних сервисов, используемых в вашем приложении; строки подключения к базе данных; список RSS-лент; список e-mail для каких-либо уведомлений и прочее. Самый простой способ - прописать эти переменные явно в коде, но в этом случае есть недостатки:
После того, как бот был написан, прокачан и опубликован (на vscale или на heroku, например) возникает вопрос отслеживания того, как пользователи с ним общаются. Для этих целей можно воспользоваться, например, решением botan.io от Yandex. Botan - обёртка над AppMetric - версии Метрики для мобильных приложений. Платформа позволяет собирать большинство событий бота и отображать их в панели Метрики (со всеми доступными отчётами). Сейчас ботан умеет работать только с ботами для Telegram, но мне этого вполне достаточно.
В предыдущих частях был разработан и улучшен бот, помогающий найти заклинания для Dungeon and Dragons. Теперь требуется разместить бота на какой-либо платформе. Рассмотрим два варианта: vscale.ru и heroku.
vscale.ru Плюсы Простота развёртывания для новичка Отдельный VDS со всеми преимуществами (устанавливай всё, что требуется) Удобная панель для управления Минимальный сервер - 200 рублей в месяц Реферальная программа (при регистрации по реферальной ссылке вам на счёт упадёт 400 рублей) Документация на русском Минусы Платный (от 200 рублей в месяц (на текущий момент)) Отдельный VDS со всеми недостатками (самостоятельное администрирование) На сегодняшний день сервера доступны только в Москве и Санкт-Петербурге Развёртывание Надеюсь, проблем с регистрацией на vscale не возникнет и сразу перейду к главному - к публикации бота.
В предыдущей части был написан бот, который по заданному имени или части имени находит подходящие и показывает пользователю в отдельных сообщениях. В этот раз немного улучшим его: улучшим форматирование, добавим inline- режим и реализуем пару команд.
Улучшаем форматирование Скажу сразу, что Telegram умеет в HTML и Markdown. Но, к сожалению, очень ограничено: если посмотреть документацию, то поддерживается только полужирное начертание, курсив, моноширинный шрифт и ссылки: Markdown:
*полужирный* _курсив_ [ссылка](http://www.example.com/) `строчный моноширинный` ```text блочный моноширинный (можно писать код) ``` HTML: