Bash Days | Linux | DevOps
23.7K subscribers
223 photos
26 videos
773 links
Авторский блог от действующего девопса

Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.

Автор: Роман Шубин
Реклама: @maxgrue

MAX: https://max.ru/bashdays

Курс: @tormozilla_bot
Блог: https://bashdays.ru
Download Telegram
Ну вот и всё, приплыли тапочки к дивану…

TL:DR: Всё хорошо, НЕ расходимся.

Ладно, томить не буду. Блокировки это всегда неприятно, но раз ты это читаешь, значит ты уже достаточно подкованный в определенных технических вопросах и умеешь приспосабливаться к реалиям. Это ценно! Могу только пожать тебе руку и снять шляпу.

Большинство на панике массово мигрируют в «то самое», но наш с тобой ледокол уверенно пробирается сквозь льдины. Так что, я не планирую никуда лукаться отсюда и буду продолжать свою деятельность именно здесь.

Ну а кто всёже поддался и не подстелил соломку, весь контент который я тут пилю для тебя — дублируется в «то самое». Все нужные ссылки есть в подписи к каждому посту. Старые материалы потихоньку перетащу в блог, ничего не потеряется.

Да, Linux Factory продолжает работать, заходи если чё, замажем пати. Если нужен промик со скидкой 1000р (на месяц) на новый вход не стесняйся — пиши сюда.


Как говорится: Кто хочет — ищет возможности, кто не хочет — ищет причины.

Всех обнял, хорошего тебе дня и увидимся!

🛠 #рабочиебудни

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
10111
Всем привет.

Я тут с удивлением обнаружил, что в debian 13 исчезли команды last и lastb которые позволяли смотреть удачные/неудачные попытки ssh/sftp

🔤🔤🔤🔤🔤🔤🔤

А я к ним так привык... journalctl — прекрасен, но лазить по логам — так себе занятие.

Решил немного упростить, чтобы вывод был в виде таблички: timestamp ip login

Иногда мальчиши-плохиши подсовывают «пустого» пользователя " ", и чтобы число полей было всегда три, я заменяю его на ":", используется в качестве разделителя /etc/passwd, и поэтому такого логина не должно быть.

journalctl --output=short-unix --unit=ssh |
gawk '{match($0,/.*for( invalid user)? +(.*?) +from (([0-9]{1,3}[.]){3}[0-9]{1,3})/,a)
#^ это одна длинная строка
if(a[2]==""){a[2]=":"} # заменили "пробельного usera" на ":"
if(a[3]!="") print $1, a[3],a[2]}'



#Отображение только неудачных попыток
journalctl --output=short-unix --unit=ssh |
gawk '/error: maximum/{match($0,/.*for( invalid user)? +(.*?) +from (([0-9]{1,3}[.]){3}[0-9]{1,3})/,a)
#^это одна длинная строка
if(a[2]==""){a[2]=":"} # заменили "пробельного usera" на ":"
if(a[3]!="") print $1, a[3],a[2]}'


Если нужно ограничить диапазон дат можно использовать ключ

--since="@TIMESTAMP"

где TIMESTAMP дата вида 1773848322.767923 или 1773848322 или просто --since="-1 day"

Если не нравится дата в timestamp замените последнюю строчку на:

if(a[3]!="") print strftime("%Y%m%d_%H%M%S",$1), a[3],a[2]}'


Или какой-нибудь свой формат. Я, вообще не спец по regexp, поэтому, если кто-нибудь поможет ускорить выражение — буду благодарен.

Всем кода без багов.

🛠 #bash #linux

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
844
Forwarded from Selectel
🗂️ Podman — почти Docker
Но есть пара нюансов

Podman разрабатывался с упором на безопасность. Из-за этого могут возникнуть неочевидные ошибки при монтировании томов (volumes).

Вместе с Романом Шубиным — СТО и автором канала Bash Days — мы заглянули в кроличью нору и разобрали типичные ошибки при работе с Podman в файловой системе.

Подробнее про ключи, Named Volume и SELinux читайте по ссылке ➡️

Только переходите к практике?
Протестируйте Podman в серверной ОС от Selectel 🏢
Please open Telegram to view this post
VIEW IN TELEGRAM
34
С пятничкой ребята. Ваш покорный 👆 снова в телевизоре. Рекомендую почитать, довольно интересное чтиво получилось.
49
Media is too big
VIEW IN TELEGRAM
Сижу, думаю, а чем бы тебя сегодня порадовать? Техническими темами не хочу, блевать от них уже хочется, вчера 5 постов написал на тему Podman, скоро поделюсь, много интересного наковырял.

