ServerAdmin.ru
31K subscribers
537 photos
46 videos
20 files
2.81K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Регистрация в РКН: https://vk.cc/cG1Urj
Download Telegram
Настраивал на днях арендованный сервер без прямого доступа к консоли. Ещё и конфигурация была нестандартная, так что техподдержка вручную установила туда ОС и отдала мне с доступом по SSH. Нужно было настроить дополнительные диски и добавить их в fstab. Несмотря на то, что в современных ОС реально монтирует диски systemd, я по старинке предпочитаю добавлять новые точки монтирования в fstab.

В этом деле самое главное – не ошибиться и сразу после изменения файла проверить, что там всё в порядке. Иначе после перезагрузки можно получить проблемы. Без прямого доступа к консоли это может быть фатально.

Я обычно добавляю новые диски в систему следующим образом. Смотрю список дисков через fstab:

# fdisk -l | grep /dev/

Сразу видно диски без разметки. Добавлять разделы предпочитаю в cfdisk, а не напрямую в консоли через fstab. В TUI как-то нагляднее, меньше шансов ошибиться.

# cfdisk /dev/sdb

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

# mkfs -t ext4 /dev/sdb1

Монтирую в систему:

# mkdir /mnt/disk1
# mount /dev/sdb1 /mnt/disk1

Теперь нам надо добавить эту точку монтирования в fstab. По имени диска категорически нельзя добавлять. Диски могут менять свои имена. Причём это стало актуально в какой-то момент с очередным обновлением железа. Когда я только начинал изучать Linux, спокойно монтировал по именам дисков и проблем не было. В какой-то момент они начались. И сейчас я сам часто наблюдаю, что диски, как и сетевые интерфейсы, могут изменить свои имена после перезагрузки. Если используете LVM, то можно добавлять точки монтирования по имени LV.

Смотрим UUID раздела:

# blkid | grep /dev/sdb1

Добавляем его в fstab отдельной строкой:

UUID=eaf5c153-08b7-4ea8-8037-e6baad4cac0d /mnt/disk1 ext4 errors=remount-ro 1 0

А теперь проверяем, всё ли мы правильно добавили.

# findmnt --verify --verbose

Findmnt проверил все монтирования. В моём случае я получил предупреждение на /media/cdrom0.

[W] unreachable source: /dev/sr0: No such file or directory

Судя по всему систему ставили с какого-то диска, локального или сетевого, не знаю, но он остался в fstab. Делать ему там больше нечего, можно закомментировать строку с ним.

Более кратко можно получить информацию только об ошибках:

# findmnt -x

☝️Отдельно обращаю внимание на такой момент. До перехода управления к systemd было критически важно оставлять в fstab в конце файла переход на новую строку. Сейчас даже если этого не сделать, то проблем не будет. Всё нормально загрузится. Насколько я понимаю, это тянется из далёкого прошлого и POSIX-совместимой практики, когда файлы конфигурации заканчивались переходом на новую строку. Я лично до сих пор на всякий случай везде этой практики придерживаюсь.

Ещё один способ проверить корректность записей в fstab – использовать mount. Можно не монтировать вручную новый диск, а сразу добавить его в fstab. Потом запустить:

# mount -a -v

Утилита смонтирует все записи из файла, где не указан параметр noauto. Если вы всё верно добавили, то ошибок не увидите и получите смонтированным новый диск.

Расскажу, что будет, если, к примеру, ошибётесь с диском в fstab или он просто перестанет быть видим в системе. Я лично с этим не раз сталкивался. А однажды это привело к дальней дороге. Добавили наживую новый диск в сервер, я его добавил с ошибкой в fstab и не проверил. Сервер аварийно перезагрузился через полгода из-за обесточивания серверной. Возникли какие-то проблемы с доступом туда, ещё и сервер по неизвестной на тот момент мне причине не стартанул. Приехал туда ножками и увидел примерно то же самое, что вы видите на втором скрине.

