Предыстория и задача
Я уже касался этой темы и расcказывал, как можно при помощи Docker и специализированной программы iperf проверить скорость работы со своими сервисами. Но, во времена широкого распростанения всевозможных графических представлений информации, вывод результатов, который предлагает iperf
, далёк от идеала.
Хочется чего-нибудь, похожего на https://speedtest.net.
Что ж, задача, в принципе ясна: хочется "поднять" self-hosted сервис, позволяющий получать легко воспринимаемую информацию о скорости доступа к домашним серверам. Большим плюсом было бы наличие официального и поддерживаемого docker
-образа.
Первая удача - OpenSpeedTest
Я начал поиски и, как обычно, обратился к Google. Дело было достаточно давно и результаты, которые я получил тогда, несколько отличаются от тех, что можно налюдать в выдаче сейчас. Однако, в то время мои мысли были меньше всего заняты вопросами написания этой статьи, более того, я тогда и не предполагал, что буду её писать, и, как следствие, я не удосужился сделать какие-либо скриншоты, поэтому могу сейчас придумать всё, что угодно вам придётся поверить мне на слово - в результатах поиска был лидер и это был https://openspeedtest.com/.
В принципе, этот продукт меня полностью устроил: он выдавал вполне приемлемую "картинку" и у него был оригинальный docker-образ. Плюсом была возможность скачать исходный код. А ещё это сервис мог работать в двух режимах.
Первый режим используется по умолчанию и предполагает обращение к файлу index.html
(конечно, в адресной строке имя самого файла писать совсем не обязательно). Особенность этого режима заключается в возможности работы без подключения к сети инернет, поэтому авторы назвали этот режим offline
. То есть, вы можете измерять скорость к вашему серверу как через интернет, так и в локальной сети, не имеющей выхода во всемирную паутину.
Второй режим предполагает обращение к файлу hosted.html
(в этом случае нужно указывать имя файла в адресной строке) и назван авторами online
. Он отличается от первого тем, что результаты измерения сохраняются в базе данных у разработчика. Для просмотра истории замеров необходимо зарегистрироваться в их службе/сервисе (для сохранения результатов, регистрация, как я понял из имеющегося описания, не нужна).
Если честно, второй режим я отбросил - не совсем понимаю, зачем разработчикам результаты моих замеров, да и регистрироваться у них для просмотра сохранённой истории не хотелось совсем. Хотя, конечно, это было бы приятным плюсом - просмотр данных предыдущих тестов. Ну нет, так нет.
Продолжение поиска - LibreSpeed
В общем, пользовался я этим сервисом (openspeedtest
) больше полугода. Надо отметить, что за это время он ни разу не обновился. С одной стороны, вроде как ошибок не было и авторам нечего было исправлять. Но, с другой стороны, улучшений тоже не предлагалось. И вот, в один прекрасный день, я, видимо, в погоне за чем-то новым, повторил поиск в Google. И, как уже упоминал, получил несколько другой результат. На этот раз в качестве лидера мне был предложен другой продукт - https://librespeed.org/.
Это проект с открытым исходным кодом (open source), который хостится на GitHub, и у него есть несколько инкарнаций в публичном репозитории Docker
. Я долго сомневался, какой из двух основных образов выбрать: от известного и плодовитого Linuxserver или тот, который советуют в документации на GitHub - adolfintel/speedtest. В конце концов я отдал предпочтение второму, посчитав его "оригинальным" образом.
Понятно, что визуальные представления информации о ходе процесса замера скорости и самого результата этого замера, у двух сервисов - openspeedtest
и librespeed
- отличаются. Но есть и более глубокое, функциональное отличие: у сервиса librespeed
возможность сохранять и просматривать историю замеров встроена в сервис, данные при этом хранятся у вас в базе данных и никакой регистрации в стороннем сервисе не требуется. К этому прилагается ещё один маленький бонус - в качестве СУБД можно использовать на выбор любую из трёх широко распространённых и бесплатных: SQLite (встроена и доступна без каких-либо дополнительных настроек), mySQL, или PostgreSQL - последние две могут потребовать использование отдельных контейнеров или внешних баз данных, ну и дополнительных настроек, куда ж без этого.
Просмотр этой сохранённой статистики (авторы назвали её телеметрией) возможен по адресу https://your.server.address/results/stats.php
(при этом, для доступа требуется пароль), где your.server.address
- адрес вашего сервиса.
В принципе, сбор и сохранение статистики можно и запретить - достаточно выставить переменную окружения 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
на ваш почтовый адрес, по которому ваши пользователи смогут послать вам требование удалить их статистику (особенности законодательства, ничего не поделаешь).
Вот, пожалуй, и всё на сегодня.