Лови короче пиздатую игрульку, которую я нашел на днях. Работает в браузере, ничего устанавливать не нужно.

Называется — DeepNet

Это симулятор хакера в стиле киберпанк. Весь интерфейс это терминал, минимум графики. Сделано ОЧЕНЬ реалистично и атмосферно. Выглядит потрясающе.

Основной геймплей примерно такой:

- сканируешь сети (поиск целей)
- находишь сервисы и уязвимости
- подбираешь «эксплойты» под них
- получаешь доступ к системе
- работаешь с файлами через команды Bash команды
- крадёшь данные, чистишь следы, ставишь бэкдоры

Это не сюжетная игра, а скорее песочница с системами, где мир реагирует на твои действия и уровень внимания растет к твоим хакерским проделкам.

По наполненности:


- полностью клавиатурное управление
- онлайн-мир, который меняется со временем
- дофига консольных команд 100+
- симуляция файловых систем
- экономика, продаёшь данные, прокачиваешь железо
- firewall-правила, ханипоты, торги между игроками

Внутри игры есть DeepOS, это ретро десктоп, в котором есть окна, темы, мини приложения, редакторы кода. Можно переключаться между GUI и терминалом.


Лучше один раз потрогать самому, чем читать описание. Затягивает с потрохами. Немного похожа на Hacknet, но более прокаченная, более живая.

Короче потыкай, рекомендую.

🛠 #games #security #privacy

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
146
Здрасти, кого не видел. Потыкал я короче хвалёный Warp Terminal в рамках автоматизации с гитом, кодом и инфраструктурой. Сюда не влезло, да и скудно тут с форматированием.

Поэтому камон сюда читать → https://two.su/zvubi

🛠 #devops #dev

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
32
Цыганское лото: выиграл шляпу — проебал пальто.

Кого бесит поисковик Duckduckgo, есть вполне достойная альтернатива, называется Startpage.

Преподносит себя как супер-пупер приватный из Нидерландов.

Поисковик сам по себе делать нихуя не умеет, но получает результаты из гугла и бинга. И якобы скрывает твои поисковые запросы, данные, айпишники и т.п.

Как это работает:

- Ты вводишь запрос
- Startpage отправляет его в Google от своего имени
- Убирает всё, что может тебя идентифицировать
- Возвращает результат тебе


В итоге гугол «видит» не тебя, а startpage. А капчу за тебя решают бедолаги из стран третьего мира за миску супа и початок кукурузы.

Насколько всё приватно?

Ну на бумаге одно, по делу другое. Если на тебя ордер выпишут, то эта конторка выдаст все что есть на тебя с потрохами.

С другой стороны так делают ВСЕ! Нахуй им заботиться о каком-то чёрте, если их бизнес в разы приоритетнее. Логично? Логично!

Но как альтернатива Duckduckgo, работает вполне вменяемо.

А если хочешь прям нормальную приватность и владеть самостоятельно всеми данными и запросами, то проще поднять свой подобный поисковик. А как это сделать, я уже писал тут.

Такие дела, чё, изучай!

🛠 #services #security #privacy

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
36
К чужому берегу лебеди да галки, а к нашему — хуи да палки.

С понедельничком ребят. Несу тебе очередную радость для ушей.

На этот раз сборник музла из кейгенов/трейнеров/патчеров, который оформлен в виде удобного веб-плеера. Что прикольно, есть плагины для браузера, тыкаешь и оно играет.

Для рабочего фона прям хорошо заходит, никакой долбёжки и выбивания их потока.

Ссылка: https://two.su/8yp6o

А еще можно скачать нечто подобное с вебархива, там около 2х гигов, глядишь где-то сгодится.


🛠 #services #music

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
46
Привет. А у тебя спина белая 🥳

Недавно упоминал в чатике про цикл статей которые я написал про Podman, лови следующую.

Рекомендую ознакомиться, столько интересного и неочевидного раскопал. Возможно это подтолкнет тебя к переезду с docker в podman.


Healthcheck инструментами Podman → https://two.su/3kcvf

🛠 #devops #dev

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
26
This media is not supported in your browser
VIEW IN TELEGRAM
Чтива вам нового написал 👉 https://two.su/3vqdm

