воскресенье, 23 апреля 2023 г.

rsync со сменой юзера

Иногда бывает нужно синхронизировать файлы, недоступные не от рута, а попасть можно только не-рутом.

 rsync -avz --rsync-path="sudo rsync" from to

Важное замечание, для корректной работы юзеру которым вошли нужно прописать NOPASSWD в sudoers

Если требуется работать без NOPASSWD то есть несколько вариантов ниже (не проверялось)

https://askubuntu.com/questions/719439/using-rsync-with-sudo-on-the-destination-machine

среда, 19 апреля 2023 г.

Довольно полное описание для nginx vts

 https://nginx-extras.getpagespeed.com/modules/vts/

Пересборка 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 г.

небольшой гист по работе с яндексом

 https://gist.github.com/dragonfly-net/a24199e6d048b1735311dc48dccfa3c2

Как подключить 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

Монтирование из fstab:
<bucket>    <local_dir>        fuse.s3fs     _netdev,allow_other,use_cache=/tmp/cache,uid=1000,gid=1000,use_path_request_style,passwd_file=/etc/s3fs-storage,url=https://s-dt2.cloud.edgecore.ru    0       0
Опции меняем-убираем по вкусу, это уже запуск под нужным пользователем. Нюанс, во многих инструкциях другой формат записи:
s3fs#<bucket>    <local_dir>        fuse ......
в убунте 20.04 работают оба.

Ещё нюанс, маунт при опциях выше показывает (rw,relatime,user_id=0,group_id=0,allow_other), хотя файлы внутри от нужного пользователя...

Для яндекса: отличий не так много, url=https://storage.yandexcloud.net

Для timeweb: по идее, должно быть тоже только url=https://s3.timeweb.com, но по факту - не работает...

Также интересно рассмотреть аналог от яндекса

https://github.com/yandex-cloud/geesefs

(а ещё там есть сравнение с несколькими другими проектами)


Если захочется собрать самому, то статей много, у яндекса, сбера итд, типа
https://tecadmin.net/mount-s3-bucket-centosrhel-ubuntu-using-s3fs/

PS

s3fs показал себя крайне ненадёжно:
ls: cannot access '/srv/storage': Transport endpoint is not connected
Ремаунт помогает на короткое время.
Поставлен  geesefs - работает так же медленно (помним что это fuse-обёртка на http), но хотя бы не падает.
Проверено на яндексе и эджцентре (оно же gcore). При этом для подключения под юзера с ид 1015 строка в fstab получилась такая
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

воскресенье, 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/2018/08/20/proxysql-series-percona-cluster-mariadb-cluster-galera-read-write-split/

https://mydbops.wordpress.com/2020/01/30/monitoring-mysql-using-proxysql/

(вообще на этом сайте много полезных статей про proxysql)

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

https://newrelic.com/blog/how-to-relic/how-to-monitor-mysql


PS

Впрочем, можно и свой прокси написать, например как тут

https://xakep.ru/2017/02/22/mysql-proxy/