Сразу понял, в чём дело, зашёл в режим обслуживания и поправил fstab. Так что внимательно относитесь к его настройке. Этой проблемы можно избежать, если использовать nofail в параметрах монтирования. Но с ним могут быть нюансы. Иногда лучше не загрузиться, если с разделом проблемы.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#linux
Я написал большую и насколько смог подробную статью по настройке кластера на базе Proxmox VE. По современным требованиям законодательства я вынужден промаркировать её как реклама, так как сервера для её написания мне предоставил хостер Selectel, а я оставил на него ссылки. Никаких требований непосредственно по рекламе предъявлено не было, кроме одного – в статье должно быть показано, как я заказываю услуги через панель управления. По содержанию и тексту не было ни единой правки. Всё продумал, настроил и написал лично я от и до.

Статья получилась универсальной без привязки к конкретным услугам, так как я использую обычные арендные сервера с установленной бесплатной версией Proxmox VE, а в качестве общих хранилищ для кластера – сетевые диски, подключаемые через iSCSI интерфейс. Настройка подобных дисков плюс-минус везде одинаковая. Разница если и будет, то в типе аутентификации или её отсутствии.

В статье отражены следующие моменты:

▪️Настройка Proxmox VE на серверах с двумя NVMe M.2 дисками, объединёнными в программный RAID1 на базе mdadm для отказоустойчивости на уровне дисков.
▪️Объединение трёх идентичных серверов в обычный кластер с локальными дисками и ручной миграцией виртуальных машин без их остановки.
▪️Настройка сети виртуальных машин с VLAN с помощью встроенной Proxmox SDN.
▪️Подключение к серверам сетевых дисков по iSCSI, добавление их в Proxmox и создание на их базе общих хранилищ для дисков виртуальных машин в формате LVM.
▪️Настройка HA (High Availability) на примере виртуальной машины и LXC контейнера. Я настраиваю HA, аварийно выключаю одну из нод кластера и показываю, как с неё автоматически переезжают ресурсы на работающие ноды.

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

Остались нерассмотренными пара других полезных конфигураций:

◽️Репликация виртуальных машин в кластере на базе файловых хранилищ в формате zfs.
◽️Использование кластера Ceph для виртуальных машин, построенного на базе этих же трёх нод кластера.

Изначально хотел всё это рассмотреть, но по факту материал получился и так очень большой, потратил на него много времени и банально не осилил. Возможно получится это сделать в будущих статьях.

Установка и настройка кластера Proxmox VE

Настройка кластера высокой доступности на базе Proxmox VE представляет из себя относительно простую, рядовую задачу. При этом выполнить её можно на любом железе, от самого бюджетного десктопного оборудования до серверных платформ. Сочетание софтовых решений по отказоустойчивости дисков на базе mdadm или zfs вкупе с функциональностью HA кластера Proxmox позволяют реализовать относительно (!) высокую доступность на любом поддерживаемом этой системой оборудовании. А так как сама система на базе ОС Debian и ядра Linux, поддерживает она практически любое более-менее современное железо.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#proxmox #статья
Расскажу кратенько с конкретными примерами, как я настраиваю ограничение на доступ к серверам и сервисам по статическим IP адресам и потом подключаюсь к ним, используя некоторое количество арендованных VPS для этих целей.

Я уже давно практикую и остальным советую не оставлять публичный доступ через интернет к сервисам, которые не являются публичными. Например, тот же SSH я открываю только для белого списка своих IP адресов. Для iptables это обычно выглядит так:

SSH_WLIST=100.189.229.125,141.73.66.12,187.91.13.196,83.208.103.44,194.139.219.214
iptables -A INPUT -i enp5s0 -s $SSH_WLIST -p tcp --dport 22 -j ACCEPT

В скрипте с правилами задана переменная со списком моих IP адресов и правило для SSH на его основе.

На VPS с перечисленными IP адресами настроены сервера OpenVPN. Они используются для различных задач, в том числе в качестве шлюзов для подключения к закрытым серверам. При подключении со своих рабочих машин я не направляю весь трафик в VPN. Это неудобно и мешает работе. В общем случае я использую прямой выход в интернет для типовых задач в виде сёрфинга в интернете, просмотра видео и т.д.

