This commit is contained in:
2025-03-17 07:48:47 +05:00
parent a2cf9d2860
commit 04b8e941d1
7 changed files with 1317 additions and 457 deletions

View File

@ -16,7 +16,7 @@ ssh igor@192.168.200.84 -p 22
sudo mkdir -p /opt/dashy && sudo mkdir -p /opt/dashy &&
sudo mkdir -p /opt/dashy/data && sudo mkdir -p /opt/dashy/data &&
sudo chmod -R 777 /opt/dashy && sudo chmod -R 777 /opt/dashy &&
sudo chown -R $USER:$USER /opt/dashy && sudo chown -R $USER:$USER /opt/dashy
``` ```
Создаём файл конфигурации Создаём файл конфигурации
@ -57,6 +57,11 @@ sections: # An array of sections
- title: Prometheus - title: Prometheus
icon: https://static-00.iconduck.com/assets.00/prometheus-icon-511x512-1vmxbcxr.png icon: https://static-00.iconduck.com/assets.00/prometheus-icon-511x512-1vmxbcxr.png
url: http://192.168.200.84:9090 url: http://192.168.200.84:9090
- name: PowerDNS
items:
- title: PowerDNS-Admin
icon: https://avatars.githubusercontent.com/u/1282630?s=200&v=4
url: http://192.168.200.85:9191
EOF EOF
``` ```

View File

@ -31,7 +31,24 @@ sudo apt update
``` ```
```sh ```sh
sudo apt install jenkins sudo apt install jenkins -y
```
If the software was installed incorrectly, you can reinstall it after uninstalling it first.:
```sh
sudo apt remove --purge jenkins
```
```sh
jenkins --version
```
Try run jenkins without service
```sh
sudo -u jenkins /usr/bin/jenkins --httpPort=8081 --httpListenAddress=0.0.0.0
```
```sh
sudo mcedit /lib/systemd/system/jenkins.service
``` ```
```sh ```sh
@ -41,7 +58,26 @@ sudo systemctl status jenkins
``` ```
```sh ```sh
start http://127.0.0.1:8080 sudo journalctl -xeu jenkins.service | tail -n 50
```
Если порт занят, проверяем кем:
```sh
sudo lsof -i :8081
```
Переопределяем порт:
```sh
sudo mcedit /etc/default/jenkins
```
```conf
HTTP_PORT=8081
```
```sh
sudo systemctl restart jenkins
```
```sh
start http://127.0.0.1:8081
``` ```

299
PostgreSQL_install.md Normal file
View File

@ -0,0 +1,299 @@
# 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: 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 адресов в "sudo mcedit /etc/postgresql/16/main/pg_hba.conf" прописать:
host all all 0.0.0.0/0 md5
Либо с одного конкретного то: host all all 92.46.48.37/24 md5
А также поменять на listen_addresses = '*' в postgresql.conf
Потом перезагрузить postgres:
sudo service postgresql restart
sudo /etc/init.d/postgresql stop
sudo /etc/init.d/postgresql restart
sudo /etc/init.d/postgresql start
Проверить запущен или нет то:
sudo /etc/init.d/postgresql status
Посмотрель лог загрузки PostGreSQL:
dmesg |grep pg
Чтобы посмотреть чем занят порт выполнить команду:
sudo netstat -tap | grep 5432
Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain):
pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root
pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres
pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres
pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom
pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres
pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump CCALM>CCALM.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql
pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz
Востановить Dump из текстового файла:
psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup
psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql
psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql
psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql
psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql
Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл:
/mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh
#!/bin/sh
pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz
Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться):
su - postgres
pg_restore -U <username> -d <dbname> -1 <filename>.dump
pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup
pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup
pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
sudo -u postgres psql -d transit -f /tmp/transit.backup
Или из архива (первоначально задать trust на 127.0.0.1) так:
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
****************************************************************************************************
Настройка отображения статистики для PostgreSQL:
https://habr.com/ru/articles/488968/
SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC;
SELECT * FROM pg_stat_activity
SELECT * FROM pg_stat_replication
SELECT * FROM pg_stat_all_tables
Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats
Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL
По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/
По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU
****************************************************************************************************
Установка pgagent
sudo apt-get update
sudo apt-get install pgagent
Выполнить в консоли запрос:
psql -h localhost -U postgres
create extension pgagent;
\q
Для разрешения подключения откройте файл pg_hba.conf и замените строку на:
host all all 127.0.0.1/32 md5
Можно для теста запустить pgagent с повышенным уровнем логирования:
/usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk
Если файла нет то пытаюсь его создать:
sudo mcedit /lib/systemd/system/pgagent.service
[Unit]
Description=PostgreSQL PgAgent Service
After=network.target
[Service]
Type=simple
User=postgres
ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1
[Install]
WantedBy=multi-user.target
Проверяю что сервис был запущен:
sudo systemctl daemon-reload
sudo systemctl enable pgagent
sudo service pgagent start
sudo systemctl status pgagent
Для проверки пробуем подключиться к базе данных
sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres
\q
Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться:
sudo -u postgres touch /var/lib/postgresql/.pgpass
sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass
sudo -u postgres mcedit /var/lib/postgresql/.pgpass
И прописать в него:
127.0.0.1:5432:postgres:postgres:PasSecrKey1
Где используется такой формат: hostname:port:database:username:password
Затем:
sudo systemctl enable pgagent
sudo service pgagent start
sudo service pgagent status
Посмотреть логи:
sudo journalctl -u pgagent
****************************************************************************************************
Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт:
****************************************************************************************************
Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move
****************************************************************************************************
Установка PostGIS на PostgreSQL выше 9.0 версии:
sudo apt-get install postgis postgresql-9.3-postgis-2.1
Для 10й версии:
sudo apt install postgresql-10-postgis-2.4
sudo apt install postgresql-10-postgis-scripts
Для 12й версии:
sudo apt install postgresql-12-postgis-2.4
Создать базу данных и выполнть на ней следующие команды:
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- rule based standardizer
CREATE EXTENSION address_standardizer;
-- example rule data set
CREATE EXTENSION address_standardizer_data_us;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17
Аказывается расширение кудато делось установил:
sudo apt-get install postgresql-9.5-postgis-2.2
****************************************************************************************************
Для добавления TOTP авторизации в Postgresql выполнить:
CREATE EXTENSION otp;
****************************************************************************************************
sudo apt-get install libpq-dev libpq-fe
Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен
То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev
apt update
****************************************************************************************************
Установка phpPgAdmin через репозиторий:
sudo apt-get install phppgadmin
Можно открыть так: http://localhost/phppgadmin
Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all
Чтоб можно было залогинется под пользователем postgres меняем в:
/etc/phppgadmin/config.inc.php extra_login_security в false
Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost';
Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php".
****************************************************************************************************
Установка pgAdmin4 в Linux Mint 20.04 (inxi -S) Проверить версию линукса: cat /etc/os-release у меня выдало: NAME="Linux Mint" VERSION="20.3 (Una)"
Проверить что не записан левый репозиторий для 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