🛠 #devops #dev #podman

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
32
Диагностика проблем через контрольные суммы

🔤🔤🔤🔤🔤🔤🔤

Всем привет.

У меня на этой неделе случилась беда. На одной машине пользователя стала глючить 1с. Уже и кэши очищали, и машину перезагружали - глючит и все. Пало подозрение на повреждение самой 1с.

Можно было бы просто переставить, и забыть. Но мне хотелось именно убедиться, что проблема на диске.

Нужно просто рекурсивно сравнить два каталога по содержимому файлов. Каталог со старой установкой переименовал, поставил заново и начал сравнивать.

Проще всего это сделать с помощью rsync:

rsync -ncrv /old1c /1c


-n (--dry-run) — только тестирование
-c (--checksum) — по содержимому
-r (--recursive) — рекурсивно
-v (--verbose) — подробности

Вот только ставить на клиентскую машину rsync ради одного сравнения, так себе идея. Да и если забыть ключик -n, можно убить данные. Решил сделать все костылями:

find  /old1c /1c -type f -printf "%f " -exec md5sum {} \; |
awk '{print $2,$1}'|sort |uniq -c|awk '$1%2'


-type f — только файлы

-printf "%f " — печатаем basename

-exec md5sum {} \; — для каждого файла вычисляем md5

|awk '{print $2,$1}' — сначала md5, потом файл (не принципиально, но красивее)

|sort |uniq -c — на первой позиции - число уникальных записей. Без sort uniq не работает.

|awk '$1%2' — печатаем только строки, с нечетным числом записей.

Поскольку сравниваем два предположительно одинаковых каталога, то в идеале, файлы должны быть в четном количестве. Если у файлов c одинаковыми basename разная md5, то их число будет нечетным.

В общем, как я и предполагал, нашлись файлы с разной контрольной суммой. Значит повреждение было на диске. Ну, и после переустановки 1с, проблема ушла.

На самом деле проблема не такая редкая. Дело в дисках. Есть такая характеристика как Неисправимых ошибок чтения/прочитанных бит.

Например, на wd blue 1E-14, на wd gold 1E-15, на SSD Micron 7450 MAX 1e-17. То есть серверный ssd в 1000 раз надежней, чем бюджетный hdd. Просто не всегда эти ошибки одинаково заметны.

Кстати, rsync работает значительно быстрее. Если данных много — используйте его.

Всем работы без багов.

🛠 #debug #devops

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
60
Как превратить DNS-сервер в пушку для DDoS-атаки

Разбираем механику DNS Amplification атак и выясняем, почему использование ANY-запросов превращает твой сервер в инструмент для DDoS. Узнай, как работают векторы усиления трафика и как правильно настроить защиту на BIND и Unbound.


В DNS есть такая прикольная штука, как ANY запрос, его суть — выдать тебе сразу все DNS записи по нужному домену.

Запрос вида:

dig chklst.ru ANY


Я встречал много Bash скриптов, которые на этом запросе завязаны, да чё греха таить, вчера буквально обратился товарищ (малваря-аналитик) с запросом — всё пропало, не работает, ааааа!!!

dig chklst.ru ANY

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; EDE: 21 (Not Supported): (Type ANY Queries not supported here, RFC8482)
;; QUESTION SECTION:


Хотя раньше всё работало из коробки и Bash скрипты вели себя предсказуемо. Но опять же, в зависимости от DNS сервера, результаты могли разница. Тебе могли отдать данные, которые в предыдущем запросе были совсем другими.

Логично. Провайдеры рано или поздно приходят к этому, начинают блокировать подобные запросы. Всё это связано с дидос атаками. Погоды эти ANY запросы не делают, но создают большую проблему и головную боль. Основная проблема — DDoS amplification.

Самый адекватный способ борьбы с этим — отключить всё нахуй и поломать возможный вектор атаки. Короче непредсказуемость ANY запроса это плохая практика. Запрос ANY никогда не был стандартизирован - «как получить всё».

Читать продолжение: https://two.su/dzg0a

🛠 #security #devops

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
39
А какие способы хитрой подмены файлов помимо mount --bind ты знаешь?

echo first >first.txt
echo second >second.txt
ln -s first.txt second.txt

# Выведет: ln: cannot create symbolic link from 'first.txt' to 'second.txt': File exists

mount --bind first.txt second.txt
# А так работает.

cat second.txt
#Выведет first.