При подключении по VPN я получаю только те маршруты, что мне нужны. Например, я хочу подключаться к серверу c IP адресом 233.129.58.85 через конкретный OpenVPN сервер. Я иду на него и добавляю на сервере к конфигурации, привязанной к сертификату, который я использую при подключении, следующую настройку:

push "route 233.129.58.85 255.255.255.255"

При подключении по VPN ко мне в систему приедет маршрут до 233.129.58.85 через этот сервер. Подключение по SSH к этому серверу пойдёт через VPN. В настройке маршрута можно указать не только IP адрес, но и DNS имя. Примерно так:

push "route ya.ru 255.255.255.255"

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

allow-pull-fqdn

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

В такую схему легко добавляются новые VPS, новые пользователи (❗️), новые сертификаты со своими привязанными к ним настройками, и всё это управляется централизованно через сервера. Сами клиенты трогать не надо.

📌 Полезные ссылки по теме:

▪️Основные преимущества OpenVPN сервера
▪️Настройка allow-pull-fqdn
▪️Одновременный запуск нескольких клиентов OpenVPN
▪️Запуск OpenVPN сервера на разных внешних IP адресах
▪️Запускаем OpenVPN сервер за 443 портом веб сервера

На днях на одном из моих серверов протух CA, который был выпущен 10 лет назад. Такие встречаются долгожители. И это не первый случай. Писал и заметки здесь по этой теме, и статья на сайте есть.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#openvpn
Открытый практикум Linux by Rebrain: RAID массивы

После регистрации мы отправим вам подарок! Вы сможете найти его в ответном письме.

👉Регистрация

Время проведения:

21 мая (среда) в 20:00 по МСК

Программа практикума:

▫️Что такое RAID массив?
▪️Некоторые типы RAID массивов
▫️Практика работы с RAID массивами

Кто ведёт?

Андрей Буранов — специалист по UNIX-системам в компании VK, входит в топ 3 лучших преподавателей образовательных порталов. 10+ лет опыта работы с ОС Linux и 8+ лет опыта преподавания.

Бесплатные практикумы по DevOps, Linux, Networks и Golang от REBRAIN каждую неделю. Подключайтесь!

Реклама. ООО "РЕБРЕИН", ИНН: 7727409582, erid: 2W5zFHHfSaL
Я анонсировал ранее подборку сайтов IT блогеров со статьями на различные темы, связанные с настройкой и эксплуатацией IT систем. Собралось небольшое сообщество авторов. Полный список сайтов есть в прошлой подборке. А пока анонс новых статей тех авторов, кто согласился участвовать и прислал свои материалы. 

Разрабатываем мини-автоматизацию по оповещению администратора о факте НСД в Astra Linux
Оповещения администратора безопасности при попытках подключения незарегистрированных носителей информации к Astra Linux. Реализовано через правило udev, которое запускает скрипт при подключении носителя, скрипт отправляет запись в локальный syslog сервер, а тот пересылает в удалённый.

Человеческий фактор или вредные советы по Astra Linux
Несколько примеров из практики на тему того, как не работают внедрённые регламенты и правила.

Установка Astra Linux 1.8. Как установить и что нового?
Подробная статья на тему установки новой Astra Linux 1.8 от создания загрузочной флешки до разбивки диска и начальной настройки.

🔥 Windows и оперативная память
Подробная статья на тему работы с памятью в Windows: чем виртуальная отличается от физической, как происходит выделение памяти процессам, что такое рабочий набор, swap и др. Работа с утилитами RAMMap, Process Explorer, Testlimit, Strings, NotMyFault и poolmon. Кому не интересно всё это, можете перемотать в раздел Диспетчер задач Windows и память и посмотреть описание метрик памяти в диспетчере задач.

Как установить сертификат ECC (Elliptic Curve Cryptography) в Exchange Server
ECC сертификаты приехали в Exchange. Я давно начал их использовать для SSH и вам советую. Если быть точным, ECC - это алгоритм Elliptic Curve Cryptography (криптография на эллиптических кривых), а я имею ввиду ключи на базе алгоритма Ed25519, который основан на эллиптических кривых.

Как установить RSAT на Windows 11
Установка Remote Server Administration Tools для управления различными ролями Windows Server: AD, DNS, DHCP и другие.

