воскресенье, 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)