Наверное можно еще через cgroups замутить, или через eBPF понаделать хуки на системный вызов open, openat, туда же mount overlay...

🛠 #shitcode #bash

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
24
Твой сайт — решето! Или как не обосраться

Недавно я показывал тебе как настроить свой собственный поисковый движок на SearXNG, ну так вот, нашел на просторах агрегатора, который собирает такие публичные поисковики в табличку. И по сути можно на чужих серверах устроить себе полноценный поиск по интернету.

Ссылка: https://searx.space/

Зачем? Ну к примеру нужно тебе что-то быстро анонимно поискать, а своё детище поднимать в хуй не упёрлось. Открываешь такой публичный поисковик и ебешь его в хвост и в гриву. Но естественно не забываем предварительно включить КВН или соксы.

Для браузеров есть пиздатые плагины: Zero Omega и FoxyProxy.

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


СТОП! Яж про другое…

Пойдем дальше, на этом сайте я увидел рейтинги настройки серверов и вспомнил, когда я 100 лет назад поднимал инстанс с собственным mastodon сервером, я упарывался в безопасность и прям активно соблюдал эти рейтинги. Потом это всё забылось и сегодня решил проверить свой основной блог и мягко говоря прихуел.

Мой социальный рейтинг по SSL был на уровне «D» — да вы батенька не девопс-инженер, вы пидор ебаный!

Дела, дела! Надо это исправлять.

Чё значит этот рейтинг?

Сервис Mozilla Observatory смотрит не на код приложения, а на то, насколько правильно настроен твой сервер и заголовки безопасности.

A / A+ = всё настроено пиздато
B / C = терпимо, но ты все равно долбаёб
D / F = хуйня, переделать, серьёзные дыры, почти нет защиты


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

Если кратко — это линтер безопасности, а рейтинг всего лишь сводная оценка качества настроек и твоих компетенций.

Основные категории проверки:

1. HTTP-заголовки безопасности
2. HTTPS и TLS
3. Cookies
4. Защита от известных атак

Хули, давай это исправим, мне пришлось добавить такое в свою конфигурацию, чтобы добить рейтинг в более-менее вменяемую зону и получить заветную букву «B». Чтобы получить «A» мне придется немного перекроить работу с javascript, но пока мне лень.

Собственно конфиг:

add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-src 'self' https://video.bashdays.ru https://xn--r1a.website; connect-src 'self' https://api.rss2json.com https://bashdayz.ru;" always;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

add_header X-Frame-Options "SAMEORIGIN" always;

add_header X-Content-Type-Options "nosniff" always;

add_header Referrer-Policy "strict-origin-when-cross-origin" always;


Это защита от XSS атак и внедрения чужого контента. Я прописал доверенные сайты с которыми работаю. Но узкой дыркой осталось «unsafe-inline», с помощью него я разрешил inline JS, чтобы мои статусы из mastodon корректно передавались. Вот эту штуку и нужно будет допилить, чтобы получить по ебалу рейтинг «A+».

Всегда используй протокол https, включая поддомены.

Предоставляет защиту от clickjacking, разрешает вставку сайта в iframe только с того же домена, но у меня уже это прописано в первом заголовке. Похуй, оставляем. Кстати он уже устаревший, но все еще используется.

Запрещает браузеру угадывать тип файла, например сервер отдал JS как text/plain, браузер мог бы «догадаться» и выполнить. Теперь хуй, ничего не выполнит.

Контролирует, что отправляется в Referer, хороший баланс приватности и аналитики.

Если подытожить, получаем — грузи ресурсы только отсюда, не доверяй подозрительной хуйне, всегда используй https и не давай сайту быть встроенным куда попало.

На этом собственно и всё, можешь пойти и проверить свои компетенции в настройке.

Поделись в комментах своим социальным рейтингом, хоть позавидуем.

🛠 #security #devops

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
44
Всем привет. Что мы все о bash да и bash. Надоело. Сегодня поговорим про awk.

🔤🔤🔤🔤🔤🔤🔤

Не много осталось админов, которые парсят текстовые логи. Вся молодежь и даже пОдростки перешли на JSON. Ну да, это удобно. Но иногда awk быстрее. Особенно на больших файлах и файлах и простых фильтрах.

Но я сегодня не в настроении устраивать холивар.

При использовании логов очень часто возникает проблема — очень большое количество полей. А awk зачастую использует именно номер поля.