Как исправить спам-сообщения в средстве просмотра очереди Exchange Server
Письма, отправленные на несуществующие адреса в вашем домене, обрабатываются, формируются отчёты о недоставке (NDR) и отправляются обратно отправителю. В статье рассказано, как с этим бороться.

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

Установка контроллера ZeroTier на свой сервер с помощью ZTNET
Selfhosted размещение ZeroTier контроллера со встроенной панелью администратора.

Построение защищенных виртуальных сетей с помощью Nebula
Объединение распределенных устройств в отдельную изолированную сеть с помощью Nebula.

Собираем docker образ DNS сервера Unbound
Создание собственного Docker образа популярного DNS сервера. Процесс рассмотрен очень подробно, так что материал можно использовать как пример сборки собственных образов других сервисов.

Поднимаем свой DNS сервер Unbound и блокировщик рекламы Pihole в docker
К собранному ранее образу с Unbound добавляется Pi-hole для блокировки рекламы.

Пользователи в Linux
Небольшая справочная статья по работе с пользователями в Linux - создание, удаление и т.д.

Использование sudo в Linux
База по установке и настройке Sudo. Кому любопытно, когда-то давно я написал статью Sudo не нужен при работе в консоли сервера.

SSH – Тонкая настройка клиента в Linux: config файл и ssh-agent
Примеры некоторых настроек клиента SSH, а также использование ssh-agent.

Ollama — Локальный ИИ на вашем Linux ПК
Установка Ollama и запуск на ней бесплатных моделей разной сложности.

RabbitMQ. Практика. Troubleshooting. CLI. Отсутствует утилита rabbitmqadmin
Небольшая заметка по установке консольной утилиты rabbitmqadmin.

Как полностью удалить Microsoft Office с компьютера
Использование утилиты Office Scrubber для очистки компа от следов офиса.

Основы SQL на примере PostgreSQL
База по синтаксису SQL на основе примеров в PostgreSQL.

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

Вам нужно узнать, есть ли необходимый модуль в составе Nginx. По идее всё просто:

# nginx -V

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

# nginx -V | grep http_realip_module

Вообще ноль изменений. И причины тут на самом деле не одна, а сразу две:

1️⃣ nginx -V выводит информацию не в стандартный поток с данными stdout, с которым работает grep и прочие консольные утилиты, а в stderr;

2️⃣ все модули перечислены одной строкой, так что грепнуть её содержимое не получится.

Показываю решение обоих проблем:

# nginx -V 2>&1 | tr ' ' '\n' | grep http_realip_module
--with-http_realip_module

Видим нужный нам модуль. Я сначала через 2>&1 направил поток stderr в stdout, чтобы с ним можно было работать консольными утилитами, а затем с помощью tr заменил все пробелы символами перехода на новую строку \n. В итоге у нас весь вывод nginx -V разбился на отдельные фразы, каждая в новой строке и после этого успешно грепнулся.

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

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#bash
Please open Telegram to view this post
VIEW IN TELEGRAM
⚠️ Terraform меняет правила игры в DevOps. Хотите освоить инструмент, с которым инфраструктура развертывается в несколько кликов?

На открытом вебинаре 20 мая в 20:00 МСК вы узнаете, как Terraform делает инфраструктуру управляемой, прозрачной и масштабируемой. Разберём ключевые понятия: провайдеры, состояние, модули и переменные. Вы узнаете, почему IaC стал золотым стандартом DevOps.

💪 Научитесь автоматизировать развёртывание ресурсов, избавьтесь от рутинной ручной работы и освободите время на действительно важные задачи.

👉 Регистрируйтесь прямо сейчас и получите скидку на программу обучения «DevOps-практики и инструменты»: https://clck.ru/3M6C8k

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Парочка наглядных примеров вранья ИИ, в частности ChatGPT. Последнее время регулярно им пользуюсь, практически каждый день, для решения различных задач и поиска информации. Фактически он мне стал заменять поиск. Я не использую каких-то больших промтов для решения масштабных задач. Скорее использую его как базу данных и расширенный поиск. Соответственно и пишу туда примерно то же самое, что я бы спросил у поисковика. Результат получается лучше.

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