285
PowerDNS_doker_install.md Normal file
View File

@ -0,0 +1,285 @@
Устанавливаем PowerDNS через Docker Compose в директорию /opt/powerdnsa
Эту версию пробовал: https://hub.docker.com/r/powerdns/pdns-auth-48
PowerDNS Authoritative
```sh
ssh-keygen -R 192.168.200.85
```
```sh
ssh igor@192.168.200.85 -p 22
```
```sh
sudo apt update &&
sudo apt install docker.io docker-compose -y
```
```sh
sudo mkdir -p /opt/powerdnsa &&
cd /opt/powerdnsa &&
sudo mkdir -p data &&
cd /opt/powerdnsa/data
```
Инициализируем базу данных так как сам контейнер её не создаёт
```sh
sudo apt install sqlite3 -y
```
Create database:
```sh
sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 ".databases"
```
Create database structure
```sql
sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 <<EOF
PRAGMA foreign_keys = 1;
CREATE TABLE domains (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL COLLATE NOCASE,
master VARCHAR(128) DEFAULT NULL,
last_check INTEGER DEFAULT NULL,
type VARCHAR(8) NOT NULL,
notified_serial INTEGER DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
options VARCHAR(65535) DEFAULT NULL,
catalog VARCHAR(255) DEFAULT NULL
);
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);
CREATE TABLE records (
id INTEGER PRIMARY KEY,
domain_id INTEGER DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(65535) DEFAULT NULL,
ttl INTEGER DEFAULT NULL,
prio INTEGER DEFAULT NULL,
disabled BOOLEAN DEFAULT 0,
ordername VARCHAR(255),
auth BOOL DEFAULT 1,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX records_lookup_idx ON records(name, type);
CREATE INDEX records_lookup_id_idx ON records(domain_id, name, type);
CREATE INDEX records_order_idx ON records(domain_id, ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL COLLATE NOCASE,
account VARCHAR(40) NOT NULL
);
CREATE UNIQUE INDEX ip_nameserver_pk ON supermasters(ip, nameserver);
CREATE TABLE comments (
id INTEGER PRIMARY KEY,
domain_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) DEFAULT NULL,
comment VARCHAR(65535) NOT NULL,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX comments_idx ON comments(domain_id, name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
kind VARCHAR(32) COLLATE NOCASE,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainmetaidindex ON domainmetadata(domain_id);
CREATE TABLE cryptokeys (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
published BOOL DEFAULT 1,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INTEGER PRIMARY KEY,
name VARCHAR(255) COLLATE NOCASE,
algorithm VARCHAR(50) COLLATE NOCASE,
secret VARCHAR(255)
);
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
EOF
```
Даём права на директорию где будет работать SQLIte (создавать временные файлы):
```sh
sudo chown -R 1001:1001 /opt/powerdnsa/data &&
sudo chmod -R 775 /opt/powerdnsa/data &&
sudo chmod -R 777 /opt/powerdnsa/data
```
Создаём конфигурационный файл так как запарился через environment задавать параметры:
```sh
cd /opt/powerdnsa
sudo tee docker-compose.yml > /dev/null <<EOF
services:
powerdns:
image: powerdns/pdns-auth-48
container_name: powerdns
restart: unless-stopped
ports:
- "5300:53/udp"
- "5300:53/tcp"
- "8081:8081/tcp"
volumes:
- ./data:/var/lib/powerdns
environment:
- PDNS_LOCAL_ADDRESS=0.0.0.0
- PDNS_GSQLITE3_DATABASE=/var/lib/powerdns/pdns.sqlite3
- PDNS_LAUNCH=gsqlite3
- PDNS_API=yes
- PDNS_API_KEY=0aa08433-52a9-4611-9eed-5c5a08a508fc
- PDNS_MASTER=yes
- PDNS_ALLOW_AXFR_IPS=127.0.0.1
- PDNS_WEBSERVER=yes
- PDNS_WEBSERVER_ADDRESS=0.0.0.0
- PDNS_WEBSERVER_PORT=8081
EOF
```
если остались старые образы то удаляем их:
```sh
sudo docker ps
```
```sh
sudo docker stop 913bf9fec5eb &&
sudo docker rm 913bf9fec5eb &&
sudo docker rmi powerdns/pdns-auth-48
```
```sh
cd /opt/powerdnsa &&
sudo docker-compose up -d
```
```sh
cd /opt/powerdnsa &&
sudo docker-compose down
```
Проверяем переменные окружения не заходя в контейнер
```sh
sudo docker inspect powerdns | grep -A 20 "Env"
```
```sh
sudo docker-compose exec powerdns env | grep PDNS_
```
Проверяем открыты ли порты (не должен полностью отработать так как это не рекурсивный сервис)
```sh
sudo apt update && sudo apt install net-tools -y &&
```
```sh
sudo netstat -tulnp | grep 5300
```
```sh
sudo netstat -tulnp | grep 8081
```
Создаём зону и добавляем запись
```sh
sudo docker exec -it powerdns pdnsutil create-zone test ns1.test &&
sudo docker exec -it powerdns pdnsutil add-record test ccalm A 192.168.200.184
```
Проверим список зон
```sh
sudo docker exec -it powerdns pdnsutil list-all-zones &&
sudo docker exec -it powerdns pdnsutil list-zone test
```
Проверяем отвечалет ли:
```sh
dig @127.0.0.1 -p 5300 ccalm.test A
```
проверяем что порт открыт:
```sh
telnet 127.0.0.1 8081
```
```sh
wget -qO- http://127.0.0.1:8081
```
```sh
sudo docker exec -it powerdns sh
```
Посмотреть логи контейнера:
```sh
sudo docker logs --tail=100 -f 913bf9fec5eb
```
wget -qO- http://127.0.0.1:8081/api/v1/servers/localhost --header="X-API-Key: 0aa08433-52a9-4611-9eed-5c5a08a508fc"
----------------------------------------------------------------------------------------------------
Пытаюсь зазобраться почему не работает Web сервер
Захожу в докер под рутом
```sh
sudo docker exec -it --user root powerdns /bin/sh
```
```sh
apt update && apt install -y mc
```
Проверяем какие порты слушает
```sh
apt update && apt install -y net-tools
```
```sh
netstat -tulnp
```
Смотрим все переменые окружения:
```sh
env
```
Перезапускаю в докере
```sh
/usr/sbin/pdns_server --daemon=no --guardian=no --loglevel=9
```

