Новые каталоги

This commit is contained in:
Igor I
2025-05-15 09:04:57 +05:00
parent aa0179f6c0
commit 7380add41d
14 changed files with 1728 additions and 1673 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

File diff suppressed because it is too large Load Diff

View File

@ -1,141 +1,141 @@
Устанавливаю согласно инструкции из: Устанавливаю согласно инструкции из:
https://github.com/prometheus-community/postgres_exporter https://github.com/prometheus-community/postgres_exporter
Подключаюсь к нужной машине Подключаюсь к нужной машине
```sh ```sh
ssh igor@ccalm.org -p 2200 ssh igor@ccalm.org -p 2200
``` ```
Configure postgresql.conf Configure postgresql.conf
```conf ```conf
shared_preload_libraries = 'pg_stat_statements' shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all pg_stat_statements.track = all
``` ```
## 1. Установка Docker и Docker Compose ## 1. Установка Docker и Docker Compose
Если Docker не установлен, установим его: Если Docker не установлен, установим его:
```sh ```sh
sudo apt update && sudo apt upgrade -y && sudo apt update && sudo apt upgrade -y &&
sudo apt install -y docker.io docker-compose && sudo apt install -y docker.io docker-compose &&
sudo systemctl enable --now docker sudo systemctl enable --now docker
``` ```
## 2. Установка postgres-exporter в докере из заранее подготовленного образа ## 2. Установка postgres-exporter в докере из заранее подготовленного образа
```sh ```sh
sudo mkdir -p /opt/postgres-exporter && sudo mkdir -p /opt/postgres-exporter &&
sudo chown $USER:$USER /opt/postgres-exporter && sudo chown $USER:$USER /opt/postgres-exporter &&
cd /opt/postgres-exporter cd /opt/postgres-exporter
``` ```
Создаю файл с настройками Создаю файл с настройками
```sh ```sh
cd /opt/postgres-exporter/ && cd /opt/postgres-exporter/ &&
cat > docker-compose.yml <<'EOF' cat > docker-compose.yml <<'EOF'
services: services:
postgres-exporter: postgres-exporter:
image: quay.io/prometheuscommunity/postgres-exporter image: quay.io/prometheuscommunity/postgres-exporter
container_name: postgres-exporter container_name: postgres-exporter
restart: unless-stopped restart: unless-stopped
network_mode: "host" network_mode: "host"
environment: environment:
DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable" DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable"
volumes: volumes:
- ./postgres_exporter.yml:/etc/postgres_exporter.yml - ./postgres_exporter.yml:/etc/postgres_exporter.yml
command: command:
- "--config.file=/etc/postgres_exporter.yml" - "--config.file=/etc/postgres_exporter.yml"
EOF EOF
``` ```
Создаём файл с настройками Создаём файл с настройками
```sh ```sh
cd /opt/postgres-exporter/ && cd /opt/postgres-exporter/ &&
cat > postgres_exporter.yml <<'EOF' cat > postgres_exporter.yml <<'EOF'
collectors: collectors:
- database - database
- index - index
- query - query
- table - table
EOF EOF
``` ```
Запускаю: Запускаю:
```sh ```sh
cd /opt/postgres-exporter && cd /opt/postgres-exporter &&
sudo docker-compose up -d sudo docker-compose up -d
``` ```
Проверяю запущен ли докер Проверяю запущен ли докер
```sh ```sh
sudo docker ps sudo docker ps
``` ```
Testing with: Testing with:
```sh ```sh
curl "http://127.0.0.1:9187/metrics" curl "http://127.0.0.1:9187/metrics"
``` ```
Посмотреть журнал за сегодня: Посмотреть журнал за сегодня:
```sh ```sh
journalctl --since today journalctl --since today
``` ```
Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера
```sh ```sh
sudo mcedit /etc/haproxy/haproxy.cfg sudo mcedit /etc/haproxy/haproxy.cfg
``` ```
Настраиваем: Настраиваем:
```text ```text
acl v_metrics_nd path_beg /metrics_nd acl v_metrics_nd path_beg /metrics_nd
acl v_basic_auth http_auth(prometheus_list) acl v_basic_auth http_auth(prometheus_list)
http-request auth realm Metrics_org_ccalm_nd if v_metrics_nd !v_basic_auth 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 use_backend b_metrics_nd if v_metrics_nd v_basic_auth
backend b_metrics_nd backend b_metrics_nd
mode http mode http
option http-keep-alive option http-keep-alive
http-request replace-path .* /metrics http-request replace-path .* /metrics
server web1 127.0.0.1:9100 check server web1 127.0.0.1:9100 check
``` ```
Проверяем Проверяем
```sh ```sh
haproxy -f /etc/haproxy/haproxy.cfg -c haproxy -f /etc/haproxy/haproxy.cfg -c
```` ````
Перезагружаем: Перезагружаем:
```sh ```sh
sudo systemctl restart haproxy sudo systemctl restart haproxy
```` ````
Подключаюсь к машине где Prometeus: Подключаюсь к машине где Prometeus:
```sh ```sh
ssh igor@192.168.200.84 -p 22 ssh igor@192.168.200.84 -p 22
``` ```
Перезагружаем prometheus чтобы он начал собирать метрики Перезагружаем prometheus чтобы он начал собирать метрики
```sh ```sh
sudo systemctl restart prometheus sudo systemctl restart prometheus
``` ```
Теперь можно настраивать графану, вот готовыдашбоард Теперь можно настраивать графану, вот готовыдашбоард
Открыть Grafana Открыть Grafana
Перейти в Dashboards → Import Перейти в Dashboards → Import
Вставить ID: 9628 Вставить ID: 9628
Выбрать источник данных Prometheus (с PostgreSQL Exporter) Выбрать источник данных Prometheus (с PostgreSQL Exporter)
Нажать Import Нажать Import
Теперь можно настраивать графану, вот готовыдашбоард Теперь можно настраивать графану, вот готовыдашбоард
Открыть Grafana Открыть Grafana
Перейти в Dashboards → Import Перейти в Dashboards → Import
Вставить ID: 12273 Вставить ID: 12273
Выбрать источник данных Prometheus (с PostgreSQL Exporter) Выбрать источник данных Prometheus (с PostgreSQL Exporter)
Нажать Import Нажать Import