А как быть тем, кто только учится и использует в качестве помощника ИИ? По идее это делать нельзя, а в процессе обучения и наработки опыта вообще противопоказанно им пользоваться. Нужно всё перепроверять, а это потеря времени. А если ты не специалист, то узнаешь, что надо перепроверять только тогда, когда уже случится ошибка и тебе на неё кто-то укажет.

В примере с mount ошибка сразу видна, а вот в первом неочевидна, так как проверить её весьма затратно. И если перепроверять все результаты, которые выдал ИИ, то окажется, что самому составить список было бы быстрее. И такое случается нередко. Иногда ИИ ходит вокруг да около решения, предлагая тебе нерабочие варианты, а на отладку тратится времени больше, чем если бы ты сам его сделал с помощью подсказок со stackoverflow.

У меня отношение средненькое к современным ИИ. Зачастую не понимаю восторгов в их адрес. Да, пользоваться можно и нужно. Результат хороший в вопросах анализа и обобщения информации, клонировании контента в заданном стиле с заданными правками, создания изображений, инфографики. И очень посредственный в создании чего-то нового. Те же скрипты он пишет, но без отладки и исправления ошибок практически никогда не обходится. И это в довольно простых задачах, которые в общем-то можно сходу нагуглить. Более сложные не пытался решать, так как задач под это нет. Возможно у программистов другие выводы по этой теме.

#AI #chatgpt
Искал на днях материалы на тему Playwright. Это фреймворк для веб тестирования и автоматизации, более современный аналог Selenium. Последний я немного учил, но он довольно замороченный, с полтычка не освоишь. Playwright показался немного попроще в каких-то базовых вещах.

Рассказать сегодня хотел не об этом. Я попал на сайт к какому-то девопсу, где были материалы по Playwright. Я немного походил по нему и набрёл на раздел DevTools. Он там собрал то ли свои, то ли просто open source инструменты для решения простых прикладных задач. Вроде ничего особенного, но некоторые вещи я просто не знал, что вообще существуют. Всегда их делал вручную.

Покажу сразу на примерах, что мне показалось полезным:

- Docker Run to Docker Compose Converter
Отправляем в форму однострочник с docker run и получаем файл для docker compose. Вроде мелочь, но я всегда это делал вручную. Не думал, что кому-то придёт в голову написать конвертер.

- Docker Compose to Docker Run Converter
И соответственно в обратную сторону преобразование из docker compose в однострочник для docker run. Не припоминаю, чтобы мне приходилось такие преобразования делать, но в тему к первому упоминаю.

- Bash Command Formatter
Эта штука тоже очень понравилась. Она длинный однострочник разбивает на строки с переходами через \ То есть вот такую колбасу:

curl -v --url "smtp://mail.server.ru:25" --mail-from "root@server.ru" --mail-rcpt "user@gmail.com" --user 'root@server.ru:password123' --upload-file ~/mail.txt

Нарезает на кусочки:

curl -v \
 --url "smtp://mail.server.ru:25" \
 --mail-from "root@server.ru" \
 --mail-rcpt "user@gmail.com" \
 --user 'root@server.ru:password123' \
 --upload-file ~/mail.txt

Я тоже всегда это вручную делал, особенно для публикации сюда. Можно упростить себе задачу.

- URL Extractor
Просто кидаешь сюда любой текст, а на выходе получаешь набор ссылок, если они в нём присутствуют.

Там много всяких конвертеров и анализаторов синтаксиса для json, yaml, toml, csv. Не стал обращать на них внимание, так как их существует десятки. Обычно просто в гугле ищут что-то подобное, когда надо преобразовать. Посмотрите список, может вам что-то ещё приглянётся. Меня впечатлили только эти четыре штуки.

#devops #docker #bash
💡 Если вы ведете поддержку клиентов и управляете проектами, приходите на вебинар

«Скорость, экономия, контроль: как управлять проектами и клиентским сервисом в единой системе»

🗓 22 мая, 11:00 МСК

Покажем, как на платформе ITSM 365 создать типовой клиентский проект, а затем бесшовно и с минимумом затрат перейти к сервисному обслуживанию.