649
PowerDNS_install.md Normal file
View File

@ -0,0 +1,649 @@
Документация по PowerDNS: https://doc.powerdns.com/authoritative/installation.html
****************************************************************************************************
## 2. Подключаемся к нужному серверу
```sh
ssh igor@192.168.200.85 -p 22
```
****************************************************************************************************
DynDNS на PowerDNS авторитативный сервер тот кто отвечает на те домены которые в его базе (рекурсивный присылает авторитативному запросы)
DNS на Ubuntu 24.04 согласно инстркции https://phoenixnap.com/kb/powerdns-ubuntu:
Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт)
Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html
```sh
sudo apt-get update &&
sudo apt-get upgrade -y
```
```sh
sudo apt-get install pdns-server -y &&
sudo apt-get install pdns-backend-pgsql -y &&
sudo apt-get install pdns-backend-sqlite
```
----------------------------------------------------------------------------------------------------
Для использования SQLIte копируем схему из https://doc.powerdns.com/authoritative/backends/generic-sqlite3.html
```sh
sudo apt-get install pdns-backend-sqlite3 -y
```
```sh
sudo apt install sqlite3 -y
```
Create database:
```sh
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 ".databases" &&
sudo chown pdns:pdns /var/lib/powerdns/pdns.sqlite3
```
Create database structure
```sql
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 <<EOF
PRAGMA foreign_keys = 1;
CREATE TABLE domains (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL COLLATE NOCASE,
master VARCHAR(128) DEFAULT NULL,
last_check INTEGER DEFAULT NULL,
type VARCHAR(8) NOT NULL,
notified_serial INTEGER DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
options VARCHAR(65535) DEFAULT NULL,
catalog VARCHAR(255) DEFAULT NULL
);
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);
CREATE TABLE records (
id INTEGER PRIMARY KEY,
domain_id INTEGER DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(65535) DEFAULT NULL,
ttl INTEGER DEFAULT NULL,
prio INTEGER DEFAULT NULL,
disabled BOOLEAN DEFAULT 0,
ordername VARCHAR(255),
auth BOOL DEFAULT 1,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX records_lookup_idx ON records(name, type);
CREATE INDEX records_lookup_id_idx ON records(domain_id, name, type);
CREATE INDEX records_order_idx ON records(domain_id, ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL COLLATE NOCASE,
account VARCHAR(40) NOT NULL
);
CREATE UNIQUE INDEX ip_nameserver_pk ON supermasters(ip, nameserver);
CREATE TABLE comments (
id INTEGER PRIMARY KEY,
domain_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) DEFAULT NULL,
comment VARCHAR(65535) NOT NULL,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX comments_idx ON comments(domain_id, name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
kind VARCHAR(32) COLLATE NOCASE,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainmetaidindex ON domainmetadata(domain_id);
CREATE TABLE cryptokeys (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
published BOOL DEFAULT 1,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INTEGER PRIMARY KEY,
name VARCHAR(255) COLLATE NOCASE,
algorithm VARCHAR(50) COLLATE NOCASE,
secret VARCHAR(255)
);
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
EOF
```
Configure database connection from PowerDNS to SQLIte
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.sqlite.conf <<EOF
launch=gsqlite3
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3
EOF
```
Set access level to file
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.sqlite.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.sqlite.conf
```
In PowerDNS configured to auto read config from dir /etc/powerdns/pdns.d/
----------------------------------------------------------------------------------------------------
Подключаюсь к базе и создаю схему базу со схемой из: https://doc.powerdns.com/authoritative/backends/generic-postgresql.html
Настраиваю соединение с базой данных в:
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.gpgsql.conf <<EOF
launch+=gpgsql
# gmysql parameters
gpgsql-host=127.0.0.1
gpgsql-port=5432
gpgsql-dbname=powerdns
gpgsql-user=powerdns
gpgsql-password=y7HMHi0ATxx1VC3UU5WG
gpgsql-dnssec=no
EOF
```
Set access level to file:
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.gpgsql.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gpgsql.conf
```
----------------------------------------------------------------------------------------------------
На всякий случай делаю резервные копии исходных файлов настрое:
```sh
cd /etc/powerdns &&
sudo cp named.conf named.conf.bak &&
sudo cp pdns.conf pdns.conf.bak
```
Наспройку файла pdns.conf авторитетный сервер, есть такой пример который следует изучить: https://raw.githubusercontent.com/trinv/PowerDNS/a56b9122f4a2de9c1f789009f09b9831f74d8bf1/pdns.template.master.conf (естественно без 1й табуляции):
```sh
sudo mcedit /etc/powerdns/pdns.conf
```
Write new settings rr
```sh
cd /etc/powerdns/ &&
sudo tee pdns.conf > /dev/null <<EOF
allow-axfr-ips=127.0.0.1 #slave server ip
also-notify=127.0.0.1 #slave server ip
include-dir=/etc/powerdns/pdns.d
launch=
local-address=192.168.200.85,127.0.0.1
local-port=5300
log-dns-details=on
log-dns-queries=yes
log-timestamp=yes
loglevel=4
webserver=yes
webserver-address=192.168.200.85
webserver-allow-from=::/0, 0.0.0.0/0
webserver-port=8081
master=yes
slave=no
# Также активирую API
api=yes
api-key=40c89f2a-e2f3-4ff8-a245-3547111f6677
EOF
```
Проверяю соединение к базе перезапустив PowerDNS:
```sh
sudo systemctl stop pdns &&
sudo pdns_server --daemon=no --guardian=no --loglevel=9
```
Пытаемся открыть WEB интерфейс
```sh
start http://192.168.200.85:8081
```
Если всё норм выполняем:
```sh
sudo systemctl restart pdns &&
sudo systemctl enable pdns &&
sudo systemctl status pdns
```
Проверяем что порт 5300 открыт для DNS:
```sh
sudo ss -alnp4 | grep pdns
```
Если что-то не получается то проверяем кто слушает на порту 53
```sh
sudo apt-get install net-tools -y &&
sudo netstat -tulnp | grep :5300
```
Создаём зону и добавляем запись
```sh
sudo pdnsutil create-zone test ns1.test &&
sudo pdnsutil add-record test ccalm A 192.168.200.184
```
Проверим список зон
```sh
sudo pdnsutil list-all-zones &&
sudo pdnsutil list-zone test
```
Проверяем отвечалет ли:
```sh
dig @127.0.0.1 -p 5300 ccalm.test A
```
## ********** Настройка рекурсивного DNS от PowerDNS Recursor 4.9.3 порту 53 будет обрабатывать запросы с локальной машины **********
Документация: https://doc.powerdns.com/recursor/index.html
Документация: https://docs.powerdns.com/recursor/indexTOC.html
Чтобы работал резольвер от PowerDNS а не тот который от ubuntu на 53 порту нужно:
```sh
sudo apt-get install pdns-recursor -y
```
Скачиваем список корневых серверов DNS (желательно обновлять раз в несколько месяцев)
```sh
sudo wget -O /usr/share/dns/root.hints https://www.internic.net/domain/named.cache &&
sudo chown pdns:pdns /usr/share/dns/root.hints
```
```sh
sudo mkdir -p /var/run/pdns-recursor &&
sudo chown pdns:pdns /var/run/pdns-recursor &&
sudo chmod 755 /var/run/pdns-recursor
```
```sh
sudo mcedit /etc/powerdns/recursor.conf
```
Чтобы все запросы с . уходили на публичные DNS Google:
```conf
#dnssec=off #чтобы не проверял то что записано в forward-zones через корневые серверы
local-address=192.168.200.85,127.0.0.1
#forward-zones=local=127.0.0.1:5300 # Отправлять .local в авторитативный
#forward-zones+=.=8.8.8.8;8.8.4.4 # Все остальное в интернет
forward-zones=test=127.0.0.1:5300
#forward-zones-recurse=+test=127.0.0.1:5300
```
Либо если оставить настройку "nssec=process" то нужно прописать в /etc/powerdns/recursor.lua добавить комкнду addNTA, если не добавить то forward-zones не будет отрабатывать. Также можно сделать чтобы dirt.kz не выходил с наружи и с резу перенаправлялся на нужный IP с временем жизни минута 30 секунд.
```lua
addNTA("test", "Local test zone")
```
Пробуем запустить без сервиса чтобы посмотреть что выведит в лог
```sh
sudo pdns_recursor --daemon=no --loglevel=9
```
Чтобы запросы переходили на pdns-recursor
Затем перезагружаем:
```sh
sudo systemctl restart pdns-recursor &&
sudo systemctl status pdns-recursor
```
Проверяем что порт 53 открыт для DNS:
```sh
sudo ss -alnp4 | grep pdns
```
Если что-то не получается то проверяем кто слушает на порту 53
```sh
sudo apt-get install net-tools -y &&
sudo netstat -tulnp | grep :53
```
Проверяем что преобразование DNS нормально работает:
```sh
dig @192.168.200.85 google.com
```
если уже настроил PowerDNS сервер то можно попробовать отправить:
```sh
sudo rec_control wipe-cache test &&
sudo rec_control wipe-cache ccalm.test &&
dig @192.168.200.85 -p 53 ccalm.test
```
```sh
dig @127.0.0.1 -p 53 ccalm.test A
```
```sh
dig +trace @192.168.200.85 -p 53 ccalm.test
```
Проверяем логи
```sh
sudo journalctl -u pdns-recursor --since "10 min ago"
```
Или так чтобы найти ошибки:
```sh
sudo journalctl -u pdns-recursor --no-pager | grep -i failed
```
```sh
journalctl -u pdns-recursor --no-pager | tail -n 50
```
----------------------------------------------------------------------------------------------------
## ********** По идее отключать не нужно так как systemd-resolved использует другой IP: 127.0.0.54:53 (Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS) **********
Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved)
```sh
sudo mcedit /etc/netplan/50-cloud-init.yaml
```
И прописываю в него:
```conf
nameserver 127.0.0.1
```
After configuration modification update settings:
```sh
sudo netplan apply
```
Смотрим что сгенерировалось автоматически в resolv.conf после модификации файла
```sh
cat /etc/resolv.conf
```
Проверяем что интернет не перестал работать:
```sh
ping changelogs.ubuntu.com
```
Может быть что команда выше пытается по IP6 работать тогда попробовать по
```sh
ping -4 changelogs.ubuntu.com
```
Либо так:
```sh
ping6 changelogs.ubuntu.com
```
Взглянем на текущие DNS сервера, у меня такое выдало: DNS Servers: 195.210.46.195 195.210.46.132 на команду ниже:
```sh
resolvectl status
```
Отредактировал файл /etc/systemd/resolved.conf заменив nameservers на 8.8.8.8 и 8.8.4.4
```sh
sudo mcedit /etc/systemd/resolved.conf
```
Проверяем структуру файла:
```sh
sudo yamllint /etc/netplan/50-cloud-init.yaml
```
Применяем настройки:
```sh
sudo netplan apply
```
Проверяем что настройки изменились:
```sh
resolvectl status
```
Изменил /etc/systemd/resolved.conf настроив так:
```conf
[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1 1.0.0.1
```
Потом перезагрузил:
```sh
sudo systemctl restart systemd-resolved
```
Проверяем что заняло порт 53 командой:
```sh
sudo lsof -i :53
```
Выдало:
```text
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 670 systemd-resolve 13u IPv4 20070 0t0 UDP localhost:domain
systemd-r 670 systemd-resolve 14u IPv4 20071 0t0 TCP localhost:domain (LISTEN)
```
Останавливаем systemd-resolved (поисковик IP по домену по умолчанию от Ubuntu)
```sh
sudo systemctl stop systemd-resolved &&
sudo systemctl disable systemd-resolved
```
----------------------------------------------------------------------------------------------------
## ********** Устанавливаю PowerAdmin (желательно в докере устанавливать) **********
Устанавливаю PowerAdmin согласно: https://phoenixnap.com/kb/powerdns-ubuntu#ftoc-heading-6
```sh
sudo apt install libpq-dev -y &&
sudo apt install python3-dev -y &&
sudo apt install python3-flask -y &&
sudo apt install python3-pip -y
```
```sh
sudo apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl &&
sudo apt install -y nodejs &&
sudo apt install -y yarn
```
устанавливаем другие зависимости:
```sh
sudo apt install npm -y &&
sudo apt remove yarn -y &&
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - &&
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list &&
sudo apt update &&
sudo apt install yarn -y &&
yarn --version &&
sudo yarn install --pure-lockfile
```
Create user for run PowerDNS Admin
```sh
sudo useradd -m -s /bin/bash powerdns-admin
```
Clone the PowerDNS Admin Git repository to /opt/web/powerdns-admin
```sh
cd ~
sudo git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /opt/web/powerdns-admin &&
sudo chown -R powerdns-admin:powerdns-admin /opt/web/powerdns-admin &&
cd /opt/web/powerdns-admin
```
Настраиваем переменные окружения:
```sh
sudo -u powerdns-admin -s &&
cd /opt/web/powerdns-admin
```
Устанавливаем перенеммые окружения и необходимые скрипты
```sh
python3 -mvenv ./venv &&
source ./venv/bin/activate &&
pip install --upgrade pip &&
pip install -r requirements.txt
```
Создаю базу данных
```sh
mkdir /opt/web/powerdns-admin/data &&
sqlite3 /opt/web/powerdns-admin/data/pdnsa.sqlite3 ".databases"
```
Cекретный ключ можно сгенерировать при помощи такой команды:
```sh
python3 -c "import secrets; print(secrets.token_hex(16))"
```
Такой сгенерил для 192.168.200.85: 1c100fb414b8116725a04015fbaf907e
Конфигугрируем PowerDNS Admin.
Для начала копирую пример конфигураци, потом открываю его в редакторе:
```sh
cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py
```
```sh
mcedit /opt/web/powerdns-admin/configs/production.py
```
И редактируем следующие строки:
```conf
#import urllib.parse
SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd0'
SQLA_DB_PASSWORD = 'changeme'
```
Также настраиваю подключение к базе данных (сам строку составил):
```conf
SQLALCHEMY_DATABASE_URI = 'postgresql://powerdns:y7HMHi0ATxx1VC3UU5WG@127.0.0.1/powerdnsadmin'
```
Либо к новой базе данных:
```conf
SQLALCHEMY_DATABASE_URI = 'sqlite:////opt/web/powerdns-admin/data/pdnsa.sqlite3'
```
Остальное коментирую:
```conf
#SQLA_DB_USER = 'powerdns'
#SQLA_DB_PASSWORD = 'y7HMHi0ATxx1VC3UU5WG'
#SQLA_DB_HOST = '127.0.0.1'
#SQLA_DB_NAME = 'powerdnsadmin'
#SQLALCHEMY_DATABASE_URI = 'postgres://{}:{}@{}/{}'.format(
# urllib.parse.quote_plus(SQLA_DB_USER),
# urllib.parse.quote_plus(SQLA_DB_PASSWORD),
# SQLA_DB_HOST,
# SQLA_DB_NAME
#)
#SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db')
```
Экспортируем переменную:
```sh
cd /opt/web/powerdns-admin &&
export FLASK_CONF=../configs/production.py &&
export FLASK_APP=powerdnsadmin/__init__.py
```
```sh
pip install --upgrade pip setuptools wheel &&
pip install setuptools &&
pip install flask-mail
```
Upgrade the database schema:
```sh
export PYTHONWARNINGS="ignore" &&
flask db upgrade
```
Если выдаёт ошибки то правим исзодный код:
```sh
mcedit /opt/web/powerdns-admin/powerdnsadmin/lib/utils.py
```
И заменяем экранирование
```python
# строку
from distutils.version import StrictVersion
# На строки
from packaging.version import Version as StrictVersion
from setuptools._distutils.util import strtobool
```
```sh
deactivate
```
```sh
sudo su - powerdns-admin
```
```sh
cd /opt/web/powerdns-admin &&
flask assets build
```
Можно запускать (нужно задать переменные окружения которые выше):
```sh
cd /opt/web/powerdns-admin &&
source venv/bin/activate &&
./run.py
```
Проще запустить с использованием SQLite по инструкции из: https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/master/docs/wiki/install/Running-PowerDNS-Admin-on-Ubuntu-or-Debian.md
Теперь можно открыть
```sh
open http://192.168.200.85:9191/login
```
Для создания административного пользователя нажимаем "Create an account" пример https://orcacore.com/set-up-powerdns-ubuntu-22-04/
Создал с именем igor и ппаролем !Ii123456
!!! Проверь что PowerDNS API включён в /etc/powerdns/pdns.conf !!!
----------------------------------------------------------------------------------------------------
Настраиваем запус на постоянную работу через Gunicorn и systemd
```sh
cd /opt/web/powerdns-admin &&
source venv/bin/activate &&
pip install gunicorn
```
```sh
exit
```
Создаю файл службы:
```sh
sudo tee /etc/systemd/system/powerdns-admin.service > /dev/null <<EOF
[Unit]
Description=PowerDNS-Admin Service
After=network.target
[Service]
User=powerdns-admin
Group=powerdns-admin
WorkingDirectory=/opt/web/powerdns-admin
Environment="FLASK_CONF=../configs/production.py"
Environment="FLASK_APP=powerdnsadmin/__init__.py"
ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --workers 2 --bind 192.168.200.85:9191 "powerdnsadmin:create_app()"
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
```
```sh
sudo systemctl enable powerdns-admin.service &&
sudo systemctl start powerdns-admin.service
```
```sh
sudo systemctl status powerdns-admin.service
```
```sh
sudo journalctl -u powerdns-admin.service
```
```sh
start http://192.168.200.85:9191/login
```