View File

@ -1,61 +1,61 @@
**************************************************************************************************** ****************************************************************************************************
Установка и настройка проверяльщик паролей credcheck Установка и настройка проверяльщик паролей credcheck
PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/ PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/
Тестовая база Тестовая база
```sh ```sh
ssh administrator@10.201.3.36 -p 22 ssh administrator@10.201.3.36 -p 22
``` ```
Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём: Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём:
```sh ```sh
apt search credcheck apt search credcheck
``` ```
Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен): Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен):
```sh ```sh
sudo apt-get install postgresql-server-dev-16 && sudo apt-get install postgresql-server-dev-16 &&
sudo apt-get install build-essential && sudo apt-get install build-essential &&
git clone https://github.com/HexaCluster/credcheck.git && git clone https://github.com/HexaCluster/credcheck.git &&
cd credcheck && cd credcheck &&
make && make &&
sudo make install sudo make install
``` ```
Подключаемся к базе данных для выполнения запросов Подключаемся к базе данных для выполнения запросов
```sh ```sh
psql -h 127.0.0.1 -U postgres -d transit psql -h 127.0.0.1 -U postgres -d transit
``` ```
Проверяем что настройки имеются: Проверяем что настройки имеются:
```sh ```sh
SELECT name, setting, unit, source, sourcefile, sourceline SELECT name, setting, unit, source, sourcefile, sourceline
FROM pg_settings FROM pg_settings
WHERE name LIKE 'credcheck%'; WHERE name LIKE 'credcheck%';
``` ```
Читаем текущие настройки Читаем текущие настройки
```sh ```sh
SHOW ALL; SHOW ALL;
``` ```
Создаём расширение в базе postgres: Создаём расширение в базе postgres:
```sh ```sh
CREATE EXTENSION credcheck; CREATE EXTENSION credcheck;
``` ```
Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck: Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck:
-- Configure credential policies to enforce username and password standards and reload configuration files -- 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.username_min_length = 4;
ALTER SYSTEM SET credcheck.password_min_length = 8; ALTER SYSTEM SET credcheck.password_min_length = 8;
ALTER SYSTEM SET credcheck.password_min_special = 1; ALTER SYSTEM SET credcheck.password_min_special = 1;
SELECT pg_reload_conf(); SELECT pg_reload_conf();
-- Attempt to create a user for a new park ranger, which does not meet the credential policies -- Attempt to create a user for a new park ranger, which does not meet the credential policies
CREATE USER ranger_ WITH PASSWORD 'forest'; CREATE USER ranger_ WITH PASSWORD 'forest';
ERROR: password length should match the configured credcheck.password_min_length ERROR: password length should match the configured credcheck.password_min_length
Для пароля установить: Для пароля установить:
ALTER SYSTEM SET credcheck.password_expiration_days = 90; ALTER SYSTEM SET credcheck.password_expiration_days = 90;
SELECT pg_reload_conf(); SELECT pg_reload_conf();
Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора): Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора):

