Совет-предостережение насчёт systemd, монтирования дисков и некоторых облачных провайдеров. Ситуация, с которой сталкивался сам, а потом встречал ещё не раз. Если не ошибаюсь, последний раз такой механизм видел у хостера Linode.
В Linux есть служба systemd-mount, о которой я уже ранее писал. Хостер может её использовать для автоматического подключения сетевых дисков с разными параметрами. В целом это удобно и для него, и для пользователя. У меня был подключен в точку монтирования один такой диск. Я решил увеличить его в объёме и выбрать более производительный.
Подключил новый диск к серверу, стал копировать информацию. Находясь в консоли Linux сам размонтировал старый диск, который надо отключить и в его точку монтирования подключил новый диск с уже скопированными данными.
Иду в панель управления хостера и отключаю старый диск от сервера. Напоминаю, что в системе я его предварительно уже отмонтировал. Диск как-то подозрительно долго не отключался. Сходил в системный лог сервера посмотреть, отключился ли диск. И увидел там неожиданную информацию.
Идут постоянные попытки от systemd отмонтировать раздел, к которому подмонтирован уже НОВЫЙ диск. То есть у него записано где-то (я нашел в /run/systemd/generator), что к этой точке монтирования подключен старый диск. Софт хостера по управлению ресурсами просит systemd отключить старый диск от его точки монтирования, хотя по факту она уже занята другим диском.
Я в итоге не пострадал, так как приложение активно писало на диск и не дало его отмонтировать. Диск удалился без размонтирования. В таких случаях лучше новые диски монтировать в другие точки монтирования, а у приложений менять путь к рабочей директории. Это хоть и более хлопотно, но надёжнее, чем разбираться с тем, как хостинг монтирует и отключает диски.
Не смотрел, как в российских облаках хостеры монтируют сетевые диски в виртуалки. Если кто-то сталкивался, подскажите, эта тема актуальна для них, или там такого в принципе нет. Используется что-то другое, или диски только подключаются, но не монтируются автоматически.
В Linux есть служба systemd-mount, о которой я уже ранее писал. Хостер может её использовать для автоматического подключения сетевых дисков с разными параметрами. В целом это удобно и для него, и для пользователя. У меня был подключен в точку монтирования один такой диск. Я решил увеличить его в объёме и выбрать более производительный.
Подключил новый диск к серверу, стал копировать информацию. Находясь в консоли Linux сам размонтировал старый диск, который надо отключить и в его точку монтирования подключил новый диск с уже скопированными данными.
Иду в панель управления хостера и отключаю старый диск от сервера. Напоминаю, что в системе я его предварительно уже отмонтировал. Диск как-то подозрительно долго не отключался. Сходил в системный лог сервера посмотреть, отключился ли диск. И увидел там неожиданную информацию.
Идут постоянные попытки от systemd отмонтировать раздел, к которому подмонтирован уже НОВЫЙ диск. То есть у него записано где-то (я нашел в /run/systemd/generator), что к этой точке монтирования подключен старый диск. Софт хостера по управлению ресурсами просит systemd отключить старый диск от его точки монтирования, хотя по факту она уже занята другим диском.
Я в итоге не пострадал, так как приложение активно писало на диск и не дало его отмонтировать. Диск удалился без размонтирования. В таких случаях лучше новые диски монтировать в другие точки монтирования, а у приложений менять путь к рабочей директории. Это хоть и более хлопотно, но надёжнее, чем разбираться с тем, как хостинг монтирует и отключает диски.
Не смотрел, как в российских облаках хостеры монтируют сетевые диски в виртуалки. Если кто-то сталкивался, подскажите, эта тема актуальна для них, или там такого в принципе нет. Используется что-то другое, или диски только подключаются, но не монтируются автоматически.
Вчера была рассылка от Mikrotik. Я последнее время их игнорирую, так как продукция явно потеряла былую популярность в России в первую очередь из-за цен. Хотя близких аналогов нет, всё равно Микротики уже не так популярны. Но мимо вчерашней новости не смог пройти мимо, потому что она меня удивила.
Компания выпустила свой сервер - RouterOS enterprise Data Server со следующими характеристиками:
◽️20 слотов под U.2 NVMe диски, с поддежкой M.2
◽️сетевые порты: 2×100G QSFP28, 4×25G SFP28, 4×10G SFP+, 2×10G Ethernet
◽️16-core 2 GHz ARM CPU + 32GB DDR4 RAM
Внутри, как и ожидается – RouterOS в редакции Special ROSE edition с поддержкой в том числе технологии NVMe-TCP для экспорта дисков другим серверам. Это помимо традиционных SMB, NFS, iSCSI.
Компания позиционирует свой сервер как очень быстрое локальное хранилище под нагрузку, запущенную в контейнерах, которые RouterOS 7 поддерживает уже сейчас. В описании явно указаны примеры применения: MinIO, Nextcloud, Shinobi, Frigate и другие.
Неожиданная новинка. Цена всего $1950, что намекает на сегмент малого и среднего бизнеса. И при этом такие скорости, которые там особо не нужны.
Что думаете по поводу этих серверов? Мне кажется, зря они в сервера подались. Лучше бы на сетевых устройствах сконцентрировались, починили баги RouterOS 7, запустили бы наконец Long Term ветку. Представляю, сколько вылезет багов в системе на этом сервере, особенно в работе контейнеров под нагрузкой. Там инструментов для диагностики почти нет, работать с ними неудобно. Я бы не стал.
#mikrotik
Компания выпустила свой сервер - RouterOS enterprise Data Server со следующими характеристиками:
◽️20 слотов под U.2 NVMe диски, с поддежкой M.2
◽️сетевые порты: 2×100G QSFP28, 4×25G SFP28, 4×10G SFP+, 2×10G Ethernet
◽️16-core 2 GHz ARM CPU + 32GB DDR4 RAM
Внутри, как и ожидается – RouterOS в редакции Special ROSE edition с поддержкой в том числе технологии NVMe-TCP для экспорта дисков другим серверам. Это помимо традиционных SMB, NFS, iSCSI.
Компания позиционирует свой сервер как очень быстрое локальное хранилище под нагрузку, запущенную в контейнерах, которые RouterOS 7 поддерживает уже сейчас. В описании явно указаны примеры применения: MinIO, Nextcloud, Shinobi, Frigate и другие.
Неожиданная новинка. Цена всего $1950, что намекает на сегмент малого и среднего бизнеса. И при этом такие скорости, которые там особо не нужны.
Что думаете по поводу этих серверов? Мне кажется, зря они в сервера подались. Лучше бы на сетевых устройствах сконцентрировались, починили баги RouterOS 7, запустили бы наконец Long Term ветку. Представляю, сколько вылезет багов в системе на этом сервере, особенно в работе контейнеров под нагрузкой. Там инструментов для диагностики почти нет, работать с ними неудобно. Я бы не стал.
#mikrotik
This media is not supported in your browser
VIEW IN TELEGRAM
Типичная ситуация, которую я видел много раз. По какой-то причине некоторые руководители считают, что можно уволить сисадмина, не взять сразу на его место кого-нибудь, и оно само как-то будет работать. А потом что-то начинает ломаться.
Звонят сисадмину, но он почему-то не хочет помогать. Нанимают нового, но он ничего не знает, потому что никто не передал дела. Я так пришёл в одну компанию, где сисадмин уволился пару месяцев назад и там его помощник выживал, как мог. Но у него ни доступов, ни понимания, как тут всё работает, не было. Ни желания что-то делать за свою зарплату и должность помощника. Благо хоть учётки у директора были. Админа не стал дёргать, во всём без него разобрался.
Иногда мне пишут люди и просят помочь с какой-то проблемой, потому что сисадмин уволился и никто не знает, что делать. Я не берусь за такие задачи, обычно сразу отказываю. Не хочу связываться с такими делами. Это гарантированно бесконечные поиски информации и подводные камни в решении проблем.
Видео отсюда: https://www.youtube.com/shorts/8ooaojqQ70w
Прикольный, кстати, канал. Вроде ничего особенного, но некоторые вещи забавные.
#юмор (чёрный)
Звонят сисадмину, но он почему-то не хочет помогать. Нанимают нового, но он ничего не знает, потому что никто не передал дела. Я так пришёл в одну компанию, где сисадмин уволился пару месяцев назад и там его помощник выживал, как мог. Но у него ни доступов, ни понимания, как тут всё работает, не было. Ни желания что-то делать за свою зарплату и должность помощника. Благо хоть учётки у директора были. Админа не стал дёргать, во всём без него разобрался.
Иногда мне пишут люди и просят помочь с какой-то проблемой, потому что сисадмин уволился и никто не знает, что делать. Я не берусь за такие задачи, обычно сразу отказываю. Не хочу связываться с такими делами. Это гарантированно бесконечные поиски информации и подводные камни в решении проблем.
Видео отсюда: https://www.youtube.com/shorts/8ooaojqQ70w
Прикольный, кстати, канал. Вроде ничего особенного, но некоторые вещи забавные.
#юмор (чёрный)
Протокол НТТРv3, или как ещё называют эту версию QUIC, появился довольно давно. Практические реализации появились ещё в 2020-м году. Я всё как-то мимо него проходил, не погружался и не настраивал. На прошлой неделе вышло видео:
▶️ Ускоряем HTTP/3: DNS-записи HTTPS
В настройке HTTPv3 ничего сложного нет, так что решил разобраться, попробовать и дальше уже включать по умолчанию. Никаких технических преград сейчас к этому нет.
Для работы HTTP версии 3 нужно выполнить несколько шагов.
1️⃣ В настройке веб сервера включить его поддержку. В Nginx/Angie это делается следующим образом. Добавляем уже к существующим параметрам виртуального хоста с HTTPS следующие настройки:
Обращаю внимание на важный момент. В пакетах Angie из репозиториев разработчиков модуль http_v3_module включён по умолчанию. Не проверял его наличие в пакетах с Nginx. DeepSeek посоветовал вручную собрать Nginx с параметром
И второй момент. Я изначально add_header добавил не в корневой location, а в параметры сервера, где добавляются другие заголовки. HTTPv3 не заработал. Долго выяснял, в чём дело. Думал, это формальность. Я обычно всегда заголовки ко всему серверу применяю, а не location. Но тут, судя по всему, это имеет принципиальное значение.
2️⃣ Открываем на файрволе порт 443 UDP, так как QUIC работает по UDP. Я сначала тоже забыл это сделать. У меня по умолчанию всё, что не надо, закрыто, поэтому ничего не заработало. Быстро сообразил, что надо открыть UDP порт.
Этих настроек уже достаточно, чтобы HTTPv3 заработал, но не с первого запроса. По умолчанию браузер обращается по v2 и только после того, как придёт настроенный заголовок, переходит на v3. А первые несколько запросов улетают по v2.
Чтобы это исправить, придумана новая DNS запись типа HTTPS. Браузер, при обращении к сайту, ищет A запись и параллельно запрашивает HTTPS. Если она есть и там указано, что сайт поддерживает работу HTTPv3, он сразу обращается по v3.
Не все DNS хостинги поддерживают этот тип записи. Например, DNS от Яндекса не позволяет создать эту запись. Я в итоге от него отказался. Бесплатный DNS хостинг есть у Selectel. Причём недавно они выпустили новую версию этого хостинга и всем предлагают туда перейти. Мне как-то лень переносить было, и так всё работает. Но старая версия DNS хостинга не поддерживает эти записи. Пришлось перейти на новую. Там без проблем создал HTTPS запись. Выглядит она примерно так:
1 - приоритет
. - основное доменное имя, аналог serveradmin.ru
alpn="h3,h2" - указание на поддержку версии HTTPv3 и HTTPv2
3️⃣ Таким образом, третий пункт – добавление DNS записи типа HTTPS.
После этого сайт с первого запроса стал работать по протоколу третьей версии.
В настройке нет никаких проблем, можно прямо сейчас использовать новую версию протокола. К тому же это максимально безопасно, так как современные браузеры всегда делают попытку открыть сайт и по v2. Если вы где-то ошибётесь в настройке, то v3 просто не заработает. Я в этом убедился на практике. Когда что-то было не так, сайт работал как и прежде. И только после того, как всё сделал правильно, заработал HTTPv3.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#webserver #angie
▶️ Ускоряем HTTP/3: DNS-записи HTTPS
В настройке HTTPv3 ничего сложного нет, так что решил разобраться, попробовать и дальше уже включать по умолчанию. Никаких технических преград сейчас к этому нет.
Для работы HTTP версии 3 нужно выполнить несколько шагов.
1️⃣ В настройке веб сервера включить его поддержку. В Nginx/Angie это делается следующим образом. Добавляем уже к существующим параметрам виртуального хоста с HTTPS следующие настройки:
listen 443 quic reuseport;
http3 on;
location / {
add_header Alt-Svc 'h3=":443"; ma=86400';
}
Обращаю внимание на важный момент. В пакетах Angie из репозиториев разработчиков модуль http_v3_module включён по умолчанию. Не проверял его наличие в пакетах с Nginx. DeepSeek посоветовал вручную собрать Nginx с параметром
--with-http_v3_module
. И второй момент. Я изначально add_header добавил не в корневой location, а в параметры сервера, где добавляются другие заголовки. HTTPv3 не заработал. Долго выяснял, в чём дело. Думал, это формальность. Я обычно всегда заголовки ко всему серверу применяю, а не location. Но тут, судя по всему, это имеет принципиальное значение.
2️⃣ Открываем на файрволе порт 443 UDP, так как QUIC работает по UDP. Я сначала тоже забыл это сделать. У меня по умолчанию всё, что не надо, закрыто, поэтому ничего не заработало. Быстро сообразил, что надо открыть UDP порт.
Этих настроек уже достаточно, чтобы HTTPv3 заработал, но не с первого запроса. По умолчанию браузер обращается по v2 и только после того, как придёт настроенный заголовок, переходит на v3. А первые несколько запросов улетают по v2.
Чтобы это исправить, придумана новая DNS запись типа HTTPS. Браузер, при обращении к сайту, ищет A запись и параллельно запрашивает HTTPS. Если она есть и там указано, что сайт поддерживает работу HTTPv3, он сразу обращается по v3.
Не все DNS хостинги поддерживают этот тип записи. Например, DNS от Яндекса не позволяет создать эту запись. Я в итоге от него отказался. Бесплатный DNS хостинг есть у Selectel. Причём недавно они выпустили новую версию этого хостинга и всем предлагают туда перейти. Мне как-то лень переносить было, и так всё работает. Но старая версия DNS хостинга не поддерживает эти записи. Пришлось перейти на новую. Там без проблем создал HTTPS запись. Выглядит она примерно так:
# dig serveradmin.ru HTTPS
serveradmin.ru. 3600 IN HTTPS 1 . alpn="h3,h2"
1 - приоритет
. - основное доменное имя, аналог serveradmin.ru
alpn="h3,h2" - указание на поддержку версии HTTPv3 и HTTPv2
3️⃣ Таким образом, третий пункт – добавление DNS записи типа HTTPS.
После этого сайт с первого запроса стал работать по протоколу третьей версии.
В настройке нет никаких проблем, можно прямо сейчас использовать новую версию протокола. К тому же это максимально безопасно, так как современные браузеры всегда делают попытку открыть сайт и по v2. Если вы где-то ошибётесь в настройке, то v3 просто не заработает. Я в этом убедился на практике. Когда что-то было не так, сайт работал как и прежде. И только после того, как всё сделал правильно, заработал HTTPv3.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#webserver #angie
В своей деятельности нередко приходится вносить изменения в стандартные юниты systemd. Я не буду писать длинное руководство со всеми командами и параметрами. Их всё равно не запомнишь все. А 1-2 момента можно выхватить и сразу начать применять. Вот такими моментами и поделюсь, которые когда-то не знал, увидел, запомнил и применяю.
Покажу на примере службы Nginx, установленной из пакета в стандартном репозитории. По умолчанию служба автоматически не поднимется, если по какой-то причине завершится. Вот это и исправим, добавив принудительный автозапуск.
1️⃣ Раньше я шёл в
Содержимое юнита прилетит в консоль. Удобно, и никуда ходить не надо. Простая вещь, но узнал я о ней относительно недавно. Там сразу и путь видно, где лежит файл с настройками, если захочется его посмотреть напрямую.
2️⃣ Теперь добавляем изменение. Можно создать директорию
Открывается текстовый редактор по умолчанию. Вносим изменение:
Сохраняем. Конфигурация автоматически применяется. Теперь если набрать:
То мы увидим и исходную конфигурацию и файл
Не зная про команду
3️⃣ Расскажу про ещё один нюанс, который иногда забываю, потом разбираюсь, почему не работает, и вспоминаю, в чём проблема. Если добавляется новый параметр, то никаких нюансов нет, просто указываете его и всё. Если же параметры в
Переписали параметры запуска, которые в основном юните выглядят так:
Обнулять надо не все параметры. Не помню точно, какие нужно, а какие нет. Точно знаю, что всё, что относится к Exec надо обнулять, переменные окружения, если хотите полностью все переопределить, пользователей, наверняка что-то ещё. Если какие-то добавленные изменения не работают, просто обнулите их перед переопределением.
Рекомендую не добавлять эту статью в закладки, а сразу попробовать то, что тут описано, если не знакомы с этими командами. Это реально удобно. Вряд ли кто-то специально проходит курсы по systemd или изучает все её команды. Зачастую всё знать не нужно, лишнее быстро забывается, в итоге только время тратишь. А такую мелочь где-то выхватишь, запомнишь и потом используешь. Я поэтому любою смотреть, как другие в терминале работают. Постоянно что-то новое узнаешь и обогащаешь свой опыт.
#systemd
Покажу на примере службы Nginx, установленной из пакета в стандартном репозитории. По умолчанию служба автоматически не поднимется, если по какой-то причине завершится. Вот это и исправим, добавив принудительный автозапуск.
/etc/systemd/system/multi-user.target.wants
, искал юнит nginx и смотрел, какие там установлены параметры. А можно сделать вот так:# systemctl cat nginx.service
Содержимое юнита прилетит в консоль. Удобно, и никуда ходить не надо. Простая вещь, но узнал я о ней относительно недавно. Там сразу и путь видно, где лежит файл с настройками, если захочется его посмотреть напрямую.
/etc/systemd/system/nginx.service.d
и туда положить конфигурацию override.conf
с перекрывающими или дополнительными параметрами. Так давно не делаю, потому что помню команду:# systemctl edit nginx.service
Открывается текстовый редактор по умолчанию. Вносим изменение:
[Service]
Restart=always
RestartSec=5s
Сохраняем. Конфигурация автоматически применяется. Теперь если набрать:
# systemctl cat nginx.service
То мы увидим и исходную конфигурацию и файл
/etc/systemd/system/nginx.service.d/override.conf
, который был создан автоматически после команды edit
. Не зная про команду
cat
, я каждый раз вручную проверял override.conf
и исходный юнит. Просто не довелось о ней услышать или где-то увидеть.override.conf
перекрывают такие же в основном юните, например ExecStart и некоторые другие, то значение нужно сначала обнулить, а потом записать новое значение. Например:ExecStart=
ExecStart=/usr/sbin/nginx -g 'daemon off; master_process off;'
Переписали параметры запуска, которые в основном юните выглядят так:
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
Обнулять надо не все параметры. Не помню точно, какие нужно, а какие нет. Точно знаю, что всё, что относится к Exec надо обнулять, переменные окружения, если хотите полностью все переопределить, пользователей, наверняка что-то ещё. Если какие-то добавленные изменения не работают, просто обнулите их перед переопределением.
Рекомендую не добавлять эту статью в закладки, а сразу попробовать то, что тут описано, если не знакомы с этими командами. Это реально удобно. Вряд ли кто-то специально проходит курсы по systemd или изучает все её команды. Зачастую всё знать не нужно, лишнее быстро забывается, в итоге только время тратишь. А такую мелочь где-то выхватишь, запомнишь и потом используешь. Я поэтому любою смотреть, как другие в терминале работают. Постоянно что-то новое узнаешь и обогащаешь свой опыт.
#systemd
Please open Telegram to view this post
VIEW IN TELEGRAM
С момента первого моего упоминания сервиса axiom.co, продолжаю его использовать. Вновь пишу о нём, чтобы рассказать тем, кто не видел эту информацию. Очень простой в настройке и удобный в использовании для хранения и анализа логов веб сервера. Я пользуюсь полностью бесплатным тарифом, который не требует никаких подтверждений и персональных данных. Аутентификация через учётку на github. При этом позволяет хранить 500GB логов в месяц. Мне этого за глаза.
Про настройку и использование я уже писал ранее. По настройке с тех пор ничего не поменялось. Для отправки используется Vector (иногда падает, надо мониторить и переподнимать), у него встроенная интеграция с axiom.
Axiom условно можно назвать аналогом ELK, только сильно урезанным в плане функциональности. Из-за этого его особо не надо изучать. Отправляешь туда логи, заходишь и мышкой создаёшь нужные дашборды, запросы, отчёты. С ELK так не получится. В новых версиях даже заходить не хочется в виджеты и дашборды. Каждый раз, как первый раз, приходится вспоминать, как тут что-то сделать и построить нужную визуализацию.
Например, я позавчера включил на сайте протокол HTTPv3. Решил сходить посмотреть, сколько запросов по этому протоколу выполняется. Сбор логов настроен по указанной выше ссылке. В веб интерфейсе axiom иду в раздел Query и мышкой в конструкторе строю запрос: Dataset = serveradmin.ru, Where != http_version, Summarize count(), group by http_version.
И получил график растущего использования HTTPv3. Протокол используется.
Или вот ещё пример. Посмотрим, по каким url на запросы выходят 404 коды ответов. Dataset = serveradmin.ru, Where status =~ "404", Summarize count(), group by url.
Думаю, идея понятна. В сервисе ничего такого особенного нет, чего нельзя было бы сделать где-то в другом месте. То же самое можно сделать в ELK, Graylog, Loki, Goaccess. Но тут всё бесплатно, ничего настраивать не надо. Просто оправляем логи и пользуемся. Разумеется, если у вас там ничего секретного нет. А то уже предвижу комментарии на тему того, что я свои секретные логи веб сервера никому показывать не могу. Если не можете, то не используйте облачные сервисы. Тут всё очевидно. Наверняка они эти данные как-то используют, иначе откуда такая щедрость.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#logs #webserver
Про настройку и использование я уже писал ранее. По настройке с тех пор ничего не поменялось. Для отправки используется Vector (иногда падает, надо мониторить и переподнимать), у него встроенная интеграция с axiom.
Axiom условно можно назвать аналогом ELK, только сильно урезанным в плане функциональности. Из-за этого его особо не надо изучать. Отправляешь туда логи, заходишь и мышкой создаёшь нужные дашборды, запросы, отчёты. С ELK так не получится. В новых версиях даже заходить не хочется в виджеты и дашборды. Каждый раз, как первый раз, приходится вспоминать, как тут что-то сделать и построить нужную визуализацию.
Например, я позавчера включил на сайте протокол HTTPv3. Решил сходить посмотреть, сколько запросов по этому протоколу выполняется. Сбор логов настроен по указанной выше ссылке. В веб интерфейсе axiom иду в раздел Query и мышкой в конструкторе строю запрос: Dataset = serveradmin.ru, Where != http_version, Summarize count(), group by http_version.
['serveradmin.ru']
| where isnotempty(http_version)
| summarize count() by bin_auto(_time), http_version
И получил график растущего использования HTTPv3. Протокол используется.
Или вот ещё пример. Посмотрим, по каким url на запросы выходят 404 коды ответов. Dataset = serveradmin.ru, Where status =~ "404", Summarize count(), group by url.
['serveradmin.ru']
| where status =~ "404"
| summarize count() by bin_auto(_time), url
Думаю, идея понятна. В сервисе ничего такого особенного нет, чего нельзя было бы сделать где-то в другом месте. То же самое можно сделать в ELK, Graylog, Loki, Goaccess. Но тут всё бесплатно, ничего настраивать не надо. Просто оправляем логи и пользуемся. Разумеется, если у вас там ничего секретного нет. А то уже предвижу комментарии на тему того, что я свои секретные логи веб сервера никому показывать не могу. Если не можете, то не используйте облачные сервисы. Тут всё очевидно. Наверняка они эти данные как-то используют, иначе откуда такая щедрость.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#logs #webserver
Основной вопрос, который возникает при включении прокола HTTPv3 для сайта: "А какая разница с прошлым протоколом? Зачем включать?". Я решил провести некоторые тесты на своём реальном сайте, включая и отключая h3. Для тестов взял хорошо известный мне инструмент WebPageTest и запустил у себя.
Как обычно, он не собрался без ошибок, пришлось поковыряться. Если кому-то интересен этот локальный сервис для теста производительности сайтов, дайте знать. Сделаю по нему свежую заметку, как собрать и запустить самую свежую версию сервера и агента. Его удобно использовать, так как можно запускать локально и исключать влияние сторонних факторов, которые обязательно будут в публичных сервисах.
Запустил я локальную версию WebPageTest на своём сервере и прогнал серию тестов с отключенным h3 и включенным. Для каждого прогона делал по 9 тестов с двумя запусками, когда второй использует кэш после первого запуска. И сравнил результаты, как между одинаковыми тестами в рамках h2 и h3, так и между ними. Различия между однотипными тестами были минимальны. И между h2 и h3 разница была стабильная.
Результаты получились неоднозначными. Поленился поднять локальную копию сайта. Тестировал на рабочем, который опубликован в интернет. Интересно увидеть практические результаты, а не лабораторные. В итоге разница получилась незначительная в пользу h2. Можно сказать в пределах погрешности, кроме одного значения - Time To first Byte и как его следствие - время начала отрисовки Time to Start Render. В режиме h3 она неизменно была выше, чем в h2. То есть дольше приходил ответ на первый запрос, и позже начиналась отрисовка. Параметр TTFB важный с точки зрения СЕО, так что даже не знаю, как реагировать на эти измерения. По идее надо отключать h3.
Внимательно смотрел на результаты и сравнивал. H3 даёт по всем параметрам результаты не хуже h2, а где-то даже лучше. DNS Lookup одинаковый, то есть проседания на DNS запросы нет, Total Connection Time у h3 неизменно ниже, загрузка всех элементов чуть быстрее, но Time to First Byte, за который по идее отвечает непосредственно сервер, всегда у h3 выше и из-за этого едут все остальные метрики, так как и отрисовка, и полная загрузка начинают отставать. Такое ощущение, что причина в реализации h3 в самом веб сервере. Надо тестировать с другими, но это довольно хлопотно, если разворачивать реальный сайт, а не синтетические странички.
Внизу показал результат сравнения, где получилась наиболее усреднённая картинка. Думаю, что разверну сайт отдельно локально и потестирую. Надо понять, в каком режиме всё же лучше оставлять сайты. В целом, с обоими версиями HTTP у меня результат получился хорошим, ниже рекомендованного порога, который считается хорошим результатом. Но всё равно, чем меньше, тем лучше. HTTPv3 пока отключил.
Было бы интересно узнать, если кто-то делал подобные тесты или видел где-то результаты. Нет возможности посвятить много времени этому вопросу, чтобы окончательно разобраться. Один сайт и веб сервер - не показатель. Надо массовые тесты делать.
#webserver #webpagetest
Как обычно, он не собрался без ошибок, пришлось поковыряться. Если кому-то интересен этот локальный сервис для теста производительности сайтов, дайте знать. Сделаю по нему свежую заметку, как собрать и запустить самую свежую версию сервера и агента. Его удобно использовать, так как можно запускать локально и исключать влияние сторонних факторов, которые обязательно будут в публичных сервисах.
Запустил я локальную версию WebPageTest на своём сервере и прогнал серию тестов с отключенным h3 и включенным. Для каждого прогона делал по 9 тестов с двумя запусками, когда второй использует кэш после первого запуска. И сравнил результаты, как между одинаковыми тестами в рамках h2 и h3, так и между ними. Различия между однотипными тестами были минимальны. И между h2 и h3 разница была стабильная.
Результаты получились неоднозначными. Поленился поднять локальную копию сайта. Тестировал на рабочем, который опубликован в интернет. Интересно увидеть практические результаты, а не лабораторные. В итоге разница получилась незначительная в пользу h2. Можно сказать в пределах погрешности, кроме одного значения - Time To first Byte и как его следствие - время начала отрисовки Time to Start Render. В режиме h3 она неизменно была выше, чем в h2. То есть дольше приходил ответ на первый запрос, и позже начиналась отрисовка. Параметр TTFB важный с точки зрения СЕО, так что даже не знаю, как реагировать на эти измерения. По идее надо отключать h3.
Внимательно смотрел на результаты и сравнивал. H3 даёт по всем параметрам результаты не хуже h2, а где-то даже лучше. DNS Lookup одинаковый, то есть проседания на DNS запросы нет, Total Connection Time у h3 неизменно ниже, загрузка всех элементов чуть быстрее, но Time to First Byte, за который по идее отвечает непосредственно сервер, всегда у h3 выше и из-за этого едут все остальные метрики, так как и отрисовка, и полная загрузка начинают отставать. Такое ощущение, что причина в реализации h3 в самом веб сервере. Надо тестировать с другими, но это довольно хлопотно, если разворачивать реальный сайт, а не синтетические странички.
Внизу показал результат сравнения, где получилась наиболее усреднённая картинка. Думаю, что разверну сайт отдельно локально и потестирую. Надо понять, в каком режиме всё же лучше оставлять сайты. В целом, с обоими версиями HTTP у меня результат получился хорошим, ниже рекомендованного порога, который считается хорошим результатом. Но всё равно, чем меньше, тем лучше. HTTPv3 пока отключил.
Было бы интересно узнать, если кто-то делал подобные тесты или видел где-то результаты. Нет возможности посвятить много времени этому вопросу, чтобы окончательно разобраться. Один сайт и веб сервер - не показатель. Надо массовые тесты делать.
#webserver #webpagetest
Коротенькая заметка про небольшой полностью бесплатный полезный сервис, который я стал использовать - newreleases.io. Добавляешь туда ссылку на какой-то проект, и он начинает следить за выходом обновлений. Поддерживаются различные источники информации - репозитории GitHub, GitLab, хранилище контейнеров Docker Hub и многие другие. Я по факту использовал только ссылки на guthub и docker hub, так как всё, что меня интересует, живёт там.
Сервис отображает все добавленные проекты в своём интерфейсе с номерами свежих версий, где можно быстро посмотреть историю версий и изменения, если они описаны.
Плюс, newreleases отправляет с настроенной периодичностью письма на почту со всеми обновлениями. Сделано просто и удобно.
Например, мне регулярно приходится обновлять Rocket.Chat. Каждый раз я иду в репозиторий, смотрю, какая там вышла свежая стабильная версия, меняю версию в инвентаре и обновляю контейнеры, перезапускаю. С newreleases задача упрощается.
Я наполнил список интересующими меня проектами. Теперь в едином интерфейсе с уведомлениями на почту могу следить за обновлениями. Да и просто список смотрится наглядно. Удобно быстро найти номер свежей версии интересующего тебя продукта.
У меня получился такой список:
- Rocket.Chat
- Joplin
- Gatus
- Docker-volume-backup
- Prometheus
- Php-src
- Zabbix
- Localsend
- Grafana
- Angie
- NXS-backup
- Roundcube
- Postfixadmin
- Lynis
- PeerTube
- ExplorerPatcher
- Scrcpy
- WebPageTest
- WG-easy
- Teamgram-server
- Cdebug
- Labean
- Pupirka
- Zabbix-in-Telegram
Скорее всего будет дополняться. Это только что, что вспомнил, когда принял решение пользоваться.
#сервис
Сервис отображает все добавленные проекты в своём интерфейсе с номерами свежих версий, где можно быстро посмотреть историю версий и изменения, если они описаны.
Плюс, newreleases отправляет с настроенной периодичностью письма на почту со всеми обновлениями. Сделано просто и удобно.
Например, мне регулярно приходится обновлять Rocket.Chat. Каждый раз я иду в репозиторий, смотрю, какая там вышла свежая стабильная версия, меняю версию в инвентаре и обновляю контейнеры, перезапускаю. С newreleases задача упрощается.
Я наполнил список интересующими меня проектами. Теперь в едином интерфейсе с уведомлениями на почту могу следить за обновлениями. Да и просто список смотрится наглядно. Удобно быстро найти номер свежей версии интересующего тебя продукта.
У меня получился такой список:
- Rocket.Chat
- Joplin
- Gatus
- Docker-volume-backup
- Prometheus
- Php-src
- Zabbix
- Localsend
- Grafana
- Angie
- NXS-backup
- Roundcube
- Postfixadmin
- Lynis
- PeerTube
- ExplorerPatcher
- Scrcpy
- WebPageTest
- WG-easy
- Teamgram-server
- Cdebug
- Labean
- Pupirka
- Zabbix-in-Telegram
Скорее всего будет дополняться. Это только что, что вспомнил, когда принял решение пользоваться.
#сервис
Не знаю, зачем может пригодиться сервис, о котором пойдёт дальше речь. Просто мне он показался необычным и прикольным – seashells.io. С его помощью можно через pipe отправить вывод любой консольной команды в браузер в режиме реального времени.
Идём по ссылке и смотрим на свой htop в режиме реального времени. Соответственно, можно придумать различные трюки с ним. Например, отправлять все новые команды консоли в браузер:
Можно логи туда направить:
Можно какой-то цикл запустить и смотреть на его выполнение:
Сервис бесплатный, опенсорсный. Если сильно хочется, можно собрать и запустить у себя серверную часть:
По умолчанию запустится на порту 8888. Можно идти по IP адресу в веб интерфейс: http://10.20.1.36:8888/
Отправляем команду на свой сервер:
В ссылке меняете seashells.io на 10.20.1.36, либо в локальном DNS назначаете seashells.io адрес своего сервера. А можно просто в исходниках поправить имя домена. В корне репозитория открываете файл main.go и меняете там baseUrl на свой. Тут же и ограничения на 5 одновременных подключений указано, можете тоже поменять. Я попробовал, пересобрал, всё получилось.
Если работать с этой штукой постоянно, то можно установить специальный клиент:
Такая необычная и простенькая программа уровня курсовой работы студента-программиста. Можете код посмотреть, что-то поменять там. Он простой и легко читается.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#remote
# htop | nc seashells.io 1337
serving at https://seashells.io/v/f45rYSeF
Идём по ссылке и смотрим на свой htop в режиме реального времени. Соответственно, можно придумать различные трюки с ним. Например, отправлять все новые команды консоли в браузер:
# exec > >(nc seashells.io 1337) 2>&1
Можно логи туда направить:
# tail -f /var/log/syslog | nc seashells.io 1337
Можно какой-то цикл запустить и смотреть на его выполнение:
# while true; do date +'%d-%b-%Y-%H:%M:%S'; sleep 1; done | nc seashells.io 1337
Сервис бесплатный, опенсорсный. Если сильно хочется, можно собрать и запустить у себя серверную часть:
# apt install golang git
# git clone https://github.com/anishathalye/seashells-server
# cd seashells-server
# go build
# cp env.sample env
# ./run.bash
По умолчанию запустится на порту 8888. Можно идти по IP адресу в веб интерфейс: http://10.20.1.36:8888/
Отправляем команду на свой сервер:
# htop | nc 10.20.1.36 1337
serving at https://seashells.io/v/Nuns8eRT
В ссылке меняете seashells.io на 10.20.1.36, либо в локальном DNS назначаете seashells.io адрес своего сервера. А можно просто в исходниках поправить имя домена. В корне репозитория открываете файл main.go и меняете там baseUrl на свой. Тут же и ограничения на 5 одновременных подключений указано, можете тоже поменять. Я попробовал, пересобрал, всё получилось.
Если работать с этой штукой постоянно, то можно установить специальный клиент:
# apt install python3-pip python3.11-venv
# python3 -m venv ~/seashells
# cd ~/seashells/bin/pip
# ./pip3 install seashells
# htop | ./seashells -i 10.20.1.36 -p 1337 --delay 5
serving at http://10.20.1.36:8888/v/uJe2XRUQ
Такая необычная и простенькая программа уровня курсовой работы студента-программиста. Можете код посмотреть, что-то поменять там. Он простой и легко читается.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#remote
У меня в канале в разное время выходили разборы рекомендаций по безопасности от проекта CIS — Center for Internet Security. Кто не видел их, рекомендую. Я почерпнул оттуда некоторые настройки для своих установок. Сами документы объёмные. Постарался взять из них самую суть, которая пригодится в среднестатистическом применении:
▪️ Nginx
▪️ MySQL 5.7
▪️ Apache 2.4
▪️ Debian 11
▪️ Docker
▪️ Ubuntu 22.04 LTS
▪️ PostgreSQL 16
Софт с тех пор уже обновился, вышли новые рекомендации на основе старых, но я не прорабатывал обновления. Базовые настройки чаще всего остаются те же самые с минимальными изменениями.
Отдельно отмечу проект Docker Bench for Security, который автоматически проверяет образы Docker на соответствие рекомендациям CIS.
Сегодня хочу развить эту тему и познакомить вас с проектом CIS Debian 10/11/12 Hardening от известного международного хостера OVH, который когда-то сильно горел. Этот проект состоит из bash скриптов для проверки вашей системы на базе Debian на соответствие рекомендациям по безопасности.
Проект сделан для автоматизации и гибкой, выборочной проверки. Тесты настраиваются, есть возможность исключать какие-то проверки. Можно проводить только аудит, а можно сразу применять изменения для приведения системы в заданные соответствия.
Покажу кратко, как пользоваться этими скриптами. Клонируем репозиторий:
Создаём файл
Теперь можно запускать как по отдельности проверки, так и все разом. Проверки находятся в директории
Я проверку провалил. У меня
Для того, чтобы запустить все тесты разом, можно использовать отдельный скрипт в папке
Будут выполнены все проверки, результат вывалится в консоль. Это неудобно, так как он может быть огромным. Лучше сразу направить вывод в текстовый файл:
Потом файл можно спокойно посмотреть, осмыслить. Смотреть удобно в less с подсветкой:
В конце увидите итоговый результат:
Его можно получить в json:
Для каждой проверки есть свой конфиг в
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#cis #security
▪️ Nginx
▪️ MySQL 5.7
▪️ Apache 2.4
▪️ Debian 11
▪️ Docker
▪️ Ubuntu 22.04 LTS
▪️ PostgreSQL 16
Софт с тех пор уже обновился, вышли новые рекомендации на основе старых, но я не прорабатывал обновления. Базовые настройки чаще всего остаются те же самые с минимальными изменениями.
Отдельно отмечу проект Docker Bench for Security, который автоматически проверяет образы Docker на соответствие рекомендациям CIS.
Сегодня хочу развить эту тему и познакомить вас с проектом CIS Debian 10/11/12 Hardening от известного международного хостера OVH, который когда-то сильно горел. Этот проект состоит из bash скриптов для проверки вашей системы на базе Debian на соответствие рекомендациям по безопасности.
Проект сделан для автоматизации и гибкой, выборочной проверки. Тесты настраиваются, есть возможность исключать какие-то проверки. Можно проводить только аудит, а можно сразу применять изменения для приведения системы в заданные соответствия.
Покажу кратко, как пользоваться этими скриптами. Клонируем репозиторий:
# git clone https://github.com/ovh/debian-cis.git && cd debian-cis
Создаём файл
/etc/default/cis-hardening
и добавляем туда информацию о директории, из которой мы будем запускать скрипты:# cp debian/default /etc/default/cis-hardening
# sed -i "s#CIS_LIB_DIR=.*#CIS_LIB_DIR='$(pwd)'/lib#" /etc/default/cis-hardening
# sed -i "s#CIS_CHECKS_DIR=.*#CIS_CHECKS_DIR='$(pwd)'/bin/hardening#" /etc/default/cis-hardening
# sed -i "s#CIS_CONF_DIR=.*#CIS_CONF_DIR='$(pwd)'/etc#" /etc/default/cis-hardening
# sed -i "s#CIS_TMP_DIR=.*#CIS_TMP_DIR='$(pwd)'/tmp#" /etc/default/cis-hardening
Теперь можно запускать как по отдельности проверки, так и все разом. Проверки находятся в директории
bin/hardening
. На каждый тест – отдельный bash скрипт с осмысленным названием. Например, 1.1.11_var_log_partition.sh
. Запускаем:# ./1.1.11_var_log_partition.sh
1.1.11_var_log_partition [INFO] Working on 1.1.11_var_log_partition
1.1.11_var_log_partition [INFO] [DESCRIPTION] /var/log on separate partition.
1.1.11_var_log_partition [INFO] Checking Configuration
1.1.11_var_log_partition [INFO] Performing audit
1.1.11_var_log_partition [INFO] Verifying that /var/log is a partition
1.1.11_var_log_partition [ KO ] /var/log is not a partition
1.1.11_var_log_partition [ KO ] Check Failed
Я проверку провалил. У меня
/var/log
находится на корневом разделе. С точки зрения безопасности и стабильности работы системы это не очень хорошо. Во-первых, логи могут заполнить весь корневой раздел. Во-вторых, отдельный раздел под логи можно смонтировать для большей безопасности с некоторыми дополнительными настройками, типа noexec, nosuid, noatime и т.д. Я всё это понимаю, но мне чаще всего удобнее с одним общим разделом для всего.Для того, чтобы запустить все тесты разом, можно использовать отдельный скрипт в папке
bin
:# ./hardening.sh --audit
Будут выполнены все проверки, результат вывалится в консоль. Это неудобно, так как он может быть огромным. Лучше сразу направить вывод в текстовый файл:
# ./hardening.sh --audit > ~/cis.txt
Потом файл можно спокойно посмотреть, осмыслить. Смотреть удобно в less с подсветкой:
# less -R ~/cis.txt
В конце увидите итоговый результат:
Total Passed Checks : [ 102/243 ]
Total Failed Checks : [ 141/243 ]
Enabled Checks Percentage : 100.00 %
Conformity Percentage : 41.97 %
Его можно получить в json:
# ./hardening.sh --audit --summary-json
Для каждой проверки есть свой конфиг в
etc/conf.d
, где её можно настроить или отключить. По проверкам можно делать либо аудит, либо вносить изменения в систему.❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#cis #security
Небольшой полезный проект на тему WireGuard, который в простых случаях заменяет веб интерфейс – wg-cmd. С его помощью можно в консольном режиме настроить сервер, добавить пользователей и прямо с консоли через QR-код настроить клиентов. Удобно, если сами настраиваете клиентов, к примеру, для своей семьи и прочих родственников, чьи смартфоны у вас под рукой.
Сразу предугадывая сообщения на тему того, что WG блокируют и т.д., скажу, что использовать WG надо внутри РФ на VPS. Это не заметка про то, как обходить блокировки и прочие ограничения. К этой VPS можно подключаться откуда-то извне (не наоборот) любым способом, который доступен. И на этой VPS решать все свои задачи, не трогая клиентские устройства.
Сразу напишу готовую инструкцию, чтобы можно было быстро воспроизвести. Делать всё буду на Debian 12.
Запустится консольный установщик. Можно на все вопросы ответить по умолчанию, ничего не меняя. Программа создаст все необходимые конфигурационные файлы, добавит правила в iptables, создаст wg интерфейс и юнит systemd.
После конфигурации откроется интерфейс управления сервером, где можно добавить клиента и тут же в консоли посмотреть QR код для него. В основном для этого обычно используется какой-то простенький веб интерфейс, типа wg-easy. Маленькая программа wg-cmd его заменяет. Можно добавлять и удалять пользователей, и считывать QR-коды. Больше она ничего не умеет. При желании можно руками в конфигурационных файлах клиентов что-то поправить, добавив дополнительные настройки.
Я лично проверил, всё завелось без проблем. Единственное, пришлось шрифт терминала немного уменьшить, чтобы QR-код поместился. Экрана ноута не хватило по высоте. Это самый простой и быстрый способ настроить WG и подключить клиента. И не надо веб интерфейс наружу выставлять и потом думать, чем его закрыть.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#wireguard #vpn
Сразу предугадывая сообщения на тему того, что WG блокируют и т.д., скажу, что использовать WG надо внутри РФ на VPS. Это не заметка про то, как обходить блокировки и прочие ограничения. К этой VPS можно подключаться откуда-то извне (не наоборот) любым способом, который доступен. И на этой VPS решать все свои задачи, не трогая клиентские устройства.
Сразу напишу готовую инструкцию, чтобы можно было быстро воспроизвести. Делать всё буду на Debian 12.
# apt update && apt install wireguard-tools iptables
# curl -SL https://github.com/andrianbdn/wg-cmd/releases/download/v0.1.6/wg-cmd-0.1.6-linux-amd64 -o /usr/local/bin/wg-cmd
# chmod 755 /usr/local/bin/wg-cmd
# wg-cmd
Запустится консольный установщик. Можно на все вопросы ответить по умолчанию, ничего не меняя. Программа создаст все необходимые конфигурационные файлы, добавит правила в iptables, создаст wg интерфейс и юнит systemd.
После конфигурации откроется интерфейс управления сервером, где можно добавить клиента и тут же в консоли посмотреть QR код для него. В основном для этого обычно используется какой-то простенький веб интерфейс, типа wg-easy. Маленькая программа wg-cmd его заменяет. Можно добавлять и удалять пользователей, и считывать QR-коды. Больше она ничего не умеет. При желании можно руками в конфигурационных файлах клиентов что-то поправить, добавив дополнительные настройки.
Я лично проверил, всё завелось без проблем. Единственное, пришлось шрифт терминала немного уменьшить, чтобы QR-код поместился. Экрана ноута не хватило по высоте. Это самый простой и быстрый способ настроить WG и подключить клиента. И не надо веб интерфейс наружу выставлять и потом думать, чем его закрыть.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#wireguard #vpn