среда, 19 апреля 2023 г.
Пересборка nginx для поддержки модуля vts
https://dragonflybsd.blogspot.com/2019/03/nginx-prometheus-dashboard-grafana.html
Вводные: есть сервер с ubuntu 16.04, которому нужно добавить модуль vts, стоит nginx=1.17.10
Решаем задачу.
Запускаем контейнер с нужной версией
docker run -ti --rm --name ubuntu16 ubuntu:16.04
Подготовка
apt update
apt install -y build-essential wget git sudo vim curl
# для удобства
export VERSION=1.17.10
cd /usr/local/src/
1) вариант через пакеты
ansible versions
Бывает, нужна какая-то версия ансибла.. а смтришь в пакеты...
Коротко:
https://pypi.org/project/ansible/#history
https://github.com/ansible/ansible/tags
Полно:
docker build unable to find user XXX: no matching entries in passwd file
Также применимо к docker exec -ti -u XXX ... и подобным
1) добавить юзеру ХХХ группу докера: # usermod -a -G docker XXX
2) использовать uid вместо юзера, можно через ... -u $(id -u XXX) ...
суббота, 15 апреля 2023 г.
Чем может грозить точка в конце доменного имени
Чем может грозить точка в конце доменного имени
Точку можно убрать такой конструкцией в блоке server:
if ($http_host ~ "\.$") { return 301 $scheme://$host$request_uri; }
И сразу замечание: если проверять конструкцию через curl, редиректа не будет.. потому что курл режет точку. А вот wget - нет. Бонусом - если нужно несколько редиректов сделать, вгет их сам сделает.
Бонус: часто есть желание вырезать несколько слэшей подряд, для этого нужны такие конструкции:
merge_slashes off;
if ($request_uri ~ "^(.*)/+$") { rewrite ^/(.*)/$ /$1 permanent; }
суббота, 18 марта 2023 г.
Multi-Master Replication Solutions for PostgreSQL
https://www.percona.com/blog/multi-master-replication-solutions-for-postgresql/
Впрочем, есть ещё slony, и найдено такое
Большая часть отказоустойчивых кластеров со Слоном реализованы либо на стеке коросинка с писмэйкером, либо на repmrg. Чуть меньше на патрони. При этом именно коросинк с писмэйкером позволяют реализовать сколь угодно сложные и изощрённые решения. Если не стоит задача делать master-master.
четверг, 9 марта 2023 г.
Как подключить S3 как диск?
Предисловие: скорость работы оставляет желать лучшего, но иногда лучше чем ничего...
Самое популярное: s3fs
https://github.com/s3fs-fuse/s3fs-fuse
Для начала, нужно сделать бакет, и записать файл с кредами, формат ID:KEY, в файл $HOME/.passwd-s3fs или /etc/s3fs-storage если будет монтироваться через fstab, и обязательно ставим права 0600, иначе может не монтировать.
На примере edgecore
Монтирование из консоли:
sudo s3fs <bucket> <local_dir> -o passwd_file=/etc/s3fs-storage -o allow_other -o url=https://s-dt2.cloud.edgecore.ru -o use_path_request_style
Если же требуется отладка то добавляем в конец этой строки:
-o dbglevel=info -f -o curldbg
в убунте 20.04 работают оба.
https://github.com/yandex-cloud/geesefs
(а ещё там есть сравнение с несколькими другими проектами)
- goofys - similar to s3fs but has better performance and less POSIX compatibility
- CSI for S3 - Kubernetes CSI driver
- docker-s3fs-client - Docker image containing s3fs
https://tecadmin.net/mount-s3-bucket-centosrhel-ubuntu-using-s3fs/
PS
app-uploads /srv/storage fuse.geesefs _netdev,allow_other,--endpoint=https://s-dt2.cloud.edgecore.ru,--cache=/tmp/geesefs.cache,--memory-limit=400,--read-ahead-large=20480,--dir-mode=0755,--file-mode=0644,--uid=1015,--gid=1015 0 0
вторник, 7 марта 2023 г.
Почему лучше заранее выключать query cache в mysql
Если вкратце - есть проблемы с локами (mutex lock), которые однопоточные... и уже выпилено в 8 версии.
воскресенье, 19 февраля 2023 г.
systemd restart=always
так, памятка чтобы системд вечно рестартил сервис
Необходимо, но не достаточно restart=always :
The default limit is to allow 5 restarts in a 10sec period. If a service goes over that threshold due to the Restart= config option in the service definition, it will not attempt to restart any further.
The rates are configured with the StartLimitIntervalSec= and StartLimitBurst= options and the Restart= option controls when SystemD tries to restart a service.
среда, 15 февраля 2023 г.
python3: ubuntu 16 и ошибки про docker
Проблемы только на Ubuntu16 и ниже.
apt install -y python3-pip
pip3 install --upgrade pip
После предыдущего шага pip сломается, нужно переустановить из скрипта
curl https://bootstrap.pypa.io/pip/3.5/get-pip.py -o get-pip.py; python3 get-pip.py --force-reinstall
Нужно переподключиться, чтобы подтянулись новые енвы.
pip3 install --upgrade --force-reinstall docker
pip3 install docker-compose
Если на предыдущем шаге ломается с ошибкой установки cffi : "fatal error: ffi.h: No such file or directory"
apt install libffi-dev
еще раз:
pip3 install docker-compose
Docker: volumes, bind vs volume
https://maximorlov.com/docker-compose-syntax-volume-or-bind-mount/
https://docs.docker.com/storage/
Есть 4 вида "внешнего" хранения: volume, bind, tmpfs, named pipes. Обычно используются первые три, но tmpfs это "диск в памяти" - место ограничено рам, при перезагрузке очищается.. для чего-то временного. А вот для постоянного хранения - первые два. И разницы на самом деле не так много, volume можно управлять через docker volume, и описывать в конфиге как new_volume:/app/data. При этом, если указать в первой части полный путь, то если нет такого файла/каталога то будет создан каталог, если есть то просто подцепит. Если путь не полный то будет в /var/lib/docker/volumes/, а если первую часть (имя опустили) то /.../some_uuid. Но инфу можно получить через docker volume ls
В случае бинда всё проще, создаётся обычный mount bind, если каталога нет - будет ошибка, плюс если это не RO вольюм то его обязательно описывать ещё и в главном блоке в отдельном volume, иначе будет ошибка. Так же, данный вид более опасен тем, что можно примонтировать например /etc
суббота, 4 февраля 2023 г.
nginx redirect с исключениями
Типовой редирект в nginx (нужен например для сео, чтобы одна страница не открывалась по двум урлам)
rewrite ^/(.*)/$ /$1 permanent;
Но иногда нужно пропустить отдельные пути, например /api/...
Оказывается, можно это сделать красиво и элегантно
rewrite ^(/(?!api/).*)/$ $1 permanent;
(но чаще слэши добавляются, читать про browsing context)
суббота, 28 января 2023 г.
mysql proxy?
Когда-то может понадобиться mysql proxy. Была версия "официальная", которая так и называлась, но в репе последнее обновление 8 лет назад - по факту оно мертво.
Была найдена живая замена: https://github.com/sysown/proxysql/
После установки по README подключаться так
$ mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> 'Есть в докере, например proxysql/proxysql, percona/proxysql
Мониторинг:
Интегрировать будем с графаной, и например, можно взять proxysql-exporter (или proxysql-grafana-prometheus - нужно ставить и проверять), но в целом есть такое
https://proxysql.com/documentation/backend-monitoring/
Что почитать:
ProxySQL — еще один mysql-proxy
Оптимизация запросов MySQL с помощью кеширования ProxySQL в Ubuntu 16.04 (по названию конечно старое, но дока за 2020, плюс там важны "азы")
https://mydbops.wordpress.com/2020/01/30/monitoring-mysql-using-proxysql/
(вообще на этом сайте много полезных статей про proxysql)
Есть и какая-то интеграция с реликом, другой вопрос кому он нужен при таких ценах..
https://newrelic.com/blog/how-to-relic/how-to-monitor-mysql
PS
Впрочем, можно и свой прокси написать, например как тут
вторник, 3 января 2023 г.
Апи к нескольким хостерам
У herzner например есть cloud, и там вполне внятное апи. Но вот к физическим серверам (которые robot) - найти не удалось... подкинули ссылку
https://docs.hetzner.com/robot/dedicated-server/robot-interfaces/
Описание
https://robot.hetzner.com/doc/webservice/en.html#preface
и для питона там есть.. чья-то левая репа. Могли бы хоть для приличия себе склонировать и синхронизироваться.
https://github.com/aszlig/hetzner
Требуется предоставить логин-пароль, что возможно не всегда. Ломается при включенном 2fa.
PS есть https://robot.hetzner.com/doc/webservice/en.html#get-ip