View File

@ -1,348 +1,348 @@
# Install PostgreSQL database # Install PostgreSQL database
Coonect lto need server: Coonect lto need server:
```sh ```sh
wsl wsl
``` ```
Or coonect to need server: Or coonect to need server:
```sh ```sh
ssh igor@ccalm.org -p 2200 ssh igor@ccalm.org -p 2200
``` ```
**************************************************************************************************** ****************************************************************************************************
Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries: Установка 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-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 O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13
Потом создать BAT файл с тем текстом что отобразится при создании каталога базы Потом создать BAT файл с тем текстом что отобразится при создании каталога базы
База данных создаётся не под пользователем postgres а под локальным пользователем igor База данных создаётся не под пользователем postgres а под локальным пользователем igor
**************************************************************************************************** ****************************************************************************************************
Установка PostgreSQL 14 ubuntu 22.04 или 24.04 Установка PostgreSQL 14 ubuntu 22.04 или 24.04
```sh ```sh
sudo apt-get update sudo apt-get update
sudo apt-get install postgresql postgresql-contrib -y sudo apt-get install postgresql postgresql-contrib -y
``` ```
Или так если нужно установить PostGIS Или так если нужно установить PostGIS
```sh ```sh
sudo apt-get install postgis sudo apt-get install postgis
``` ```
Для удаления PostGIS в месте с зависимыми пакетами: Для удаления PostGIS в месте с зависимыми пакетами:
```sh ```sh
sudo apt-get remove --auto-remove postgis && sudo apt-get remove --auto-remove postgis &&
sudo apt-get purge postgis sudo apt-get purge postgis
``` ```
Добавить русскую локаль если её нет: Добавить русскую локаль если её нет:
```sh ```sh
sudo locale-gen ru_RU && sudo locale-gen ru_RU &&
sudo locale-gen ru_RU.UTF-8 && sudo locale-gen ru_RU.UTF-8 &&
sudo locale-gen kk_KZ && sudo locale-gen kk_KZ &&
sudo locale-gen kk_KZ.UTF-8 sudo locale-gen kk_KZ.UTF-8
``` ```
Проверить какая локаль по умолчанию: Проверить какая локаль по умолчанию:
```sh ```sh
localectl status localectl status
``` ```
И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры): И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры):
```sh ```sh
sudo dpkg-reconfigure locales sudo dpkg-reconfigure locales
``` ```
Для задания пароля в PostgreSQL выполнить: Для задания пароля в PostgreSQL выполнить:
```sh ```sh
sudo -u postgres psql && sudo -u postgres psql &&
\password postgres \password postgres
``` ```
Чтобы выйти нужно выпольнить команду: \q Чтобы выйти нужно выпольнить команду: \q
Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust
Задать пароль: Задать пароль:
sudo -u postgres psql sudo -u postgres psql
postgres=> SELECT usename FROM pg_user; postgres=> SELECT usename FROM pg_user;
postgres=> alter user postgres password 'PasSecrKey1'; postgres=> alter user postgres password 'PasSecrKey1';
postgres=> \q postgres=> \q
Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/ Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/
Создаём базу данных выполнив функцию: Создаём базу данных выполнив функцию:
CREATE DATABASE CCALM CREATE DATABASE CCALM
WITH OWNER = postgres WITH OWNER = postgres
TEMPLATE = template0 TEMPLATE = template0
ENCODING = 'UTF8' ENCODING = 'UTF8'
TABLESPACE = pg_default TABLESPACE = pg_default
LC_COLLATE = 'ru_RU.UTF-8' LC_COLLATE = 'ru_RU.UTF-8'
LC_CTYPE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8'
CONNECTION LIMIT = -1; CONNECTION LIMIT = -1;
Файл настроек postgresql: Файл настроек postgresql:
```sh ```sh
sudo mcedit /etc/postgresql/16/main/postgresql.conf sudo mcedit /etc/postgresql/16/main/postgresql.conf
``` ```
listen_addresses='*' #Разрешить подключение с внешки listen_addresses='*' #Разрешить подключение с внешки
#Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой #Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой
backslash_quote = on backslash_quote = on
escape_string_warning = off escape_string_warning = off
standard_conforming_strings = off standard_conforming_strings = off
Чтобы воводил двоичные данные по старому изменить на: Чтобы воводил двоичные данные по старому изменить на:
bytea_output = 'escape' bytea_output = 'escape'
Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду" Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду"
Для создания нового пользователя выполнить: Для создания нового пользователя выполнить:
sudo -u postgres psql sudo -u postgres psql
CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION; CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION;
Для подключения к определённой базе данных выполнить команду: Для подключения к определённой базе данных выполнить команду:
sudo -u postgres psql sudo -u postgres psql
\list or \l: для отображения всех баз \list or \l: для отображения всех баз
\connect zholak zholak \connect zholak zholak
\dt для отображения всех таблиц \dt для отображения всех таблиц
или написать со своим IP: host all all 2.133.238.240/24 trust или написать со своим IP: host all all 2.133.238.240/24 trust
Для подключения с любых IP адресов в " Для подключения с любых IP адресов в "
```sh ```sh
sudo mcedit /etc/postgresql/16/main/pg_hba.conf sudo mcedit /etc/postgresql/16/main/pg_hba.conf
``` ```
host all all 0.0.0.0/0 md5 host all all 0.0.0.0/0 md5
Либо с одного конкретного то: host all all 92.46.48.37/24 md5 Либо с одного конкретного то: host all all 92.46.48.37/24 md5
А также поменять на listen_addresses = '*' в postgresql.conf А также поменять на listen_addresses = '*' в postgresql.conf
Потом перезагрузить postgres: Потом перезагрузить postgres:
sudo service postgresql restart sudo service postgresql restart
sudo /etc/init.d/postgresql stop sudo /etc/init.d/postgresql stop
sudo /etc/init.d/postgresql restart sudo /etc/init.d/postgresql restart
sudo /etc/init.d/postgresql start sudo /etc/init.d/postgresql start
Проверить запущен или нет то: Проверить запущен или нет то:
sudo /etc/init.d/postgresql status sudo /etc/init.d/postgresql status
Посмотрель лог загрузки PostGreSQL: Посмотрель лог загрузки PostGreSQL:
dmesg |grep pg dmesg |grep pg
Чтобы посмотреть чем занят порт выполнить команду: Чтобы посмотреть чем занят порт выполнить команду:
sudo netstat -tap | grep 5432 sudo netstat -tap | grep 5432
Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain):
pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root 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 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 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 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 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 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 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 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 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 -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 pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz
Востановить Dump из текстового файла: Востановить Dump из текстового файла:
psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup 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 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 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 transit_2024 < /home/administrator/transit.sql
psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql
Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл: Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл:
/mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh /mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh
#!/bin/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_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz
Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться): Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться):
su - postgres su - postgres
pg_restore -U <username> -d <dbname> -1 <filename>.dump 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 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 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_new -1 /home/administrator/temp/transit.backup
pg_restore -U postgres -d transit -1 /home/administrator/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 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 sudo -u postgres psql -d transit -f /tmp/transit.backup
Или из архива (первоначально задать trust на 127.0.0.1) так: Или из архива (первоначально задать trust на 127.0.0.1) так:
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
**************************************************************************************************** ****************************************************************************************************
Настройка отображения статистики для PostgreSQL: Настройка отображения статистики для PostgreSQL:
https://habr.com/ru/articles/488968/ https://habr.com/ru/articles/488968/
SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC; SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC;
SELECT * FROM pg_stat_activity SELECT * FROM pg_stat_activity
SELECT * FROM pg_stat_replication SELECT * FROM pg_stat_replication
SELECT * FROM pg_stat_all_tables SELECT * FROM pg_stat_all_tables
Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats
Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL
По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/ По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/
По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU
**************************************************************************************************** ****************************************************************************************************
Установка pgagent Установка pgagent
sudo apt-get update sudo apt-get update
sudo apt-get install pgagent sudo apt-get install pgagent
Выполнить в консоли запрос: Выполнить в консоли запрос:
psql -h localhost -U postgres psql -h localhost -U postgres
create extension pgagent; create extension pgagent;
\q \q
Для разрешения подключения откройте файл pg_hba.conf и замените строку на: Для разрешения подключения откройте файл pg_hba.conf и замените строку на:
host all all 127.0.0.1/32 md5 host all all 127.0.0.1/32 md5
Можно для теста запустить pgagent с повышенным уровнем логирования: Можно для теста запустить pgagent с повышенным уровнем логирования:
/usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk /usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk
Если файла нет то пытаюсь его создать: Если файла нет то пытаюсь его создать:
sudo mcedit /lib/systemd/system/pgagent.service sudo mcedit /lib/systemd/system/pgagent.service
[Unit] [Unit]
Description=PostgreSQL PgAgent Service Description=PostgreSQL PgAgent Service
After=network.target After=network.target
[Service] [Service]
Type=simple Type=simple
User=postgres User=postgres
ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1 ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
Проверяю что сервис был запущен: Проверяю что сервис был запущен:
sudo systemctl daemon-reload sudo systemctl daemon-reload
sudo systemctl enable pgagent sudo systemctl enable pgagent
sudo service pgagent start sudo service pgagent start
sudo systemctl status pgagent sudo systemctl status pgagent
Для проверки пробуем подключиться к базе данных Для проверки пробуем подключиться к базе данных
sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres
\q \q
Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться: Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться:
sudo -u postgres touch /var/lib/postgresql/.pgpass sudo -u postgres touch /var/lib/postgresql/.pgpass
sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass
sudo -u postgres mcedit /var/lib/postgresql/.pgpass sudo -u postgres mcedit /var/lib/postgresql/.pgpass
И прописать в него: И прописать в него:
127.0.0.1:5432:postgres:postgres:PasSecrKey1 127.0.0.1:5432:postgres:postgres:PasSecrKey1
Где используется такой формат: hostname:port:database:username:password Где используется такой формат: hostname:port:database:username:password
Затем: Затем:
sudo systemctl enable pgagent sudo systemctl enable pgagent
sudo service pgagent start sudo service pgagent start
sudo service pgagent status sudo service pgagent status
Посмотреть логи: Посмотреть логи:
sudo journalctl -u pgagent sudo journalctl -u pgagent
**************************************************************************************************** ****************************************************************************************************
Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт: Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт:
**************************************************************************************************** ****************************************************************************************************
Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move
**************************************************************************************************** ****************************************************************************************************
Установка PostGIS на PostgreSQL выше 9.0 версии: Установка PostGIS на PostgreSQL выше 9.0 версии:
sudo apt-get install postgis postgresql-9.3-postgis-2.1 sudo apt-get install postgis postgresql-9.3-postgis-2.1
Для 10й версии: Для 10й версии:
sudo apt install postgresql-10-postgis-2.4 sudo apt install postgresql-10-postgis-2.4
sudo apt install postgresql-10-postgis-scripts sudo apt install postgresql-10-postgis-scripts
Для 12й версии: Для 12й версии:
sudo apt install postgresql-12-postgis-2.4 sudo apt install postgresql-12-postgis-2.4
Создать базу данных и выполнть на ней следующие команды: Создать базу данных и выполнть на ней следующие команды:
-- Enable PostGIS (includes raster) -- Enable PostGIS (includes raster)
CREATE EXTENSION postgis; CREATE EXTENSION postgis;
-- Enable Topology -- Enable Topology
CREATE EXTENSION postgis_topology; CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger -- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch; CREATE EXTENSION fuzzystrmatch;
-- rule based standardizer -- rule based standardizer
CREATE EXTENSION address_standardizer; CREATE EXTENSION address_standardizer;
-- example rule data set -- example rule data set
CREATE EXTENSION address_standardizer_data_us; CREATE EXTENSION address_standardizer_data_us;
-- Enable US Tiger Geocoder -- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder; CREATE EXTENSION postgis_tiger_geocoder;
У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17 У меня начало выдавать 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 sudo apt-get install postgresql-9.5-postgis-2.2
**************************************************************************************************** ****************************************************************************************************
Для добавления TOTP авторизации в Postgresql выполнить: Для добавления TOTP авторизации в Postgresql выполнить:
CREATE EXTENSION otp; CREATE EXTENSION otp;
**************************************************************************************************** ****************************************************************************************************
sudo apt-get install libpq-dev libpq-fe sudo apt-get install libpq-dev libpq-fe
Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен
То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev
apt update apt update
**************************************************************************************************** ****************************************************************************************************
Установка phpPgAdmin через репозиторий: Установка phpPgAdmin через репозиторий:
sudo apt-get install phppgadmin sudo apt-get install phppgadmin
Можно открыть так: http://localhost/phppgadmin Можно открыть так: http://localhost/phppgadmin
Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all
Чтоб можно было залогинется под пользователем postgres меняем в: Чтоб можно было залогинется под пользователем postgres меняем в:
/etc/phppgadmin/config.inc.php extra_login_security в false /etc/phppgadmin/config.inc.php extra_login_security в false
Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost'; Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost';
Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php".
**************************************************************************************************** ****************************************************************************************************
Установка pgAdmin4 через докер контейнер Установка pgAdmin4 через докер контейнер
```sh ```sh
sudo mkdir -p /opt/pgAdmin4 && sudo mkdir -p /opt/pgAdmin4 &&
sudo chmod -R 777 /opt/pgAdmin4 && sudo chmod -R 777 /opt/pgAdmin4 &&
sudo chown -R $USER:$USER /opt/pgAdmin4 sudo chown -R $USER:$USER /opt/pgAdmin4
``` ```
```sh ```sh
cd /opt/pgAdmin4 && cd /opt/pgAdmin4 &&
cat > docker-compose.yml <<'EOF' cat > docker-compose.yml <<'EOF'
services: services:
pgadmin: pgadmin:
image: dpage/pgadmin4 image: dpage/pgadmin4
container_name: pgadmin4 container_name: pgadmin4
restart: unless-stopped restart: unless-stopped
ports: ports:
- "5050:80" - "5050:80"
environment: environment:
PGADMIN_DEFAULT_EMAIL: irigm@mail.ru PGADMIN_DEFAULT_EMAIL: irigm@mail.ru
PGADMIN_DEFAULT_PASSWORD: 123456 PGADMIN_DEFAULT_PASSWORD: 123456
volumes: volumes:
- pgadmin_data:/var/lib/pgadmin - pgadmin_data:/var/lib/pgadmin
volumes: volumes:
pgadmin_data: pgadmin_data:
EOF EOF
``` ```
## 4. Запуск контейнера ## 4. Запуск контейнера
```sh ```sh
cd /opt/pgAdmin4 && cd /opt/pgAdmin4 &&
sudo docker compose up -d sudo docker compose up -d
``` ```
```sh ```sh
cd /opt/pgAdmin4 && cd /opt/pgAdmin4 &&
sudo docker compose down sudo docker compose down
``` ```
Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/ Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/
curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add 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 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 apt install pgadmin4
И не запустился сервер оболочка пытается стартануть а сервер нет... И не запустился сервер оболочка пытается стартануть а сервер нет...
sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add 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 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 sudo apt install pgadmin4
Тоже не заработал Тоже не заработал
Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/ Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/
**************************************************************************************************** ****************************************************************************************************
Балансировщик назрузки и потоковая репликация: Балансировщик назрузки и потоковая репликация:
Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью
https://ritorika.com.ua/dokument/6/pgpool-chto-jeto https://ritorika.com.ua/dokument/6/pgpool-chto-jeto
**************************************************************************************************** ****************************************************************************************************
Мониторинг запросов postgresql Мониторинг запросов postgresql