452
Ubuntu.md
View File

@ -818,278 +818,6 @@ secret = secretpass
shortname = testclient shortname = testclient
nastype= testdevice nastype= testdevice
} }
****************************************************************************************************
Установка 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
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib -y
Или так если нужно установить PostGIS
sudo apt-get install postgis
Для удаления PostGIS в месте с зависимыми пакетами:
sudo apt-get remove --auto-remove postgis
sudo apt-get purge postgis
Добавить русскую локаль если её нет:
sudo locale-gen ru_RU
sudo locale-gen ru_RU.UTF-8
sudo locale-gen kk_KZ
sudo locale-gen kk_KZ.UTF-8
Проверить какая локаль по умолчанию:
localectl status
И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры):
sudo dpkg-reconfigure locales
Для задания пароля в PostgreSQL выполнить:
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: 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 адресов в "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 weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql
pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz
Востановить Dump из текстового файла:
psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup
psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql
psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql
psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql
psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql
Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл:
/mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh
#!/bin/sh
pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz
Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться):
su - postgres
pg_restore -U <username> -d <dbname> -1 <filename>.dump
pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup
pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup
pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
sudo -u postgres psql -d transit -f /tmp/transit.backup
Или из архива (первоначально задать trust на 127.0.0.1) так:
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
****************************************************************************************************
Настройка отображения статистики для PostgreSQL:
https://habr.com/ru/articles/488968/
SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC;
SELECT * FROM pg_stat_activity
SELECT * FROM pg_stat_replication
SELECT * FROM pg_stat_all_tables
Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats
Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL
По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/
По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU
****************************************************************************************************
Установка pgagent
sudo apt-get update
sudo apt-get install pgagent
Выполнить в консоли запрос:
psql -h localhost -U postgres
create extension pgagent;
\q
Для разрешения подключения откройте файл pg_hba.conf и замените строку на:
host all all 127.0.0.1/32 md5
Можно для теста запустить pgagent с повышенным уровнем логирования:
/usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk
Если файла нет то пытаюсь его создать:
sudo mcedit /lib/systemd/system/pgagent.service
[Unit]
Description=PostgreSQL PgAgent Service
After=network.target
[Service]
Type=simple
User=postgres
ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1
[Install]
WantedBy=multi-user.target
Проверяю что сервис был запущен:
sudo systemctl daemon-reload
sudo systemctl enable pgagent
sudo service pgagent start
sudo systemctl status pgagent
Для проверки пробуем подключиться к базе данных
sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres
\q
Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться:
sudo -u postgres touch /var/lib/postgresql/.pgpass
sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass
sudo -u postgres mcedit /var/lib/postgresql/.pgpass
И прописать в него:
127.0.0.1:5432:postgres:postgres:PasSecrKey1
Где используется такой формат: hostname:port:database:username:password
Затем:
sudo systemctl enable pgagent
sudo service pgagent start
sudo service pgagent status
Посмотреть логи:
sudo journalctl -u pgagent
****************************************************************************************************
Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт:
****************************************************************************************************
Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move
****************************************************************************************************
Установка PostGIS на PostgreSQL выше 9.0 версии:
sudo apt-get install postgis postgresql-9.3-postgis-2.1
Для 10й версии:
sudo apt install postgresql-10-postgis-2.4
sudo apt install postgresql-10-postgis-scripts
Для 12й версии:
sudo apt install postgresql-12-postgis-2.4
Создать базу данных и выполнть на ней следующие команды:
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- rule based standardizer
CREATE EXTENSION address_standardizer;
-- example rule data set
CREATE EXTENSION address_standardizer_data_us;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17
Аказывается расширение кудато делось установил:
sudo apt-get install postgresql-9.5-postgis-2.2
****************************************************************************************************
Для добавления TOTP авторизации в Postgresql выполнить:
CREATE EXTENSION otp;
****************************************************************************************************
sudo apt-get install libpq-dev libpq-fe
Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен
То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev
apt update
****************************************************************************************************
Установка phpPgAdmin через репозиторий:
sudo apt-get install phppgadmin
Можно открыть так: http://localhost/phppgadmin
Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all
Чтоб можно было залогинется под пользователем postgres меняем в:
/etc/phppgadmin/config.inc.php extra_login_security в false
Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost';
Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php".
****************************************************************************************************
Установка pgAdmin4 в Linux Mint 20.04 (inxi -S) Проверить версию линукса: cat /etc/os-release у меня выдало: NAME="Linux Mint" VERSION="20.3 (Una)"
Проверить что не записан левый репозиторий для 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
**************************************************************************************************** ****************************************************************************************************
Проверить версию OpenSSL: openssl version -v Проверить версию OpenSSL: openssl version -v
@ -2837,186 +2565,6 @@ echo $_SERVER['REMOTE_ADDR'];
Проверяем что находит IP по доменному имени Проверяем что находит IP по доменному имени
nslookup dirt.kz 127.0.0.1 nslookup dirt.kz 127.0.0.1
****************************************************************************************************
DynDNS на PowerDNS авторитативный сервер DNS на Ubuntu 22.04 согласно инстркции https://phoenixnap.com/kb/powerdns-ubuntu:
Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт)
Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html
sudo apt-get install pdns-server
sudo apt-get install pdns-backend-pgsql
Подключаюсь к базе и создаю схему базу со схемой из: https://doc.powerdns.com/authoritative/backends/generic-postgresql.html
Настраиваю соединение с базой данных в:
sudo mcedit /etc/powerdns/pdns.d/pdns.local.gpgsql.conf
Со следующим содержимым:
launch+=gpgsql
# gmysql parameters
gpgsql-host=127.0.0.1
gpgsql-port=5432
gpgsql-dbname=powerdns
gpgsql-user=powerdns
gpgsql-password=y7HMHi0ATxx1VC3UU5WG
gpgsql-dnssec=no
Задаю права доступа к файлу:
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.gpgsql.conf
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gpgsql.conf
На всякий случай делаю резервные копии исходных файлов настрое:
cd /etc/powerdns
sudo cp named.conf named.conf.bak
sudo cp pdns.conf pdns.conf.bak
Наспройку файла pdns.conf авторитетный сервер, есть такой пример который следует изучить: https://raw.githubusercontent.com/trinv/PowerDNS/a56b9122f4a2de9c1f789009f09b9831f74d8bf1/pdns.template.master.conf (естественно без 1й табуляции):
#allow-recursion=0.0.0.0/0 не включил так как не предполагаю использоват как рккурсивный DNS
webserver=yes
webserver-address=0.0.0.0 #Если 0.0.0.0 то слушаем все имеющиеся
webserver-allow-from=5.76.254.182 #если из любой сети то так: ::/0, 0.0.0.0/0 но я поставил только домашний
webserver-port=8090
Перезагружаем и пытаемся открыть
sudo systemctl stop pdns.service
http://77.240.38.137:8090
Проверяю соединение к базе перезапустив PowerDNS:
sudo systemctl stop pdns.service
sudo pdns_server --daemon=no --guardian=no --loglevel=9
Если всё норм выполняем:
sudo systemctl restart pdns
sudo systemctl enable pdns
sudo systemctl status pdns
Проверяем что порт 53 открыт для DNS:
sudo ss -alnp4 | grep pdns
Проверяем отправляя запрос к dns серверу
dig @127.0.0.1 google.com
ping google.com
проверяем кто слушает на порту 53
sudo netstat -tulnp | grep :53
Для примера авторитетный для домена example.com то в базе данных должны быть такие настройки:
********** рекурсивный DNS от PowerDNS, тоже 53 порт и будет конфликт, поэтому на одном IP можно настроить PowerDNS чтобы он выполнял функцию рекурсивного резольвера **********
Чтобы работал резольвер от PowerDNS а не тот который от ubuntu:
sudo apt-get install pdns-recursor -y
sudo mcedit /etc/powerdns/recursor.conf
И там прописать:
forward-zones=.=8.8.8.8;8.8.4.4
Также нужно настроить sudo mcedit /etc/resolv.conf и прописать туда (так как файл символическая ссылка то сервис systemd-resolved нужно остановить иначе он его перезапишет) это чтобы программы перенаправляли запросы поднятому резольверу:
nameserver 127.0.0.1
Чтобы запросы переходили на pdns-recursor
Затем перезагружаем:
sudo systemctl restart pdns-recursor
Проверяем что преобразование DNS нормально работает:
dig @127.0.0.1 google.com
********** Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS **********
Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved)
sudo netplan apply
Смотрим что сгенерировалось автоматически в resolv.conf после модификации файла
cat /etc/resolv.conf
Проверяем что интернет не перестал работать:
ping changelogs.ubuntu.com
Может быть что команда выше пытается по IP6 работать тогда попробовать по
ping -4 changelogs.ubuntu.com
Либо так:
ping6 changelogs.ubuntu.com
Взглянем на текущие DNS сервера, у меня такое выдало: DNS Servers: 195.210.46.195 195.210.46.132 на команду ниже:
resolvectl status
Отредактировал файл /etc/systemd/resolved.conf заменив nameservers на 8.8.8.8 и 8.8.4.4
Проверяем структуру файла командой: sudo yamllint /etc/netplan/50-cloud-init.yaml
Применяем настройки:
sudo netplan apply
Проверяем что настройки изменились:
resolvectl status
Изменил /etc/systemd/resolved.conf настроив так:
[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1 1.0.0.1
Потом перезагрузил:
sudo systemctl restart systemd-resolved
Проверяем что заняло порт 53 командой:
sudo lsof -i :53
Выдало:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 670 systemd-resolve 13u IPv4 20070 0t0 UDP localhost:domain
systemd-r 670 systemd-resolve 14u IPv4 20071 0t0 TCP localhost:domain (LISTEN)
Останавливаем systemd-resolved (поисковик IP по домену по умолчанию от Ubuntu)
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
********** PowerAdmin **********
Устанавливаю PowerAdmin согласно: https://phoenixnap.com/kb/powerdns-ubuntu#ftoc-heading-6
sudo apt install libpq-dev
sudo apt install python3-dev
sudo apt install python3-flask
sudo apt install python3-pip
pip install flask-mail && pip install Flask-Migrate && pip install flask-session && pip install python-ldap && pip install flask-login && pip install qrcode[pil] && pip install pytimeparse && pip install dnspython && pip install flask-seasurf && pip install flask-session-captcha && pip install zxcvbn && pip install authlib && pip install pyotp && pip install flask-login && pip install lima && pip install flask-assets && pip install lima && pip install psycopg2 && pip install asyncpg
sudo apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl
sudo apt install -y nodejs
sudo apt install -y yarn
Clone the PowerDNS Admin Git repository to /opt/web/powerdns-admin
git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /opt/web/powerdns-admin
cd /opt/web/powerdns-admin
python3 -mvenv ./venv
source ./venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
Конфигугрируем PowerDNS Admin.
Для начала копирую пример конфигураци, потом открываю его в редакторе:
cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py
mcedit /opt/web/powerdns-admin/configs/production.py
И редактируем следующие строки:
#import urllib.parse
SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd0'
SQLA_DB_PASSWORD = 'changeme'
Cекретный ключ можно сгенерировать при помощи такой команды: python3 -c "import os; print(os.urandom(16))"
Также настраиваю подключение к базе данных (сам строку составил):
SQLALCHEMY_DATABASE_URI = 'postgresql://powerdns:y7HMHi0ATxx1VC3UU5WG@127.0.0.1/powerdnsadmin'
Остальное коментирую:
#SQLA_DB_USER = 'powerdns'
#SQLA_DB_PASSWORD = 'y7HMHi0ATxx1VC3UU5WG'
#SQLA_DB_HOST = '127.0.0.1'
#SQLA_DB_NAME = 'powerdnsadmin'
#SQLALCHEMY_DATABASE_URI = 'postgres://{}:{}@{}/{}'.format(
# urllib.parse.quote_plus(SQLA_DB_USER),
# urllib.parse.quote_plus(SQLA_DB_PASSWORD),
# SQLA_DB_HOST,
# SQLA_DB_NAME
#)
#SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db')
Экспортируем переменную:
cd /opt/web/powerdns-admin
export FLASK_CONF=../configs/production.py
export FLASK_APP=powerdnsadmin/__init__.py
Upgrade the database schema:
flask db upgrade
устанавливаем другие зависемости:
sudo apt install npm
sudo apt remove yarn
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install yarn
yarn --version
sudo yarn install --pure-lockfile
flask assets build
Можно запускать:
./run.py
Проже запустить с использованием SQLite по инструкции из: https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/master/docs/wiki/install/Running-PowerDNS-Admin-on-Ubuntu-or-Debian.md
SALT = '$2b$12$yLUMTIfl21FKJQpTkRQXC0'
SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd0'
**************************************************************************************************** ****************************************************************************************************
Установка сервиса обмена сообщениями RabbitMQ менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/ Установка сервиса обмена сообщениями RabbitMQ менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/

38
Zulip_install.md Normal file
View File

@ -0,0 +1,38 @@
Открываю нужный сервер
```sh
wsl
```
```sh
curl -sSX POST https://istt-kz.zulipchat.com/api/v1/fetch_api_key \
--data-urlencode username=ivanov.i@istt.kz \
--data-urlencode password=fsUHb3hf3QCdpBLsKyhL
```
Выдало:
```json
{
"result":"success",
"msg":"",
"api_key":"91kQqr13HCwFP2HeARWPHxrfksYPH82p",
"email":"ivanov.i@istt.kz",
"user_id":880555
}
```
```sh
curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \
-u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \
-d "type=stream" \
-d "to=general" \
-d "topic=Тест5" \
-d "content=Привет из консоли!"
```
```sh
curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \
-u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \
-d "type=private" \
-d "to=ivanov.i@istt.kz" \
-d "topic=Тест5" \
-d "content=Привет из консоли!"
```