# Conflicts:
#	DNS/PowerDNS_install.md
This commit is contained in:
2025-05-15 21:20:52 +05:00
16 changed files with 1214 additions and 1103 deletions

204
DNS/BIND_install.md Normal file
View File

@ -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) <id:d497c32>
Можно проверить какой 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 адреса клиента:
<?php
echo '<pre>'; print_r(getallheaders()); echo '</pre>';
// 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

View File

@ -57,7 +57,7 @@ WantedBy=multi-user.target
На клиенте запускаем локальный порт также указал 9999 а ключь
```sh
htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80
htc -F 9999 --base-uri /index.html?mybiglogfile=all locust.kz:80
htc -F 9999 --base-uri /index.html?mybiglogfile=all dirt.kz:8080
```
Для остановки

View File

@ -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

View File

@ -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();
Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора):

View File

@ -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 <username> -d <dbname> -1 <filename>.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 <username> -d <dbname> -1 <filename>.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

View File

@ -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
```

View File

@ -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**
Готово! 🎉

View File

@ -0,0 +1,91 @@
Подключаюсь к инфраструктуре:
```sh
ssh ivanov_i@10.101.1.3
```
Зеркало APP Астана RabbitMQ
```sh
ssh ivanov_i@10.201.1.3 -p 22
```
```sh
psql -h 10.101.1.6 -U user_developer_igor_i -d transit
```
```sh
psql -h 10.201.1.6 -U postgres -d transit
```
## Логи по Базе
0) Создание таблицы
```sql
CREATE TABLE public.test_table (id bigint, PRIMARY KEY (id));
```
1) Немного изменил права:
```sql
ALTER TABLE IF EXISTS public.test_table OWNER to user_developer_igor_i;
```
2) Удаление таблицы
```sql
DROP TABLE public.test_table;
```
3) Создание пользователя БД
```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) Изменение прав пользователя !!!!!!!!!!Вадим не видел!!!!!!!!!!!
```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;
```
```sql
CREATE DATABASE test_db WITH OWNER = user_developer_igor_i ENCODING = 'UTF8' LOCALE_PROVIDER = 'libc' CONNECTION LIMIT = -1 IS_TEMPLATE = False;
```
```sql
DROP DATABASE test_db;
```
Выходим:
```sql
\q
```
Логи по ППО:
1) Попытки не верного ввода пароля/логина
2) Авторизация
3) Выход из системы
4) Создание пользователя
5) Изменение прав пользователю.
6) Удаление пользователя
7) Создание перевозки
8) Проведение оплаты

View File

@ -1,18 +0,0 @@
Подключаюсь к инфраструктуре:
```sh
ssh ivanov_i@10.201.1.6
```
Зеркало APP Астана RabbitMQ
```sh
ssh ivanov_i@10.201.1.3 -p 22
```
```sh
psql -h 10.201.1.6 -U user_developer_igor_i -d transit
```
```sh
psql -h 10.201.1.6 -U postgres -d transit
```

View File

@ -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
```
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
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.14.2</version>
</dependency>
```
Также поставил 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
<repositories>
<repository>
<name>RabbitMQ</name>
<url>https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0</url>
<id>com.rabbitmq</id>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.16.0</version>
</dependency>
</dependencies>
```
Перезагружаем:
```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" иначе маршрутизация не сработает.

382
Ubuntu.md
View File

@ -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) <id:d497c32>
Можно проверить какой 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 адреса клиента:
<?php
echo '<pre>'; print_r(getallheaders()); echo '</pre>';
// 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:
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.14.2</version>
</dependency>
Также поставил 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 файл:
<repositories>
<repository>
<name>RabbitMQ</name>
<url>https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0</url>
<id>com.rabbitmq</id>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.16.0</version>
</dependency>
</dependencies>
Перезагружаем:
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/