View File

@ -1,12 +1,12 @@
Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication
Подключаюсь к нужной машине Подключаюсь к нужной машине
```sh ```sh
ssh igor@192.168.200.84 -p 22 ssh igor@192.168.200.84 -p 22
``` ```

View File

@ -1,137 +1,137 @@
# Настройка PostgreSQL в синхронном режиме репликации # Настройка PostgreSQL в синхронном режиме репликации
Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики. Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики.
--- ---
## **1. Подготовка серверов** ## **1. Подготовка серверов**
Допустим, у нас есть: Допустим, у нас есть:
- **Основной сервер (Primary):** `192.168.1.1` - **Основной сервер (Primary):** `192.168.1.1`
- **Реплика (Standby):** `192.168.1.2` - **Реплика (Standby):** `192.168.1.2`
Убедитесь, что PostgreSQL установлен на обоих серверах. Убедитесь, что PostgreSQL установлен на обоих серверах.
--- ---
## **2. Настройка основного сервера (Primary)** ## **2. Настройка основного сервера (Primary)**
### **2.1 Разрешаем подключение реплики** ### **2.1 Разрешаем подключение реплики**
Редактируем `postgresql.conf`: Редактируем `postgresql.conf`:
```sh ```sh
sudo nano /etc/postgresql/15/main/postgresql.conf sudo nano /etc/postgresql/15/main/postgresql.conf
``` ```
Добавляем/изменяем параметры: Добавляем/изменяем параметры:
```conf ```conf
wal_level = replica wal_level = replica
synchronous_commit = on synchronous_commit = on
synchronous_standby_names = 'replica1' synchronous_standby_names = 'replica1'
max_wal_senders = 3 max_wal_senders = 3
wal_keep_size = 256MB wal_keep_size = 256MB
hot_standby = on hot_standby = on
``` ```
Редактируем `pg_hba.conf`, добавляя доступ для реплики: Редактируем `pg_hba.conf`, добавляя доступ для реплики:
```sh ```sh
sudo nano /etc/postgresql/15/main/pg_hba.conf sudo nano /etc/postgresql/15/main/pg_hba.conf
``` ```
Добавляем строку: Добавляем строку:
```conf ```conf
host replication replicator 192.168.1.2/32 md5 host replication replicator 192.168.1.2/32 md5
``` ```
### **2.2 Создаем пользователя для репликации** ### **2.2 Создаем пользователя для репликации**
```sql ```sql
CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password'; CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password';
``` ```
### **2.3 Перезапускаем PostgreSQL** ### **2.3 Перезапускаем PostgreSQL**
```sh ```sh
sudo systemctl restart postgresql sudo systemctl restart postgresql
``` ```
--- ---
## **3. Настройка реплики (Standby)** ## **3. Настройка реплики (Standby)**
### **3.1 Останавливаем PostgreSQL на реплике** ### **3.1 Останавливаем PostgreSQL на реплике**
```sh ```sh
sudo systemctl stop postgresql sudo systemctl stop postgresql
``` ```
### **3.2 Копируем данные с основного сервера** ### **3.2 Копируем данные с основного сервера**
На реплике выполняем: На реплике выполняем:
```sh ```sh
sudo -u postgres pg_basebackup -h 192.168.1.1 -U replicator -D /var/lib/postgresql/15/main -Fp -Xs -R -P 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` вручную** ### **3.3 Указываем `application_name` вручную**
Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную: Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную:
```sh ```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';\"" 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 на реплике: Затем перезапускаем PostgreSQL на реплике:
```sh ```sh
sudo systemctl restart postgresql sudo systemctl restart postgresql
``` ```
### **3.4 Проверяем `primary_conninfo`** ### **3.4 Проверяем `primary_conninfo`**
```sh ```sh
cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo
``` ```
Ожидаемый результат: Ожидаемый результат:
```ini ```ini
primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1'
``` ```
Если строка отсутствует, редактируем файл вручную: Если строка отсутствует, редактируем файл вручную:
```sh ```sh
sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf
``` ```
Добавляем строку: Добавляем строку:
```ini ```ini
primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1'
``` ```
Сохраняем и перезапускаем PostgreSQL: Сохраняем и перезапускаем PostgreSQL:
```sh ```sh
sudo systemctl restart postgresql sudo systemctl restart postgresql
``` ```
--- ---
## **4. Обновляем настройки Primary для работы с репликой** ## **4. Обновляем настройки Primary для работы с репликой**
На основном сервере (Primary) выполняем: На основном сервере (Primary) выполняем:
```sh ```sh
sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\"" sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\""
``` ```
Перезапускаем PostgreSQL на Primary: Перезапускаем PostgreSQL на Primary:
```sh ```sh
sudo systemctl restart postgresql sudo systemctl restart postgresql
``` ```
--- ---
## **5. Проверка работы синхронной репликации** ## **5. Проверка работы синхронной репликации**
### **5.1 Проверяем статус репликации** ### **5.1 Проверяем статус репликации**
На **основном сервере (Primary)** выполняем: На **основном сервере (Primary)** выполняем:
```sql ```sql
SELECT application_name, sync_state FROM pg_stat_replication; SELECT application_name, sync_state FROM pg_stat_replication;
``` ```
Ожидаемый результат: Ожидаемый результат:
``` ```
application_name | sync_state application_name | sync_state
-----------------+------------ -----------------+------------
replica1 | sync replica1 | sync
``` ```
Если `sync_state = 'sync'`, значит синхронная репликация работает. Если `sync_state = 'sync'`, значит синхронная репликация работает.
--- ---
## **6. Итоговая проверка** ## **6. Итоговая проверка**
**Задали `primary_conninfo` вручную на реплике** **Задали `primary_conninfo` вручную на реплике**
**Перезапустили PostgreSQL на реплике** **Перезапустили PostgreSQL на реплике**
**Обновили `synchronous_standby_names` на основном сервере** **Обновили `synchronous_standby_names` на основном сервере**
**Перезапустили PostgreSQL на основном сервере** **Перезапустили PostgreSQL на основном сервере**
**Проверили `pg_stat_replication` на Primary** **Проверили `pg_stat_replication` на Primary**
Готово! 🎉 Готово! 🎉

View File

@ -35,10 +35,27 @@ DROP TABLE public.test_table;
```sql ```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'; 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 ```sql
ALTER ROLE user_developer_igor_i NOLOGIN VALID UNTIL '2025-05-22T00:00:00+05:00'; 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) Удаление пользователя БД 5) Удаление пользователя БД
```sql ```sql
DROP ROLE test_user; DROP ROLE test_user;

View File

@ -1,8 +1,224 @@
****************************************************************************************************
Подключаемся к нужной машине
```sh ```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 ```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 Открываем: https://127.0.0.1:9443
После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM] После предложения задания пароля для пользователя 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/ Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/