Merge branch 'master' of https://git.dirt.kz/igor/Ubuntu_docs
# Conflicts: # DNS/PowerDNS_install.md
This commit is contained in:
204
DNS/BIND_install.md
Normal file
204
DNS/BIND_install.md
Normal 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
|
||||||
@ -57,7 +57,7 @@ WantedBy=multi-user.target
|
|||||||
На клиенте запускаем локальный порт также указал 9999 а ключь
|
На клиенте запускаем локальный порт также указал 9999 а ключь
|
||||||
```sh
|
```sh
|
||||||
htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80
|
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
|
||||||
```
|
```
|
||||||
|
|
||||||
Для остановки
|
Для остановки
|
||||||
|
|||||||
@ -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
|
||||||
@ -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();
|
||||||
|
|
||||||
Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора):
|
Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора):
|
||||||
@ -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
|
||||||
|
|
||||||
|
|
||||||
@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -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**
|
||||||
|
|
||||||
Готово! 🎉
|
Готово! 🎉
|
||||||
|
|
||||||
91
PostgreSQL/PostgreSQL_select.md
Normal file
91
PostgreSQL/PostgreSQL_select.md
Normal 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) Проведение оплаты
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -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
|
|
||||||
```
|
|
||||||
@ -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
382
Ubuntu.md
@ -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/
|
||||||
|
|||||||
Reference in New Issue
Block a user