Так вот, чтобы немного упростить задачу я написал маленький скрипт, который разбирает строку и нумерует поля. Это здорово экономит время.

Сам скрипт:

#!/bin/awk -f
BEGIN{printf "INPUT field separator "
getline
FS=$0
printf "INPUT test line\n"
getline
printf "\n\n"
for (i=1;i<=NF;i++)print i, $i
}


Как обычно сохраняем fields.awk и делаем исполняемым:

chmod +x fields.awk
./fields.awk


Как это работает:

1. Сначала вводим разделитель.
2. Затем строчку лога и получаем разбивку по полям.

Ввод разделителя нужен, потому что иногда уже внутри кода приходится использовать оператор split и другой разделитель. Да и логи бывают разных форматов.

Рассмотрим такой пример:

<134>1 2026-04-17T16:51:47+03:00 OPNsense.internal filterlog 18074 - [meta sequenceId="2054702"] 111,,,4b75111111111111111111111111cb1d,eno1,match,block,in,4,0x0,,64,27367,0,DF,6,tcp,60,192.168.2.125,192.168.7.14,60248,22,0,S,1539242113,,65535,,mss;sackOK;TS;nop;wscale


В этом случае, если нужно одновременно вытащить и дату и IP с портами, проще в качестве основного разделителя использовать ",", а потом первое поле:

<134>1 2026-04-17T16:51:47+03:00 OPNsense.internal filterlog 18074 - [meta sequenceId="2054702"] 111


Здесь, если мы разбить по пробелам (split($1,f," ")), то f[2] будет содержать дату. Которую в свою очередь можно путем нехитрых манипуляций превратить в unuxtime, для удобства машинной обработки.

Всем кода без багов.

🛠 #bash #linux

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
142
Свой S3 или пошаговая настройка Garage

Здрасти, здрасти. Теперь по выходным у меня полнейший «цифровой детокс», а причина этому — дача. Круче всякого спортзала прокачивает, а заодно прочищает голову. Физический труд всегда в почёте.

Ладно, это детали… сегодня будем поднимать собственный S3 и да, без хуйни вроде minio и ceph.

А на помощь к нам приходит «Гараж», в котором мы и будем хранить наши «Вёдра». Garage ориентирован на маленький и средние кластера, домашние сервера и распределенные ноды. И да, он полностью в opensource и не просит денег. Для self-host пиздатейшее решений, да и морда есть из коробки.

Я возьму 3 своих рандомных сервера и сделаю из них кластер. Сервера не пустые, на них что-то крутится и вертится, просто рядышком впендюрю еще одну хуёвинку.

Почему именно 3 сервера? Кластерная классика, если один из серверов пойдёт по пизде, то 2 других соберут кворум и отдадут тебе твои данные. То есть тебе не нужно иметь заранее подготовленные машины, можно взять какойнить хлам и из него запилить кластер под бекапы. И всё это дело будет работать нативно через API S3.

Да, когда ты будешь заливать файлы в своё облако, данные будут реплицироваться на все 3 сервера. Поэтому сервера рекомендую держать в разных регионах или вообще у разных провайдеров. Например, если сгорит один дата центр, то ты не проебешь свои данные. Удобно и надёжно. Ну и смотри в сторону дискового места, если на одном сервере выделил 50 гигов под бакет, то на остальных серверах выдели столько же, чтобы не возникало коллизий.


Прицепом воткнем балансировщик нагрузки, чтобы по домену всё работало. И да, запускать будем в докере.

Поехали настроим это безобразие.

Демон докера надеюсь у тебя уже установлен, поэтому заострять внимание на этом не будем. Заходим на первый сервер и мутим мутки:

Файл compose.yaml:

services:
garage:
image: dxflrs/garage:v2.3.0
ports:
- "3900:3900" # S3 API
- "3901:3901" # RPC
- "3902:3902" # Web (optional)
- "3903:3903" # Admin API
volumes:
- ./garage.toml:/etc/garage.toml:ro
- ./meta:/var/lib/garage/meta
- ./data:/var/lib/garage/data


Думаю, вопросов не должно возникнуть. Банальный композник, порты я тебе все подписал. Версию гаража можешь глянуть в интернете, на момент написания статьи последняя v2.3.0. Да буква «v» тут важна и latest тут не канает.

Читать продолжение: https://two.su/3qjfl

🛠 #devops #linux

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
54
Такс, S3 кластер на Garage в предыдущем посте мы с тобой сообразили, самое время накрутить обвесов и сделать всё по взрослому. Как ты любишь — без хуйни.