Что еще узнаете на встрече:

👉 Какие инструменты есть в системе для быстрого запуска проекта и контроля над его ходом

👉 Простая коммуникация между командами и с заказчиками: каким образом?

👉 Какие данные наследует сервисная поддержка после реализации проекта. Спойлер: многие, включая первичную настройку системы.

👉 Быстрый старт обслуживания: как подготовить систему к приему заявок за 15 минут

👉 Как автоматизировать рутину и вести всю работу по проектам и сервису в едином окне

👉 Аналитика по проектам и поддержке: что умеет оценивать система и насколько гибко ее можно настроить?

Нажмите, чтобы зарегистрироваться.
Ждем вас!
🔗

Обзор платформы от автора канала:
Обзор ITSM 365 – Service Desk система для малого и среднего бизнеса

Реклама, ООО «Смартнат» 6658396257, erid: 2SDnjc472kd
Please open Telegram to view this post
VIEW IN TELEGRAM
Часто возникают ситуации, когда хочется силами веб сервера закрыть доступ к какому-то непубличному ресурсу. Причём не обязательно у этого ресурса нет своей аутентификации. Если нет явной необходимости то и её стоит закрыть от посторонних глаз. Расскажу, какими способами это можно сделать в веб сервере Angie/Nginx.

1️⃣ Basic Authentication. Самый простой и быстрый способ, известный очень давно. Для аутентификации используется текстовый файл с сохранёнными там парами логин-пароль. Очевидное неудобство – этот файл нужно вести отдельно от любых других хранилищ учётных записей.

2️⃣ Модуль ngx_http_auth_request_module. Это модуль от команды Nginx, который работает относительно просто. Он создаёт подзапрос к какому-то внешнему сервису и если получает от него код ответа 2xx, доступ разрешается, если 401 и 403, то запрещается. В качестве внешнего сервиса могут использоваться разные системы с разными бэкендами для хранения учётных данных. Например, для аутентификации через LDAP обычно используют nginx-ldap-auth. Полная схема работы с ним есть в статье на сайте Nginx.

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

3️⃣ Модуль ngx_http_auth_ldap_module. Это внешний модуль стороннего разработчика для аутентификации через внешний LDAP сервис. Его отличие от предыдущего варианта в намного более простой настройке. Вся логика подключения к LDAP каталогу настраивается в конфигурации веб сервера. Он делает все запросы к каталогу и выполняет аутентификацию.

4️⃣ Модуль ngx_http_auth_spnego_module. Этот модуль позволяет настроить аутентификацию через Active Directory с помощью Kerberos. Его удобство относительно описанных выше способов в том, что если у вас браузер поддерживает сквозную аутентификацию Kerberos, то доменные пользователи будут автоматически попадать на закрытые ресурсы без необходимости отдельно вводить учётные данные.

5️⃣ Сервис SSO, например, Authentik. Решил вынести этот способ в отдельный пункт, хотя это и не совсем корректно. Это может быть комбинация различных методов аутентификации, так как тот же Authentik, к примеру, может выступать в качестве LDAP каталога, либо реализовывать тот же метод Basic Authentication, только с хранением учётных данных у себя.

Если будете использовать внешние модули, то удобнее взять Angie, так как там в базовом репозитории они все уже есть. Для Nginx скорее всего что-то придётся собирать самому в зависимости от дистрибутива. Где-то в репозиториях есть модули, где-то нет.

Современным и удобным способом является использование сервиса SSO. Наиболее известные - Keycloak, Authentik, Authelia, ZITADEL. Список составлен от сложного и тяжёлого к более простому и лёгкому. Они реализуют в том числе современные технологии типа OAuth2, OTP (one-time password), OpenID Connect и т.д. Но и, соответственно, требуют больше внимания и времени на настройку. Если какой-то модуль Nginx можно быстро установить и настроить, то с SSO придётся повозиться. Для простых ситуаций это может быть неоправданно.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#nginx #angie
Please open Telegram to view this post
VIEW IN TELEGRAM
⚠️ Как настроить Nginx и Angie для стабильной и быстрой работы при большом количестве запросов?

