SSH туннели
SSH туннели
SSH часто приходит к нам на выручку, когда нужно подключится к какому-то удаленному серверу и что-то там поправить. Однако помимо своего самого частого использования SSH предлагает достаточно обширные возможности. Одна из них - это SSH-туннели. Суть заключается в том, что поднимая между двумя машина в сети SSH-подключение, у вас есть возможность пробросить порты этих машин в пряму и обратную сторону. Разберем подробнее где это может пригодиться и как это сделать.
Как сделать документ из Markdown файла?
Как сделать документ из Markdown файла?
Ситуация: у Вас есть инструкция в README.md и ее срочно нужно превратить в документ, который можно было бы передать коллегам для ознакомления. Ридми достаточно объемный, разделен на части и имеет оглавление. Все это должно работать в экспортируемом документе. Как это сделать?
Возможно есть масса эффективных способов. Поэтому вот еще один, который был успешно опробован на личном опыте:
- Необходимо сконвертироать README.md в HTML-файл. Это позволит сохранить навигацию внутри документа. Подойдет любой софт, который решает данную задачу. Например - markdowntohtml
- Если в документе есть картинки, то необходимо заменить src в них с ссылок на base64 embeded, чтобы картинка оказалась внутри полученного HTML-файла. Можно воспользоваться готовой утилитой для конвертации Вашей фотографии в Base64
Настройка прокси-заголовков на nginx ingress controller
Настройка прокси-заголовков на nginx ingress controller
Настройка прокси-заголовков на nginx ingress controller
Для проксирования заголовков X-Forwaded-Host, X-Forwaded-Port, X-Forwaded-Proto, X-Forwaded-Scheme и прочих X-Forwaded-* с балансировщика, который стоит перед ingress’ом K8s, на ingress controller’е необходимо выставить параметр use-forwarded-headers в значение true.
К нему Так же желательно установить параметр proxy-real-ip-cidr, чтобы принимались запросы только от тех узлов, которым доверяет ingress. В данном параметре указывается маска подсети разрешенных адресов.
Основы работы с jmap
Основы работы с jmap
jmap - это утилита работы со статистикой и дампами памяти JVM. Более подробную инофрмацию можно получить в описании на сайте Oracle. Мы же ограничимся лишь небольшим перечнем самых распространенных команд, которые могут пригодиться в повседневной отладочной практике:
jmap -dump:format=b,file=/tmp/dump.bin <PID>
Сохранить полный дамп памяти в бинарном виде (все объекты в памяти). Его можно будет открыть с помощью Memory Analyzer (MAT) и сравнить с другими такими же дампами
Для быстрого анализа могут быть полезны команды:
Основы работы с tmux
Основы работы с tmux
tmux - это дословно терминальный или консольный мультиплексор для серверов на UNIX-подобных ОС. Его задача обеспечить возможность работы в несколько терминалов в рамках одной ssh-сессии. Это бывает удобно, когда невозможно обеспечить работу в несколько вкладок на стороне клиента. Выглядит это примерно так:

С помощью команды tmux new или просто tmux запускается новая сессия мультиплексора. Будьте осторожны, каждая такая сессия будет запускаться и жить параллельно с остальными. Поэтому если сессия была ранее запущена, то можно подключиться к ней с помощью команды tmux attach. Выход из любого окна в рамках tmux осуществляется либо выполнением команды exit в окне, либо комбинацией клавиш Ctrl+D.
Отладка разных версий Java в Intellij IDE
Отладка разных версий Java в Intellij IDE
Если Вам еще ни разу не приходилось отлаживать свой Java-код, то рекомендую попробовать это сделать в Intellij IDE. Данная среда разработки хорошо справляется с этой задачей. Однако иногда можно столкнуться с ошибкой в процессе подключения к удаленной или локальной Java-машине, которую Вы собираетесь отлаживать. Например такой:
Error: handshake failed connection prematurally closed intellij debugger
Информативности ей немного недостает, но к счастью решается она несложно. Одна из частых ее причин - неправильное задание параметра агента на стороне отлаживаемой Java-машины. Этот параметр несколько изменился в процессе развития версий языка Java. Так что будьте внимательны.
Подключение к OpenLDAP
Подключение к OpenLDAP
Если Вы находитесь на Linux-сервере, на котором работает демон slapd (OpenLDAP), то подключиться к нему можно несколькими способами. Но прежде, чем подключаться, следует убедиться, что slapd скомпилирован и сконфигурирован должным образом. В общем случае slapd должен быть собран с поддержкой SASL и при запуске у него должен быть правильно настроен URL для подключения.
Необходимые приготовления перед подключением
Если Вы используете slapd из пакета пакетного менеджера ОС, то скорее всего он будет корректно собран. Если же вы собираете его из исходных файлов, то:
Служебные учетные записи
Служебные учетные записи
Иногда нужно создать служенбного пользователя для того, чтобы не запускать ту или иную службу от имени root.
Предположим, что мы работаем с openldap. Тогда нам может помочь следующая компанда:
sudo useradd -m -r -s /bin/false openldap
Разберем параметры, которые были использованы:
- -m - создать домашний каталог. Не обязательно, но может быть полезно, чтобы хранить какую-то дополнительную конфигурацию, которая должна быть доступна только этому сервисному пользователю
- -r - системный пользователь. Такой пользователь не сможет войти в систему традиционным способом
- -s /bin/false - отключаем оболочку (shell) для пользователя. Дополнительная мера безопасности, лишаем пользователя традиционной консоли
Если нужно выполнить команду от имени служебного пользователя…
Иногда бывает нужно выполнить ту или иную команду от имени служебного пользователя. Как это сделать, если мы отключили ему shell?
Очень просто! Нам нужно задать нужную оболочку в момент вызова команды. Сделать это можно через root-пользователя. Например:
Создание сервиса в Linux
Создание сервиса в Linux
Иногда возникает необходимость сделать из какого-нибудь скрипта или небольшого приложения сервис под управлением ОС Linux, чтобы превратить простой исполняемый файл в устойчивую систему, не боящуюся отказов и перезагрузки сервера.
Предположим у нас есть небольшой скрипт на Python, который использует собственное виртуальное окружение venv, содержащее все необходимые библиотеки для работы. Сделать из такого скрипта сервис на Linux можно выполнив следующие шаги:
- Создаем файл сервиса в соотвествующей папке systemd:
/etc/systemd/system/app-service.service. Название данного файла определит название создаваемого сервиса -app-service. Содержимое файла будет выглядеть примерно так:[Unit] Description=Our app description. Use english to avoid cyrillic encoding problems [Service] User=user1 WorkingDirectory=/home/user1/python_projects/app ExecStart=/home/user1/python_projects/app/.venv/bin/python /home/user1/python_projects/app/app.py [Install] WantedBy=multi-user.targetuser1- Пользователь Linux с домашним каталогом в папке/home/user1/home/user1/python_projects/app- Рабочая директория скрипта, содержащая исходный код (app.py) и виртуальное окружение (.venv)WantedBy=multi-user.target- параметр, отвечающий за момент загрузки нашего сервиса при старте системы. Это самое распространенное значение для пользовательских сервисов
- Регистрируем сервис в
systemdи разрешаем его запуск. И затем запускаем его:systemctl enable app-service systemctl start app-service - Чтобы посмотреть состояние нашего сервиса и перезапустить его при необходимости, можно использовать следующие команды:
systemctl status app-service systemctl restart app-service - Если мы захотим поменять что-то в ранее созданном нами файле сервиса
app-service.service, например добавить какие-то параметры запуска для нашего скрипта, то после внесения изменений достаточно выполнить единственную команду:Данная команда повлияет только на конфигурацию при следующих запусках сервиса. Поэтому если мы хотим, чтобы изменения применились в уже работающим экземпляре, его необходимо будет перезапустить.systemctl daemon-reload
Шаблоны в контейнере nginx
Шаблоны в контейнере nginx
Настраивая nginx под один из проектов, я столкнулся с необходимостью использовать переменные окружения в его конфигурации. Оказалось, что Docker-образ из коробки поддерживает такую возможность: создание конфигурации с подстановкой переменных окружения посредством шаблонов.
Работает это очень просто: нужно положить файл с нужным расширением в правильную папку внутри контейнера с nginx, и тогда магия сработает. По шагам:
Создаем файл конфигурации nginx. Помещаем в него нужные переменные окружения, задаем расширение
.conf.templateи монтируем внутрь контейнера по пути/etc/nginx/templates/app-config.conf.template. Пример части такого шаблона конфигурации на секцииserver: