Найти тему

Docker-сервер дома, итерация вторая

Оглавление

Всем привет!

Сначала идет лирическое вступление, некий "крик души", а потом - собственно заметка про Docker. Не хотите лирики - просто промотайте полстатьи :)

В качестве предисловия

Для меня эта заметка является определённым экспериментом, причем сразу в двух направлениях.

Направление первое – это попытка сменить формат. Когда я только начинал этим заниматься, выбрал для себя основным способом продвижения видеоролики. Начиналось все с выкладывания записей собственных вебинаров, потом начитка записей презентаций, потом работа с камерой и анбоксинг. Затянуло :) Однако, всегда хочется большего. Поэтому мне захотелось попробовать делать текстовые публикации. Если вам не лень – отметьте в комментариях, какая информация вами лучше воспринимается – видеорассказ или текстовая подача материала.

Направление второе – это посмотреть на реакцию публики и движка Дзена на совместное размещение статей и видео. Не секрет, что все авторы Дзена борются за просмотры и статистику. Я работаю с публикацией видео в Дзене уже несколько месяцев и немного разочарован.

Статистика по этому каналу на Дзен
Статистика по этому каналу на Дзен

Да, по сравнению с Youtube в первые дни после публикации видео смотрят достаточно активно, по моей тематике – примерно в пять раз активнее, чем на американской платформе. Однако потом темпы просмотра (по ощущениям) достаточно заметно падают. Также, в основной выдаче яндексовского поисковика мои видео почему-то не попадают, только в прямой поиск по видео.

Статистика исходного канала на Youtube
Статистика исходного канала на Youtube

Отдельная песня – это кривая организация статистики просмотров. Все просмотры попадают не на дату просмотра, а на дату публикации видео, в Яндекс.Метрику данные не отдаются и т.п. Ну вот и посмотрим что получится.

Docker дома. Начало

Собственно, предыстория этого моего маленького домашнего проекта была изложена мной в блоге моего знакомого некоторое время назад . И вот пару недель назад мои шаловливые ручки в процессе очередного «улучшайзинга» умудрились «уронить» сервер до полной незагружаемости. Судорожные попытки переустановки RancherOS привели к тому, что я вдобавок к разделу ОС смог прибить и раздел с данными.

Успокоившись, я все-таки разобрался с причиной такого загадочного поведения сервера (забавный частичный отказ модуля памяти – bios -диагностика проходит чисто, но попытки работать с определенным регионом приводили к сбою конкретной исполняемой задачи, при этом всё остальное работало нормально). Посоветовавшись сам с собой, принял решение о полной переустановке с нуля.

Изменения

В новой версии основная идеология – использование docker-контейнеров – была сохранена неизменной. Я отказался от RancherOS , так как счел его встроенный функционал для себя излишним. Вместо него был использован Debian 10 в чисто консольном варианте с обычным docker из оригинального репозитория. В качестве бесплатного бонуса к такой замене я получил нормальный и элементарно настраиваемый SSH-доступ к хостовой операционной системе (организация доступа через SSH в RancherOS представляет собой эквилибристику с пробросом ключа внутрь того обрезка ОС, на котором собран ранчер; мне это ни разу не удавалось).

Некоторое время у меня ушло на выбор системы управления контейнерами. От rancher/rancher и rancher/server я отказался по той же причине излишнего функционала. Некоторое время помедитировал над закрытым уже проектом Docker UI в исполнении от kevana . Это крайне легкая оболочка, местами даже аскетичная, просто не имеющая сложных мест при установке, пригодная для мониторинга работающей системы, но лишенная ряда функций, необходимых при периодических экспериментах. В результате я остановился на Portainer.

-3

Единственное затруднение при установке у меня вызвала потребность организации тома (volume) в необходимом мне месте файловой системы (так как именно туда был смонтирован второй физический диск) – но определенные эксперименты дали результат и все взлетело как задумано. Собственно, создание контейнера чуть сложнее элементарного – это и есть одно из слабых мест Portainer, периодически приходится делать это через SSH. Но в эксплуатации он меня вполне устраивает.

Transmission, Minidlna, Node-red и Samba остались почти в прежнем виде. Самое интересное меня ждало при подборе БД.

InfluxDB

Уж не помню, почему при сборке первой итерации была выбрана InfluxDB версии 1.8 (то ли более свежей тогда не было, то ли искать не хотелось) – но тогда это была «просто база данных с временнЫми рядами». Рабочий контейнер с портом 8086, внешняя утилита InfluxDB Studio, для визуализации я тогда использовал Grafana.

InfluxDB Studio, картинка с оригинального сайта
InfluxDB Studio, картинка с оригинального сайта

При сборке второй версии я обнаружил и установил InfluxDB версии 2.0. И после установки меня ждал целый ряд сюрпризов.

Сюрприз первый. Утилиты теперь нет. Порт 8086 – теперь это вполне полноценный портал управления БД (за исключением, пожалуй, только создания пользователей – с этим добро пожаловать в консоль).

InfluxDB 2.0, основной экран
InfluxDB 2.0, основной экран

Сюрприз второй. Поменялась идеология. Вместо старой database -measurement - field появились bucket - measurement - field . Вроде, только изменилось название, но на деле – все серьезнее. Если в 1.х одновременный запрос температур первого и второго ядер процессора для сравнительного вывода на один график требовал JOIN или двух запросов – то теперь можно запросить одно и то же field для разных measurement из одного bucket прямо сразу %-). Это и удобно, и неудобно. Удобно потому, что убирает излишнюю эквилибристику в запросах. Неудобно потому, что теперь стало невозможно держать в одной базе, например, всё, относящееся к серверу (характеристики и процессора, и памяти, и диска) – поля путаются. Приходится растаскивать по разным buckets . Зато retentivity назначается не через политики, а просто одним кликом.

Bucket - measurement - field
Bucket - measurement - field

Сюрприз третий. Доступ из внешних программ. Если раньше все было «по классике» - пользователи со своими паролями, у каждого пользователя свои права на чтение/запись к каждой базе. Заводишь каждой программе по пользователю, при появлении новой базы или измерения только правишь их права. Теперь не так. Пользователи есть, но они существуют как бы отдельно от buckets . Для работы из внешних программ появились токены, которые заменяют логин и пароль сразу. Но после создания токена его права исправить уже невозможно, можно только убить и пересоздать. Опять-таки, и хорошо, и плохо.

Сюрприз четвертый. Прямо в оболочке появились дешборды!! Они чуть попроще, чем в Графане, заметно меньше виджетов, у виджетов меньше настроек, нет кастомных виджетов, но в половине случаев это вообще позволяет отказаться от лишнего контейнера!

Дешборды в InfluxDB 2
Дешборды в InfluxDB 2

И на деле я, наверно, не разобрал еще и половины возможностей этой коробочки… Впереди еще разборки с Telegraf , который, судя по всему, еще теснее интегрирован с InfluxDB . Не начинал разбираться со Scrapers (примочка БД, которая сама запрашивает данные из REST-источников). И еще шаблоны, переменные, метки…

На этом я, пожалуй, закончу свою сегодняшнюю заметку. В дальнейшем постараюсь рассказать о других фишках, заложенных в мой сервер. Если у вас есть какие-то вопросы – обращайтесь через комментарии.


Всем удачи!