👉 Приглашаем на вебинар: Оптимизация Nginx и Angie под высокие нагрузки

На вебинаре вы узнаете:
- Как оптимизировать системные параметры для повышения производительности
- Как правильно настроить TLS и сократить накладные расходы на шифрование
- Какие возможности по кэшированию есть у Nginx и Angie и как их эффективно использовать
- Как измерять и анализировать клиентскую и серверную производительность

В результате вебинара вы:
- Научитесь выявлять и настраивать ключевые параметры, влияющие на производительность
- Сможете оптимизировать конфигурацию Nginx и Angie под конкретные сценарии нагрузки
- Попробуете применять техники кэширования и настройки TLS для снижения нагрузки
- Поймёте, как оценивать эффективность настройки и устранять узкие места

Все участники получат скидку на большое обучение «Инфраструктура высоконагруженных систем».

👉 Для участия зарегистрируйтесь: https://clck.ru/3M9Dua

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Существует удобный и функциональный инструмент для добавления интерактива в shell скрипты под названием Gum. Я посмотрел несколько примеров, в том числе на ютубе, как люди решают те или иные задачи с его помощью. Синтаксис очень простой, особо разбираться не надо. Можно сходу брать и писать скрипт.

Я для примера решил сделать поиск по директории с выводом топ 10 самых больших файлов, из которых можно какие-то выбрать и удалить. Сделал просто в лоб на bash – сформировал список, отправил его в gum и добавил действие для выбранных файлов:

#!/bin/bash

DIR="/tmp/backup"
files=$(find "$DIR" -type f -exec du -b {} + 2>/dev/null | sort -nr | head -n 10 | awk '{print $2}')
selected=$(echo "$files" | gum choose --no-limit)
delete=$(echo -e "$selected")

if [[ -z "$delete" ]]; then
echo "Ничего не выбрано."
exit 0
fi

gum confirm "Удалить выбранные файлы?" &&
echo "$delete" | xargs -d '\n' rm -f && echo "Выбранное удалено."


Понял, что всё получилось и решил как-то это усложнить и сделать более удобным. Дай, думаю, попрошу Chatgpt что-то написать. На самом деле не рассчитывал на успех, так как это не особо популярный инструмент. Откуда ему взять навык написания скриптов для gum? Вряд ли их много в интернете можно найти.

Отправил ему адрес репозитория и попросил сделать 2 списка: один с самыми большими файлами, второй – с самыми старыми. Причём вывести их вместе на один экран, в списках отобразить размер файлов и их даты.

Задача не сильно сложная, но немного муторная, так как списки надо правильно сформировать, объединить, пункты выбора насытить дополнительной информацией в виде размера файлов и даты. Потом всё это надо очистить, чтобы передать на удаление только имя файла. Чтобы самому это сделать, надо потратить какое-то время.

Chatgpt меня удивил, когда практически сразу же выдал рабочее решение. Там были ошибки по части bash. Нужно было что-то экранировать, а что-то получше очистить. А вот в части непосредственно Gum он на удивление сразу же всё корректно оформил в соответствии с его возможностями. Я думал, что-то выдумает от себя нерабочее, но нет.

В итоге минут за 15-20 со всеми тестами я получил рабочий вариант скрипта. Реально, был очень удивлён. Не так давно его мучал конфигурациями Nginx, по которым море примеров в сети, но так и не добился того, что хотел. А тут какой-то Gum и сразу всё заработало.

☝️ Какое в итоге резюме. Gum – прикольная штука, которую можно приспособить под какие-то свои задачи. Например, выбор подключений по SSH, работа с ветками GIT, работа со списками файлов и т.д. Тут уж каждому своё. А второй момент – используйте ИИ для своих задач. Где-то он мимо советует, а где-то сразу рабочий вариант даёт. Причём в таких небольших прикладных задачах он нормально работает. На bash пишет уверенно. Есть проблемы, но поправить после него намного проще, чем написать самому, вспомнив все возможности и ключи консольных утилит.

Итоговый скрипт

Использовать:

