diff --git a/DNS/BIND_install.md b/DNS/BIND_install.md new file mode 100644 index 0000000..94fbdc0 --- /dev/null +++ b/DNS/BIND_install.md @@ -0,0 +1,204 @@ +**************************************************************************************************** +Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26 +```sh + sudo apt-get update && + sudo apt-get install bind9 dnsutils && + sudo apt-get install bind9utils +``` +Adding the service to autostart +```sh + systemctl enable bind9 +``` +Checking if the service is working +```sh + nslookup dmosk.ru 127.0.0.1 +``` +Opening the configuration file +```sh + mcedit /etc/bind/named.conf.options +``` +Для глобальных запросов добавляем строку: allow-query { any; }; +Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных + //forwarders { + // 8.8.8.8; + // 8.8.4.4; + //}; +Проверяем настройки командой (ответ должен быть пустым): + sudo named-checkconf +Перезагружаем: + sudo systemctl restart bind9 +Проверяю версию BIND: + named -v +Выдало: BIND 9.16.1-Ubuntu (Stable Release) +Можно проверить какой IP выдаст на DNS запрос + dig locust.kz A + +На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns. + + + + +Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками + +Перейдем в него. + cd /etc/bind/ +Генерируем пару ключь для обмена информацией между клиентом и сервером: + sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key + sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key +Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ. + include "/etc/bind/dirt.kz.key"; + include "/etc/bind/locust.kz.key"; +Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем. +zone "dirt.kz" { + type master; + allow-update {key dirt.kz;}; + file "/var/cache/bind/dirt.kz"; +}; + +zone "locust.kz" { + type master; + allow-update {key locust.kz;}; + file "/var/cache/bind/locust.kz"; +}; + + +В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где: +В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где: + +Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте +Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/ +SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA +NS — Сервер имён +A — рекорд +MX — Почта для обмена +CN — Каноническое имя +PTR — указатель +И таким содержимым: + +$ORIGIN dirt.kz +$TTL 604800 +@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. ( + 8 ; Serial + 604800 ; Refresh + 86400 ; Retry + 2419200 ; Expire + 604800 ) ; Negative Cache TTL +; +@ IN NS bigfoottrade.kz. + +Второй файл для locust.kz: + +$ORIGIN . +$TTL 604800 ; 1 week +locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. ( + 134 ; serial + 604800 ; refresh (1 week) + 86400 ; retry (1 day) + 1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds) + 604800 ; minimum (1 week) + ) + NS bigfoottrade.kz. +$TTL 3600 ; 1 hour + A 5.76.254.182 +$ORIGIN locust.kz. +* A 127.0.0.1 + + +Правлю права доступа: + sudo chown -R bind:bind /etc/bind + +Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой: + sudo rndc reconfig +Потом следует вызвать: + sudo systemctl restart bind9 +Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду +После настроек сервера перезагружаем его: + sudo named-checkconf + sudo rndc reload + sudo systemctl restart bind9 + sudo rndc status + journalctl | grep bind + sudo journalctl -u bind9 -n 50 + + +Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу: + +Файл из примера: + #!/bin/bash + TTL=3600 + SERVER=ns.dyndns.my + HOSTNAME=dhost.dyndns.my + ZONE=dyndns.my + KEYFILE=Kdyndns.my.+157+48025.private + new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! + cd /etc/ddns + nsupdate -v -k $KEYFILE << EOF + server $SERVER + zone $ZONE + update delete $HOSTNAME A + update add $HOSTNAME $TTL A $new_ip_address + send + EOF + +Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже: + #!/bin/bash + TTL=3600 + SERVER=127.0.0.1 + HOSTNAME=*.dirt.kz + ZONE=dirt.kz + KEYFILE=/etc/bind/dirt.kz.key + + new_ip_address= + FILE=/etc/ddns/ip.txt + if test -f "$FILE"; then + new_ip_address=`cat $FILE` + rm $FILE + fi + + len=${#new_ip_address} + if [ $len -gt 3 ] + then + echo "New IP address = $new_ip_address" + else + echo "Not find IP address" + exit + fi + + cd /etc/ddns + sudo nsupdate -v -k $KEYFILE << EOF + server $SERVER + zone $ZONE + update delete $HOSTNAME A + update add $HOSTNAME $TTL A $new_ip_address + update delete dirt.kz A + update add dirt.kz $TTL A $new_ip_address + send + EOF + echo "OK" + +Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента: +'; print_r(getallheaders()); echo ''; + +// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x" +foreach ( getallheaders() as $k => $v) { + if ( strtolower($k) == 'x-forwarded-for' ) { + $tmp = explode(', ', $v); + if ( $tmp[count($tmp)-1] != '' ) + $_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1]; + } +} + +if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){ + $myfile = fopen("/etc/ddns/ip.txt", "w"); + fwrite($myfile, $_SERVER['REMOTE_ADDR']); + fclose($myfile); +} + +echo $_SERVER['REMOTE_ADDR']; + +?> + +Проверяем что находит IP по доменному имени + nslookup dirt.kz 127.0.0.1 diff --git a/PowerDNS_install.md b/DNS/PowerDNS_install.md similarity index 100% rename from PowerDNS_install.md rename to DNS/PowerDNS_install.md diff --git a/PowerDNS_install_MarinaDB.md b/DNS/PowerDNS_install_MarinaDB.md similarity index 100% rename from PowerDNS_install_MarinaDB.md rename to DNS/PowerDNS_install_MarinaDB.md diff --git a/PowerDNS_install_PostgreSQL.md b/DNS/PowerDNS_install_PostgreSQL.md similarity index 100% rename from PowerDNS_install_PostgreSQL.md rename to DNS/PowerDNS_install_PostgreSQL.md diff --git a/PowerDNS_install_SQIite3.md b/DNS/PowerDNS_install_SQIite3.md similarity index 100% rename from PowerDNS_install_SQIite3.md rename to DNS/PowerDNS_install_SQIite3.md diff --git a/PowerDNS_install_doker.md b/DNS/PowerDNS_install_doker.md similarity index 100% rename from PowerDNS_install_doker.md rename to DNS/PowerDNS_install_doker.md diff --git a/HTTPTunnel.md b/HTTPTunnel.md index ee3741c..2a303c9 100644 --- a/HTTPTunnel.md +++ b/HTTPTunnel.md @@ -57,7 +57,7 @@ WantedBy=multi-user.target На клиенте запускаем локальный порт также указал 9999 а ключь ```sh htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80 - htc -F 9999 --base-uri /index.html?mybiglogfile=all locust.kz:80 + htc -F 9999 --base-uri /index.html?mybiglogfile=all dirt.kz:8080 ``` Для остановки diff --git a/PostgreSQL_Exporter.md b/PostgreSQL/PostgreSQL_Exporter.md similarity index 96% rename from PostgreSQL_Exporter.md rename to PostgreSQL/PostgreSQL_Exporter.md index 2bbc50a..4f2a0fd 100644 --- a/PostgreSQL_Exporter.md +++ b/PostgreSQL/PostgreSQL_Exporter.md @@ -1,141 +1,141 @@ -Устанавливаю согласно инструкции из: - -https://github.com/prometheus-community/postgres_exporter - -Подключаюсь к нужной машине -```sh -ssh igor@ccalm.org -p 2200 -``` - -Configure postgresql.conf -```conf - shared_preload_libraries = 'pg_stat_statements' - pg_stat_statements.track = all -``` - -## 1. Установка Docker и Docker Compose -Если Docker не установлен, установим его: -```sh - sudo apt update && sudo apt upgrade -y && - sudo apt install -y docker.io docker-compose && - sudo systemctl enable --now docker -``` - -## 2. Установка postgres-exporter в докере из заранее подготовленного образа - -```sh -sudo mkdir -p /opt/postgres-exporter && -sudo chown $USER:$USER /opt/postgres-exporter && -cd /opt/postgres-exporter -``` - -Создаю файл с настройками -```sh -cd /opt/postgres-exporter/ && -cat > docker-compose.yml <<'EOF' -services: - postgres-exporter: - image: quay.io/prometheuscommunity/postgres-exporter - container_name: postgres-exporter - restart: unless-stopped - network_mode: "host" - environment: - DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable" - volumes: - - ./postgres_exporter.yml:/etc/postgres_exporter.yml - command: - - "--config.file=/etc/postgres_exporter.yml" - -EOF -``` - -Создаём файл с настройками -```sh -cd /opt/postgres-exporter/ && -cat > postgres_exporter.yml <<'EOF' -collectors: - - database - - index - - query - - table -EOF -``` -Запускаю: -```sh - cd /opt/postgres-exporter && - sudo docker-compose up -d -``` - -Проверяю запущен ли докер -```sh - sudo docker ps -``` - -Testing with: -```sh -curl "http://127.0.0.1:9187/metrics" -``` - -Посмотреть журнал за сегодня: -```sh -journalctl --since today -``` - -Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера - -```sh -sudo mcedit /etc/haproxy/haproxy.cfg -``` -Настраиваем: -```text - acl v_metrics_nd path_beg /metrics_nd - acl v_basic_auth http_auth(prometheus_list) - http-request auth realm Metrics_org_ccalm_nd if v_metrics_nd !v_basic_auth - use_backend b_metrics_nd if v_metrics_nd v_basic_auth - -backend b_metrics_nd - mode http - option http-keep-alive - http-request replace-path .* /metrics - server web1 127.0.0.1:9100 check -``` - -Проверяем -```sh - haproxy -f /etc/haproxy/haproxy.cfg -c -```` -Перезагружаем: -```sh - sudo systemctl restart haproxy -```` - - - -Подключаюсь к машине где Prometeus: - -```sh -ssh igor@192.168.200.84 -p 22 -``` - -Перезагружаем prometheus чтобы он начал собирать метрики -```sh - sudo systemctl restart prometheus -``` - - - - -Теперь можно настраивать графану, вот готовыдашбоард -Открыть Grafana -Перейти в Dashboards → Import -Вставить ID: 9628 -Выбрать источник данных Prometheus (с PostgreSQL Exporter) -Нажать Import - - -Теперь можно настраивать графану, вот готовыдашбоард -Открыть Grafana -Перейти в Dashboards → Import -Вставить ID: 12273 -Выбрать источник данных Prometheus (с PostgreSQL Exporter) +Устанавливаю согласно инструкции из: + +https://github.com/prometheus-community/postgres_exporter + +Подключаюсь к нужной машине +```sh +ssh igor@ccalm.org -p 2200 +``` + +Configure postgresql.conf +```conf + shared_preload_libraries = 'pg_stat_statements' + pg_stat_statements.track = all +``` + +## 1. Установка Docker и Docker Compose +Если Docker не установлен, установим его: +```sh + sudo apt update && sudo apt upgrade -y && + sudo apt install -y docker.io docker-compose && + sudo systemctl enable --now docker +``` + +## 2. Установка postgres-exporter в докере из заранее подготовленного образа + +```sh +sudo mkdir -p /opt/postgres-exporter && +sudo chown $USER:$USER /opt/postgres-exporter && +cd /opt/postgres-exporter +``` + +Создаю файл с настройками +```sh +cd /opt/postgres-exporter/ && +cat > docker-compose.yml <<'EOF' +services: + postgres-exporter: + image: quay.io/prometheuscommunity/postgres-exporter + container_name: postgres-exporter + restart: unless-stopped + network_mode: "host" + environment: + DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable" + volumes: + - ./postgres_exporter.yml:/etc/postgres_exporter.yml + command: + - "--config.file=/etc/postgres_exporter.yml" + +EOF +``` + +Создаём файл с настройками +```sh +cd /opt/postgres-exporter/ && +cat > postgres_exporter.yml <<'EOF' +collectors: + - database + - index + - query + - table +EOF +``` +Запускаю: +```sh + cd /opt/postgres-exporter && + sudo docker-compose up -d +``` + +Проверяю запущен ли докер +```sh + sudo docker ps +``` + +Testing with: +```sh +curl "http://127.0.0.1:9187/metrics" +``` + +Посмотреть журнал за сегодня: +```sh +journalctl --since today +``` + +Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера + +```sh +sudo mcedit /etc/haproxy/haproxy.cfg +``` +Настраиваем: +```text + acl v_metrics_nd path_beg /metrics_nd + acl v_basic_auth http_auth(prometheus_list) + http-request auth realm Metrics_org_ccalm_nd if v_metrics_nd !v_basic_auth + use_backend b_metrics_nd if v_metrics_nd v_basic_auth + +backend b_metrics_nd + mode http + option http-keep-alive + http-request replace-path .* /metrics + server web1 127.0.0.1:9100 check +``` + +Проверяем +```sh + haproxy -f /etc/haproxy/haproxy.cfg -c +```` +Перезагружаем: +```sh + sudo systemctl restart haproxy +```` + + + +Подключаюсь к машине где Prometeus: + +```sh +ssh igor@192.168.200.84 -p 22 +``` + +Перезагружаем prometheus чтобы он начал собирать метрики +```sh + sudo systemctl restart prometheus +``` + + + + +Теперь можно настраивать графану, вот готовыдашбоард +Открыть Grafana +Перейти в Dashboards → Import +Вставить ID: 9628 +Выбрать источник данных Prometheus (с PostgreSQL Exporter) +Нажать Import + + +Теперь можно настраивать графану, вот готовыдашбоард +Открыть Grafana +Перейти в Dashboards → Import +Вставить ID: 12273 +Выбрать источник данных Prometheus (с PostgreSQL Exporter) Нажать Import \ No newline at end of file diff --git a/PostgreSQL_credcheck.md b/PostgreSQL/PostgreSQL_credcheck.md similarity index 97% rename from PostgreSQL_credcheck.md rename to PostgreSQL/PostgreSQL_credcheck.md index 62a0586..b9edff9 100644 --- a/PostgreSQL_credcheck.md +++ b/PostgreSQL/PostgreSQL_credcheck.md @@ -1,61 +1,61 @@ -**************************************************************************************************** -Установка и настройка проверяльщик паролей credcheck -PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/ - -Тестовая база -```sh - ssh administrator@10.201.3.36 -p 22 -``` - -Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём: -```sh - apt search credcheck -``` - -Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен): -```sh - sudo apt-get install postgresql-server-dev-16 && - sudo apt-get install build-essential && - git clone https://github.com/HexaCluster/credcheck.git && - cd credcheck && - make && - sudo make install -``` - -Подключаемся к базе данных для выполнения запросов -```sh - psql -h 127.0.0.1 -U postgres -d transit -``` -Проверяем что настройки имеются: -```sh - SELECT name, setting, unit, source, sourcefile, sourceline - FROM pg_settings - WHERE name LIKE 'credcheck%'; -``` - -Читаем текущие настройки -```sh -SHOW ALL; -``` - -Создаём расширение в базе postgres: -```sh - CREATE EXTENSION credcheck; -``` - -Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck: - -- Configure credential policies to enforce username and password standards and reload configuration files - ALTER SYSTEM SET credcheck.username_min_length = 4; - ALTER SYSTEM SET credcheck.password_min_length = 8; - ALTER SYSTEM SET credcheck.password_min_special = 1; - SELECT pg_reload_conf(); - - -- Attempt to create a user for a new park ranger, which does not meet the credential policies - CREATE USER ranger_ WITH PASSWORD 'forest'; - ERROR: password length should match the configured credcheck.password_min_length - -Для пароля установить: - ALTER SYSTEM SET credcheck.password_expiration_days = 90; - SELECT pg_reload_conf(); - -Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора): +**************************************************************************************************** +Установка и настройка проверяльщик паролей credcheck +PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/ + +Тестовая база +```sh + ssh administrator@10.201.3.36 -p 22 +``` + +Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём: +```sh + apt search credcheck +``` + +Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен): +```sh + sudo apt-get install postgresql-server-dev-16 && + sudo apt-get install build-essential && + git clone https://github.com/HexaCluster/credcheck.git && + cd credcheck && + make && + sudo make install +``` + +Подключаемся к базе данных для выполнения запросов +```sh + psql -h 127.0.0.1 -U postgres -d transit +``` +Проверяем что настройки имеются: +```sh + SELECT name, setting, unit, source, sourcefile, sourceline + FROM pg_settings + WHERE name LIKE 'credcheck%'; +``` + +Читаем текущие настройки +```sh +SHOW ALL; +``` + +Создаём расширение в базе postgres: +```sh + CREATE EXTENSION credcheck; +``` + +Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck: + -- Configure credential policies to enforce username and password standards and reload configuration files + ALTER SYSTEM SET credcheck.username_min_length = 4; + ALTER SYSTEM SET credcheck.password_min_length = 8; + ALTER SYSTEM SET credcheck.password_min_special = 1; + SELECT pg_reload_conf(); + + -- Attempt to create a user for a new park ranger, which does not meet the credential policies + CREATE USER ranger_ WITH PASSWORD 'forest'; + ERROR: password length should match the configured credcheck.password_min_length + +Для пароля установить: + ALTER SYSTEM SET credcheck.password_expiration_days = 90; + SELECT pg_reload_conf(); + +Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора): diff --git a/PostgreSQL_install.md b/PostgreSQL/PostgreSQL_install.md similarity index 97% rename from PostgreSQL_install.md rename to PostgreSQL/PostgreSQL_install.md index c5d30d2..825c020 100644 --- a/PostgreSQL_install.md +++ b/PostgreSQL/PostgreSQL_install.md @@ -1,348 +1,348 @@ -# Install PostgreSQL database - -Coonect lto need server: -```sh -wsl -``` -Or coonect to need server: -```sh -ssh igor@ccalm.org -p 2200 -``` - -**************************************************************************************************** -Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries: -Скачал, создаю дирректорию хранения данных: -O:\MyDocuments\DataBases\postgresql-12.3-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_12.3 -O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13 -Потом создать BAT файл с тем текстом что отобразится при создании каталога базы -База данных создаётся не под пользователем postgres а под локальным пользователем igor -**************************************************************************************************** -Установка PostgreSQL 14 ubuntu 22.04 или 24.04 -```sh - sudo apt-get update - sudo apt-get install postgresql postgresql-contrib -y -``` -Или так если нужно установить PostGIS -```sh - sudo apt-get install postgis -``` -Для удаления PostGIS в месте с зависимыми пакетами: -```sh - sudo apt-get remove --auto-remove postgis && - sudo apt-get purge postgis -``` -Добавить русскую локаль если её нет: -```sh - sudo locale-gen ru_RU && - sudo locale-gen ru_RU.UTF-8 && - sudo locale-gen kk_KZ && - sudo locale-gen kk_KZ.UTF-8 -``` -Проверить какая локаль по умолчанию: -```sh - localectl status -``` -И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры): -```sh - sudo dpkg-reconfigure locales -``` -Для задания пароля в PostgreSQL выполнить: -```sh - sudo -u postgres psql && - \password postgres -``` -Чтобы выйти нужно выпольнить команду: \q - -Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust -Задать пароль: - sudo -u postgres psql - postgres=> SELECT usename FROM pg_user; - postgres=> alter user postgres password 'PasSecrKey1'; - postgres=> \q - -Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/ -Создаём базу данных выполнив функцию: -CREATE DATABASE CCALM - WITH OWNER = postgres - TEMPLATE = template0 - ENCODING = 'UTF8' - TABLESPACE = pg_default - LC_COLLATE = 'ru_RU.UTF-8' - LC_CTYPE = 'ru_RU.UTF-8' - CONNECTION LIMIT = -1; - -Файл настроек postgresql: -```sh -sudo mcedit /etc/postgresql/16/main/postgresql.conf -``` - listen_addresses='*' #Разрешить подключение с внешки - #Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой - backslash_quote = on - escape_string_warning = off - standard_conforming_strings = off -Чтобы воводил двоичные данные по старому изменить на: - bytea_output = 'escape' - -Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду" - -Для создания нового пользователя выполнить: - sudo -u postgres psql - CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION; - -Для подключения к определённой базе данных выполнить команду: - sudo -u postgres psql - \list or \l: для отображения всех баз - \connect zholak zholak - \dt для отображения всех таблиц - -или написать со своим IP: host all all 2.133.238.240/24 trust -Для подключения с любых IP адресов в " -```sh -sudo mcedit /etc/postgresql/16/main/pg_hba.conf -``` - host all all 0.0.0.0/0 md5 - Либо с одного конкретного то: host all all 92.46.48.37/24 md5 -А также поменять на listen_addresses = '*' в postgresql.conf -Потом перезагрузить postgres: - sudo service postgresql restart - sudo /etc/init.d/postgresql stop - sudo /etc/init.d/postgresql restart - sudo /etc/init.d/postgresql start -Проверить запущен или нет то: - sudo /etc/init.d/postgresql status -Посмотрель лог загрузки PostGreSQL: - dmesg |grep pg -Чтобы посмотреть чем занят порт выполнить команду: - sudo netstat -tap | grep 5432 - -Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): - pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root - pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres - pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres - pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom - pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres - pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom - pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom - - pg_dump CCALM>CCALM.backup --host=127.0.0.1 --username=postgres --format=custom - - pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom - pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql - pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz - -Востановить Dump из текстового файла: - psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup - psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql - psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql - psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql - psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql - -Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл: - /mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh - #!/bin/sh - pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz - -Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться): - su - postgres - pg_restore -U -d -1 .dump - pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup - pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup - pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup - pg_restore -U postgres -d transit -1 /home/administrator/transit.backup - pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup - - sudo -u postgres psql -d transit -f /tmp/transit.backup - -Или из архива (первоначально задать trust на 127.0.0.1) так: - gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop - -**************************************************************************************************** -Настройка отображения статистики для PostgreSQL: - https://habr.com/ru/articles/488968/ - - SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC; - SELECT * FROM pg_stat_activity - SELECT * FROM pg_stat_replication - SELECT * FROM pg_stat_all_tables - -Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats - -Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL - По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/ - По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU -**************************************************************************************************** -Установка pgagent - sudo apt-get update - sudo apt-get install pgagent -Выполнить в консоли запрос: - psql -h localhost -U postgres - create extension pgagent; - \q -Для разрешения подключения откройте файл pg_hba.conf и замените строку на: - host all all 127.0.0.1/32 md5 - -Можно для теста запустить pgagent с повышенным уровнем логирования: - /usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk - -Если файла нет то пытаюсь его создать: - sudo mcedit /lib/systemd/system/pgagent.service - -[Unit] -Description=PostgreSQL PgAgent Service -After=network.target - -[Service] -Type=simple -User=postgres -ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1 - -[Install] -WantedBy=multi-user.target - -Проверяю что сервис был запущен: - sudo systemctl daemon-reload - sudo systemctl enable pgagent - sudo service pgagent start - sudo systemctl status pgagent - - -Для проверки пробуем подключиться к базе данных - sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres - \q - -Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться: - sudo -u postgres touch /var/lib/postgresql/.pgpass - sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass - sudo -u postgres mcedit /var/lib/postgresql/.pgpass -И прописать в него: - 127.0.0.1:5432:postgres:postgres:PasSecrKey1 -Где используется такой формат: hostname:port:database:username:password -Затем: - sudo systemctl enable pgagent - sudo service pgagent start - sudo service pgagent status -Посмотреть логи: - sudo journalctl -u pgagent - -**************************************************************************************************** -Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт: - - -**************************************************************************************************** -Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move - -**************************************************************************************************** -Установка PostGIS на PostgreSQL выше 9.0 версии: - sudo apt-get install postgis postgresql-9.3-postgis-2.1 -Для 10й версии: - sudo apt install postgresql-10-postgis-2.4 - sudo apt install postgresql-10-postgis-scripts -Для 12й версии: - sudo apt install postgresql-12-postgis-2.4 - -Создать базу данных и выполнть на ней следующие команды: - -- Enable PostGIS (includes raster) - CREATE EXTENSION postgis; - -- Enable Topology - CREATE EXTENSION postgis_topology; - -- fuzzy matching needed for Tiger - CREATE EXTENSION fuzzystrmatch; - -- rule based standardizer - CREATE EXTENSION address_standardizer; - -- example rule data set - CREATE EXTENSION address_standardizer_data_us; - -- Enable US Tiger Geocoder - CREATE EXTENSION postgis_tiger_geocoder; - -У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17 -Аказывается расширение кудато делось установил: - sudo apt-get install postgresql-9.5-postgis-2.2 -**************************************************************************************************** -Для добавления TOTP авторизации в Postgresql выполнить: - CREATE EXTENSION otp; - - -**************************************************************************************************** - sudo apt-get install libpq-dev libpq-fe -Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен - То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev - apt update -**************************************************************************************************** -Установка phpPgAdmin через репозиторий: -sudo apt-get install phppgadmin -Можно открыть так: http://localhost/phppgadmin -Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all -Чтоб можно было залогинется под пользователем postgres меняем в: -/etc/phppgadmin/config.inc.php extra_login_security в false -Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost'; - -Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". -**************************************************************************************************** -Установка pgAdmin4 через докер контейнер - -```sh - sudo mkdir -p /opt/pgAdmin4 && - sudo chmod -R 777 /opt/pgAdmin4 && - sudo chown -R $USER:$USER /opt/pgAdmin4 -``` - -```sh -cd /opt/pgAdmin4 && -cat > docker-compose.yml <<'EOF' -services: - pgadmin: - image: dpage/pgadmin4 - container_name: pgadmin4 - restart: unless-stopped - ports: - - "5050:80" - environment: - PGADMIN_DEFAULT_EMAIL: irigm@mail.ru - PGADMIN_DEFAULT_PASSWORD: 123456 - volumes: - - pgadmin_data:/var/lib/pgadmin - -volumes: - pgadmin_data: -EOF -``` - -## 4. Запуск контейнера - -```sh - cd /opt/pgAdmin4 && - sudo docker compose up -d -``` - -```sh - cd /opt/pgAdmin4 && - sudo docker compose down -``` - - - - - -Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/ - curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add - sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/bionic pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' - sudo apt install pgadmin4 - -И не запустился сервер оболочка пытается стартануть а сервер нет... - - sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add - sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' - sudo apt install pgadmin4 - -Тоже не заработал - -Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/ - -**************************************************************************************************** -Балансировщик назрузки и потоковая репликация: -Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью -https://ritorika.com.ua/dokument/6/pgpool-chto-jeto -**************************************************************************************************** -Мониторинг запросов postgresql - - +# Install PostgreSQL database + +Coonect lto need server: +```sh +wsl +``` +Or coonect to need server: +```sh +ssh igor@ccalm.org -p 2200 +``` + +**************************************************************************************************** +Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries: +Скачал, создаю дирректорию хранения данных: +O:\MyDocuments\DataBases\postgresql-12.3-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_12.3 +O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13 +Потом создать BAT файл с тем текстом что отобразится при создании каталога базы +База данных создаётся не под пользователем postgres а под локальным пользователем igor +**************************************************************************************************** +Установка PostgreSQL 14 ubuntu 22.04 или 24.04 +```sh + sudo apt-get update + sudo apt-get install postgresql postgresql-contrib -y +``` +Или так если нужно установить PostGIS +```sh + sudo apt-get install postgis +``` +Для удаления PostGIS в месте с зависимыми пакетами: +```sh + sudo apt-get remove --auto-remove postgis && + sudo apt-get purge postgis +``` +Добавить русскую локаль если её нет: +```sh + sudo locale-gen ru_RU && + sudo locale-gen ru_RU.UTF-8 && + sudo locale-gen kk_KZ && + sudo locale-gen kk_KZ.UTF-8 +``` +Проверить какая локаль по умолчанию: +```sh + localectl status +``` +И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры): +```sh + sudo dpkg-reconfigure locales +``` +Для задания пароля в PostgreSQL выполнить: +```sh + sudo -u postgres psql && + \password postgres +``` +Чтобы выйти нужно выпольнить команду: \q + +Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust +Задать пароль: + sudo -u postgres psql + postgres=> SELECT usename FROM pg_user; + postgres=> alter user postgres password 'PasSecrKey1'; + postgres=> \q + +Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/ +Создаём базу данных выполнив функцию: +CREATE DATABASE CCALM + WITH OWNER = postgres + TEMPLATE = template0 + ENCODING = 'UTF8' + TABLESPACE = pg_default + LC_COLLATE = 'ru_RU.UTF-8' + LC_CTYPE = 'ru_RU.UTF-8' + CONNECTION LIMIT = -1; + +Файл настроек postgresql: +```sh +sudo mcedit /etc/postgresql/16/main/postgresql.conf +``` + listen_addresses='*' #Разрешить подключение с внешки + #Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой + backslash_quote = on + escape_string_warning = off + standard_conforming_strings = off +Чтобы воводил двоичные данные по старому изменить на: + bytea_output = 'escape' + +Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду" + +Для создания нового пользователя выполнить: + sudo -u postgres psql + CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION; + +Для подключения к определённой базе данных выполнить команду: + sudo -u postgres psql + \list or \l: для отображения всех баз + \connect zholak zholak + \dt для отображения всех таблиц + +или написать со своим IP: host all all 2.133.238.240/24 trust +Для подключения с любых IP адресов в " +```sh +sudo mcedit /etc/postgresql/16/main/pg_hba.conf +``` + host all all 0.0.0.0/0 md5 + Либо с одного конкретного то: host all all 92.46.48.37/24 md5 +А также поменять на listen_addresses = '*' в postgresql.conf +Потом перезагрузить postgres: + sudo service postgresql restart + sudo /etc/init.d/postgresql stop + sudo /etc/init.d/postgresql restart + sudo /etc/init.d/postgresql start +Проверить запущен или нет то: + sudo /etc/init.d/postgresql status +Посмотрель лог загрузки PostGreSQL: + dmesg |grep pg +Чтобы посмотреть чем занят порт выполнить команду: + sudo netstat -tap | grep 5432 + +Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): + pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root + pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres + pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres + pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom + pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres + pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom + pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom + + pg_dump CCALM>CCALM.backup --host=127.0.0.1 --username=postgres --format=custom + + pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom + pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql + pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz + +Востановить Dump из текстового файла: + psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup + psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql + psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql + psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql + psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql + +Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл: + /mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh + #!/bin/sh + pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz + +Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться): + su - postgres + pg_restore -U -d -1 .dump + pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup + pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup + pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup + pg_restore -U postgres -d transit -1 /home/administrator/transit.backup + pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup + + sudo -u postgres psql -d transit -f /tmp/transit.backup + +Или из архива (первоначально задать trust на 127.0.0.1) так: + gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop + +**************************************************************************************************** +Настройка отображения статистики для PostgreSQL: + https://habr.com/ru/articles/488968/ + + SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC; + SELECT * FROM pg_stat_activity + SELECT * FROM pg_stat_replication + SELECT * FROM pg_stat_all_tables + +Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats + +Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL + По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/ + По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU +**************************************************************************************************** +Установка pgagent + sudo apt-get update + sudo apt-get install pgagent +Выполнить в консоли запрос: + psql -h localhost -U postgres + create extension pgagent; + \q +Для разрешения подключения откройте файл pg_hba.conf и замените строку на: + host all all 127.0.0.1/32 md5 + +Можно для теста запустить pgagent с повышенным уровнем логирования: + /usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk + +Если файла нет то пытаюсь его создать: + sudo mcedit /lib/systemd/system/pgagent.service + +[Unit] +Description=PostgreSQL PgAgent Service +After=network.target + +[Service] +Type=simple +User=postgres +ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1 + +[Install] +WantedBy=multi-user.target + +Проверяю что сервис был запущен: + sudo systemctl daemon-reload + sudo systemctl enable pgagent + sudo service pgagent start + sudo systemctl status pgagent + + +Для проверки пробуем подключиться к базе данных + sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres + \q + +Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться: + sudo -u postgres touch /var/lib/postgresql/.pgpass + sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass + sudo -u postgres mcedit /var/lib/postgresql/.pgpass +И прописать в него: + 127.0.0.1:5432:postgres:postgres:PasSecrKey1 +Где используется такой формат: hostname:port:database:username:password +Затем: + sudo systemctl enable pgagent + sudo service pgagent start + sudo service pgagent status +Посмотреть логи: + sudo journalctl -u pgagent + +**************************************************************************************************** +Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт: + + +**************************************************************************************************** +Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move + +**************************************************************************************************** +Установка PostGIS на PostgreSQL выше 9.0 версии: + sudo apt-get install postgis postgresql-9.3-postgis-2.1 +Для 10й версии: + sudo apt install postgresql-10-postgis-2.4 + sudo apt install postgresql-10-postgis-scripts +Для 12й версии: + sudo apt install postgresql-12-postgis-2.4 + +Создать базу данных и выполнть на ней следующие команды: + -- Enable PostGIS (includes raster) + CREATE EXTENSION postgis; + -- Enable Topology + CREATE EXTENSION postgis_topology; + -- fuzzy matching needed for Tiger + CREATE EXTENSION fuzzystrmatch; + -- rule based standardizer + CREATE EXTENSION address_standardizer; + -- example rule data set + CREATE EXTENSION address_standardizer_data_us; + -- Enable US Tiger Geocoder + CREATE EXTENSION postgis_tiger_geocoder; + +У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17 +Аказывается расширение кудато делось установил: + sudo apt-get install postgresql-9.5-postgis-2.2 +**************************************************************************************************** +Для добавления TOTP авторизации в Postgresql выполнить: + CREATE EXTENSION otp; + + +**************************************************************************************************** + sudo apt-get install libpq-dev libpq-fe +Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен + То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev + apt update +**************************************************************************************************** +Установка phpPgAdmin через репозиторий: +sudo apt-get install phppgadmin +Можно открыть так: http://localhost/phppgadmin +Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all +Чтоб можно было залогинется под пользователем postgres меняем в: +/etc/phppgadmin/config.inc.php extra_login_security в false +Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost'; + +Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". +**************************************************************************************************** +Установка pgAdmin4 через докер контейнер + +```sh + sudo mkdir -p /opt/pgAdmin4 && + sudo chmod -R 777 /opt/pgAdmin4 && + sudo chown -R $USER:$USER /opt/pgAdmin4 +``` + +```sh +cd /opt/pgAdmin4 && +cat > docker-compose.yml <<'EOF' +services: + pgadmin: + image: dpage/pgadmin4 + container_name: pgadmin4 + restart: unless-stopped + ports: + - "5050:80" + environment: + PGADMIN_DEFAULT_EMAIL: irigm@mail.ru + PGADMIN_DEFAULT_PASSWORD: 123456 + volumes: + - pgadmin_data:/var/lib/pgadmin + +volumes: + pgadmin_data: +EOF +``` + +## 4. Запуск контейнера + +```sh + cd /opt/pgAdmin4 && + sudo docker compose up -d +``` + +```sh + cd /opt/pgAdmin4 && + sudo docker compose down +``` + + + + + +Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/ + curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add + sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/bionic pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' + sudo apt install pgadmin4 + +И не запустился сервер оболочка пытается стартануть а сервер нет... + + sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add + sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' + sudo apt install pgadmin4 + +Тоже не заработал + +Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/ + +**************************************************************************************************** +Балансировщик назрузки и потоковая репликация: +Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью +https://ritorika.com.ua/dokument/6/pgpool-chto-jeto +**************************************************************************************************** +Мониторинг запросов postgresql + + diff --git a/PostgreSQL_replication.md b/PostgreSQL/PostgreSQL_replication.md similarity index 94% rename from PostgreSQL_replication.md rename to PostgreSQL/PostgreSQL_replication.md index 08cb70a..437db24 100644 --- a/PostgreSQL_replication.md +++ b/PostgreSQL/PostgreSQL_replication.md @@ -1,12 +1,12 @@ - -Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication - -Подключаюсь к нужной машине -```sh -ssh igor@192.168.200.84 -p 22 -``` - - - - - + +Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication + +Подключаюсь к нужной машине +```sh +ssh igor@192.168.200.84 -p 22 +``` + + + + + diff --git a/PostgreSQL_replication_synchronous.md b/PostgreSQL/PostgreSQL_replication_synchronous.md similarity index 97% rename from PostgreSQL_replication_synchronous.md rename to PostgreSQL/PostgreSQL_replication_synchronous.md index 7333d53..7d0e3c0 100644 --- a/PostgreSQL_replication_synchronous.md +++ b/PostgreSQL/PostgreSQL_replication_synchronous.md @@ -1,137 +1,137 @@ -# Настройка PostgreSQL в синхронном режиме репликации - -Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики. - ---- - -## **1. Подготовка серверов** -Допустим, у нас есть: -- **Основной сервер (Primary):** `192.168.1.1` -- **Реплика (Standby):** `192.168.1.2` - -Убедитесь, что PostgreSQL установлен на обоих серверах. - ---- - -## **2. Настройка основного сервера (Primary)** - -### **2.1 Разрешаем подключение реплики** -Редактируем `postgresql.conf`: -```sh -sudo nano /etc/postgresql/15/main/postgresql.conf -``` -Добавляем/изменяем параметры: -```conf -wal_level = replica -synchronous_commit = on -synchronous_standby_names = 'replica1' -max_wal_senders = 3 -wal_keep_size = 256MB -hot_standby = on -``` -Редактируем `pg_hba.conf`, добавляя доступ для реплики: -```sh -sudo nano /etc/postgresql/15/main/pg_hba.conf -``` -Добавляем строку: -```conf -host replication replicator 192.168.1.2/32 md5 -``` - -### **2.2 Создаем пользователя для репликации** -```sql -CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password'; -``` - -### **2.3 Перезапускаем PostgreSQL** -```sh -sudo systemctl restart postgresql -``` - ---- - -## **3. Настройка реплики (Standby)** - -### **3.1 Останавливаем PostgreSQL на реплике** -```sh -sudo systemctl stop postgresql -``` - -### **3.2 Копируем данные с основного сервера** -На реплике выполняем: -```sh -sudo -u postgres pg_basebackup -h 192.168.1.1 -U replicator -D /var/lib/postgresql/15/main -Fp -Xs -R -P -``` - -### **3.3 Указываем `application_name` вручную** -Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную: -```sh -sudo su postgres -c "psql -c \"ALTER SYSTEM SET primary_conninfo TO 'host=192.168.1.1 user=replicator password=your_password application_name=replica1';\"" -``` -Затем перезапускаем PostgreSQL на реплике: -```sh -sudo systemctl restart postgresql -``` - -### **3.4 Проверяем `primary_conninfo`** -```sh -cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo -``` -Ожидаемый результат: -```ini -primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' -``` -Если строка отсутствует, редактируем файл вручную: -```sh -sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf -``` -Добавляем строку: -```ini -primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' -``` -Сохраняем и перезапускаем PostgreSQL: -```sh -sudo systemctl restart postgresql -``` - ---- - -## **4. Обновляем настройки Primary для работы с репликой** - -На основном сервере (Primary) выполняем: -```sh -sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\"" -``` -Перезапускаем PostgreSQL на Primary: -```sh -sudo systemctl restart postgresql -``` - ---- - -## **5. Проверка работы синхронной репликации** - -### **5.1 Проверяем статус репликации** -На **основном сервере (Primary)** выполняем: -```sql -SELECT application_name, sync_state FROM pg_stat_replication; -``` -Ожидаемый результат: -``` - application_name | sync_state ------------------+------------ - replica1 | sync -``` -Если `sync_state = 'sync'`, значит синхронная репликация работает. - ---- - -## **6. Итоговая проверка** -✅ **Задали `primary_conninfo` вручную на реплике** -✅ **Перезапустили PostgreSQL на реплике** -✅ **Обновили `synchronous_standby_names` на основном сервере** -✅ **Перезапустили PostgreSQL на основном сервере** -✅ **Проверили `pg_stat_replication` на Primary** - -Готово! 🎉 - +# Настройка PostgreSQL в синхронном режиме репликации + +Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики. + +--- + +## **1. Подготовка серверов** +Допустим, у нас есть: +- **Основной сервер (Primary):** `192.168.1.1` +- **Реплика (Standby):** `192.168.1.2` + +Убедитесь, что PostgreSQL установлен на обоих серверах. + +--- + +## **2. Настройка основного сервера (Primary)** + +### **2.1 Разрешаем подключение реплики** +Редактируем `postgresql.conf`: +```sh +sudo nano /etc/postgresql/15/main/postgresql.conf +``` +Добавляем/изменяем параметры: +```conf +wal_level = replica +synchronous_commit = on +synchronous_standby_names = 'replica1' +max_wal_senders = 3 +wal_keep_size = 256MB +hot_standby = on +``` +Редактируем `pg_hba.conf`, добавляя доступ для реплики: +```sh +sudo nano /etc/postgresql/15/main/pg_hba.conf +``` +Добавляем строку: +```conf +host replication replicator 192.168.1.2/32 md5 +``` + +### **2.2 Создаем пользователя для репликации** +```sql +CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password'; +``` + +### **2.3 Перезапускаем PostgreSQL** +```sh +sudo systemctl restart postgresql +``` + +--- + +## **3. Настройка реплики (Standby)** + +### **3.1 Останавливаем PostgreSQL на реплике** +```sh +sudo systemctl stop postgresql +``` + +### **3.2 Копируем данные с основного сервера** +На реплике выполняем: +```sh +sudo -u postgres pg_basebackup -h 192.168.1.1 -U replicator -D /var/lib/postgresql/15/main -Fp -Xs -R -P +``` + +### **3.3 Указываем `application_name` вручную** +Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную: +```sh +sudo su postgres -c "psql -c \"ALTER SYSTEM SET primary_conninfo TO 'host=192.168.1.1 user=replicator password=your_password application_name=replica1';\"" +``` +Затем перезапускаем PostgreSQL на реплике: +```sh +sudo systemctl restart postgresql +``` + +### **3.4 Проверяем `primary_conninfo`** +```sh +cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo +``` +Ожидаемый результат: +```ini +primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' +``` +Если строка отсутствует, редактируем файл вручную: +```sh +sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf +``` +Добавляем строку: +```ini +primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' +``` +Сохраняем и перезапускаем PostgreSQL: +```sh +sudo systemctl restart postgresql +``` + +--- + +## **4. Обновляем настройки Primary для работы с репликой** + +На основном сервере (Primary) выполняем: +```sh +sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\"" +``` +Перезапускаем PostgreSQL на Primary: +```sh +sudo systemctl restart postgresql +``` + +--- + +## **5. Проверка работы синхронной репликации** + +### **5.1 Проверяем статус репликации** +На **основном сервере (Primary)** выполняем: +```sql +SELECT application_name, sync_state FROM pg_stat_replication; +``` +Ожидаемый результат: +``` + application_name | sync_state +-----------------+------------ + replica1 | sync +``` +Если `sync_state = 'sync'`, значит синхронная репликация работает. + +--- + +## **6. Итоговая проверка** +✅ **Задали `primary_conninfo` вручную на реплике** +✅ **Перезапустили PostgreSQL на реплике** +✅ **Обновили `synchronous_standby_names` на основном сервере** +✅ **Перезапустили PostgreSQL на основном сервере** +✅ **Проверили `pg_stat_replication` на Primary** + +Готово! 🎉 + diff --git a/PostgreSQL/PostgreSQL_select.md b/PostgreSQL/PostgreSQL_select.md new file mode 100644 index 0000000..122cead --- /dev/null +++ b/PostgreSQL/PostgreSQL_select.md @@ -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) Проведение оплаты + + + diff --git a/PostgreSQL_select.md b/PostgreSQL_select.md deleted file mode 100644 index ed84850..0000000 --- a/PostgreSQL_select.md +++ /dev/null @@ -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 -``` diff --git a/RabbitMQ_install.md b/RabbitMQ_install.md index 1837620..d585d0b 100644 --- a/RabbitMQ_install.md +++ b/RabbitMQ_install.md @@ -1,8 +1,224 @@ - +**************************************************************************************************** +Подключаемся к нужной машине ```sh -ssh administrator@10.101.1.37 -p 22 + ssh ivanov_i@10.101.1.3 -p 22 ``` +Установка сервиса обмена сообщениями RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/ ```sh -sudo rabbitmqctl change_password admin KGf4nxT8vxZWv3jqNasP -``` \ No newline at end of file + sudo apt-get update && + sudo apt-get dist-upgrade && + sudo apt install rabbitmq-server +``` + +Создаём пользователя и задаём пароль +```sh +sudo rabbitmqctl list_users && +sudo rabbitmqctl add_user ivanov_i KGf4nxT8vxZWv3jqNasP && +sudo rabbitmqctl set_user_tags ivanov_i administrator && +sudo rabbitmqctl set_permissions -p / ivanov_i ".*" ".*" ".*" && +sudo rabbitmqctl change_password ivanov_i KGf4nxT8vxZWv3jqNasP +``` + +Посмотреть список используемых плагинов: +```sh + sudo rabbitmq-plugins list +``` +Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную. +```sh + sudo rabbitmq-plugins enable rabbitmq_management +``` +rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672 +Но для активации нужно добавить пользователя, смотрим пользователей: +```sh + sudo rabbitmqctl list_users + sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера + sudo rabbitmqctl set_user_tags admin administrator + sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" +``` +Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43 + +Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed. +Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password + producer: клиент, выполняющий отправку сообщения + queue: собственно очередь сообщений + consumer: клиент, получающий сообщения из очереди + exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html) + +Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y + https://www.rabbitmq.com/devtools.html : +Создаю Maven проект в консоли: +```sh + cd O:\projects\Workspace_Java\ + mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false +``` +Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client: +```xml + + + com.rabbitmq + amqp-client + 5.14.2 + +``` +Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA. + + Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/ + или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/ +Добавил в POM файл: +```xml + + + RabbitMQ + https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0 + com.rabbitmq + + false + + + true + + + + + + + com.rabbitmq + amqp-client + 5.16.0 + + +``` + +Перезагружаем: +```sh + sudo service rabbitmq-server restart +``` + +**************************************************************************************************** +Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel + +Активирую плагин командой: +```sh + sudo rabbitmq-plugins enable rabbitmq_shovel && + sudo rabbitmq-plugins enable rabbitmq_shovel_management +``` + +Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку: +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation", + "src-queue": "TO_KAZ", + "dest-protocol": "amqp091", + "dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground", + "dest-exchange": "swap", + "dest-exchange-key": ".KAZ.", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Для Росии такие настройки: +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_rus '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus", + "src-queue": "TO_RUS", + "dest-protocol": "amqp091", + "dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground", + "dest-exchange": "swap", + "dest-exchange-key": "KZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Для Беларусии такие настройки: +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_blr '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr", + "src-queue": "TO_BLR", + "dest-protocol": "amqp091", + "dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber", + "dest-exchange": "eec.swap", + "dest-exchange-key": "KZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Для Армении такие настройки: +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_arm '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm", + "src-queue": "TO_ARM", + "dest-protocol": "amqp091", + "dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation", + "dest-exchange": "swap_kz", + "dest-exchange-key": "KZ_ISTT", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Для Кыргызстана (таможенная инфраструктура) +```sh +sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz", + "src-queue": "TO_KGZ", + "dest-protocol": "amqp091", + "dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz", + "dest-exchange": "swap", + "dest-exchange-key": "KAZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` +Удалять так: +```sh + sudo rabbitmqctl clear_parameter shovel kaz_to_kgz +``` + +Для отправки из Киргизии нам то такие настройки: +```sh +sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz", + "src-queue": "TO_KAZ", + "dest-protocol": "amqp091", + "dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz", + "dest-exchange": "swap", + "dest-exchange-key": "KGZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' +``` + +Удалять так: +```sh + sudo rabbitmqctl clear_parameter shovel kgz_to_kaz +``` + +Чтобы проверить текущие параметры Shovel: +```sh + sudo rabbitmqctl list_parameters +``` +А также можно взглянуть что создалось через WEB интерфейс + +Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает. diff --git a/Ubuntu.md b/Ubuntu.md index 8739471..513afca 100644 --- a/Ubuntu.md +++ b/Ubuntu.md @@ -2011,388 +2011,6 @@ restart: always: Гарантирует, что контейнер будет а Открываем: https://127.0.0.1:9443 После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM] -**************************************************************************************************** -Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26 - sudo apt-get update - sudo apt-get install bind9 dnsutils - sudo apt-get install bind9utils -Добавляем сервис в автозапуск - systemctl enable bind9 -Проверяем что сервис работает - nslookup dmosk.ru 127.0.0.1 -Открываем настройки: - mcedit /etc/bind/named.conf.options -Для глобальных запросов добавляем строку: allow-query { any; }; -Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных - //forwarders { - // 8.8.8.8; - // 8.8.4.4; - //}; -Проверяем настройки командой (ответ должен быть пустым): - sudo named-checkconf -Перезагружаем: - sudo systemctl restart bind9 -Проверяю версию BIND: - named -v -Выдало: BIND 9.16.1-Ubuntu (Stable Release) -Можно проверить какой IP выдаст на DNS запрос - dig locust.kz A - -На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns. - - - - -Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками - -Перейдем в него. - cd /etc/bind/ -Генерируем пару ключь для обмена информацией между клиентом и сервером: - sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key - sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key -Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ. - include "/etc/bind/dirt.kz.key"; - include "/etc/bind/locust.kz.key"; -Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем. -zone "dirt.kz" { - type master; - allow-update {key dirt.kz;}; - file "/var/cache/bind/dirt.kz"; -}; - -zone "locust.kz" { - type master; - allow-update {key locust.kz;}; - file "/var/cache/bind/locust.kz"; -}; - - -В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где: -В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где: - -Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте -Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/ -SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA -NS — Сервер имён -A — рекорд -MX — Почта для обмена -CN — Каноническое имя -PTR — указатель -И таким содержимым: - -$ORIGIN dirt.kz -$TTL 604800 -@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. ( - 8 ; Serial - 604800 ; Refresh - 86400 ; Retry - 2419200 ; Expire - 604800 ) ; Negative Cache TTL -; -@ IN NS bigfoottrade.kz. - -Второй файл для locust.kz: - -$ORIGIN . -$TTL 604800 ; 1 week -locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. ( - 134 ; serial - 604800 ; refresh (1 week) - 86400 ; retry (1 day) - 1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds) - 604800 ; minimum (1 week) - ) - NS bigfoottrade.kz. -$TTL 3600 ; 1 hour - A 5.76.254.182 -$ORIGIN locust.kz. -* A 127.0.0.1 - - -Правлю права доступа: - sudo chown -R bind:bind /etc/bind - -Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой: - sudo rndc reconfig -Потом следует вызвать: - sudo systemctl restart bind9 -Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду -После настроек сервера перезагружаем его: - sudo named-checkconf - sudo rndc reload - sudo systemctl restart bind9 - sudo rndc status - journalctl | grep bind - sudo journalctl -u bind9 -n 50 - - -Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу: - -Файл из примера: - #!/bin/bash - TTL=3600 - SERVER=ns.dyndns.my - HOSTNAME=dhost.dyndns.my - ZONE=dyndns.my - KEYFILE=Kdyndns.my.+157+48025.private - new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! - cd /etc/ddns - nsupdate -v -k $KEYFILE << EOF - server $SERVER - zone $ZONE - update delete $HOSTNAME A - update add $HOSTNAME $TTL A $new_ip_address - send - EOF - -Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже: - #!/bin/bash - TTL=3600 - SERVER=127.0.0.1 - HOSTNAME=*.dirt.kz - ZONE=dirt.kz - KEYFILE=/etc/bind/dirt.kz.key - - new_ip_address= - FILE=/etc/ddns/ip.txt - if test -f "$FILE"; then - new_ip_address=`cat $FILE` - rm $FILE - fi - - len=${#new_ip_address} - if [ $len -gt 3 ] - then - echo "New IP address = $new_ip_address" - else - echo "Not find IP address" - exit - fi - - cd /etc/ddns - sudo nsupdate -v -k $KEYFILE << EOF - server $SERVER - zone $ZONE - update delete $HOSTNAME A - update add $HOSTNAME $TTL A $new_ip_address - update delete dirt.kz A - update add dirt.kz $TTL A $new_ip_address - send - EOF - echo "OK" - -Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента: -'; print_r(getallheaders()); echo ''; - -// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x" -foreach ( getallheaders() as $k => $v) { - if ( strtolower($k) == 'x-forwarded-for' ) { - $tmp = explode(', ', $v); - if ( $tmp[count($tmp)-1] != '' ) - $_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1]; - } -} - -if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){ - $myfile = fopen("/etc/ddns/ip.txt", "w"); - fwrite($myfile, $_SERVER['REMOTE_ADDR']); - fclose($myfile); -} - -echo $_SERVER['REMOTE_ADDR']; - -?> - -Проверяем что находит IP по доменному имени - nslookup dirt.kz 127.0.0.1 - - -**************************************************************************************************** -Установка сервиса обмена сообщениями RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/ - sudo apt-get update - sudo apt-get dist-upgrade - sudo apt install rabbitmq-server -Посмотреть список используемых плагинов: - sudo rabbitmq-plugins list -Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную. - sudo rabbitmq-plugins enable rabbitmq_management - -rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672 -Но для активации нужно добавить пользователя, смотрим пользователей: - sudo rabbitmqctl list_users - sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера - sudo rabbitmqctl set_user_tags admin administrator - sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" -Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43 - -Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed. -Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password - producer: клиент, выполняющий отправку сообщения - queue: собственно очередь сообщений - consumer: клиент, получающий сообщения из очереди - exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html) - -Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y - https://www.rabbitmq.com/devtools.html : -Создаю Maven проект в консоли: - cd O:\projects\Workspace_Java\ - mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false -Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client: - - - com.rabbitmq - amqp-client - 5.14.2 - -Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA. - - Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/ - или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/ -Добавил в POM файл: - - - RabbitMQ - https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0 - com.rabbitmq - - false - - - true - - - - - - - com.rabbitmq - amqp-client - 5.16.0 - - - - - -Перезагружаем: - sudo service rabbitmq-server restart - -**************************************************************************************************** -Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel - -Активирую плагин командой: - sudo rabbitmq-plugins enable rabbitmq_shovel - sudo rabbitmq-plugins enable rabbitmq_shovel_management - -Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку: - -sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation", - "src-queue": "TO_KAZ", - "dest-protocol": "amqp091", - "dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground", - "dest-exchange": "swap", - "dest-exchange-key": ".KAZ.", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Росии такие настройки: - -sudo rabbitmqctl set_parameter shovel kaz_to_rus '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus", - "src-queue": "TO_RUS", - "dest-protocol": "amqp091", - "dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground", - "dest-exchange": "swap", - "dest-exchange-key": "KZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Беларусии такие настройки: - -sudo rabbitmqctl set_parameter shovel kaz_to_blr '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr", - "src-queue": "TO_BLR", - "dest-protocol": "amqp091", - "dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber", - "dest-exchange": "eec.swap", - "dest-exchange-key": "KZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Армении такие настройки: - -sudo rabbitmqctl set_parameter shovel kaz_to_arm '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm", - "src-queue": "TO_ARM", - "dest-protocol": "amqp091", - "dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation", - "dest-exchange": "swap_kz", - "dest-exchange-key": "KZ_ISTT", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Кыргызстана (таможенная инфраструктура) - -sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz", - "src-queue": "TO_KGZ", - "dest-protocol": "amqp091", - "dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz", - "dest-exchange": "swap", - "dest-exchange-key": "KAZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Удалять так: - sudo rabbitmqctl clear_parameter shovel kaz_to_kgz - -Для отправки из Киргизии нам то такие настройки: - -sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz", - "src-queue": "TO_KAZ", - "dest-protocol": "amqp091", - "dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz", - "dest-exchange": "swap", - "dest-exchange-key": "KGZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Удалять так: - sudo rabbitmqctl clear_parameter shovel kgz_to_kaz - - -Чтобы проверить текущие параметры Shovel: - sudo rabbitmqctl list_parameters -А также можно взглянуть что создалось через WEB интерфейс - -Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает. **************************************************************************************************** Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/