Предыстория и задача

Я уже касался этой темы и расcказывал, как можно при помощи Docker и специализированной программы iperf проверить скорость работы со своими сервисами. Но, во времена широкого распростанения всевозможных графических представлений информации, вывод результатов, который предлагает iperf, далёк от идеала.

Такой вот 'табличный' вывод

Хочется чего-нибудь, похожего на https://speedtest.net.

Такой вывод проще воспринимается

Что ж, задача, в принципе ясна: хочется "поднять" self-hosted сервис, позволяющий получать легко воспринимаемую информацию о скорости доступа к домашним серверам. Большим плюсом было бы наличие официального и поддерживаемого docker-образа.

Первая удача - OpenSpeedTest

Я начал поиски и, как обычно, обратился к Google. Дело было достаточно давно и результаты, которые я получил тогда, несколько отличаются от тех, что можно налюдать в выдаче сейчас. Однако, в то время мои мысли были меньше всего заняты вопросами написания этой статьи, более того, я тогда и не предполагал, что буду её писать, и, как следствие, я не удосужился сделать какие-либо скриншоты, поэтому могу сейчас придумать всё, что угодно вам придётся поверить мне на слово - в результатах поиска был лидер и это был https://openspeedtest.com/.

Экран OpenSpeedTest до замера скорости Экран OpenSpeedTest с результатами замера скорости

В принципе, этот продукт меня полностью устроил: он выдавал вполне приемлемую "картинку" и у него был оригинальный docker-образ. Плюсом была возможность скачать исходный код. А ещё это сервис мог работать в двух режимах.

Первый режим используется по умолчанию и предполагает обращение к файлу index.html (конечно, в адресной строке имя самого файла писать совсем не обязательно). Особенность этого режима заключается в возможности работы без подключения к сети инернет, поэтому авторы назвали этот режим offline. То есть, вы можете измерять скорость к вашему серверу как через интернет, так и в локальной сети, не имеющей выхода во всемирную паутину.

Второй режим предполагает обращение к файлу hosted.html (в этом случае нужно указывать имя файла в адресной строке) и назван авторами online. Он отличается от первого тем, что результаты измерения сохраняются в базе данных у разработчика. Для просмотра истории замеров необходимо зарегистрироваться в их службе/сервисе (для сохранения результатов, регистрация, как я понял из имеющегося описания, не нужна).

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

Продолжение поиска - LibreSpeed

В общем, пользовался я этим сервисом (openspeedtest) больше полугода. Надо отметить, что за это время он ни разу не обновился. С одной стороны, вроде как ошибок не было и авторам нечего было исправлять. Но, с другой стороны, улучшений тоже не предлагалось. И вот, в один прекрасный день, я, видимо, в погоне за чем-то новым, повторил поиск в Google. И, как уже упоминал, получил несколько другой результат. На этот раз в качестве лидера мне был предложен другой продукт - https://librespeed.org/.

Это проект с открытым исходным кодом (open source), который хостится на GitHub, и у него есть несколько инкарнаций в публичном репозитории Docker. Я долго сомневался, какой из двух основных образов выбрать: от известного и плодовитого Linuxserver или тот, который советуют в документации на GitHub - adolfintel/speedtest. В конце концов я отдал предпочтение второму, посчитав его "оригинальным" образом.

Экран LibreSpeed до замера скорости Экран LibreSpeed с результатами замера скорости

Понятно, что визуальные представления информации о ходе процесса замера скорости и самого результата этого замера, у двух сервисов - openspeedtest и librespeed - отличаются. Но есть и более глубокое, функциональное отличие: у сервиса librespeed возможность сохранять и просматривать историю замеров встроена в сервис, данные при этом хранятся у вас в базе данных и никакой регистрации в стороннем сервисе не требуется. К этому прилагается ещё один маленький бонус - в качестве СУБД можно использовать на выбор любую из трёх широко распространённых и бесплатных: SQLite (встроена и доступна без каких-либо дополнительных настроек), mySQL, или PostgreSQL - последние две могут потребовать использование отдельных контейнеров или внешних баз данных, ну и дополнительных настроек, куда ж без этого.

Просмотр этой сохранённой статистики (авторы назвали её телеметрией) возможен по адресу https://your.server.address/results/stats.php(при этом, для доступа требуется пароль), где your.server.address - адрес вашего сервиса.

Экран LibreSpeed с историей замеров скорости

В принципе, сбор и сохранение статистики можно и запретить - достаточно выставить переменную окружения TELEMETRY в значение false. При этом пропадёт и возможность делиться ссылкой на результаты своих замеров.

Ещё одна интересная особенность сервиса librespeed - возможность предоставлять данные о провайдере и расстоянии до сервера, которые сервис получает от службы https://ipinfo.io/. С использованием этой службы связан один нюанс - если у вас постоянно чешутся руки и вы всё время тестируете скорость до своего сервера, то, при превышении примерно 500 тестов в день, вам следует в ней зарегистрироваться. При этом, вы можете отказаться от услуг этого сервиса, выставив нужное значение для соответствующей переменной окружения (DISABLE_IPINFO).

Но и на этом плюшки не заканчиваются. Сервис librespeed позволяет встроить в свой интерфейс возможность выбора вашего сервера, если у вас их несколько. Для этого, на каждом своём сервере вы поднимаете так называемый backend сервис, и на каком-то одном - frontend сервис. Я не буду сейчас описывать настройки, всё это есть в документации, кроме того, у меня нет пока двух (или более 😉) серверов, отмечу лишь, что то, какую роль будет выполнять контейнер, определяется также с помощью переменной окружения (MODE).

Закончу перечисление особенностей сервиса librespeed упоминанием о том, что авторами создан шаблон для приложения под Android - желающим предлагается создать приложение для замеров скорости до своих серверов, добавив необходимую конфигурацию. На F-Droid (я уже писал про этот альтернативный магазин приложений для Android) размещено приложение, с замером скорости до нескольких серверов. Почему авторы не пошли дальше и не сделали гибкое, конфигурируемое приложение - для меня загадка.

Что получилось - примеры файлов docker-compose.yml

После обнаружения нового сервиса для тестирования скорости доступа, встал вопрос: какой из двух сервисов выбрать и что делать с "проигравшим". Поразмыслив, я решил пока оставить оба - старый, openspeedtest, верой и правдой отработал у меня уже достаточно много времени, а новый, librespeed, имел не совсем обязательную, но приятную дополнительную функциональность, главным образом в виде сохранения и просмотра истории тестов скорости. Так что, теперь у меня оба сервиса для замера скорости работают одновременно.

Ну и напоследок, примеры файлов для Docker Compose, которые использую я (о том, как разворачивать self-hosted сервисы при помощи Docker Compose я писал тут) :

  • openspeedtest:
openspeedtest:
  image: openspeedtest/latest:latest
  restart: unless-stopped
  ports:
    - xxxx:8080

замените xxxx на номер вашего порта

  • librespeed:
version: "2.1"
services:
  librespeed:
    image: adolfintel/speedtest
    container_name: librespeed
    environment:
      - PASSWORD=zzzzzz
      - TELEMETRY=true
      - TITLE=LibreSpeed to my server
      - EMAIL=your@email.com
      - ENABLE_ID_OBFUSCATION=true
    ports:
      - xxxx:80
    restart: unless-stopped

замените xxxx на номер вашего порта, zzzzzz на ваш пароль для доступа к статистике, your@email.com на ваш почтовый адрес, по которому ваши пользователи смогут послать вам требование удалить их статистику (особенности законодательства, ничего не поделаешь).

Вот, пожалуй, и всё на сегодня.