# ./cleanup-with-gum.sh /mnt/backup

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#bash #AI #script
Современная веб разработка и частично эксплуатация плотно завязаны на Docker контейнеры. Они используются повсеместно. Недавние истории с временной блокировкой docker hub и внедрением новых лимитов одним днём усложнили жизнь тем, кто завязан на публичное хранилище образов в виде Docker Hub. При этом нет никаких проблем использовать своё Docker Registry, причём как для хранения своих образов, так и кэширования запросов с Docker Hub.

Использовать своё хранилище образов имеет смысл уже при наличии хотя бы пары разработчиков, которые с ними работают. Я уже кратенько упоминал, что существуют различные бесплатные self-hosted решения:

🔹Gitlab Registry или Gitea Registry. Их имеет смысл использовать, если у вас используется одноимённая инфраструктура для хранения кода. С Gitlab Registry проблем особых нет, кроме некоторых заморочек с проксированием, а у Gitea Registry после релиза были некоторые баги. Сейчас не знаю как, наверное уже поправили.

🔹Nexus - известное хранилище для репозиториев и Docker образов. Это комбайн, где можно хранить всё, что угодно: deb и rpm репы, репозиторий контейнеров, npm репозиторий, pypi и многие другие. Если у вас задача только для Docker, то наверное такой комбайн большого смысла использовать нет. Хотя каких-то особых проблем с установкой и настройкой не будет. Я не раз его настраивал. Установить и запустить в работу относительно просто. Всё управление через веб интерфейс.

🔹Docker Registry - продукт от самого Docker. Это был маленький легковесный проект без GUI. Сейчас глянул, а он уже deprecated, его кому-то отдали и переименовали в Distribution. Не знаю даже, что про него сказать. Описание куцее. Посмотрел документацию. На вид это продолжение того же небольшого проекта без GUI, что не очень удобно. Есть веб интерфейс от стороннего разработчика - docker-registry-ui.

🔹Harbor. На нём я хочу остановиться подробно. Это самостоятельное open source хранилище для образов Docker с встроенным веб интерфейсом и хорошим набором возможностей в open source версии. Вот основные:

◽️управление доступом на основе ролей (RBAC)
◽️поддержка LDAP для аутентификации
◽️автоматическая проверка образов с помощью Trivy
◽️режим работы как proxy/кэш-сервер для Docker Hub или других Registry

Имеем универсальное, бесплатное и функциональное решение для собственного хранилища образов. Для небольшой установки подойдёт обычная VPS с 2CPU и 4GB оперативной памяти. Показываю пошаговую установку:

# curl https://get.docker.com | bash -
# wget https://github.com/goharbor/harbor/releases/download/v2.12.3/harbor-online-installer-v2.12.3.tgz
# tar xzvf harbor-online-installer-v2.12.3.tgz
# cd harbor/
# cp harbor.yml.tmpl harbor.yml

В конфигурации надо указать:

hostname: domain.example.com # или IP-адрес

Для использования HTTPS надо предварительно получить сертификаты и указать их:

https:
 port: 443
 certificate: /etc/letsencrypt/live/338365.simplecloud.ru/fullchain.pem
 private_key: /etc/letsencrypt/live/338365.simplecloud.ru/privkey.pem

Можно получить как бесплатные от Let's Encrypt, так и использовать самоподписанные. Я получил бесплатные так:

# apt install certbot
# certbot certonly -d 338365.simplecloud.ru

Укажите пароль для admin и место для хранилища образов. Остальные настройки можно не трогать.

harbor_admin_password: Harbor12345
data_volume: /data

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

# ./prepare
# ./install.sh --with-trivy

Дожидаемся загрузки и запуска всех контейнеров. После этого идём в веб интерфейс по настроенному ранее домену. Логинимся под учётной записью admin и паролем из конфигурации.

В разделе Registries добавляем Endpoint и указываем Provider - Docker Hub. Cоздаём новый проект, ставим галочку Proxy Cache, указываем созданный Endpoint.

На рабочей машине логинимся:

# docker login <harbor-host>
# docker pull <harbor-host>/cache/nginx

Сache - имя созданного проекта. Образ nginx будет скачан через Harbor и останется там в кэше.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#devops #docker