diff --git a/DNS/BIND_install.md b/DNS/BIND_install.md new file mode 100644 index 0000000..94fbdc0 --- /dev/null +++ b/DNS/BIND_install.md @@ -0,0 +1,204 @@ +**************************************************************************************************** +Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26 +```sh + sudo apt-get update && + sudo apt-get install bind9 dnsutils && + sudo apt-get install bind9utils +``` +Adding the service to autostart +```sh + systemctl enable bind9 +``` +Checking if the service is working +```sh + nslookup dmosk.ru 127.0.0.1 +``` +Opening the configuration file +```sh + mcedit /etc/bind/named.conf.options +``` +Для глобальных запросов добавляем строку: allow-query { any; }; +Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных + //forwarders { + // 8.8.8.8; + // 8.8.4.4; + //}; +Проверяем настройки командой (ответ должен быть пустым): + sudo named-checkconf +Перезагружаем: + sudo systemctl restart bind9 +Проверяю версию BIND: + named -v +Выдало: BIND 9.16.1-Ubuntu (Stable Release) +Можно проверить какой IP выдаст на DNS запрос + dig locust.kz A + +На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns. + + + + +Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками + +Перейдем в него. + cd /etc/bind/ +Генерируем пару ключь для обмена информацией между клиентом и сервером: + sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key + sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key +Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ. + include "/etc/bind/dirt.kz.key"; + include "/etc/bind/locust.kz.key"; +Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем. +zone "dirt.kz" { + type master; + allow-update {key dirt.kz;}; + file "/var/cache/bind/dirt.kz"; +}; + +zone "locust.kz" { + type master; + allow-update {key locust.kz;}; + file "/var/cache/bind/locust.kz"; +}; + + +В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где: +В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где: + +Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте +Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/ +SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA +NS — Сервер имён +A — рекорд +MX — Почта для обмена +CN — Каноническое имя +PTR — указатель +И таким содержимым: + +$ORIGIN dirt.kz +$TTL 604800 +@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. ( + 8 ; Serial + 604800 ; Refresh + 86400 ; Retry + 2419200 ; Expire + 604800 ) ; Negative Cache TTL +; +@ IN NS bigfoottrade.kz. + +Второй файл для locust.kz: + +$ORIGIN . +$TTL 604800 ; 1 week +locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. ( + 134 ; serial + 604800 ; refresh (1 week) + 86400 ; retry (1 day) + 1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds) + 604800 ; minimum (1 week) + ) + NS bigfoottrade.kz. +$TTL 3600 ; 1 hour + A 5.76.254.182 +$ORIGIN locust.kz. +* A 127.0.0.1 + + +Правлю права доступа: + sudo chown -R bind:bind /etc/bind + +Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой: + sudo rndc reconfig +Потом следует вызвать: + sudo systemctl restart bind9 +Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду +После настроек сервера перезагружаем его: + sudo named-checkconf + sudo rndc reload + sudo systemctl restart bind9 + sudo rndc status + journalctl | grep bind + sudo journalctl -u bind9 -n 50 + + +Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу: + +Файл из примера: + #!/bin/bash + TTL=3600 + SERVER=ns.dyndns.my + HOSTNAME=dhost.dyndns.my + ZONE=dyndns.my + KEYFILE=Kdyndns.my.+157+48025.private + new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! + cd /etc/ddns + nsupdate -v -k $KEYFILE << EOF + server $SERVER + zone $ZONE + update delete $HOSTNAME A + update add $HOSTNAME $TTL A $new_ip_address + send + EOF + +Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже: + #!/bin/bash + TTL=3600 + SERVER=127.0.0.1 + HOSTNAME=*.dirt.kz + ZONE=dirt.kz + KEYFILE=/etc/bind/dirt.kz.key + + new_ip_address= + FILE=/etc/ddns/ip.txt + if test -f "$FILE"; then + new_ip_address=`cat $FILE` + rm $FILE + fi + + len=${#new_ip_address} + if [ $len -gt 3 ] + then + echo "New IP address = $new_ip_address" + else + echo "Not find IP address" + exit + fi + + cd /etc/ddns + sudo nsupdate -v -k $KEYFILE << EOF + server $SERVER + zone $ZONE + update delete $HOSTNAME A + update add $HOSTNAME $TTL A $new_ip_address + update delete dirt.kz A + update add dirt.kz $TTL A $new_ip_address + send + EOF + echo "OK" + +Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента: +'; print_r(getallheaders()); echo ''; + +// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x" +foreach ( getallheaders() as $k => $v) { + if ( strtolower($k) == 'x-forwarded-for' ) { + $tmp = explode(', ', $v); + if ( $tmp[count($tmp)-1] != '' ) + $_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1]; + } +} + +if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){ + $myfile = fopen("/etc/ddns/ip.txt", "w"); + fwrite($myfile, $_SERVER['REMOTE_ADDR']); + fclose($myfile); +} + +echo $_SERVER['REMOTE_ADDR']; + +?> + +Проверяем что находит IP по доменному имени + nslookup dirt.kz 127.0.0.1 diff --git a/PowerDNS_install.md b/DNS/PowerDNS_install.md similarity index 97% rename from PowerDNS_install.md rename to DNS/PowerDNS_install.md index 7c425e3..4257155 100644 --- a/PowerDNS_install.md +++ b/DNS/PowerDNS_install.md @@ -1,589 +1,589 @@ -Документация по PowerDNS: https://doc.powerdns.com/authoritative/installation.html -**************************************************************************************************** -## 2. Подключаемся к нужному серверу -```sh -ssh igor@192.168.200.85 -p 22 -``` -Connect to CCALM Georgia infrastructure: -```sh -ssh igor@88.218.94.134 -p 2200 -``` -**************************************************************************************************** -DynDNS на PowerDNS авторитативный сервер тот кто отвечает на те домены которые в его базе (рекурсивный присылает авторитативному запросы) - -DNS на Ubuntu 24.04 согласно инстркции https://phoenixnap.com/kb/powerdns-ubuntu: -Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт) -Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html - -```sh - sudo apt-get update && - sudo apt-get upgrade -y -``` -Install PowerDNS server -```sh - sudo apt-get install pdns-server -y -``` - -На всякий случай делаю резервные копии исходных файлов настрое: -```sh -cd /etc/powerdns && -sudo cp named.conf named.conf.bak && -sudo cp pdns.conf pdns.conf.bak -``` - ----------------------------------------------------------------------------------------------------- -Как настроить MariaDB базу для использования в PowerDNS смотри: -[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md) ----------------------------------------------------------------------------------------------------- -Как настроить SQLite3 базу для использования в PowerDNS смотри: -[Установка PowerDNS с MariaDB](./PowerDNS_install_SQIite3.md) ----------------------------------------------------------------------------------------------------- -Как настроить PostgreSQL базу для использования в PowerDNS смотри: -[Установка PowerDNS с MariaDB](./PowerDNS_install_PostgreSQL.md) ----------------------------------------------------------------------------------------------------- - -Наспройку файла pdns.conf авторитетный сервер, есть такой пример который следует изучить: https://raw.githubusercontent.com/trinv/PowerDNS/a56b9122f4a2de9c1f789009f09b9831f74d8bf1/pdns.template.master.conf (естественно без 1й табуляции): - -```sh - sudo mcedit /etc/powerdns/pdns.conf -``` - -Write new settings rr -```sh -cd /etc/powerdns/ && -sudo tee pdns.conf > /dev/null <<'EOF' - -allow-axfr-ips=127.0.0.1 -also-notify=127.0.0.1 - -include-dir=/etc/powerdns/pdns.d -launch= - -local-address=88.218.94.134,127.0.0.1 -local-port=53 - -log-dns-details=on -log-dns-queries=yes -log-timestamp=yes -loglevel=4 - -webserver=yes -webserver-address=127.0.0.1 -webserver-allow-from=::/0, 0.0.0.0/0 -webserver-port=8091 - -master=yes -slave=no - -# Также активирую API -api=yes -api-key=40c89f2a-e2f3-4ff8-a245-3547111f6677 -EOF -``` -Проверяю соединение к базе перезапустив PowerDNS: -```sh - sudo systemctl stop pdns && - sudo pdns_server --daemon=no --guardian=no --loglevel=9 -``` -Пытаемся открыть WEB интерфейс -```sh -start http://88.218.94.134:8081 -``` - -Если всё норм выполняем: -```sh - sudo systemctl restart pdns && - sudo systemctl enable pdns && - sudo systemctl status pdns -``` -Проверяем что порт 5300 открыт для DNS: -```sh - sudo ss -alnp4 | grep pdns -``` -Если что-то не получается то проверяем кто слушает на порту 53 -```sh - sudo apt-get install net-tools -y && - sudo netstat -tulnp | grep :53 -``` - -Создаём зону и добавляем запись -```sh -sudo pdnsutil create-zone test ns1.test && -sudo pdnsutil add-record test ccalm A 192.168.200.184 -``` -Добавляем зону и две записи -```sh -sudo pdnsutil create-zone geovizor.top && -sudo pdnsutil replace-rrset geovizor.top @ SOA "ns1.geovizor.top admin.geovizor.top $(date +%Y%m%d)01 10800 3600 604800 3600" && -sudo pdnsutil add-record geovizor.top ns1 A 88.218.94.134 && -sudo pdnsutil add-record geovizor.top ns2 A 88.218.94.134 && -sudo pdnsutil add-record geovizor.top @ A 88.218.94.134 && -sudo pdnsutil add-record geovizor.top * A 88.218.94.134 && -sudo pdnsutil add-record geovizor.top @ CAA 3600 "0 issue \"letsencrypt.org\"" && -sudo pdnsutil add-record geovizor.top @ TXT 3600 "\"v=spf1 ip4:88.218.94.134 -all\"" && -sudo pdnsutil add-record geovizor.top @ MX 3600 "10 mail.geovizor.top." && -sudo pdnsutil add-record geovizor.top mail A 3600 88.218.94.134 && -sudo pdnsutil add-record geovizor.top powerdns A 3600 88.218.94.134 -``` - -```sh -sudo pdnsutil create-zone locust.ge && -sudo pdnsutil replace-rrset locust.ge @ SOA "ns1.geovizor.top admin.locust.ge $(date +%Y%m%d)01 10800 3600 604800 3600" && -sudo pdnsutil add-record locust.ge @ A 88.218.94.134 && -sudo pdnsutil add-record locust.ge * A 88.218.94.134 && -sudo pdnsutil add-record locust.ge @ CAA 3600 "0 issue \"letsencrypt.org\"" && -sudo pdnsutil add-record locust.ge @ TXT 3600 "\"v=spf1 ip4:88.218.94.134 -all\"" && -sudo pdnsutil add-record locust.ge @ MX 3600 "10 mail.locust.ge." && -sudo pdnsutil add-record locust.ge mail A 3600 88.218.94.134 -``` - - - -Выше задал такие настройки как -```conf -Refresh = 10800 (3 часа) -Retry = 3600 (1 час) -Expire = 604800 (1 неделя) -Minimum = 3600 (1 час) -``` - - -Проверим список зон -```sh -sudo pdnsutil list-all-zones && -sudo pdnsutil list-zone geovizor.top -``` -Проверяем отвечалет ли: -```sh -dig @127.0.0.1 -p 5300 ccalm.test A -``` -```sh -dig @127.0.0.1 -p 53 geovizor.top A -``` -```sh -dig @88.218.94.134 -p 53 geovizor.top A -``` -```sh -dig @88.218.94.134 -p 53 powerdns.geovizor.top A -``` - -### Теперь можно настроить HTTPS для взаимодействия через API с сервером для динамического задания IP адресов - -```sh -API_KEY="40c89f2a-e2f3-4ff8-a245-3547111f6677" -SERVER="156.244.31.209" -ZONE="geovizor.top" - -curl -X PATCH \ - -H "X-API-Key: $API_KEY" \ - -H "Content-Type: application/json" \ - "http://$SERVER:8081/api/v1/servers/localhost/zones/$ZONE" \ - -d '{ - "rrsets": [ - { - "name": "*.geovizor.top.", - "type": "A", - "ttl": 3600, - "changetype": "REPLACE", - "records": [ - { - "content": "5.251.54.197", - "disabled": false - } - ] - } - ] - }' -``` - - - -## ********** Настройка рекурсивного DNS от PowerDNS Recursor 4.9.3 порту 53 будет обрабатывать запросы с локальной машины ********** -Документация: https://doc.powerdns.com/recursor/index.html -Документация: https://docs.powerdns.com/recursor/indexTOC.html -Чтобы работал резольвер от PowerDNS а не тот который от ubuntu на 53 порту нужно: - -```sh - sudo apt-get install pdns-recursor -y -``` - -Скачиваем список корневых серверов DNS (желательно обновлять раз в несколько месяцев) -```sh - sudo wget -O /usr/share/dns/root.hints https://www.internic.net/domain/named.cache && - sudo chown pdns:pdns /usr/share/dns/root.hints -``` - -```sh - sudo mkdir -p /var/run/pdns-recursor && - sudo chown pdns:pdns /var/run/pdns-recursor && - sudo chmod 755 /var/run/pdns-recursor -``` - -```sh - sudo mcedit /etc/powerdns/recursor.conf -``` - -Чтобы все запросы с . уходили на публичные DNS Google: -```conf -#dnssec=off #чтобы не проверял то что записано в forward-zones через корневые серверы -local-address=192.168.200.85,127.0.0.1 -#forward-zones=local=127.0.0.1:5300 # Отправлять .local в авторитативный -#forward-zones+=.=8.8.8.8;8.8.4.4 # Все остальное в интернет -forward-zones=test=127.0.0.1:5300 -#forward-zones-recurse=+test=127.0.0.1:5300 -``` - -Либо если оставить настройку "nssec=process" то нужно прописать в /etc/powerdns/recursor.lua добавить комкнду addNTA, если не добавить то forward-zones не будет отрабатывать. Также можно сделать чтобы dirt.kz не выходил с наружи и с резу перенаправлялся на нужный IP с временем жизни минута 30 секунд. -```lua -addNTA("test", "Local test zone") -``` - -Пробуем запустить без сервиса чтобы посмотреть что выведит в лог -```sh -sudo pdns_recursor --daemon=no --loglevel=9 -``` - -Чтобы запросы переходили на pdns-recursor -Затем перезагружаем: -```sh - sudo systemctl restart pdns-recursor && - sudo systemctl status pdns-recursor -``` - -Проверяем что порт 53 открыт для DNS: -```sh - sudo ss -alnp4 | grep pdns -``` -Если что-то не получается то проверяем кто слушает на порту 53 -```sh - sudo apt-get install net-tools -y && - sudo netstat -tulnp | grep :53 -``` - -Проверяем что преобразование DNS нормально работает: -```sh - dig @192.168.200.85 google.com -``` -если уже настроил PowerDNS сервер то можно попробовать отправить: -```sh - sudo rec_control wipe-cache test && - sudo rec_control wipe-cache ccalm.test && - dig @192.168.200.85 -p 53 ccalm.test -``` -```sh - dig @127.0.0.1 -p 53 ccalm.test A -``` -```sh - dig +trace @192.168.200.85 -p 53 ccalm.test -``` - -Проверяем логи -```sh - sudo journalctl -u pdns-recursor --since "10 min ago" -``` -Или так чтобы найти ошибки: -```sh -sudo journalctl -u pdns-recursor --no-pager | grep -i failed -``` - -```sh -journalctl -u pdns-recursor --no-pager | tail -n 50 -``` - ----------------------------------------------------------------------------------------------------- -## ********** По идее отключать не нужно так как systemd-resolved использует другой IP: 127.0.0.54:53 (Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS) ********** - -Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved) -```sh -sudo mcedit /etc/netplan/50-cloud-init.yaml -``` -И прописываю в него: -```conf - nameserver 127.0.0.1 -``` -After configuration modification update settings: -```sh - sudo netplan apply -``` -Смотрим что сгенерировалось автоматически в resolv.conf после модификации файла -```sh - cat /etc/resolv.conf -``` -Проверяем что интернет не перестал работать: -```sh - ping changelogs.ubuntu.com -``` -Может быть что команда выше пытается по IP6 работать тогда попробовать по -```sh - ping -4 changelogs.ubuntu.com -``` -Либо так: -```sh - ping6 changelogs.ubuntu.com -``` -Взглянем на текущие DNS сервера, у меня такое выдало: DNS Servers: 195.210.46.195 195.210.46.132 на команду ниже: -```sh - resolvectl status -``` -Отредактировал файл /etc/systemd/resolved.conf заменив nameservers на 8.8.8.8 и 8.8.4.4 -```sh -sudo mcedit /etc/systemd/resolved.conf -``` - -Проверяем структуру файла: -```sh -sudo yamllint /etc/netplan/50-cloud-init.yaml -``` -Применяем настройки: -```sh - sudo netplan apply -``` -Проверяем что настройки изменились: -```sh - resolvectl status -``` -Изменил /etc/systemd/resolved.conf настроив так: -```conf - [Resolve] - DNS=8.8.8.8 8.8.4.4 - FallbackDNS=1.1.1.1 1.0.0.1 -``` -Потом перезагрузил: -```sh - sudo systemctl restart systemd-resolved -``` -Проверяем что заняло порт 53 командой: -```sh - sudo lsof -i :53 -``` -Выдало: -```text - COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME - systemd-r 670 systemd-resolve 13u IPv4 20070 0t0 UDP localhost:domain - systemd-r 670 systemd-resolve 14u IPv4 20071 0t0 TCP localhost:domain (LISTEN) -``` - -Останавливаем systemd-resolved (поисковик IP по домену по умолчанию от Ubuntu) -```sh - sudo systemctl stop systemd-resolved && - sudo systemctl disable systemd-resolved -``` - ----------------------------------------------------------------------------------------------------- -## ********** Устанавливаю PowerAdmin (желательно в докере устанавливать) ********** -Устанавливаю PowerAdmin согласно: https://phoenixnap.com/kb/powerdns-ubuntu#ftoc-heading-6 -```sh - sudo apt install libpq-dev -y && - sudo apt install python3-dev -y && - sudo apt install python3-flask -y && - sudo apt install python3-pip -y -``` -```sh - sudo apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl && - sudo apt install -y nodejs && - sudo apt install -y yarn -``` -устанавливаем другие зависимости: -```sh - sudo apt install npm -y && - sudo apt remove yarn -y && - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && - sudo apt update && - sudo apt install yarn -y && - yarn --version && - sudo yarn install --pure-lockfile -``` - -Create user for run PowerDNS Admin -```sh - sudo useradd -m -s /bin/bash powerdns-admin -``` -Clone the PowerDNS Admin Git repository to /opt/web/powerdns-admin -```sh - cd ~ - sudo git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /opt/web/powerdns-admin && - sudo chown -R powerdns-admin:powerdns-admin /opt/web/powerdns-admin && - cd /opt/web/powerdns-admin -``` -Настраиваем переменные окружения: -```sh - sudo -u powerdns-admin -s && - cd /opt/web/powerdns-admin -``` -Устанавливаем перенеммые окружения и необходимые скрипты -```sh - python3 -mvenv ./venv && - source ./venv/bin/activate && - pip install --upgrade pip && - pip install -r requirements.txt -``` -Создаю базу данных -```sh - mkdir /opt/web/powerdns-admin/data && - sqlite3 /opt/web/powerdns-admin/data/pdnsa.sqlite3 ".databases" -``` -Cекретный ключ можно сгенерировать при помощи такой команды: -```sh - python3 -c "import secrets; print(secrets.token_hex(16))" -``` -Такой сгенерил для 192.168.200.85: 1c100fb414b8116725a04015fbaf907e - -Конфигугрируем PowerDNS Admin. -Для начала копирую пример конфигураци, потом открываю его в редакторе: -```sh - cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py -``` -```sh - mcedit /opt/web/powerdns-admin/configs/production.py -``` -И редактируем следующие строки: -```conf - #import urllib.parse - SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd0' - SQLA_DB_PASSWORD = 'changeme' -``` - -Также настраиваю подключение к базе данных (сам строку составил): -```conf - SQLALCHEMY_DATABASE_URI = 'postgresql://powerdns:y7HMHi0ATxx1VC3UU5WG@127.0.0.1/powerdnsadmin' -``` -Либо к новой базе данных: - -```conf - SQLALCHEMY_DATABASE_URI = 'sqlite:////opt/web/powerdns-admin/data/pdnsa.sqlite3' -``` - -Остальное коментирую: -```conf - #SQLA_DB_USER = 'powerdns' - #SQLA_DB_PASSWORD = 'y7HMHi0ATxx1VC3UU5WG' - #SQLA_DB_HOST = '127.0.0.1' - #SQLA_DB_NAME = 'powerdnsadmin' - #SQLALCHEMY_DATABASE_URI = 'postgres://{}:{}@{}/{}'.format( - # urllib.parse.quote_plus(SQLA_DB_USER), - # urllib.parse.quote_plus(SQLA_DB_PASSWORD), - # SQLA_DB_HOST, - # SQLA_DB_NAME - #) - #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db') -``` - - -Экспортируем переменную: -```sh - cd /opt/web/powerdns-admin && - export FLASK_CONF=../configs/production.py && - export FLASK_APP=powerdnsadmin/__init__.py -``` - -```sh -pip install --upgrade pip setuptools wheel && -pip install setuptools && -pip install flask-mail -``` - -Upgrade the database schema: -```sh - export PYTHONWARNINGS="ignore" && - flask db upgrade -``` - -Если выдаёт ошибки то правим исзодный код: -```sh - mcedit /opt/web/powerdns-admin/powerdnsadmin/lib/utils.py -``` -И заменяем экранирование -```python - # строку - from distutils.version import StrictVersion - # На строки - from packaging.version import Version as StrictVersion - from setuptools._distutils.util import strtobool -``` - - - -```sh - deactivate -``` - -```sh -sudo su - powerdns-admin -``` -```sh - cd /opt/web/powerdns-admin && - flask assets build -``` - -Можно запускать (нужно задать переменные окружения которые выше): -```sh - cd /opt/web/powerdns-admin && - source venv/bin/activate && - ./run.py -``` - - -Проще запустить с использованием SQLite по инструкции из: https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/master/docs/wiki/install/Running-PowerDNS-Admin-on-Ubuntu-or-Debian.md - - -Теперь можно открыть -```sh -open http://192.168.200.85:9191/login -``` -Для создания административного пользователя нажимаем "Create an account" пример https://orcacore.com/set-up-powerdns-ubuntu-22-04/ -Создал с именем igor и ппаролем !Ii123456 - - -!!! Проверь что PowerDNS API включён в /etc/powerdns/pdns.conf !!! - - - ----------------------------------------------------------------------------------------------------- -Настраиваем запус на постоянную работу через Gunicorn и systemd - -```sh - cd /opt/web/powerdns-admin && - source venv/bin/activate && - pip install gunicorn -``` - -```sh -exit -``` -Создаю файл службы: -```sh -sudo tee /etc/systemd/system/powerdns-admin.service > /dev/null <<'EOF' -[Unit] -Description=PowerDNS-Admin Service -After=network.target - -[Service] -User=powerdns-admin -Group=powerdns-admin -WorkingDirectory=/opt/web/powerdns-admin -Environment="FLASK_CONF=../configs/production.py" -Environment="FLASK_APP=powerdnsadmin/__init__.py" -ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --workers 2 --bind 192.168.200.85:9191 "powerdnsadmin:create_app()" -Restart=always -RestartSec=5s - -[Install] -WantedBy=multi-user.target -EOF -``` - -```sh - sudo systemctl enable powerdns-admin.service && - sudo systemctl start powerdns-admin.service -``` -```sh -sudo systemctl status powerdns-admin.service -``` -```sh -sudo journalctl -u powerdns-admin.service -``` - -```sh -start http://192.168.200.85:9191/login +Документация по PowerDNS: https://doc.powerdns.com/authoritative/installation.html +**************************************************************************************************** +## 2. Подключаемся к нужному серверу +```sh +ssh igor@192.168.200.85 -p 22 +``` +Connect to CCALM Georgia infrastructure: +```sh +ssh igor@88.218.94.134 -p 2200 +``` +**************************************************************************************************** +DynDNS на PowerDNS авторитативный сервер тот кто отвечает на те домены которые в его базе (рекурсивный присылает авторитативному запросы) + +DNS на Ubuntu 24.04 согласно инстркции https://phoenixnap.com/kb/powerdns-ubuntu: +Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт) +Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html + +```sh + sudo apt-get update && + sudo apt-get upgrade -y +``` +Install PowerDNS server +```sh + sudo apt-get install pdns-server -y +``` + +На всякий случай делаю резервные копии исходных файлов настрое: +```sh +cd /etc/powerdns && +sudo cp named.conf named.conf.bak && +sudo cp pdns.conf pdns.conf.bak +``` + +---------------------------------------------------------------------------------------------------- +Как настроить MariaDB базу для использования в PowerDNS смотри: +[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md) +---------------------------------------------------------------------------------------------------- +Как настроить SQLite3 базу для использования в PowerDNS смотри: +[Установка PowerDNS с MariaDB](./PowerDNS_install_SQIite3.md) +---------------------------------------------------------------------------------------------------- +Как настроить PostgreSQL базу для использования в PowerDNS смотри: +[Установка PowerDNS с MariaDB](./PowerDNS_install_PostgreSQL.md) +---------------------------------------------------------------------------------------------------- + +Наспройку файла pdns.conf авторитетный сервер, есть такой пример который следует изучить: https://raw.githubusercontent.com/trinv/PowerDNS/a56b9122f4a2de9c1f789009f09b9831f74d8bf1/pdns.template.master.conf (естественно без 1й табуляции): + +```sh + sudo mcedit /etc/powerdns/pdns.conf +``` + +Write new settings rr +```sh +cd /etc/powerdns/ && +sudo tee pdns.conf > /dev/null <<'EOF' + +allow-axfr-ips=127.0.0.1 +also-notify=127.0.0.1 + +include-dir=/etc/powerdns/pdns.d +launch= + +local-address=88.218.94.134,127.0.0.1 +local-port=53 + +log-dns-details=on +log-dns-queries=yes +log-timestamp=yes +loglevel=4 + +webserver=yes +webserver-address=127.0.0.1 +webserver-allow-from=::/0, 0.0.0.0/0 +webserver-port=8091 + +master=yes +slave=no + +# Также активирую API +api=yes +api-key=40c89f2a-e2f3-4ff8-a245-3547111f6677 +EOF +``` +Проверяю соединение к базе перезапустив PowerDNS: +```sh + sudo systemctl stop pdns && + sudo pdns_server --daemon=no --guardian=no --loglevel=9 +``` +Пытаемся открыть WEB интерфейс +```sh +start http://88.218.94.134:8081 +``` + +Если всё норм выполняем: +```sh + sudo systemctl restart pdns && + sudo systemctl enable pdns && + sudo systemctl status pdns +``` +Проверяем что порт 5300 открыт для DNS: +```sh + sudo ss -alnp4 | grep pdns +``` +Если что-то не получается то проверяем кто слушает на порту 53 +```sh + sudo apt-get install net-tools -y && + sudo netstat -tulnp | grep :53 +``` + +Создаём зону и добавляем запись +```sh +sudo pdnsutil create-zone test ns1.test && +sudo pdnsutil add-record test ccalm A 192.168.200.184 +``` +Добавляем зону и две записи +```sh +sudo pdnsutil create-zone geovizor.top && +sudo pdnsutil replace-rrset geovizor.top @ SOA "ns1.geovizor.top admin.geovizor.top $(date +%Y%m%d)01 10800 3600 604800 3600" && +sudo pdnsutil add-record geovizor.top ns1 A 88.218.94.134 && +sudo pdnsutil add-record geovizor.top ns2 A 88.218.94.134 && +sudo pdnsutil add-record geovizor.top @ A 88.218.94.134 && +sudo pdnsutil add-record geovizor.top * A 88.218.94.134 && +sudo pdnsutil add-record geovizor.top @ CAA 3600 "0 issue \"letsencrypt.org\"" && +sudo pdnsutil add-record geovizor.top @ TXT 3600 "\"v=spf1 ip4:88.218.94.134 -all\"" && +sudo pdnsutil add-record geovizor.top @ MX 3600 "10 mail.geovizor.top." && +sudo pdnsutil add-record geovizor.top mail A 3600 88.218.94.134 && +sudo pdnsutil add-record geovizor.top powerdns A 3600 88.218.94.134 +``` + +```sh +sudo pdnsutil create-zone locust.ge && +sudo pdnsutil replace-rrset locust.ge @ SOA "ns1.geovizor.top admin.locust.ge $(date +%Y%m%d)01 10800 3600 604800 3600" && +sudo pdnsutil add-record locust.ge @ A 88.218.94.134 && +sudo pdnsutil add-record locust.ge * A 88.218.94.134 && +sudo pdnsutil add-record locust.ge @ CAA 3600 "0 issue \"letsencrypt.org\"" && +sudo pdnsutil add-record locust.ge @ TXT 3600 "\"v=spf1 ip4:88.218.94.134 -all\"" && +sudo pdnsutil add-record locust.ge @ MX 3600 "10 mail.locust.ge." && +sudo pdnsutil add-record locust.ge mail A 3600 88.218.94.134 +``` + + + +Выше задал такие настройки как +```conf +Refresh = 10800 (3 часа) +Retry = 3600 (1 час) +Expire = 604800 (1 неделя) +Minimum = 3600 (1 час) +``` + + +Проверим список зон +```sh +sudo pdnsutil list-all-zones && +sudo pdnsutil list-zone geovizor.top +``` +Проверяем отвечалет ли: +```sh +dig @127.0.0.1 -p 5300 ccalm.test A +``` +```sh +dig @127.0.0.1 -p 53 geovizor.top A +``` +```sh +dig @88.218.94.134 -p 53 geovizor.top A +``` +```sh +dig @88.218.94.134 -p 53 powerdns.geovizor.top A +``` + +### Теперь можно настроить HTTPS для взаимодействия через API с сервером для динамического задания IP адресов + +```sh +API_KEY="40c89f2a-e2f3-4ff8-a245-3547111f6677" +SERVER="156.244.31.209" +ZONE="geovizor.top" + +curl -X PATCH \ + -H "X-API-Key: $API_KEY" \ + -H "Content-Type: application/json" \ + "http://$SERVER:8081/api/v1/servers/localhost/zones/$ZONE" \ + -d '{ + "rrsets": [ + { + "name": "*.geovizor.top.", + "type": "A", + "ttl": 3600, + "changetype": "REPLACE", + "records": [ + { + "content": "5.251.54.197", + "disabled": false + } + ] + } + ] + }' +``` + + + +## ********** Настройка рекурсивного DNS от PowerDNS Recursor 4.9.3 порту 53 будет обрабатывать запросы с локальной машины ********** +Документация: https://doc.powerdns.com/recursor/index.html +Документация: https://docs.powerdns.com/recursor/indexTOC.html +Чтобы работал резольвер от PowerDNS а не тот который от ubuntu на 53 порту нужно: + +```sh + sudo apt-get install pdns-recursor -y +``` + +Скачиваем список корневых серверов DNS (желательно обновлять раз в несколько месяцев) +```sh + sudo wget -O /usr/share/dns/root.hints https://www.internic.net/domain/named.cache && + sudo chown pdns:pdns /usr/share/dns/root.hints +``` + +```sh + sudo mkdir -p /var/run/pdns-recursor && + sudo chown pdns:pdns /var/run/pdns-recursor && + sudo chmod 755 /var/run/pdns-recursor +``` + +```sh + sudo mcedit /etc/powerdns/recursor.conf +``` + +Чтобы все запросы с . уходили на публичные DNS Google: +```conf +#dnssec=off #чтобы не проверял то что записано в forward-zones через корневые серверы +local-address=192.168.200.85,127.0.0.1 +#forward-zones=local=127.0.0.1:5300 # Отправлять .local в авторитативный +#forward-zones+=.=8.8.8.8;8.8.4.4 # Все остальное в интернет +forward-zones=test=127.0.0.1:5300 +#forward-zones-recurse=+test=127.0.0.1:5300 +``` + +Либо если оставить настройку "nssec=process" то нужно прописать в /etc/powerdns/recursor.lua добавить комкнду addNTA, если не добавить то forward-zones не будет отрабатывать. Также можно сделать чтобы dirt.kz не выходил с наружи и с резу перенаправлялся на нужный IP с временем жизни минута 30 секунд. +```lua +addNTA("test", "Local test zone") +``` + +Пробуем запустить без сервиса чтобы посмотреть что выведит в лог +```sh +sudo pdns_recursor --daemon=no --loglevel=9 +``` + +Чтобы запросы переходили на pdns-recursor +Затем перезагружаем: +```sh + sudo systemctl restart pdns-recursor && + sudo systemctl status pdns-recursor +``` + +Проверяем что порт 53 открыт для DNS: +```sh + sudo ss -alnp4 | grep pdns +``` +Если что-то не получается то проверяем кто слушает на порту 53 +```sh + sudo apt-get install net-tools -y && + sudo netstat -tulnp | grep :53 +``` + +Проверяем что преобразование DNS нормально работает: +```sh + dig @192.168.200.85 google.com +``` +если уже настроил PowerDNS сервер то можно попробовать отправить: +```sh + sudo rec_control wipe-cache test && + sudo rec_control wipe-cache ccalm.test && + dig @192.168.200.85 -p 53 ccalm.test +``` +```sh + dig @127.0.0.1 -p 53 ccalm.test A +``` +```sh + dig +trace @192.168.200.85 -p 53 ccalm.test +``` + +Проверяем логи +```sh + sudo journalctl -u pdns-recursor --since "10 min ago" +``` +Или так чтобы найти ошибки: +```sh +sudo journalctl -u pdns-recursor --no-pager | grep -i failed +``` + +```sh +journalctl -u pdns-recursor --no-pager | tail -n 50 +``` + +---------------------------------------------------------------------------------------------------- +## ********** По идее отключать не нужно так как systemd-resolved использует другой IP: 127.0.0.54:53 (Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS) ********** + +Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved) +```sh +sudo mcedit /etc/netplan/50-cloud-init.yaml +``` +И прописываю в него: +```conf + nameserver 127.0.0.1 +``` +After configuration modification update settings: +```sh + sudo netplan apply +``` +Смотрим что сгенерировалось автоматически в resolv.conf после модификации файла +```sh + cat /etc/resolv.conf +``` +Проверяем что интернет не перестал работать: +```sh + ping changelogs.ubuntu.com +``` +Может быть что команда выше пытается по IP6 работать тогда попробовать по +```sh + ping -4 changelogs.ubuntu.com +``` +Либо так: +```sh + ping6 changelogs.ubuntu.com +``` +Взглянем на текущие DNS сервера, у меня такое выдало: DNS Servers: 195.210.46.195 195.210.46.132 на команду ниже: +```sh + resolvectl status +``` +Отредактировал файл /etc/systemd/resolved.conf заменив nameservers на 8.8.8.8 и 8.8.4.4 +```sh +sudo mcedit /etc/systemd/resolved.conf +``` + +Проверяем структуру файла: +```sh +sudo yamllint /etc/netplan/50-cloud-init.yaml +``` +Применяем настройки: +```sh + sudo netplan apply +``` +Проверяем что настройки изменились: +```sh + resolvectl status +``` +Изменил /etc/systemd/resolved.conf настроив так: +```conf + [Resolve] + DNS=8.8.8.8 8.8.4.4 + FallbackDNS=1.1.1.1 1.0.0.1 +``` +Потом перезагрузил: +```sh + sudo systemctl restart systemd-resolved +``` +Проверяем что заняло порт 53 командой: +```sh + sudo lsof -i :53 +``` +Выдало: +```text + COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME + systemd-r 670 systemd-resolve 13u IPv4 20070 0t0 UDP localhost:domain + systemd-r 670 systemd-resolve 14u IPv4 20071 0t0 TCP localhost:domain (LISTEN) +``` + +Останавливаем systemd-resolved (поисковик IP по домену по умолчанию от Ubuntu) +```sh + sudo systemctl stop systemd-resolved && + sudo systemctl disable systemd-resolved +``` + +---------------------------------------------------------------------------------------------------- +## ********** Устанавливаю PowerAdmin (желательно в докере устанавливать) ********** +Устанавливаю PowerAdmin согласно: https://phoenixnap.com/kb/powerdns-ubuntu#ftoc-heading-6 +```sh + sudo apt install libpq-dev -y && + sudo apt install python3-dev -y && + sudo apt install python3-flask -y && + sudo apt install python3-pip -y +``` +```sh + sudo apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl && + sudo apt install -y nodejs && + sudo apt install -y yarn +``` +устанавливаем другие зависимости: +```sh + sudo apt install npm -y && + sudo apt remove yarn -y && + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && + echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && + sudo apt update && + sudo apt install yarn -y && + yarn --version && + sudo yarn install --pure-lockfile +``` + +Create user for run PowerDNS Admin +```sh + sudo useradd -m -s /bin/bash powerdns-admin +``` +Clone the PowerDNS Admin Git repository to /opt/web/powerdns-admin +```sh + cd ~ + sudo git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /opt/web/powerdns-admin && + sudo chown -R powerdns-admin:powerdns-admin /opt/web/powerdns-admin && + cd /opt/web/powerdns-admin +``` +Настраиваем переменные окружения: +```sh + sudo -u powerdns-admin -s && + cd /opt/web/powerdns-admin +``` +Устанавливаем перенеммые окружения и необходимые скрипты +```sh + python3 -mvenv ./venv && + source ./venv/bin/activate && + pip install --upgrade pip && + pip install -r requirements.txt +``` +Создаю базу данных +```sh + mkdir /opt/web/powerdns-admin/data && + sqlite3 /opt/web/powerdns-admin/data/pdnsa.sqlite3 ".databases" +``` +Cекретный ключ можно сгенерировать при помощи такой команды: +```sh + python3 -c "import secrets; print(secrets.token_hex(16))" +``` +Такой сгенерил для 192.168.200.85: 1c100fb414b8116725a04015fbaf907e + +Конфигугрируем PowerDNS Admin. +Для начала копирую пример конфигураци, потом открываю его в редакторе: +```sh + cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py +``` +```sh + mcedit /opt/web/powerdns-admin/configs/production.py +``` +И редактируем следующие строки: +```conf + #import urllib.parse + SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd0' + SQLA_DB_PASSWORD = 'changeme' +``` + +Также настраиваю подключение к базе данных (сам строку составил): +```conf + SQLALCHEMY_DATABASE_URI = 'postgresql://powerdns:y7HMHi0ATxx1VC3UU5WG@127.0.0.1/powerdnsadmin' +``` +Либо к новой базе данных: + +```conf + SQLALCHEMY_DATABASE_URI = 'sqlite:////opt/web/powerdns-admin/data/pdnsa.sqlite3' +``` + +Остальное коментирую: +```conf + #SQLA_DB_USER = 'powerdns' + #SQLA_DB_PASSWORD = 'y7HMHi0ATxx1VC3UU5WG' + #SQLA_DB_HOST = '127.0.0.1' + #SQLA_DB_NAME = 'powerdnsadmin' + #SQLALCHEMY_DATABASE_URI = 'postgres://{}:{}@{}/{}'.format( + # urllib.parse.quote_plus(SQLA_DB_USER), + # urllib.parse.quote_plus(SQLA_DB_PASSWORD), + # SQLA_DB_HOST, + # SQLA_DB_NAME + #) + #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db') +``` + + +Экспортируем переменную: +```sh + cd /opt/web/powerdns-admin && + export FLASK_CONF=../configs/production.py && + export FLASK_APP=powerdnsadmin/__init__.py +``` + +```sh +pip install --upgrade pip setuptools wheel && +pip install setuptools && +pip install flask-mail +``` + +Upgrade the database schema: +```sh + export PYTHONWARNINGS="ignore" && + flask db upgrade +``` + +Если выдаёт ошибки то правим исзодный код: +```sh + mcedit /opt/web/powerdns-admin/powerdnsadmin/lib/utils.py +``` +И заменяем экранирование +```python + # строку + from distutils.version import StrictVersion + # На строки + from packaging.version import Version as StrictVersion + from setuptools._distutils.util import strtobool +``` + + + +```sh + deactivate +``` + +```sh +sudo su - powerdns-admin +``` +```sh + cd /opt/web/powerdns-admin && + flask assets build +``` + +Можно запускать (нужно задать переменные окружения которые выше): +```sh + cd /opt/web/powerdns-admin && + source venv/bin/activate && + ./run.py +``` + + +Проще запустить с использованием SQLite по инструкции из: https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/master/docs/wiki/install/Running-PowerDNS-Admin-on-Ubuntu-or-Debian.md + + +Теперь можно открыть +```sh +open http://192.168.200.85:9191/login +``` +Для создания административного пользователя нажимаем "Create an account" пример https://orcacore.com/set-up-powerdns-ubuntu-22-04/ +Создал с именем igor и ппаролем !Ii123456 + + +!!! Проверь что PowerDNS API включён в /etc/powerdns/pdns.conf !!! + + + +---------------------------------------------------------------------------------------------------- +Настраиваем запус на постоянную работу через Gunicorn и systemd + +```sh + cd /opt/web/powerdns-admin && + source venv/bin/activate && + pip install gunicorn +``` + +```sh +exit +``` +Создаю файл службы: +```sh +sudo tee /etc/systemd/system/powerdns-admin.service > /dev/null <<'EOF' +[Unit] +Description=PowerDNS-Admin Service +After=network.target + +[Service] +User=powerdns-admin +Group=powerdns-admin +WorkingDirectory=/opt/web/powerdns-admin +Environment="FLASK_CONF=../configs/production.py" +Environment="FLASK_APP=powerdnsadmin/__init__.py" +ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --workers 2 --bind 192.168.200.85:9191 "powerdnsadmin:create_app()" +Restart=always +RestartSec=5s + +[Install] +WantedBy=multi-user.target +EOF +``` + +```sh + sudo systemctl enable powerdns-admin.service && + sudo systemctl start powerdns-admin.service +``` +```sh +sudo systemctl status powerdns-admin.service +``` +```sh +sudo journalctl -u powerdns-admin.service +``` + +```sh +start http://192.168.200.85:9191/login ``` \ No newline at end of file diff --git a/PowerDNS_install_MarinaDB.md b/DNS/PowerDNS_install_MarinaDB.md similarity index 100% rename from PowerDNS_install_MarinaDB.md rename to DNS/PowerDNS_install_MarinaDB.md diff --git a/PowerDNS_install_PostgreSQL.md b/DNS/PowerDNS_install_PostgreSQL.md similarity index 100% rename from PowerDNS_install_PostgreSQL.md rename to DNS/PowerDNS_install_PostgreSQL.md diff --git a/PowerDNS_install_SQIite3.md b/DNS/PowerDNS_install_SQIite3.md similarity index 100% rename from PowerDNS_install_SQIite3.md rename to DNS/PowerDNS_install_SQIite3.md diff --git a/PowerDNS_install_doker.md b/DNS/PowerDNS_install_doker.md similarity index 100% rename from PowerDNS_install_doker.md rename to DNS/PowerDNS_install_doker.md diff --git a/PostgreSQL_Exporter.md b/PostgreSQL/PostgreSQL_Exporter.md similarity index 96% rename from PostgreSQL_Exporter.md rename to PostgreSQL/PostgreSQL_Exporter.md index 2bbc50a..4f2a0fd 100644 --- a/PostgreSQL_Exporter.md +++ b/PostgreSQL/PostgreSQL_Exporter.md @@ -1,141 +1,141 @@ -Устанавливаю согласно инструкции из: - -https://github.com/prometheus-community/postgres_exporter - -Подключаюсь к нужной машине -```sh -ssh igor@ccalm.org -p 2200 -``` - -Configure postgresql.conf -```conf - shared_preload_libraries = 'pg_stat_statements' - pg_stat_statements.track = all -``` - -## 1. Установка Docker и Docker Compose -Если Docker не установлен, установим его: -```sh - sudo apt update && sudo apt upgrade -y && - sudo apt install -y docker.io docker-compose && - sudo systemctl enable --now docker -``` - -## 2. Установка postgres-exporter в докере из заранее подготовленного образа - -```sh -sudo mkdir -p /opt/postgres-exporter && -sudo chown $USER:$USER /opt/postgres-exporter && -cd /opt/postgres-exporter -``` - -Создаю файл с настройками -```sh -cd /opt/postgres-exporter/ && -cat > docker-compose.yml <<'EOF' -services: - postgres-exporter: - image: quay.io/prometheuscommunity/postgres-exporter - container_name: postgres-exporter - restart: unless-stopped - network_mode: "host" - environment: - DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable" - volumes: - - ./postgres_exporter.yml:/etc/postgres_exporter.yml - command: - - "--config.file=/etc/postgres_exporter.yml" - -EOF -``` - -Создаём файл с настройками -```sh -cd /opt/postgres-exporter/ && -cat > postgres_exporter.yml <<'EOF' -collectors: - - database - - index - - query - - table -EOF -``` -Запускаю: -```sh - cd /opt/postgres-exporter && - sudo docker-compose up -d -``` - -Проверяю запущен ли докер -```sh - sudo docker ps -``` - -Testing with: -```sh -curl "http://127.0.0.1:9187/metrics" -``` - -Посмотреть журнал за сегодня: -```sh -journalctl --since today -``` - -Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера - -```sh -sudo mcedit /etc/haproxy/haproxy.cfg -``` -Настраиваем: -```text - acl v_metrics_nd path_beg /metrics_nd - acl v_basic_auth http_auth(prometheus_list) - http-request auth realm Metrics_org_ccalm_nd if v_metrics_nd !v_basic_auth - use_backend b_metrics_nd if v_metrics_nd v_basic_auth - -backend b_metrics_nd - mode http - option http-keep-alive - http-request replace-path .* /metrics - server web1 127.0.0.1:9100 check -``` - -Проверяем -```sh - haproxy -f /etc/haproxy/haproxy.cfg -c -```` -Перезагружаем: -```sh - sudo systemctl restart haproxy -```` - - - -Подключаюсь к машине где Prometeus: - -```sh -ssh igor@192.168.200.84 -p 22 -``` - -Перезагружаем prometheus чтобы он начал собирать метрики -```sh - sudo systemctl restart prometheus -``` - - - - -Теперь можно настраивать графану, вот готовыдашбоард -Открыть Grafana -Перейти в Dashboards → Import -Вставить ID: 9628 -Выбрать источник данных Prometheus (с PostgreSQL Exporter) -Нажать Import - - -Теперь можно настраивать графану, вот готовыдашбоард -Открыть Grafana -Перейти в Dashboards → Import -Вставить ID: 12273 -Выбрать источник данных Prometheus (с PostgreSQL Exporter) +Устанавливаю согласно инструкции из: + +https://github.com/prometheus-community/postgres_exporter + +Подключаюсь к нужной машине +```sh +ssh igor@ccalm.org -p 2200 +``` + +Configure postgresql.conf +```conf + shared_preload_libraries = 'pg_stat_statements' + pg_stat_statements.track = all +``` + +## 1. Установка Docker и Docker Compose +Если Docker не установлен, установим его: +```sh + sudo apt update && sudo apt upgrade -y && + sudo apt install -y docker.io docker-compose && + sudo systemctl enable --now docker +``` + +## 2. Установка postgres-exporter в докере из заранее подготовленного образа + +```sh +sudo mkdir -p /opt/postgres-exporter && +sudo chown $USER:$USER /opt/postgres-exporter && +cd /opt/postgres-exporter +``` + +Создаю файл с настройками +```sh +cd /opt/postgres-exporter/ && +cat > docker-compose.yml <<'EOF' +services: + postgres-exporter: + image: quay.io/prometheuscommunity/postgres-exporter + container_name: postgres-exporter + restart: unless-stopped + network_mode: "host" + environment: + DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable" + volumes: + - ./postgres_exporter.yml:/etc/postgres_exporter.yml + command: + - "--config.file=/etc/postgres_exporter.yml" + +EOF +``` + +Создаём файл с настройками +```sh +cd /opt/postgres-exporter/ && +cat > postgres_exporter.yml <<'EOF' +collectors: + - database + - index + - query + - table +EOF +``` +Запускаю: +```sh + cd /opt/postgres-exporter && + sudo docker-compose up -d +``` + +Проверяю запущен ли докер +```sh + sudo docker ps +``` + +Testing with: +```sh +curl "http://127.0.0.1:9187/metrics" +``` + +Посмотреть журнал за сегодня: +```sh +journalctl --since today +``` + +Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера + +```sh +sudo mcedit /etc/haproxy/haproxy.cfg +``` +Настраиваем: +```text + acl v_metrics_nd path_beg /metrics_nd + acl v_basic_auth http_auth(prometheus_list) + http-request auth realm Metrics_org_ccalm_nd if v_metrics_nd !v_basic_auth + use_backend b_metrics_nd if v_metrics_nd v_basic_auth + +backend b_metrics_nd + mode http + option http-keep-alive + http-request replace-path .* /metrics + server web1 127.0.0.1:9100 check +``` + +Проверяем +```sh + haproxy -f /etc/haproxy/haproxy.cfg -c +```` +Перезагружаем: +```sh + sudo systemctl restart haproxy +```` + + + +Подключаюсь к машине где Prometeus: + +```sh +ssh igor@192.168.200.84 -p 22 +``` + +Перезагружаем prometheus чтобы он начал собирать метрики +```sh + sudo systemctl restart prometheus +``` + + + + +Теперь можно настраивать графану, вот готовыдашбоард +Открыть Grafana +Перейти в Dashboards → Import +Вставить ID: 9628 +Выбрать источник данных Prometheus (с PostgreSQL Exporter) +Нажать Import + + +Теперь можно настраивать графану, вот готовыдашбоард +Открыть Grafana +Перейти в Dashboards → Import +Вставить ID: 12273 +Выбрать источник данных Prometheus (с PostgreSQL Exporter) Нажать Import \ No newline at end of file diff --git a/PostgreSQL_credcheck.md b/PostgreSQL/PostgreSQL_credcheck.md similarity index 97% rename from PostgreSQL_credcheck.md rename to PostgreSQL/PostgreSQL_credcheck.md index 62a0586..b9edff9 100644 --- a/PostgreSQL_credcheck.md +++ b/PostgreSQL/PostgreSQL_credcheck.md @@ -1,61 +1,61 @@ -**************************************************************************************************** -Установка и настройка проверяльщик паролей credcheck -PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/ - -Тестовая база -```sh - ssh administrator@10.201.3.36 -p 22 -``` - -Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём: -```sh - apt search credcheck -``` - -Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен): -```sh - sudo apt-get install postgresql-server-dev-16 && - sudo apt-get install build-essential && - git clone https://github.com/HexaCluster/credcheck.git && - cd credcheck && - make && - sudo make install -``` - -Подключаемся к базе данных для выполнения запросов -```sh - psql -h 127.0.0.1 -U postgres -d transit -``` -Проверяем что настройки имеются: -```sh - SELECT name, setting, unit, source, sourcefile, sourceline - FROM pg_settings - WHERE name LIKE 'credcheck%'; -``` - -Читаем текущие настройки -```sh -SHOW ALL; -``` - -Создаём расширение в базе postgres: -```sh - CREATE EXTENSION credcheck; -``` - -Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck: - -- Configure credential policies to enforce username and password standards and reload configuration files - ALTER SYSTEM SET credcheck.username_min_length = 4; - ALTER SYSTEM SET credcheck.password_min_length = 8; - ALTER SYSTEM SET credcheck.password_min_special = 1; - SELECT pg_reload_conf(); - - -- Attempt to create a user for a new park ranger, which does not meet the credential policies - CREATE USER ranger_ WITH PASSWORD 'forest'; - ERROR: password length should match the configured credcheck.password_min_length - -Для пароля установить: - ALTER SYSTEM SET credcheck.password_expiration_days = 90; - SELECT pg_reload_conf(); - -Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора): +**************************************************************************************************** +Установка и настройка проверяльщик паролей credcheck +PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/ + +Тестовая база +```sh + ssh administrator@10.201.3.36 -p 22 +``` + +Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём: +```sh + apt search credcheck +``` + +Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен): +```sh + sudo apt-get install postgresql-server-dev-16 && + sudo apt-get install build-essential && + git clone https://github.com/HexaCluster/credcheck.git && + cd credcheck && + make && + sudo make install +``` + +Подключаемся к базе данных для выполнения запросов +```sh + psql -h 127.0.0.1 -U postgres -d transit +``` +Проверяем что настройки имеются: +```sh + SELECT name, setting, unit, source, sourcefile, sourceline + FROM pg_settings + WHERE name LIKE 'credcheck%'; +``` + +Читаем текущие настройки +```sh +SHOW ALL; +``` + +Создаём расширение в базе postgres: +```sh + CREATE EXTENSION credcheck; +``` + +Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck: + -- Configure credential policies to enforce username and password standards and reload configuration files + ALTER SYSTEM SET credcheck.username_min_length = 4; + ALTER SYSTEM SET credcheck.password_min_length = 8; + ALTER SYSTEM SET credcheck.password_min_special = 1; + SELECT pg_reload_conf(); + + -- Attempt to create a user for a new park ranger, which does not meet the credential policies + CREATE USER ranger_ WITH PASSWORD 'forest'; + ERROR: password length should match the configured credcheck.password_min_length + +Для пароля установить: + ALTER SYSTEM SET credcheck.password_expiration_days = 90; + SELECT pg_reload_conf(); + +Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора): diff --git a/PostgreSQL_install.md b/PostgreSQL/PostgreSQL_install.md similarity index 97% rename from PostgreSQL_install.md rename to PostgreSQL/PostgreSQL_install.md index c5d30d2..825c020 100644 --- a/PostgreSQL_install.md +++ b/PostgreSQL/PostgreSQL_install.md @@ -1,348 +1,348 @@ -# Install PostgreSQL database - -Coonect lto need server: -```sh -wsl -``` -Or coonect to need server: -```sh -ssh igor@ccalm.org -p 2200 -``` - -**************************************************************************************************** -Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries: -Скачал, создаю дирректорию хранения данных: -O:\MyDocuments\DataBases\postgresql-12.3-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_12.3 -O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13 -Потом создать BAT файл с тем текстом что отобразится при создании каталога базы -База данных создаётся не под пользователем postgres а под локальным пользователем igor -**************************************************************************************************** -Установка PostgreSQL 14 ubuntu 22.04 или 24.04 -```sh - sudo apt-get update - sudo apt-get install postgresql postgresql-contrib -y -``` -Или так если нужно установить PostGIS -```sh - sudo apt-get install postgis -``` -Для удаления PostGIS в месте с зависимыми пакетами: -```sh - sudo apt-get remove --auto-remove postgis && - sudo apt-get purge postgis -``` -Добавить русскую локаль если её нет: -```sh - sudo locale-gen ru_RU && - sudo locale-gen ru_RU.UTF-8 && - sudo locale-gen kk_KZ && - sudo locale-gen kk_KZ.UTF-8 -``` -Проверить какая локаль по умолчанию: -```sh - localectl status -``` -И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры): -```sh - sudo dpkg-reconfigure locales -``` -Для задания пароля в PostgreSQL выполнить: -```sh - sudo -u postgres psql && - \password postgres -``` -Чтобы выйти нужно выпольнить команду: \q - -Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust -Задать пароль: - sudo -u postgres psql - postgres=> SELECT usename FROM pg_user; - postgres=> alter user postgres password 'PasSecrKey1'; - postgres=> \q - -Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/ -Создаём базу данных выполнив функцию: -CREATE DATABASE CCALM - WITH OWNER = postgres - TEMPLATE = template0 - ENCODING = 'UTF8' - TABLESPACE = pg_default - LC_COLLATE = 'ru_RU.UTF-8' - LC_CTYPE = 'ru_RU.UTF-8' - CONNECTION LIMIT = -1; - -Файл настроек postgresql: -```sh -sudo mcedit /etc/postgresql/16/main/postgresql.conf -``` - listen_addresses='*' #Разрешить подключение с внешки - #Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой - backslash_quote = on - escape_string_warning = off - standard_conforming_strings = off -Чтобы воводил двоичные данные по старому изменить на: - bytea_output = 'escape' - -Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду" - -Для создания нового пользователя выполнить: - sudo -u postgres psql - CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION; - -Для подключения к определённой базе данных выполнить команду: - sudo -u postgres psql - \list or \l: для отображения всех баз - \connect zholak zholak - \dt для отображения всех таблиц - -или написать со своим IP: host all all 2.133.238.240/24 trust -Для подключения с любых IP адресов в " -```sh -sudo mcedit /etc/postgresql/16/main/pg_hba.conf -``` - host all all 0.0.0.0/0 md5 - Либо с одного конкретного то: host all all 92.46.48.37/24 md5 -А также поменять на listen_addresses = '*' в postgresql.conf -Потом перезагрузить postgres: - sudo service postgresql restart - sudo /etc/init.d/postgresql stop - sudo /etc/init.d/postgresql restart - sudo /etc/init.d/postgresql start -Проверить запущен или нет то: - sudo /etc/init.d/postgresql status -Посмотрель лог загрузки PostGreSQL: - dmesg |grep pg -Чтобы посмотреть чем занят порт выполнить команду: - sudo netstat -tap | grep 5432 - -Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): - pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root - pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres - pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres - pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom - pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres - pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom - pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom - - pg_dump CCALM>CCALM.backup --host=127.0.0.1 --username=postgres --format=custom - - pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom - pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql - pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz - -Востановить Dump из текстового файла: - psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup - psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql - psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql - psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql - psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql - -Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл: - /mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh - #!/bin/sh - pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz - -Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться): - su - postgres - pg_restore -U -d -1 .dump - pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup - pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup - pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup - pg_restore -U postgres -d transit -1 /home/administrator/transit.backup - pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup - - sudo -u postgres psql -d transit -f /tmp/transit.backup - -Или из архива (первоначально задать trust на 127.0.0.1) так: - gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop - -**************************************************************************************************** -Настройка отображения статистики для PostgreSQL: - https://habr.com/ru/articles/488968/ - - SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC; - SELECT * FROM pg_stat_activity - SELECT * FROM pg_stat_replication - SELECT * FROM pg_stat_all_tables - -Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats - -Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL - По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/ - По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU -**************************************************************************************************** -Установка pgagent - sudo apt-get update - sudo apt-get install pgagent -Выполнить в консоли запрос: - psql -h localhost -U postgres - create extension pgagent; - \q -Для разрешения подключения откройте файл pg_hba.conf и замените строку на: - host all all 127.0.0.1/32 md5 - -Можно для теста запустить pgagent с повышенным уровнем логирования: - /usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk - -Если файла нет то пытаюсь его создать: - sudo mcedit /lib/systemd/system/pgagent.service - -[Unit] -Description=PostgreSQL PgAgent Service -After=network.target - -[Service] -Type=simple -User=postgres -ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1 - -[Install] -WantedBy=multi-user.target - -Проверяю что сервис был запущен: - sudo systemctl daemon-reload - sudo systemctl enable pgagent - sudo service pgagent start - sudo systemctl status pgagent - - -Для проверки пробуем подключиться к базе данных - sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres - \q - -Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться: - sudo -u postgres touch /var/lib/postgresql/.pgpass - sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass - sudo -u postgres mcedit /var/lib/postgresql/.pgpass -И прописать в него: - 127.0.0.1:5432:postgres:postgres:PasSecrKey1 -Где используется такой формат: hostname:port:database:username:password -Затем: - sudo systemctl enable pgagent - sudo service pgagent start - sudo service pgagent status -Посмотреть логи: - sudo journalctl -u pgagent - -**************************************************************************************************** -Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт: - - -**************************************************************************************************** -Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move - -**************************************************************************************************** -Установка PostGIS на PostgreSQL выше 9.0 версии: - sudo apt-get install postgis postgresql-9.3-postgis-2.1 -Для 10й версии: - sudo apt install postgresql-10-postgis-2.4 - sudo apt install postgresql-10-postgis-scripts -Для 12й версии: - sudo apt install postgresql-12-postgis-2.4 - -Создать базу данных и выполнть на ней следующие команды: - -- Enable PostGIS (includes raster) - CREATE EXTENSION postgis; - -- Enable Topology - CREATE EXTENSION postgis_topology; - -- fuzzy matching needed for Tiger - CREATE EXTENSION fuzzystrmatch; - -- rule based standardizer - CREATE EXTENSION address_standardizer; - -- example rule data set - CREATE EXTENSION address_standardizer_data_us; - -- Enable US Tiger Geocoder - CREATE EXTENSION postgis_tiger_geocoder; - -У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17 -Аказывается расширение кудато делось установил: - sudo apt-get install postgresql-9.5-postgis-2.2 -**************************************************************************************************** -Для добавления TOTP авторизации в Postgresql выполнить: - CREATE EXTENSION otp; - - -**************************************************************************************************** - sudo apt-get install libpq-dev libpq-fe -Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен - То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev - apt update -**************************************************************************************************** -Установка phpPgAdmin через репозиторий: -sudo apt-get install phppgadmin -Можно открыть так: http://localhost/phppgadmin -Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all -Чтоб можно было залогинется под пользователем postgres меняем в: -/etc/phppgadmin/config.inc.php extra_login_security в false -Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost'; - -Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". -**************************************************************************************************** -Установка pgAdmin4 через докер контейнер - -```sh - sudo mkdir -p /opt/pgAdmin4 && - sudo chmod -R 777 /opt/pgAdmin4 && - sudo chown -R $USER:$USER /opt/pgAdmin4 -``` - -```sh -cd /opt/pgAdmin4 && -cat > docker-compose.yml <<'EOF' -services: - pgadmin: - image: dpage/pgadmin4 - container_name: pgadmin4 - restart: unless-stopped - ports: - - "5050:80" - environment: - PGADMIN_DEFAULT_EMAIL: irigm@mail.ru - PGADMIN_DEFAULT_PASSWORD: 123456 - volumes: - - pgadmin_data:/var/lib/pgadmin - -volumes: - pgadmin_data: -EOF -``` - -## 4. Запуск контейнера - -```sh - cd /opt/pgAdmin4 && - sudo docker compose up -d -``` - -```sh - cd /opt/pgAdmin4 && - sudo docker compose down -``` - - - - - -Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/ - curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add - sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/bionic pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' - sudo apt install pgadmin4 - -И не запустился сервер оболочка пытается стартануть а сервер нет... - - sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add - sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' - sudo apt install pgadmin4 - -Тоже не заработал - -Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/ - -**************************************************************************************************** -Балансировщик назрузки и потоковая репликация: -Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью -https://ritorika.com.ua/dokument/6/pgpool-chto-jeto -**************************************************************************************************** -Мониторинг запросов postgresql - - +# Install PostgreSQL database + +Coonect lto need server: +```sh +wsl +``` +Or coonect to need server: +```sh +ssh igor@ccalm.org -p 2200 +``` + +**************************************************************************************************** +Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries: +Скачал, создаю дирректорию хранения данных: +O:\MyDocuments\DataBases\postgresql-12.3-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_12.3 +O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13 +Потом создать BAT файл с тем текстом что отобразится при создании каталога базы +База данных создаётся не под пользователем postgres а под локальным пользователем igor +**************************************************************************************************** +Установка PostgreSQL 14 ubuntu 22.04 или 24.04 +```sh + sudo apt-get update + sudo apt-get install postgresql postgresql-contrib -y +``` +Или так если нужно установить PostGIS +```sh + sudo apt-get install postgis +``` +Для удаления PostGIS в месте с зависимыми пакетами: +```sh + sudo apt-get remove --auto-remove postgis && + sudo apt-get purge postgis +``` +Добавить русскую локаль если её нет: +```sh + sudo locale-gen ru_RU && + sudo locale-gen ru_RU.UTF-8 && + sudo locale-gen kk_KZ && + sudo locale-gen kk_KZ.UTF-8 +``` +Проверить какая локаль по умолчанию: +```sh + localectl status +``` +И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры): +```sh + sudo dpkg-reconfigure locales +``` +Для задания пароля в PostgreSQL выполнить: +```sh + sudo -u postgres psql && + \password postgres +``` +Чтобы выйти нужно выпольнить команду: \q + +Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust +Задать пароль: + sudo -u postgres psql + postgres=> SELECT usename FROM pg_user; + postgres=> alter user postgres password 'PasSecrKey1'; + postgres=> \q + +Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/ +Создаём базу данных выполнив функцию: +CREATE DATABASE CCALM + WITH OWNER = postgres + TEMPLATE = template0 + ENCODING = 'UTF8' + TABLESPACE = pg_default + LC_COLLATE = 'ru_RU.UTF-8' + LC_CTYPE = 'ru_RU.UTF-8' + CONNECTION LIMIT = -1; + +Файл настроек postgresql: +```sh +sudo mcedit /etc/postgresql/16/main/postgresql.conf +``` + listen_addresses='*' #Разрешить подключение с внешки + #Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой + backslash_quote = on + escape_string_warning = off + standard_conforming_strings = off +Чтобы воводил двоичные данные по старому изменить на: + bytea_output = 'escape' + +Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду" + +Для создания нового пользователя выполнить: + sudo -u postgres psql + CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION; + +Для подключения к определённой базе данных выполнить команду: + sudo -u postgres psql + \list or \l: для отображения всех баз + \connect zholak zholak + \dt для отображения всех таблиц + +или написать со своим IP: host all all 2.133.238.240/24 trust +Для подключения с любых IP адресов в " +```sh +sudo mcedit /etc/postgresql/16/main/pg_hba.conf +``` + host all all 0.0.0.0/0 md5 + Либо с одного конкретного то: host all all 92.46.48.37/24 md5 +А также поменять на listen_addresses = '*' в postgresql.conf +Потом перезагрузить postgres: + sudo service postgresql restart + sudo /etc/init.d/postgresql stop + sudo /etc/init.d/postgresql restart + sudo /etc/init.d/postgresql start +Проверить запущен или нет то: + sudo /etc/init.d/postgresql status +Посмотрель лог загрузки PostGreSQL: + dmesg |grep pg +Чтобы посмотреть чем занят порт выполнить команду: + sudo netstat -tap | grep 5432 + +Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): + pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root + pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres + pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres + pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom + pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres + pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom + pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom + + pg_dump CCALM>CCALM.backup --host=127.0.0.1 --username=postgres --format=custom + + pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom + pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql + pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz + +Востановить Dump из текстового файла: + psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup + psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql + psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql + psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql + psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql + +Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл: + /mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh + #!/bin/sh + pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz + +Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться): + su - postgres + pg_restore -U -d -1 .dump + pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup + pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup + pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup + pg_restore -U postgres -d transit -1 /home/administrator/transit.backup + pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup + + sudo -u postgres psql -d transit -f /tmp/transit.backup + +Или из архива (первоначально задать trust на 127.0.0.1) так: + gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop + +**************************************************************************************************** +Настройка отображения статистики для PostgreSQL: + https://habr.com/ru/articles/488968/ + + SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC; + SELECT * FROM pg_stat_activity + SELECT * FROM pg_stat_replication + SELECT * FROM pg_stat_all_tables + +Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats + +Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL + По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/ + По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU +**************************************************************************************************** +Установка pgagent + sudo apt-get update + sudo apt-get install pgagent +Выполнить в консоли запрос: + psql -h localhost -U postgres + create extension pgagent; + \q +Для разрешения подключения откройте файл pg_hba.conf и замените строку на: + host all all 127.0.0.1/32 md5 + +Можно для теста запустить pgagent с повышенным уровнем логирования: + /usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk + +Если файла нет то пытаюсь его создать: + sudo mcedit /lib/systemd/system/pgagent.service + +[Unit] +Description=PostgreSQL PgAgent Service +After=network.target + +[Service] +Type=simple +User=postgres +ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1 + +[Install] +WantedBy=multi-user.target + +Проверяю что сервис был запущен: + sudo systemctl daemon-reload + sudo systemctl enable pgagent + sudo service pgagent start + sudo systemctl status pgagent + + +Для проверки пробуем подключиться к базе данных + sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres + \q + +Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться: + sudo -u postgres touch /var/lib/postgresql/.pgpass + sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass + sudo -u postgres mcedit /var/lib/postgresql/.pgpass +И прописать в него: + 127.0.0.1:5432:postgres:postgres:PasSecrKey1 +Где используется такой формат: hostname:port:database:username:password +Затем: + sudo systemctl enable pgagent + sudo service pgagent start + sudo service pgagent status +Посмотреть логи: + sudo journalctl -u pgagent + +**************************************************************************************************** +Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт: + + +**************************************************************************************************** +Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move + +**************************************************************************************************** +Установка PostGIS на PostgreSQL выше 9.0 версии: + sudo apt-get install postgis postgresql-9.3-postgis-2.1 +Для 10й версии: + sudo apt install postgresql-10-postgis-2.4 + sudo apt install postgresql-10-postgis-scripts +Для 12й версии: + sudo apt install postgresql-12-postgis-2.4 + +Создать базу данных и выполнть на ней следующие команды: + -- Enable PostGIS (includes raster) + CREATE EXTENSION postgis; + -- Enable Topology + CREATE EXTENSION postgis_topology; + -- fuzzy matching needed for Tiger + CREATE EXTENSION fuzzystrmatch; + -- rule based standardizer + CREATE EXTENSION address_standardizer; + -- example rule data set + CREATE EXTENSION address_standardizer_data_us; + -- Enable US Tiger Geocoder + CREATE EXTENSION postgis_tiger_geocoder; + +У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17 +Аказывается расширение кудато делось установил: + sudo apt-get install postgresql-9.5-postgis-2.2 +**************************************************************************************************** +Для добавления TOTP авторизации в Postgresql выполнить: + CREATE EXTENSION otp; + + +**************************************************************************************************** + sudo apt-get install libpq-dev libpq-fe +Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен + То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev + apt update +**************************************************************************************************** +Установка phpPgAdmin через репозиторий: +sudo apt-get install phppgadmin +Можно открыть так: http://localhost/phppgadmin +Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all +Чтоб можно было залогинется под пользователем postgres меняем в: +/etc/phppgadmin/config.inc.php extra_login_security в false +Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost'; + +Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". +**************************************************************************************************** +Установка pgAdmin4 через докер контейнер + +```sh + sudo mkdir -p /opt/pgAdmin4 && + sudo chmod -R 777 /opt/pgAdmin4 && + sudo chown -R $USER:$USER /opt/pgAdmin4 +``` + +```sh +cd /opt/pgAdmin4 && +cat > docker-compose.yml <<'EOF' +services: + pgadmin: + image: dpage/pgadmin4 + container_name: pgadmin4 + restart: unless-stopped + ports: + - "5050:80" + environment: + PGADMIN_DEFAULT_EMAIL: irigm@mail.ru + PGADMIN_DEFAULT_PASSWORD: 123456 + volumes: + - pgadmin_data:/var/lib/pgadmin + +volumes: + pgadmin_data: +EOF +``` + +## 4. Запуск контейнера + +```sh + cd /opt/pgAdmin4 && + sudo docker compose up -d +``` + +```sh + cd /opt/pgAdmin4 && + sudo docker compose down +``` + + + + + +Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/ + curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add + sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/bionic pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' + sudo apt install pgadmin4 + +И не запустился сервер оболочка пытается стартануть а сервер нет... + + sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add + sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' + sudo apt install pgadmin4 + +Тоже не заработал + +Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/ + +**************************************************************************************************** +Балансировщик назрузки и потоковая репликация: +Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью +https://ritorika.com.ua/dokument/6/pgpool-chto-jeto +**************************************************************************************************** +Мониторинг запросов postgresql + + diff --git a/PostgreSQL_replication.md b/PostgreSQL/PostgreSQL_replication.md similarity index 94% rename from PostgreSQL_replication.md rename to PostgreSQL/PostgreSQL_replication.md index 08cb70a..437db24 100644 --- a/PostgreSQL_replication.md +++ b/PostgreSQL/PostgreSQL_replication.md @@ -1,12 +1,12 @@ - -Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication - -Подключаюсь к нужной машине -```sh -ssh igor@192.168.200.84 -p 22 -``` - - - - - + +Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication + +Подключаюсь к нужной машине +```sh +ssh igor@192.168.200.84 -p 22 +``` + + + + + diff --git a/PostgreSQL_replication_synchronous.md b/PostgreSQL/PostgreSQL_replication_synchronous.md similarity index 97% rename from PostgreSQL_replication_synchronous.md rename to PostgreSQL/PostgreSQL_replication_synchronous.md index 7333d53..7d0e3c0 100644 --- a/PostgreSQL_replication_synchronous.md +++ b/PostgreSQL/PostgreSQL_replication_synchronous.md @@ -1,137 +1,137 @@ -# Настройка PostgreSQL в синхронном режиме репликации - -Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики. - ---- - -## **1. Подготовка серверов** -Допустим, у нас есть: -- **Основной сервер (Primary):** `192.168.1.1` -- **Реплика (Standby):** `192.168.1.2` - -Убедитесь, что PostgreSQL установлен на обоих серверах. - ---- - -## **2. Настройка основного сервера (Primary)** - -### **2.1 Разрешаем подключение реплики** -Редактируем `postgresql.conf`: -```sh -sudo nano /etc/postgresql/15/main/postgresql.conf -``` -Добавляем/изменяем параметры: -```conf -wal_level = replica -synchronous_commit = on -synchronous_standby_names = 'replica1' -max_wal_senders = 3 -wal_keep_size = 256MB -hot_standby = on -``` -Редактируем `pg_hba.conf`, добавляя доступ для реплики: -```sh -sudo nano /etc/postgresql/15/main/pg_hba.conf -``` -Добавляем строку: -```conf -host replication replicator 192.168.1.2/32 md5 -``` - -### **2.2 Создаем пользователя для репликации** -```sql -CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password'; -``` - -### **2.3 Перезапускаем PostgreSQL** -```sh -sudo systemctl restart postgresql -``` - ---- - -## **3. Настройка реплики (Standby)** - -### **3.1 Останавливаем PostgreSQL на реплике** -```sh -sudo systemctl stop postgresql -``` - -### **3.2 Копируем данные с основного сервера** -На реплике выполняем: -```sh -sudo -u postgres pg_basebackup -h 192.168.1.1 -U replicator -D /var/lib/postgresql/15/main -Fp -Xs -R -P -``` - -### **3.3 Указываем `application_name` вручную** -Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную: -```sh -sudo su postgres -c "psql -c \"ALTER SYSTEM SET primary_conninfo TO 'host=192.168.1.1 user=replicator password=your_password application_name=replica1';\"" -``` -Затем перезапускаем PostgreSQL на реплике: -```sh -sudo systemctl restart postgresql -``` - -### **3.4 Проверяем `primary_conninfo`** -```sh -cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo -``` -Ожидаемый результат: -```ini -primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' -``` -Если строка отсутствует, редактируем файл вручную: -```sh -sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf -``` -Добавляем строку: -```ini -primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' -``` -Сохраняем и перезапускаем PostgreSQL: -```sh -sudo systemctl restart postgresql -``` - ---- - -## **4. Обновляем настройки Primary для работы с репликой** - -На основном сервере (Primary) выполняем: -```sh -sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\"" -``` -Перезапускаем PostgreSQL на Primary: -```sh -sudo systemctl restart postgresql -``` - ---- - -## **5. Проверка работы синхронной репликации** - -### **5.1 Проверяем статус репликации** -На **основном сервере (Primary)** выполняем: -```sql -SELECT application_name, sync_state FROM pg_stat_replication; -``` -Ожидаемый результат: -``` - application_name | sync_state ------------------+------------ - replica1 | sync -``` -Если `sync_state = 'sync'`, значит синхронная репликация работает. - ---- - -## **6. Итоговая проверка** -✅ **Задали `primary_conninfo` вручную на реплике** -✅ **Перезапустили PostgreSQL на реплике** -✅ **Обновили `synchronous_standby_names` на основном сервере** -✅ **Перезапустили PostgreSQL на основном сервере** -✅ **Проверили `pg_stat_replication` на Primary** - -Готово! 🎉 - +# Настройка PostgreSQL в синхронном режиме репликации + +Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики. + +--- + +## **1. Подготовка серверов** +Допустим, у нас есть: +- **Основной сервер (Primary):** `192.168.1.1` +- **Реплика (Standby):** `192.168.1.2` + +Убедитесь, что PostgreSQL установлен на обоих серверах. + +--- + +## **2. Настройка основного сервера (Primary)** + +### **2.1 Разрешаем подключение реплики** +Редактируем `postgresql.conf`: +```sh +sudo nano /etc/postgresql/15/main/postgresql.conf +``` +Добавляем/изменяем параметры: +```conf +wal_level = replica +synchronous_commit = on +synchronous_standby_names = 'replica1' +max_wal_senders = 3 +wal_keep_size = 256MB +hot_standby = on +``` +Редактируем `pg_hba.conf`, добавляя доступ для реплики: +```sh +sudo nano /etc/postgresql/15/main/pg_hba.conf +``` +Добавляем строку: +```conf +host replication replicator 192.168.1.2/32 md5 +``` + +### **2.2 Создаем пользователя для репликации** +```sql +CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password'; +``` + +### **2.3 Перезапускаем PostgreSQL** +```sh +sudo systemctl restart postgresql +``` + +--- + +## **3. Настройка реплики (Standby)** + +### **3.1 Останавливаем PostgreSQL на реплике** +```sh +sudo systemctl stop postgresql +``` + +### **3.2 Копируем данные с основного сервера** +На реплике выполняем: +```sh +sudo -u postgres pg_basebackup -h 192.168.1.1 -U replicator -D /var/lib/postgresql/15/main -Fp -Xs -R -P +``` + +### **3.3 Указываем `application_name` вручную** +Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную: +```sh +sudo su postgres -c "psql -c \"ALTER SYSTEM SET primary_conninfo TO 'host=192.168.1.1 user=replicator password=your_password application_name=replica1';\"" +``` +Затем перезапускаем PostgreSQL на реплике: +```sh +sudo systemctl restart postgresql +``` + +### **3.4 Проверяем `primary_conninfo`** +```sh +cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo +``` +Ожидаемый результат: +```ini +primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' +``` +Если строка отсутствует, редактируем файл вручную: +```sh +sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf +``` +Добавляем строку: +```ini +primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' +``` +Сохраняем и перезапускаем PostgreSQL: +```sh +sudo systemctl restart postgresql +``` + +--- + +## **4. Обновляем настройки Primary для работы с репликой** + +На основном сервере (Primary) выполняем: +```sh +sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\"" +``` +Перезапускаем PostgreSQL на Primary: +```sh +sudo systemctl restart postgresql +``` + +--- + +## **5. Проверка работы синхронной репликации** + +### **5.1 Проверяем статус репликации** +На **основном сервере (Primary)** выполняем: +```sql +SELECT application_name, sync_state FROM pg_stat_replication; +``` +Ожидаемый результат: +``` + application_name | sync_state +-----------------+------------ + replica1 | sync +``` +Если `sync_state = 'sync'`, значит синхронная репликация работает. + +--- + +## **6. Итоговая проверка** +✅ **Задали `primary_conninfo` вручную на реплике** +✅ **Перезапустили PostgreSQL на реплике** +✅ **Обновили `synchronous_standby_names` на основном сервере** +✅ **Перезапустили PostgreSQL на основном сервере** +✅ **Проверили `pg_stat_replication` на Primary** + +Готово! 🎉 + diff --git a/PostgreSQL_select.md b/PostgreSQL/PostgreSQL_select.md similarity index 81% rename from PostgreSQL_select.md rename to PostgreSQL/PostgreSQL_select.md index 4c440c8..122cead 100644 --- a/PostgreSQL_select.md +++ b/PostgreSQL/PostgreSQL_select.md @@ -35,10 +35,27 @@ DROP TABLE public.test_table; ```sql CREATE ROLE test_user WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOREPLICATION NOBYPASSRLS CONNECTION LIMIT -1 VALID UNTIL '2025-05-22T00:00:00+05:00' PASSWORD '!Ii123456'; ``` -4) Изменение прав пользователя + + + +4) Изменение прав пользователя !!!!!!!!!!Вадим не видел!!!!!!!!!!! ```sql ALTER ROLE user_developer_igor_i NOLOGIN VALID UNTIL '2025-05-22T00:00:00+05:00'; ``` +```sql +GRANT app_authorization TO user_developer_igor_i; +``` +```sql +REVOKE app_authorization FROM user_developer_igor_i; +``` +```sql +REVOKE SELECT ON TABLE public.test_table FROM user_developer_igor_i; +``` +```sql +GRANT SELECT ON public.test_table TO user_developer_igor_i; +``` + + 5) Удаление пользователя БД ```sql DROP ROLE test_user; diff --git a/RabbitMQ_install.md b/RabbitMQ_install.md index 1837620..d585d0b 100644 --- a/RabbitMQ_install.md +++ b/RabbitMQ_install.md @@ -1,8 +1,224 @@ - +**************************************************************************************************** +Подключаемся к нужной машине ```sh -ssh administrator@10.101.1.37 -p 22 + ssh ivanov_i@10.101.1.3 -p 22 ``` +Установка сервиса обмена сообщениями RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/ ```sh -sudo rabbitmqctl change_password admin KGf4nxT8vxZWv3jqNasP -``` \ No newline at end of file + sudo apt-get update && + sudo apt-get dist-upgrade && + sudo apt install rabbitmq-server +``` + +Создаём пользователя и задаём пароль +```sh +sudo rabbitmqctl list_users && +sudo rabbitmqctl add_user ivanov_i KGf4nxT8vxZWv3jqNasP && +sudo rabbitmqctl set_user_tags ivanov_i administrator && +sudo rabbitmqctl set_permissions -p / ivanov_i ".*" ".*" ".*" && +sudo rabbitmqctl change_password ivanov_i KGf4nxT8vxZWv3jqNasP +``` + +Посмотреть список используемых плагинов: +```sh + sudo rabbitmq-plugins list +``` +Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную. +```sh + sudo rabbitmq-plugins enable rabbitmq_management +``` +rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672 +Но для активации нужно добавить пользователя, смотрим пользователей: +```sh + sudo rabbitmqctl list_users + sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера + sudo rabbitmqctl set_user_tags admin administrator + sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" +``` +Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43 + +Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed. +Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password + producer: клиент, выполняющий отправку сообщения + queue: собственно очередь сообщений + consumer: клиент, получающий сообщения из очереди + exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html) + +Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y + https://www.rabbitmq.com/devtools.html : +Создаю Maven проект в консоли: +```sh + cd O:\projects\Workspace_Java\ + mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false +``` +Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client: +```xml + + + com.rabbitmq + amqp-client + 5.14.2 + +``` +Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA. + + Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/ + или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/ +Добавил в POM файл: +```xml + + + RabbitMQ + https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0 + com.rabbitmq + + false + + + true + + + + + + + com.rabbitmq + amqp-client + 5.16.0 + + +``` + +Перезагружаем: +```sh + sudo service rabbitmq-server restart +``` + +**************************************************************************************************** +Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel + +Активирую плагин командой: +```sh + sudo rabbitmq-plugins enable rabbitmq_shovel && + sudo rabbitmq-plugins enable rabbitmq_shovel_management +``` + +Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку: +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation", + "src-queue": "TO_KAZ", + "dest-protocol": "amqp091", + "dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground", + "dest-exchange": "swap", + "dest-exchange-key": ".KAZ.", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Для Росии такие настройки: +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_rus '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus", + "src-queue": "TO_RUS", + "dest-protocol": "amqp091", + "dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground", + "dest-exchange": "swap", + "dest-exchange-key": "KZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Для Беларусии такие настройки: +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_blr '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr", + "src-queue": "TO_BLR", + "dest-protocol": "amqp091", + "dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber", + "dest-exchange": "eec.swap", + "dest-exchange-key": "KZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Для Армении такие настройки: +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_arm '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm", + "src-queue": "TO_ARM", + "dest-protocol": "amqp091", + "dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation", + "dest-exchange": "swap_kz", + "dest-exchange-key": "KZ_ISTT", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Для Кыргызстана (таможенная инфраструктура) +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz", + "src-queue": "TO_KGZ", + "dest-protocol": "amqp091", + "dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz", + "dest-exchange": "swap", + "dest-exchange-key": "KAZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` +Удалять так: +```sh + sudo rabbitmqctl clear_parameter shovel kaz_to_kgz +``` + +Для отправки из Киргизии нам то такие настройки: +```sh +sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz", + "src-queue": "TO_KAZ", + "dest-protocol": "amqp091", + "dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz", + "dest-exchange": "swap", + "dest-exchange-key": "KGZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Удалять так: +```sh + sudo rabbitmqctl clear_parameter shovel kgz_to_kaz +``` + +Чтобы проверить текущие параметры Shovel: +```sh + sudo rabbitmqctl list_parameters +``` +А также можно взглянуть что создалось через WEB интерфейс + +Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает. diff --git a/Ubuntu.md b/Ubuntu.md index 8739471..513afca 100644 --- a/Ubuntu.md +++ b/Ubuntu.md @@ -2011,388 +2011,6 @@ restart: always: Гарантирует, что контейнер будет а Открываем: https://127.0.0.1:9443 После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM] -**************************************************************************************************** -Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26 - sudo apt-get update - sudo apt-get install bind9 dnsutils - sudo apt-get install bind9utils -Добавляем сервис в автозапуск - systemctl enable bind9 -Проверяем что сервис работает - nslookup dmosk.ru 127.0.0.1 -Открываем настройки: - mcedit /etc/bind/named.conf.options -Для глобальных запросов добавляем строку: allow-query { any; }; -Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных - //forwarders { - // 8.8.8.8; - // 8.8.4.4; - //}; -Проверяем настройки командой (ответ должен быть пустым): - sudo named-checkconf -Перезагружаем: - sudo systemctl restart bind9 -Проверяю версию BIND: - named -v -Выдало: BIND 9.16.1-Ubuntu (Stable Release) -Можно проверить какой IP выдаст на DNS запрос - dig locust.kz A - -На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns. - - - - -Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками - -Перейдем в него. - cd /etc/bind/ -Генерируем пару ключь для обмена информацией между клиентом и сервером: - sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key - sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key -Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ. - include "/etc/bind/dirt.kz.key"; - include "/etc/bind/locust.kz.key"; -Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем. -zone "dirt.kz" { - type master; - allow-update {key dirt.kz;}; - file "/var/cache/bind/dirt.kz"; -}; - -zone "locust.kz" { - type master; - allow-update {key locust.kz;}; - file "/var/cache/bind/locust.kz"; -}; - - -В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где: -В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где: - -Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте -Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/ -SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA -NS — Сервер имён -A — рекорд -MX — Почта для обмена -CN — Каноническое имя -PTR — указатель -И таким содержимым: - -$ORIGIN dirt.kz -$TTL 604800 -@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. ( - 8 ; Serial - 604800 ; Refresh - 86400 ; Retry - 2419200 ; Expire - 604800 ) ; Negative Cache TTL -; -@ IN NS bigfoottrade.kz. - -Второй файл для locust.kz: - -$ORIGIN . -$TTL 604800 ; 1 week -locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. ( - 134 ; serial - 604800 ; refresh (1 week) - 86400 ; retry (1 day) - 1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds) - 604800 ; minimum (1 week) - ) - NS bigfoottrade.kz. -$TTL 3600 ; 1 hour - A 5.76.254.182 -$ORIGIN locust.kz. -* A 127.0.0.1 - - -Правлю права доступа: - sudo chown -R bind:bind /etc/bind - -Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой: - sudo rndc reconfig -Потом следует вызвать: - sudo systemctl restart bind9 -Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду -После настроек сервера перезагружаем его: - sudo named-checkconf - sudo rndc reload - sudo systemctl restart bind9 - sudo rndc status - journalctl | grep bind - sudo journalctl -u bind9 -n 50 - - -Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу: - -Файл из примера: - #!/bin/bash - TTL=3600 - SERVER=ns.dyndns.my - HOSTNAME=dhost.dyndns.my - ZONE=dyndns.my - KEYFILE=Kdyndns.my.+157+48025.private - new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! - cd /etc/ddns - nsupdate -v -k $KEYFILE << EOF - server $SERVER - zone $ZONE - update delete $HOSTNAME A - update add $HOSTNAME $TTL A $new_ip_address - send - EOF - -Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже: - #!/bin/bash - TTL=3600 - SERVER=127.0.0.1 - HOSTNAME=*.dirt.kz - ZONE=dirt.kz - KEYFILE=/etc/bind/dirt.kz.key - - new_ip_address= - FILE=/etc/ddns/ip.txt - if test -f "$FILE"; then - new_ip_address=`cat $FILE` - rm $FILE - fi - - len=${#new_ip_address} - if [ $len -gt 3 ] - then - echo "New IP address = $new_ip_address" - else - echo "Not find IP address" - exit - fi - - cd /etc/ddns - sudo nsupdate -v -k $KEYFILE << EOF - server $SERVER - zone $ZONE - update delete $HOSTNAME A - update add $HOSTNAME $TTL A $new_ip_address - update delete dirt.kz A - update add dirt.kz $TTL A $new_ip_address - send - EOF - echo "OK" - -Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента: -'; print_r(getallheaders()); echo ''; - -// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x" -foreach ( getallheaders() as $k => $v) { - if ( strtolower($k) == 'x-forwarded-for' ) { - $tmp = explode(', ', $v); - if ( $tmp[count($tmp)-1] != '' ) - $_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1]; - } -} - -if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){ - $myfile = fopen("/etc/ddns/ip.txt", "w"); - fwrite($myfile, $_SERVER['REMOTE_ADDR']); - fclose($myfile); -} - -echo $_SERVER['REMOTE_ADDR']; - -?> - -Проверяем что находит IP по доменному имени - nslookup dirt.kz 127.0.0.1 - - -**************************************************************************************************** -Установка сервиса обмена сообщениями RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/ - sudo apt-get update - sudo apt-get dist-upgrade - sudo apt install rabbitmq-server -Посмотреть список используемых плагинов: - sudo rabbitmq-plugins list -Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную. - sudo rabbitmq-plugins enable rabbitmq_management - -rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672 -Но для активации нужно добавить пользователя, смотрим пользователей: - sudo rabbitmqctl list_users - sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера - sudo rabbitmqctl set_user_tags admin administrator - sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" -Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43 - -Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed. -Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password - producer: клиент, выполняющий отправку сообщения - queue: собственно очередь сообщений - consumer: клиент, получающий сообщения из очереди - exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html) - -Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y - https://www.rabbitmq.com/devtools.html : -Создаю Maven проект в консоли: - cd O:\projects\Workspace_Java\ - mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false -Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client: - - - com.rabbitmq - amqp-client - 5.14.2 - -Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA. - - Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/ - или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/ -Добавил в POM файл: - - - RabbitMQ - https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0 - com.rabbitmq - - false - - - true - - - - - - - com.rabbitmq - amqp-client - 5.16.0 - - - - - -Перезагружаем: - sudo service rabbitmq-server restart - -**************************************************************************************************** -Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel - -Активирую плагин командой: - sudo rabbitmq-plugins enable rabbitmq_shovel - sudo rabbitmq-plugins enable rabbitmq_shovel_management - -Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку: - -sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation", - "src-queue": "TO_KAZ", - "dest-protocol": "amqp091", - "dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground", - "dest-exchange": "swap", - "dest-exchange-key": ".KAZ.", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Росии такие настройки: - -sudo rabbitmqctl set_parameter shovel kaz_to_rus '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus", - "src-queue": "TO_RUS", - "dest-protocol": "amqp091", - "dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground", - "dest-exchange": "swap", - "dest-exchange-key": "KZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Беларусии такие настройки: - -sudo rabbitmqctl set_parameter shovel kaz_to_blr '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr", - "src-queue": "TO_BLR", - "dest-protocol": "amqp091", - "dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber", - "dest-exchange": "eec.swap", - "dest-exchange-key": "KZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Армении такие настройки: - -sudo rabbitmqctl set_parameter shovel kaz_to_arm '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm", - "src-queue": "TO_ARM", - "dest-protocol": "amqp091", - "dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation", - "dest-exchange": "swap_kz", - "dest-exchange-key": "KZ_ISTT", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Кыргызстана (таможенная инфраструктура) - -sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz", - "src-queue": "TO_KGZ", - "dest-protocol": "amqp091", - "dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz", - "dest-exchange": "swap", - "dest-exchange-key": "KAZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Удалять так: - sudo rabbitmqctl clear_parameter shovel kaz_to_kgz - -Для отправки из Киргизии нам то такие настройки: - -sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz", - "src-queue": "TO_KAZ", - "dest-protocol": "amqp091", - "dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz", - "dest-exchange": "swap", - "dest-exchange-key": "KGZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Удалять так: - sudo rabbitmqctl clear_parameter shovel kgz_to_kaz - - -Чтобы проверить текущие параметры Shovel: - sudo rabbitmqctl list_parameters -А также можно взглянуть что создалось через WEB интерфейс - -Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает. **************************************************************************************************** Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/