Часто провайдер даёт скачать конфиг, который кладётся в ~/.kube/config. А что если таких конфигов нужно больше одного? Самый простой вариант - взять программы типа lens и подключить их независимо. А можно подшаманить - и собрать их в общем конфиге. Что для этого надо?
суббота, 29 июля 2023 г.
вторник, 25 июля 2023 г.
redis на несколько нод
1) самое простое, master-slave
на мастере:
bind 127.0.0.1 <masterip>
на слейве
replicaof <masterip> <masterport>
2) redis cluster ("для новых версий"), есть особенности с 16384 хэш-слотами (hash slots). Так же, кластер собирает отдельный, хоть и комплектный, скриптик на руби, но только ради этого ставить руби - совсем перебор.
3) redis sentinel ("для старых версий")
Для всяких кластерных режимов есть нююанс что требуется минимум 3 ноды (для кворума), на каждой из которых надо поднять мастер и слейв, то есть будет 6 процессов.
Проверка статуса:
# redis-cli
127.0.0.1:6379> info replication
понедельник, 24 июля 2023 г.
upgrade ubuntu non-lts
Если вдруг удалось вляпаться в не-лтс убунту, то уже через год попытки что-то сделать будут давать
E: The repository 'http://nova.clouds.archive.ubuntu.com/ubuntu impish Release' no longer has a Release file.
доступ к ВМ без пароля рута
Многие это умеют лет 20, но тут нюанс что нам нужна консоль виртуалки (в данном случае - провайдера gcore/edgecenter). И основная заметка именно про 2 шифта (см ниже)
Итак.
Вы можете сменить проль через grub:
1) Перезагрузите ВМ через VNC (в правом верхнем углу кнопка), а затем кликните на поле ввода (чтобы нажатия регистрировались именно на сервере).
2) Сразу же после перезагрузки нажмите и зажмите левый Shift (можно правый зажать, а кликать левый). Для CentOS можно зажимать "C", но и Shift должен работать. Таким образом мы попадем в меню grub
3) Выберите основную ОС в меню (если с ней проблемы - выбирайте advanced options и версию с recovery mode).
4) Нужно этот пункт выбрать и нажать e, чтобы перейти в режим редактирования. Если просто нажать ентер - загрузит систему как обычно.
5) Найдите строку, которая начинается с linux, нужно в конец добавить single, init=/bin/bash или их комбинацию. Для убунты работает только сингл, с инит загрузка зависнет, но где-то работает только инит.
Эти изменения действуют только на текущую загрузку и нигде не сохраняются.
6) Нажмите F10 или ctrl+X
7) Загрузитесь в ОС как root-user. После запуска шелла пропишите: mount -o remount,rw /.
Введите команду passwd root.
8) Введите дважды новый пароль.
9) Перезагрузите ВМ.
Также, есть режим emergency
Защита от возможности загрузиться в обход авторизации будет отдельно
редис иногда хочет писать в /etc/cron.d
Эксепшен
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
В логе
Failed opening the RDB file dump.rdb (in server root dir /etc/cron.d) for saving: Read-only file system
Внимания тут заслуживает именно попытка записи в /etc. При этом в инете найден только 1 такой случай (в гугле)
https://stackoverflow.com/questions/57864901/redis-server-is-restarted-for-every-two-minutes-and-loses-keys-for-every-few-min
В данном случае - Ubuntu 22.04.2 LTS, redis 5:6.0.16-1ubuntu1
Быстрое решение:
pkill -9 redis-server; systemctl restart redis-server
просто рестарт не сработает, будет тупить, потом в статусе ошибки.. нужен именно килл -9
Возможно, причина что в системе кончалось место, но это было с неделю назад.
вторник, 18 июля 2023 г.
Переход с letsencrypt на acme.sh
Вдруг перестал работать (ошибка ссл) один старый сайт...
Your system is not supported by certbot-auto anymore.
Certbot cannot be installed.
Да, система старовата...
Description: Debian GNU/Linux 7.11 (wheezy)
Тем не менее, надо починить. Цертбот славится своими странными зависимостями, которые на такой старой системе вряд ли удастся решить, а гит версия - там какая-то каша, certbot-auto удалён, похоже требуется свежий питон (не просто 3, а типа 3.5+).. В общем, пора закопать стюардессу.
https://github.com/acmesh-official/acme.sh/wiki
https://github.com/acmesh-official/acme.sh/wiki/How-to-install
При установке спрашивает почту, не используйте дефолтный my@example.com - не заработает! будет
"detail": "Error creating new account :: invalid contact domain. Contact emails @example.com are forbidden",
Дальше выписывать нужно типа так
/root/.acme.sh/acme.sh --issue --standalone -d <DOMAIN>
но у меня в логе было
Create new order error. Le_OrderFinalize not found. {"type":"urn:ietf:params:acme:error:unauthorized","status":401,"detail":"A requested identifier is not permitted [ххх.ru]"}
Непонятно, фикс или случайность, но помогло
./acme.sh --debug --log --set-default-ca --server letsencrypt
https://wiki.vps-server.ru/doku.php/wiki:other:lets_encrypt_errors
И судя по
acme.sh uses zerossl (under setigo) as default ca, which blockes all .ru domain. LE doesn't so change CA
https://community.letsencrypt.org/t/acme-sh-error-issuing-certificates-for-ru-zone/195388/2
это действие обязательно.
В общем, дальше
acme.sh --issue -d ххх.ru -d www.ххх.ru --webroot /var/www/ххх/data/www/ххх.ru --nginx
и всё выписало успешно.
Посмотреть список сертификатов:
acme.sh --list
composer: убрать мусор из баннера
При установке пакетов через композер есть баг:
Info from https://repo.packagist.org: #StandWithUrkaine
Как убрать этот мусор? И главное, этот мусор содержит задержку секунд в 10, что вообще свинство
https://stackoverflow.com/questions/76130997/composer-how-to-remove-standwithukraine-cli-message
composer config -g repos.packagist composer https://mirrors.tencent.com/composer/
воскресенье, 16 июля 2023 г.
backup proxysql
1) cp /var/lib/proxysql/proxysql.db
2) sqlite3 /var/lib/proxysql/proxysql.db .dump > /var/lib/proxysql/proxysql-dump.sql
3) sqlite3 /var/lib/proxysql/proxysql.db ".backup 'proxysql-backup.sq3'"
4) mysqldump -u admin -padmin -h 127.0.0.1 -P6032 --no-tablespaces --skip-triggers -t main mysql_servers --skip-column-statistics > /tmp/dump_servers.sql
5) select config into outfile ...
среда, 12 июля 2023 г.
airflow in yandex.cloud
https://cloud.yandex.ru/marketplace/products/yc/apache-airflow-2
Запуск прост: нажимаем "создать вм", создаём, получаем айпи, входим по ссш. И тут нюанс: доступы будут после логина в motd
И да, ставится это решение прямо на саму вм, без докеров-куберов.
При входе видим плашку
Welcome to Yandex.Cloud Apache Airflow version 2.2.3 image.
Main configuration file is: /etc/airflow/airflow.cfg
LocalExecutor is being used by default
Logs are stored in: /var/log/airflow/
DAGs should be placed to: /home/airflow/dags/
Airflow scheduler and webserver are run as systemd units: airflow-scheduler.service, airflow-webserver.service
Airflow metadata db is run as local PostgreSQL daemon 127.0.0.1:5432 (user=airflow,password=airflow,dbname=airflow)
Airflow webserver is listening on: http://0.0.0.0:80/
Web authentication is enabled. Default username=test_admin,password=xxx
Full documentation: https://cloud.yandex.ru/marketplace/products/f2e9ae0bm5h1ltispt7c
вторник, 11 июля 2023 г.
metabase: go deeper
Продолжение к https://dragonflybsd.blogspot.com/2022/03/metabase-in-ubuntu.html
(перед обновлением версии не забываем забэкапить базу, если это штатная H2 то скопировав metabase.db.mv.db)
При запуске выше не хватает инфы, какие файлы брать для обновления, эта инфа есть в гитхабе (в который у меня не получилось попасть за пол часа ползанья по офсайту, только стало понятно что сейчас 0.46 - и всё)
https://github.com/metabase/metabase/releases/
то есть я качаю так
wget https://downloads.metabase.com/v0.46.6/metabase.jar -O metabase.0.46.6.jar
Почему в итоговом файле есть версия? Потому что при неудачном старте или проблемах просто перекидываем симлинк на прошлую версию - и изучаем. Собственно, после закачки делаю
ln -sf metabase.0.46.6.jar metabase.jar
и теперь не меняя сервис файла, делаем рестарт - и получаем новую версию.
В частности, в версии 0.46 происходит конвертация H2 базы в новый формат (v2)
Впрочем, можно запустить и в докере, прямо в гитхабе есть нужное имя, например metabase/metabase:v0.46.6
И тут есть нюанс, что без подключения volumes мы просто потеряем всё при перезапуске/обновлении, более подробная дока: https://www.metabase.com/docs/latest/installation-and-operation/running-metabase-on-docker (при желании использовать в докере - к прочтению строго обязательно, целиком)
Там же - решение некоторых проблем, типа запуск в докере с постгресом, что делать если забыли подключить вольюм итд. Но. У меня после переноса страница логина стала отдавать " An error occurred", при том что на старом инстансе работало. Что помогло:
1) очистить куки (в хроме F12 - Application - Cookies - внутри удалить куки
2) войти, получить ошибку, нажать Ctrl+F5
Перекинуло внутрь уже авторизованным. И такие странные баги бывают...
PS https://www.metabase.com/docs/latest/databases/encrypting-details-at-rest - очень желательно шифровать креды
четверг, 29 июня 2023 г.
понедельник, 26 июня 2023 г.
gitlab: The pipeline failed due to the user not being verified
https://about.gitlab.com/blog/2021/05/17/prevent-crypto-mining-abuse/
the team member will need to validate their account or alternatively you can disable shared runners in the related projects.
среда, 21 июня 2023 г.
python: logging
Очень неплохое видео про "особенности" модуля logging
https://www.youtube.com/watch?v=qqdgynJ5ATU&list=PLlWXhlUMyooYC3js8JEdQk4kYD1cnSaWo&index=2
Интересно было бы и остальные видео увидеть..
PS https://boosty.to/omolchanov/posts/20b11a20-1b42-415e-b93d-2b9d0104e023
суббота, 10 июня 2023 г.
telegram+mint
Даже в свежем минте ставится очень старая версия 3.6.1+ds-2build1, и автообновление не работает. Удалим
apt remove telegram-desktop
Поставим нормальную версию
sudo add-apt-repository ppa:atareao/telegram
sudo apt update && sudo apt install -y telegram
четверг, 8 июня 2023 г.
Docker + php - что брать за основу?
Из-за ряда особенностей alpine тут не лучший выбор (и см ниже), хотя и он будет работать.
1) FROM php:8.2-fpm и вариации
Плюсы: сообщество любит именно эти образы, как "оригинальные". При этом например FROM php:5.4 сам образ скачает, но что-то поставить туда уже не выйдет, всё дропнуто давно (впрочем, пока ещё можно взять centos:7 и там как раз 5.4 штатно, но об этом дальше)
Докерфайл под нужный движок гуглится за несколько минут
Минусы:
- лютое неудобство писать докерфайлы, потому что какие-то модули уже стоят (mbstring) и попытка их собрать обламывается (нет модуля онигурама), но об этом надо или просто знать, или гуглить, сама установка требует чтения док на тему docker-php-ext-configure + docker-php-ext-install, то есть опять чтения доков что конкретно надо на каждый модуль... Конечно всё решаемо, но можно легко потерять несколько дней на полной ерунде.
- Нагугленные версии файлов часто не собирают, нужно править ошибки, например
docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr
а потом оказывается что и путь не нужен, и -dir пропадает (--with-png), и один из with в принципе.. Иногда нужно -dev пакетов докидывать и так далее.
А ещё полно таких приколов:
&& git clone -b php7 https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis && docker-php-ext-install redis \ ....
- если нужен не очень стандартный модуль - это начинается доолгий квест или с поиском такого в чужих докерфайлах, или чтение док. Проблема тут больше в том, что это нужно не один раз, а на каждый нестандартный модуль. Впрочем, фермошлёпы с типовыми решениями - не столкнутся.
2) FROM ubuntu:22.04, вариант debian:11 или вообще centos:7
Плюсы: если проект уже катили прямо на машину, то есть обкатанные процедуры, список версий давно подобран и проверен, написать с нуля докерфайл - минуты, и он почти гарантированно выдаст рабочую сборку.
Полнейшее единообразие с тем что собирается в режиме хоста, минимальное количество багов из-за смены платформы.
Возможность ставить конкретную версию, если оказалось что последняя версия нам что-то ломает, как минимум на время исправления нашего/их кода, возможность сделать фриз нужных пакетов
Минусы: штатно в дистрибутиве есть только одна версия, если нужно другую то нужно подключать того же Ondrej. Но при условии что платформа уже была где-то развёрнута - всё нужное и так известно. И даже нужные модули, собранные руками, просто копируем отдельным шагом и получаем тот же результат.
3) FROM composer:2
Подвид п.1, только на базе alpine, c docker-php-ext-install и подобным. Иногда вылезают косяки с заменой libc.
С другой стороны, очень хороший вариант, если сначала собрали все нужные модули, подготовили vendor/ итд, и потом COPY --from= перенесли только нужное в новый пустой альпин образ. Это будет меньше обычного и достаточно безопасно.
4) брать уже готовые образы, типа FROM octobercms/october-dev, но именно с октобером вообще прикол - у оф образа 4 звезды, а у "левого" aspendigital/octobercms - 41. И что брать? Хотя и тут понятно, у aspendigital последняя версия пхп 7.4, а уже желательно 8.0 и выше.
Итого: попытки поднять вопрос "что брать за основу" по чатам показали, что нет явного преимущества ни у одного метода. Обычно говорили про скорость сборки (вот только компиляция из п.1 конечно "быстрее" чем apt install уже собранного, да), размеры (именно в данном случае итоговый образ обычно выходит больше гигабайта в обоих случаях, и опять же, компилятор со всеми библиотеками никогда не будет занимать меньше места чем минимальная версия дистрибутива, куда сделали apt install --no-install-recommends), безопасность - но никто не смог объяснить в чём тут безопасность.. При этом помним важное правило безопасности - нужно брать именно проверенные слои в прод. И тут первый метод самый слабый, если в случае п.2 мы обнаружили проблему - можем явно указать рабочую версию и пересобрать контейнер, то в п.1 нужно зарываться в гит-версии и прочее, если мы свои промежуточные сборки не версионировали и всё было latest.
А если погрузиться в multi-stage builds, кэширование слоёв и прочее - всё становится ещё сложнее. И опять без какого-то значительного преимущества одного решения.
И я например с давних лет придерживаюсь политики "компиляторов в проде быть не должно", что исключает п.1 для меня. Сильно больше векторов атаки. Впрочем, п.3 при этом весьма неплох, пока нет деплоя в "мульти-окружения", то есть хост+докер, там я выбираю п.2
И да, можно взять php:8.2-alpine, доставить композер и см выше, но смысл если есть п.3?