Нежных сразу — нахуй, остальным велком.


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

Проверяем наш кластер:

docker exec -it garage-garage-1 /garage status


Работает. Дальше берем еще один сервер, который будет выступать балансировщиком. Для теста я создам в Selectel нищую виртуалочку и впихарю на нее haproxy.

Устанавливаем haproxy:

apt install haproxy


Домен для кластера я буду использовать s3.linuxfactory.ru, соответственно во всяких rclone нужно будет прописать его в параметре endpoint.

Правим конфиг /etc/haproxy/haproxy.cfg:

global
log /dev/log local0
maxconn 4096

defaults
mode tcp
timeout connect 5s
timeout client 1m
timeout server 1m
option http-server-close
timeout http-request 10s
timeout queue 1m

frontend garage_front
bind *:443 ssl crt /etc/ssl/garage.pem
option http-buffer-request
default_backend garage_back

backend garage_back
balance roundrobin

server node1 95.123.123.116:3900 check
server node2 152.44.71.205:3900 check
server node3 145.83.116.20:3900 check


Проверяем валидность конфиги:

haproxy -c -f /etc/haproxy/haproxy.cfg


Приучи себя всегда это делать, будь то nginx либо что-то другое. Однажды это спасет твою жопу от пенетрации.


Ага, хуй там плавал. Давай создадим SSL сертификат. Я конечно предпочитаю angie, чтобы он сам это сделал, но у нас haproxy, поэтому придется немного пострадать...

Читать продолжение: https://two.su/aaahd

🛠 #devops #linux

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
26
Относительная нумерация

Частенько народ интересуется, а почему у меня в виме такая странная нумерация. Да, этим вопросом и я в своё время задавался. Называется это «Относительная нумерация».

Главная идея здесь — быстрое перемещение по коду с клавиатуры.

Например, курсор стоит у меня в 27 строке. Если я сейчас выполню комбинацию: 6j, то курсор у меня встанет на строку: Не забудь подставить своё мыло. Такая нумерация показывает расстояние до строки от курсора, а не её абсолютный номер.

Аналогично работает и в других направлениях. В редакторе ZED это включается через конфиг:

relative_line_numbers": "enabled"


В виме же по классике в конфиге:

set number  
set relativenumber


Честно, если ты пользуешься мышкой, это бесполезная настройка. Для новичков это совсем неочевидная фича и возможно даже вредная. Короче у этой фичи целая философия:

➡️ Мышление расстояниями. В заурядной жизни, ты будешь думать — ага, мне бы на строку 15 попасть. А если ты адепт вима, твоё мышление такое — мне бы на 6 строчек ниже.

➡️ Ускорение всех count-команд. Тут не только клавиши hjkl задействованы, ты можешь выполнять ряд других операций. Например:

5dd — удалить 5 строк
3yy — скопировать 3 строки
4> — сдвинуть 4 строки вправо
2} — прыгнуть на 2 абзаца


Ты сразу видишь нужное число, сразу прожимаешь нужную комбинацию.

➡️ Сильно уменьшает мысленную математику. Без — так… я на 120 строке, мне нужно на 133… это +13. С ней — вижу 13 → 13j.

Мозги по сути вообще ничего не считают. Это плюс. Думаешь не головой, а жопой.

➡️ Работает лучше с большими файлами. Когда у тебя файл на 1000+ строк, абсолютные номера создают шум, а относительные прям в тему. Ты ориентируешься вокруг курсора, а не во всём файле.

Минусы? Да конечно!

➡️ Поначалу выламывает тебя, перестраивает, больно
➡️ Плохо подходит для дебага с конкретными строками

В общем относительная нумерация, это не про цифры, она про то, чтобы перестать искать строки и моментально перепрыгивать в нужное место.

Если есть чё добавить, камон в комменты, будет интересно почитать.

🛠 #devops #linux

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
44
Hugo за 30 секунд. Мой пайплайн на Gitea Actions

Наконец-то дошли руки до оптимизации пайпа для сборки Hugo в Gitea, да, есть куда еще стремиться, но там уже с жирными файлами нужно поработать.

Пост больше для энтузиастов и для тех кто хочет посмотреть, как всё происходит под капотом. Можешь взять мою болванку и под свои проекты переделать.

Читать: https://two.su/942is

🛠 #devops #dev

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
24