Compare commits
10 Commits
2b092dd67d
...
3f831b68ab
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f831b68ab | |||
| 332e1b84e9 | |||
| cab906cff1 | |||
| 19407be225 | |||
| 1d99814706 | |||
| 7380add41d | |||
| aa0179f6c0 | |||
| 2d79601c7a | |||
| 3bbdd7e866 | |||
| 72ba8986d4 |
224
Brokers/RabbitMQ_install.md
Normal file
224
Brokers/RabbitMQ_install.md
Normal file
@ -0,0 +1,224 @@
|
||||
****************************************************************************************************
|
||||
Подключаемся к нужной машине
|
||||
```sh
|
||||
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 apt-get update &&
|
||||
sudo apt-get dist-upgrade &&
|
||||
sudo apt install rabbitmq-server
|
||||
```
|
||||
|
||||
Создаём пользователя и задаём пароль
|
||||
```sh
|
||||
sudo rabbitmqctl list_users &&
|
||||
sudo rabbitmqctl add_user ivanov_i KGf4nxT8vxZWv3jqNasP &&
|
||||
sudo rabbitmqctl set_user_tags ivanov_i administrator &&
|
||||
sudo rabbitmqctl set_permissions -p / ivanov_i ".*" ".*" ".*" &&
|
||||
sudo rabbitmqctl change_password ivanov_i KGf4nxT8vxZWv3jqNasP
|
||||
```
|
||||
|
||||
Посмотреть список используемых плагинов:
|
||||
```sh
|
||||
sudo rabbitmq-plugins list
|
||||
```
|
||||
Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную.
|
||||
```sh
|
||||
sudo rabbitmq-plugins enable rabbitmq_management
|
||||
```
|
||||
rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672
|
||||
Но для активации нужно добавить пользователя, смотрим пользователей:
|
||||
```sh
|
||||
sudo rabbitmqctl list_users
|
||||
sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера
|
||||
sudo rabbitmqctl set_user_tags admin administrator
|
||||
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
|
||||
```
|
||||
Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43
|
||||
|
||||
Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed.
|
||||
Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password
|
||||
producer: клиент, выполняющий отправку сообщения
|
||||
queue: собственно очередь сообщений
|
||||
consumer: клиент, получающий сообщения из очереди
|
||||
exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html)
|
||||
|
||||
Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y
|
||||
https://www.rabbitmq.com/devtools.html :
|
||||
Создаю Maven проект в консоли:
|
||||
```sh
|
||||
cd O:\projects\Workspace_Java\
|
||||
mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
|
||||
```
|
||||
Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client:
|
||||
```xml
|
||||
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
|
||||
<dependency>
|
||||
<groupId>com.rabbitmq</groupId>
|
||||
<artifactId>amqp-client</artifactId>
|
||||
<version>5.14.2</version>
|
||||
</dependency>
|
||||
```
|
||||
Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA.
|
||||
|
||||
Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/
|
||||
или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/
|
||||
Добавил в POM файл:
|
||||
```xml
|
||||
<repositories>
|
||||
<repository>
|
||||
<name>RabbitMQ</name>
|
||||
<url>https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0</url>
|
||||
<id>com.rabbitmq</id>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.rabbitmq</groupId>
|
||||
<artifactId>amqp-client</artifactId>
|
||||
<version>5.16.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
Перезагружаем:
|
||||
```sh
|
||||
sudo service rabbitmq-server restart
|
||||
```
|
||||
|
||||
****************************************************************************************************
|
||||
Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel
|
||||
|
||||
Активирую плагин командой:
|
||||
```sh
|
||||
sudo rabbitmq-plugins enable rabbitmq_shovel &&
|
||||
sudo rabbitmq-plugins enable rabbitmq_shovel_management
|
||||
```
|
||||
|
||||
Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку:
|
||||
```sh
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation",
|
||||
"src-queue": "TO_KAZ",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground",
|
||||
"dest-exchange": "swap",
|
||||
"dest-exchange-key": ".KAZ.",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
Для Росии такие настройки:
|
||||
```sh
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_rus '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus",
|
||||
"src-queue": "TO_RUS",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground",
|
||||
"dest-exchange": "swap",
|
||||
"dest-exchange-key": "KZ",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
Для Беларусии такие настройки:
|
||||
```sh
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_blr '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr",
|
||||
"src-queue": "TO_BLR",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber",
|
||||
"dest-exchange": "eec.swap",
|
||||
"dest-exchange-key": "KZ",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
Для Армении такие настройки:
|
||||
```sh
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_arm '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm",
|
||||
"src-queue": "TO_ARM",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation",
|
||||
"dest-exchange": "swap_kz",
|
||||
"dest-exchange-key": "KZ_ISTT",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
Для Кыргызстана (таможенная инфраструктура)
|
||||
```sh
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz",
|
||||
"src-queue": "TO_KGZ",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz",
|
||||
"dest-exchange": "swap",
|
||||
"dest-exchange-key": "KAZ",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
```
|
||||
Удалять так:
|
||||
```sh
|
||||
sudo rabbitmqctl clear_parameter shovel kaz_to_kgz
|
||||
```
|
||||
|
||||
Для отправки из Киргизии нам то такие настройки:
|
||||
```sh
|
||||
sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz",
|
||||
"src-queue": "TO_KAZ",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz",
|
||||
"dest-exchange": "swap",
|
||||
"dest-exchange-key": "KGZ",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
Удалять так:
|
||||
```sh
|
||||
sudo rabbitmqctl clear_parameter shovel kgz_to_kaz
|
||||
```
|
||||
|
||||
Чтобы проверить текущие параметры Shovel:
|
||||
```sh
|
||||
sudo rabbitmqctl list_parameters
|
||||
```
|
||||
А также можно взглянуть что создалось через WEB интерфейс
|
||||
|
||||
Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает.
|
||||
@ -53,6 +53,7 @@ services:
|
||||
- GOTIFY_SERVER_SSL_ENABLED=true
|
||||
- GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt
|
||||
- GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key
|
||||
- GIN_MODE=debug
|
||||
networks:
|
||||
- gotify-net
|
||||
|
||||
215
DNS/BIND_install.md
Normal file
215
DNS/BIND_install.md
Normal file
@ -0,0 +1,215 @@
|
||||
****************************************************************************************************
|
||||
## 1. Подключаемся к нужному серверу
|
||||
```sh
|
||||
ssh root@bigfoottrade.kz -p 2222
|
||||
```
|
||||
****************************************************************************************************
|
||||
Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26
|
||||
```sh
|
||||
sudo apt-get update &&
|
||||
sudo apt-get install bind9 dnsutils &&
|
||||
sudo apt-get install bind9utils
|
||||
```
|
||||
Adding the service to autostart
|
||||
```sh
|
||||
systemctl enable bind9
|
||||
```
|
||||
Checking if the service is working
|
||||
```sh
|
||||
nslookup dmosk.ru 127.0.0.1
|
||||
```
|
||||
Opening the configuration file
|
||||
```sh
|
||||
mcedit /etc/bind/named.conf.options
|
||||
```
|
||||
Для глобальных запросов добавляем строку: allow-query { any; };
|
||||
Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных
|
||||
//forwarders {
|
||||
// 8.8.8.8;
|
||||
// 8.8.4.4;
|
||||
//};
|
||||
Проверяем настройки командой (ответ должен быть пустым):
|
||||
sudo named-checkconf
|
||||
Перезагружаем:
|
||||
sudo systemctl restart bind9
|
||||
Проверяю версию BIND:
|
||||
named -v
|
||||
Выдало: BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>
|
||||
Можно проверить какой IP выдаст на DNS запрос
|
||||
dig locust.kz A
|
||||
|
||||
На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns.
|
||||
|
||||
Смотрим какие зоны поддерживает bind:
|
||||
```sh
|
||||
mcedit /etc/bind/named.conf.local
|
||||
```
|
||||
смотрим подробнее что записано в зоне:
|
||||
```sh
|
||||
sudo cat /var/cache/bind/dirt.kz
|
||||
```
|
||||
|
||||
Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками
|
||||
|
||||
Перейдем в него.
|
||||
cd /etc/bind/
|
||||
Генерируем пару ключь для обмена информацией между клиентом и сервером:
|
||||
sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key
|
||||
sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key
|
||||
Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ.
|
||||
include "/etc/bind/dirt.kz.key";
|
||||
include "/etc/bind/locust.kz.key";
|
||||
Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем.
|
||||
zone "dirt.kz" {
|
||||
type master;
|
||||
allow-update {key dirt.kz;};
|
||||
file "/var/cache/bind/dirt.kz";
|
||||
};
|
||||
|
||||
zone "locust.kz" {
|
||||
type master;
|
||||
allow-update {key locust.kz;};
|
||||
file "/var/cache/bind/locust.kz";
|
||||
};
|
||||
|
||||
|
||||
В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где:
|
||||
В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где:
|
||||
|
||||
Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте
|
||||
Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/
|
||||
SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA
|
||||
NS — Сервер имён
|
||||
A — рекорд
|
||||
MX — Почта для обмена
|
||||
CN — Каноническое имя
|
||||
PTR — указатель
|
||||
И таким содержимым:
|
||||
|
||||
$ORIGIN dirt.kz
|
||||
$TTL 604800
|
||||
@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. (
|
||||
8 ; Serial
|
||||
604800 ; Refresh
|
||||
86400 ; Retry
|
||||
2419200 ; Expire
|
||||
604800 ) ; Negative Cache TTL
|
||||
;
|
||||
@ IN NS bigfoottrade.kz.
|
||||
|
||||
Второй файл для locust.kz:
|
||||
|
||||
$ORIGIN .
|
||||
$TTL 604800 ; 1 week
|
||||
locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. (
|
||||
134 ; serial
|
||||
604800 ; refresh (1 week)
|
||||
86400 ; retry (1 day)
|
||||
1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds)
|
||||
604800 ; minimum (1 week)
|
||||
)
|
||||
NS bigfoottrade.kz.
|
||||
$TTL 3600 ; 1 hour
|
||||
A 5.76.254.182
|
||||
$ORIGIN locust.kz.
|
||||
* A 127.0.0.1
|
||||
|
||||
|
||||
Правлю права доступа:
|
||||
sudo chown -R bind:bind /etc/bind
|
||||
|
||||
Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой:
|
||||
sudo rndc reconfig
|
||||
Потом следует вызвать:
|
||||
sudo systemctl restart bind9
|
||||
Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду
|
||||
После настроек сервера перезагружаем его:
|
||||
sudo named-checkconf
|
||||
sudo rndc reload
|
||||
sudo systemctl restart bind9
|
||||
sudo rndc status
|
||||
journalctl | grep bind
|
||||
sudo journalctl -u bind9 -n 50
|
||||
|
||||
|
||||
Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу:
|
||||
|
||||
Файл из примера:
|
||||
#!/bin/bash
|
||||
TTL=3600
|
||||
SERVER=ns.dyndns.my
|
||||
HOSTNAME=dhost.dyndns.my
|
||||
ZONE=dyndns.my
|
||||
KEYFILE=Kdyndns.my.+157+48025.private
|
||||
new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере!
|
||||
cd /etc/ddns
|
||||
nsupdate -v -k $KEYFILE << EOF
|
||||
server $SERVER
|
||||
zone $ZONE
|
||||
update delete $HOSTNAME A
|
||||
update add $HOSTNAME $TTL A $new_ip_address
|
||||
send
|
||||
EOF
|
||||
|
||||
Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже:
|
||||
#!/bin/bash
|
||||
TTL=3600
|
||||
SERVER=127.0.0.1
|
||||
HOSTNAME=*.dirt.kz
|
||||
ZONE=dirt.kz
|
||||
KEYFILE=/etc/bind/dirt.kz.key
|
||||
|
||||
new_ip_address=
|
||||
FILE=/etc/ddns/ip.txt
|
||||
if test -f "$FILE"; then
|
||||
new_ip_address=`cat $FILE`
|
||||
rm $FILE
|
||||
fi
|
||||
|
||||
len=${#new_ip_address}
|
||||
if [ $len -gt 3 ]
|
||||
then
|
||||
echo "New IP address = $new_ip_address"
|
||||
else
|
||||
echo "Not find IP address"
|
||||
exit
|
||||
fi
|
||||
|
||||
cd /etc/ddns
|
||||
sudo nsupdate -v -k $KEYFILE << EOF
|
||||
server $SERVER
|
||||
zone $ZONE
|
||||
update delete $HOSTNAME A
|
||||
update add $HOSTNAME $TTL A $new_ip_address
|
||||
update delete dirt.kz A
|
||||
update add dirt.kz $TTL A $new_ip_address
|
||||
send
|
||||
EOF
|
||||
echo "OK"
|
||||
|
||||
Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента:
|
||||
<?php
|
||||
|
||||
echo '<pre>'; print_r(getallheaders()); echo '</pre>';
|
||||
|
||||
// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x"
|
||||
foreach ( getallheaders() as $k => $v) {
|
||||
if ( strtolower($k) == 'x-forwarded-for' ) {
|
||||
$tmp = explode(', ', $v);
|
||||
if ( $tmp[count($tmp)-1] != '' )
|
||||
$_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1];
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){
|
||||
$myfile = fopen("/etc/ddns/ip.txt", "w");
|
||||
fwrite($myfile, $_SERVER['REMOTE_ADDR']);
|
||||
fclose($myfile);
|
||||
}
|
||||
|
||||
echo $_SERVER['REMOTE_ADDR'];
|
||||
|
||||
?>
|
||||
|
||||
Проверяем что находит IP по доменному имени
|
||||
nslookup dirt.kz 127.0.0.1
|
||||
@ -2,7 +2,7 @@
|
||||
****************************************************************************************************
|
||||
## 2. Подключаемся к нужному серверу
|
||||
```sh
|
||||
ssh igor@192.168.200.85 -p 22
|
||||
ssh root@bigfoottrade.kz -p 2222
|
||||
```
|
||||
Connect to CCALM Georgia infrastructure:
|
||||
```sh
|
||||
@ -15,31 +15,32 @@ DNS на Ubuntu 24.04 согласно инстркции https://phoenixnap.com
|
||||
Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт)
|
||||
Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html
|
||||
|
||||
Для установки версии поновее PowerDNS 4.8.5:
|
||||
```sh
|
||||
sudo apt install curl gnupg lsb-release &&
|
||||
curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/pdns.gpg &&
|
||||
echo "deb [signed-by=/etc/apt/trusted.gpg.d/pdns.gpg] http://repo.powerdns.com/ubuntu $(lsb_release -cs)-auth-48 main" | sudo tee /etc/apt/sources.list.d/pdns.list
|
||||
```
|
||||
|
||||
```sh
|
||||
sudo apt-get update &&
|
||||
sudo apt-get upgrade -y
|
||||
```
|
||||
|
||||
Install PowerDNS server
|
||||
```sh
|
||||
sudo apt-get install pdns-server -y
|
||||
sudo apt-get install pdns-server -y &&
|
||||
sudo apt-get install pdns-backend-bind
|
||||
```
|
||||
|
||||
На всякий случай делаю резервные копии исходных файлов настрое:
|
||||
```sh
|
||||
cd /etc/powerdns &&
|
||||
sudo cp named.conf named.conf.bak &&
|
||||
sudo cp pdns.conf pdns.conf.bak
|
||||
```
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
Как настроить MariaDB базу для использования в PowerDNS смотри:
|
||||
[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md)
|
||||
----------------------------------------------------------------------------------------------------
|
||||
Как настроить SQLite3 базу для использования в PowerDNS смотри:
|
||||
[Установка PowerDNS с MariaDB](./PowerDNS_install_SQIite3.md)
|
||||
[Установка PowerDNS с SQIite3](./PowerDNS_install_SQIite3.md)
|
||||
----------------------------------------------------------------------------------------------------
|
||||
Как настроить PostgreSQL базу для использования в PowerDNS смотри:
|
||||
[Установка PowerDNS с MariaDB](./PowerDNS_install_PostgreSQL.md)
|
||||
[Установка PowerDNS с PostgreSQL](./PowerDNS_install_PostgreSQL.md)
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
Наспройку файла pdns.conf авторитетный сервер, есть такой пример который следует изучить: https://raw.githubusercontent.com/trinv/PowerDNS/a56b9122f4a2de9c1f789009f09b9831f74d8bf1/pdns.template.master.conf (естественно без 1й табуляции):
|
||||
@ -48,6 +49,12 @@ sudo cp pdns.conf pdns.conf.bak
|
||||
sudo mcedit /etc/powerdns/pdns.conf
|
||||
```
|
||||
|
||||
```sh
|
||||
sudo mkdir /var/run/pdns &&
|
||||
sudo chown pdns:pdns /var/run/pdns &&
|
||||
sudo chmod 750 /var/run/pdns
|
||||
```
|
||||
|
||||
Write new settings rr
|
||||
```sh
|
||||
cd /etc/powerdns/ &&
|
||||
@ -57,9 +64,10 @@ allow-axfr-ips=127.0.0.1
|
||||
also-notify=127.0.0.1
|
||||
|
||||
include-dir=/etc/powerdns/pdns.d
|
||||
launch=
|
||||
launch=bind
|
||||
|
||||
local-address=88.218.94.134,127.0.0.1
|
||||
|
||||
local-address=77.240.38.108,127.0.0.1
|
||||
local-port=53
|
||||
|
||||
log-dns-details=on
|
||||
@ -68,9 +76,9 @@ log-timestamp=yes
|
||||
loglevel=4
|
||||
|
||||
webserver=yes
|
||||
webserver-address=127.0.0.1
|
||||
webserver-address=0.0.0.0
|
||||
webserver-allow-from=::/0, 0.0.0.0/0
|
||||
webserver-port=8091
|
||||
webserver-port=8070
|
||||
|
||||
master=yes
|
||||
slave=no
|
||||
@ -80,14 +88,28 @@ api=yes
|
||||
api-key=40c89f2a-e2f3-4ff8-a245-3547111f6677
|
||||
EOF
|
||||
```
|
||||
|
||||
```sh
|
||||
sudo chown pdns:pdns /etc/powerdns/pdns.conf &&
|
||||
sudo chmod 640 /etc/powerdns/pdns.conf
|
||||
```
|
||||
|
||||
Также пробуем запустить под pdns:
|
||||
```sh
|
||||
sudo rm -f /var/run/pdns.controlsocket &&
|
||||
sudo -u pdns /usr/sbin/pdns_server --config-dir=/etc/powerdns
|
||||
```
|
||||
Проверяю соединение к базе перезапустив PowerDNS:
|
||||
```sh
|
||||
sudo systemctl stop pdns &&
|
||||
sudo pdns_server --daemon=no --guardian=no --loglevel=9
|
||||
```
|
||||
|
||||
|
||||
|
||||
Пытаемся открыть WEB интерфейс
|
||||
```sh
|
||||
start http://88.218.94.134:8081
|
||||
start http://77.240.38.108:8070
|
||||
```
|
||||
|
||||
Если всё норм выполняем:
|
||||
@ -111,20 +133,85 @@ start http://88.218.94.134:8081
|
||||
sudo pdnsutil create-zone test ns1.test &&
|
||||
sudo pdnsutil add-record test ccalm A 192.168.200.184
|
||||
```
|
||||
Добавляем зону и две записи
|
||||
Добавляем зону и записи
|
||||
|
||||
```sh
|
||||
sudo pdnsutil create-zone geovizor.top ns1.geovizor.top &&
|
||||
sudo pdnsutil replace-rrset geovizor.top @ SOA "ns1.geovizor.top admin.geovizor.top $(date +%Y%m%d)01 10800 3600 604800 3600" &&
|
||||
sudo pdnsutil add-record geovizor.top ns1 A 88.218.94.134 &&
|
||||
sudo pdnsutil add-record geovizor.top ns2 A 88.218.94.134 &&
|
||||
sudo pdnsutil add-record geovizor.top @ A 88.218.94.134 &&
|
||||
sudo pdnsutil add-record geovizor.top * A 88.218.94.134 &&
|
||||
sudo pdnsutil add-record geovizor.top @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
|
||||
sudo pdnsutil add-record geovizor.top @ TXT 3600 "\"v=spf1 ip4:88.218.94.134 -all\"" &&
|
||||
sudo pdnsutil add-record geovizor.top @ MX 3600 "10 mail.geovizor.top." &&
|
||||
sudo pdnsutil add-record geovizor.top mail A 3600 88.218.94.134 &&
|
||||
sudo pdnsutil add-record geovizor.top powerdns A 3600 88.218.94.134
|
||||
sudo pdnsutil create-zone mesh.kz &&
|
||||
sudo pdnsutil replace-rrset mesh.kz @ SOA "ns1.mesh.kz admin.mesh.kz $(date +%Y%m%d)01 10800 3600 604800 3600" &&
|
||||
sudo pdnsutil add-record mesh.kz @ A 5.251.150.30 &&
|
||||
sudo pdnsutil add-record mesh.kz "*" A 5.251.150.30 &&
|
||||
sudo pdnsutil add-record mesh.kz @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
|
||||
sudo pdnsutil add-record mesh.kz @ TXT 3600 "\"v=spf1 ip4:77.240.38.108 -all\"" &&
|
||||
sudo pdnsutil add-record mesh.kz @ MX 3600 "10 mail.mesh.kz." &&
|
||||
sudo pdnsutil add-record mesh.kz mail A 3600 77.240.38.108
|
||||
sudo pdnsutil add-record mesh.kz @ NS 3600 ns1.mesh.kz
|
||||
sudo pdnsutil add-record mesh.kz @ NS 3600 ns2.mesh.kz
|
||||
```
|
||||
|
||||
```sh
|
||||
sudo pdnsutil create-zone dirt.kz &&
|
||||
sudo pdnsutil replace-rrset dirt.kz @ SOA "ns1.dirt.kz admin.dirt.kz $(date +%Y%m%d)01 10800 3600 604800 3600" &&
|
||||
sudo pdnsutil add-record dirt.kz @ A 5.251.150.30 &&
|
||||
sudo pdnsutil add-record dirt.kz "*" A 5.251.150.30 &&
|
||||
sudo pdnsutil add-record dirt.kz @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
|
||||
sudo pdnsutil add-record dirt.kz @ TXT 3600 "\"v=spf1 ip4:77.240.38.108 -all\"" &&
|
||||
sudo pdnsutil add-record dirt.kz @ MX 3600 "10 mail.dirt.kz." &&
|
||||
sudo pdnsutil add-record dirt.kz mail A 3600 77.240.38.108 &&
|
||||
sudo pdnsutil add-record dirt.kz @ NS 3600 ns1.dirt.kz &&
|
||||
sudo pdnsutil add-record dirt.kz @ NS 3600 ns2.dirt.kz &&
|
||||
sudo pdnsutil add-record dirt.kz ns1 A 77.240.38.108 &&
|
||||
sudo pdnsutil add-record dirt.kz ns2 A 77.240.38.108
|
||||
```
|
||||
|
||||
```sh
|
||||
sudo pdnsutil create-zone geovizor.top &&
|
||||
sudo pdnsutil replace-rrset geovizor.top @ SOA "ns1.geovizor.top admin.geovizor.top $(date +%Y%m%d)01 10800 3600 604800 3600" &&
|
||||
sudo pdnsutil add-record geovizor.top @ A 5.251.150.30 &&
|
||||
sudo pdnsutil add-record geovizor.top "*" A 5.251.150.30 &&
|
||||
sudo pdnsutil add-record geovizor.top @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
|
||||
sudo pdnsutil add-record geovizor.top @ TXT 3600 "\"v=spf1 ip4:77.240.38.108 -all\"" &&
|
||||
sudo pdnsutil add-record geovizor.top @ MX 3600 "10 mail.geovizor.top." &&
|
||||
sudo pdnsutil add-record geovizor.top mail A 3600 77.240.38.108 &&
|
||||
sudo pdnsutil add-record geovizor.top @ NS 3600 ns1.geovizor.top &&
|
||||
sudo pdnsutil add-record geovizor.top @ NS 3600 ns2.geovizor.top &&
|
||||
sudo pdnsutil add-record geovizor.top ns1 A 77.240.38.108 &&
|
||||
sudo pdnsutil add-record geovizor.top ns2 A 77.240.38.108
|
||||
```
|
||||
|
||||
```sh
|
||||
sudo pdnsutil create-zone locust.kz &&
|
||||
sudo pdnsutil replace-rrset locust.kz @ SOA "ns1.locust.kz admin.locust.kz $(date +%Y%m%d)01 10800 3600 604800 3600" &&
|
||||
sudo pdnsutil add-record locust.kz @ A 5.251.150.30 &&
|
||||
sudo pdnsutil add-record locust.kz "*" A 5.251.150.30 &&
|
||||
sudo pdnsutil add-record locust.kz @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
|
||||
sudo pdnsutil add-record locust.kz @ TXT 3600 "\"v=spf1 ip4:77.240.38.108 -all\"" &&
|
||||
sudo pdnsutil add-record locust.kz @ MX 3600 "10 mail.locust.kz." &&
|
||||
sudo pdnsutil add-record locust.kz mail A 3600 77.240.38.108
|
||||
sudo pdnsutil add-record locust.kz @ NS 3600 ns1.locust.kz
|
||||
sudo pdnsutil add-record locust.kz @ NS 3600 ns2.locust.kz
|
||||
```
|
||||
|
||||
```sh
|
||||
sudo pdnsutil create-zone locust.ge &&
|
||||
sudo pdnsutil replace-rrset locust.ge @ SOA "ns1.geovizor.top admin.locust.ge $(date +%Y%m%d)01 10800 3600 604800 3600" &&
|
||||
sudo pdnsutil add-record locust.ge @ A 88.218.94.134 &&
|
||||
sudo pdnsutil add-record locust.ge "*" A 88.218.94.134 &&
|
||||
sudo pdnsutil add-record locust.ge @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
|
||||
sudo pdnsutil add-record locust.ge @ TXT 3600 "\"v=spf1 ip4:88.218.94.134 -all\"" &&
|
||||
sudo pdnsutil add-record locust.ge @ MX 3600 "10 mail.locust.ge." &&
|
||||
sudo pdnsutil add-record locust.ge mail A 3600 88.218.94.134
|
||||
sudo pdnsutil add-record locust.ge @ NS 3600 ns1.geovizor.top
|
||||
sudo pdnsutil add-record locust.ge @ NS 3600 ns2.geovizor.top
|
||||
```
|
||||
|
||||
For deleting record please run command:
|
||||
```sh
|
||||
sudo pdnsutil delete-rrset locust.ge locust.ge.locust.ge NS
|
||||
sudo pdnsutil delete-rrset geovizor.top gotify A
|
||||
```
|
||||
|
||||
|
||||
|
||||
Выше задал такие настройки как
|
||||
```conf
|
||||
Refresh = 10800 (3 часа)
|
||||
@ -141,8 +228,11 @@ sudo pdnsutil list-zone geovizor.top
|
||||
```
|
||||
Проверяем отвечалет ли:
|
||||
```sh
|
||||
dig @127.0.0.1 -p 5300 ccalm.test A
|
||||
dig @127.0.0.1 -p 53 mesh.kz A
|
||||
```
|
||||
|
||||
dig @77.240.38.108 -p 53 mesh.kz A
|
||||
|
||||
```sh
|
||||
dig @127.0.0.1 -p 53 geovizor.top A
|
||||
```
|
||||
@ -182,8 +272,6 @@ curl -X PATCH \
|
||||
}'
|
||||
```
|
||||
|
||||
|
||||
|
||||
## ********** Настройка рекурсивного DNS от PowerDNS Recursor 4.9.3 порту 53 будет обрабатывать запросы с локальной машины **********
|
||||
Документация: https://doc.powerdns.com/recursor/index.html
|
||||
Документация: https://docs.powerdns.com/recursor/indexTOC.html
|
||||
@ -277,7 +365,7 @@ journalctl -u pdns-recursor --no-pager | tail -n 50
|
||||
```
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
## ********** По идее отключать не нужно так как systemd-resolved использует другой IP: 127.0.0.54:53 (Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS) **********
|
||||
## ********** По идее systemd-resolved отключать не нужно так как он использует другой IP: 127.0.0.54:53 **********
|
||||
|
||||
Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved)
|
||||
```sh
|
||||
@ -526,7 +614,7 @@ open http://192.168.200.85:9191/login
|
||||
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
Настраиваем запус на постоянную работу через Gunicorn и systemd
|
||||
Настраиваем запуск на постоянную работу через Gunicorn и systemd
|
||||
|
||||
```sh
|
||||
cd /opt/web/powerdns-admin &&
|
||||
@ -127,3 +127,17 @@ sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.sqlite.conf
|
||||
```
|
||||
|
||||
In PowerDNS configured to auto read config from dir /etc/powerdns/pdns.d/
|
||||
|
||||
|
||||
|
||||
|
||||
For delete record from SQLite run:
|
||||
```sh
|
||||
cp /var/lib/powerdns/pdns.sqlite3 /var/lib/powerdns/pdns.sqlite3.bak
|
||||
sqlite3 /var/lib/powerdns/pdns.sqlite3
|
||||
SELECT id, name FROM domains WHERE name = 'locust.ge';
|
||||
SELECT id, name, type, content FROM records WHERE name = 'locust.ge.locust.ge' AND type = 'NS';
|
||||
DELETE FROM records WHERE id IN (25, 26, 27, 28);
|
||||
.exit
|
||||
pdns_control notify locust.ge
|
||||
```
|
||||
52
DNS/Ubuntu_config.md
Normal file
52
DNS/Ubuntu_config.md
Normal file
@ -0,0 +1,52 @@
|
||||
Чтобы в Ubuntu все домены с маской *.local отправлялись на DNS-сервер 192.168.200.85 (где работает PowerDNS на порту 53), тебе нужно настроить DNS-резолвинг так, чтобы:
|
||||
|
||||
Все запросы к доменам, оканчивающимся на .local, отправлялись на указанный DNS.
|
||||
|
||||
Остальные домены резолвились через системный DNS как обычно.
|
||||
|
||||
✅ Способ 1: Использовать systemd-resolved (рекомендуется для Ubuntu 18.04+, особенно 20.04 и 22.04)
|
||||
Ubuntu по умолчанию использует systemd-resolved, который поддерживает пер-доменное направление DNS-запросов.
|
||||
|
||||
Шаги:
|
||||
Создай файл в /etc/systemd/resolved.conf.d/:
|
||||
```sh
|
||||
ssh igor@192.168.200.84 -p 22
|
||||
```
|
||||
|
||||
Создаю директорию
|
||||
```sh
|
||||
sudo mkdir -p /etc/systemd/resolved.conf.d &&
|
||||
sudo mcedit /etc/systemd/resolved.conf.d/local-dns.conf
|
||||
```
|
||||
|
||||
Прописываю содержимое:
|
||||
```conf
|
||||
[Resolve]
|
||||
DNS=192.168.200.85
|
||||
Domains=~local
|
||||
```
|
||||
|
||||
Перезапускаю
|
||||
```sh
|
||||
sudo systemctl restart systemd-resolved &&
|
||||
```
|
||||
|
||||
Проверяю настройки
|
||||
```sh
|
||||
resolvectl status
|
||||
```
|
||||
|
||||
Проверяем
|
||||
```sh
|
||||
ping gotify.local
|
||||
```
|
||||
Проверяем сертификат:
|
||||
```sh
|
||||
curl https://gotify.local
|
||||
```
|
||||
|
||||
Добавляем корневой сертификат для домена local.
|
||||
```sh
|
||||
sudo cp rootCA.crt /usr/local/share/ca-certificates/rootCA.crt &&
|
||||
sudo update-ca-certificates
|
||||
```
|
||||
@ -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
|
||||
```
|
||||
|
||||
Для остановки
|
||||
|
||||
171
Logs/Vector_dev_install.md
Normal file
171
Logs/Vector_dev_install.md
Normal file
@ -0,0 +1,171 @@
|
||||
# Настройка Vector для отправки логов в Gotify
|
||||
|
||||
Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла `/opt/org_ccalm_main/logs/ccalm.log`, фильтрации строк с уровнем `ERROR` и отправки уведомлений в Gotify.
|
||||
|
||||
---
|
||||
## 0. ✅ Подключаемся к инфраструктуре
|
||||
|
||||
```sh
|
||||
ssh igor@ccalm.org -p 2200
|
||||
```
|
||||
|
||||
## Предварительные требования
|
||||
- ОС: Ubuntu/Debian (для других ОС уточните, чтобы адаптировать команды).
|
||||
- Файл логов: `/opt/org_ccalm_main/logs/ccalm.log` с JSON-строками (поля `level` и `message`).
|
||||
- Gotify: Доступный сервер Gotify с URL и токеном (например, `https://gotify.example.com/message?token=<your-token>`).
|
||||
- Доступ к терминалу с правами `sudo`.
|
||||
|
||||
|
||||
## Шаг 1: Установка Vector
|
||||
|
||||
Пробуем скачать deb пакет с сайта
|
||||
```sh
|
||||
curl -L https://packages.timber.io/vector/0.43.1/vector_0.43.1-1_amd64.deb -o vector_0.43.1-1_amd64.deb &&
|
||||
sudo dpkg -i vector_0.43.1-1_amd64.deb &&
|
||||
sudo apt-get install -f &&
|
||||
vector --version
|
||||
```
|
||||
|
||||
## Шаг 2: Создание конфигурации Vector
|
||||
Vector использует YAML для конфигурации. Настроим чтение логов, фильтрацию `ERROR` и отправку в Gotify.
|
||||
|
||||
1. Создайте файл конфигурации `/etc/vector/vector.yaml`:
|
||||
```sh
|
||||
cd /etc/vector &&
|
||||
sudo tee vector.yaml > /dev/null <<'EOF'
|
||||
data_dir: "/var/lib/vector"
|
||||
|
||||
sources:
|
||||
ccalm_logs:
|
||||
type: file
|
||||
include:
|
||||
- /opt/org_ccalm_main/logs/ccalm.log
|
||||
read_from: beginning
|
||||
|
||||
transforms:
|
||||
parse_json:
|
||||
type: remap
|
||||
inputs:
|
||||
- ccalm_logs
|
||||
source: |
|
||||
structured, err = parse_json(.message)
|
||||
if err != null {
|
||||
abort
|
||||
}
|
||||
merged, err = merge(., structured)
|
||||
if err != null {
|
||||
abort
|
||||
}
|
||||
. = merged
|
||||
|
||||
filter_errors:
|
||||
type: filter
|
||||
inputs:
|
||||
- parse_json
|
||||
condition: '.level == "ERROR"'
|
||||
|
||||
format_telegram_json:
|
||||
type: remap
|
||||
inputs:
|
||||
- filter_errors
|
||||
source: |
|
||||
msg, err = string(.message)
|
||||
if err != null {
|
||||
msg = "Unable to parse message"
|
||||
}
|
||||
.message = "{\"title\":\"CCALM Main Error Log\",\"message\":\"ERROR: " + msg + "\"}"
|
||||
|
||||
|
||||
sinks:
|
||||
gotify:
|
||||
type: http
|
||||
inputs:
|
||||
- filter_errors
|
||||
uri: "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ"
|
||||
method: post
|
||||
encoding:
|
||||
codec: json
|
||||
template: '{"title":"CCALM Main Error Log","message":"Test message 00","priority":5}'
|
||||
request:
|
||||
headers:
|
||||
Content-Type: "application/json"
|
||||
Host: "gotify.geovizor.top"
|
||||
Content-Length: "{{ content_length }}"
|
||||
tls:
|
||||
verify_certificate: false
|
||||
verify_hostname: false
|
||||
EOF
|
||||
```
|
||||
|
||||
Пробую отправку через curl
|
||||
```sh
|
||||
curl -X POST -k "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"message": "Test message", "priority": 5}'
|
||||
```
|
||||
|
||||
|
||||
Проверяем что gotify работает:
|
||||
```sh
|
||||
curl -k -X POST -H "Content-Type: application/json" -H "Host: gotify.geovizor.top" -d '{"message":"Test message 00","priority":5}' --http1.1 https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ -v
|
||||
```
|
||||
|
||||
### Объяснение конфигурации
|
||||
- **Source (`ccalm_logs`)**: Читает логи из файла, парсит JSON, поддерживает многострочные логи.
|
||||
- **Transform (`filter_errors`)**: Фильтрует логи с `level: "ERROR"`.
|
||||
- **Sink (`gotify`)**: Отправляет отфильтрованные логи в Gotify через HTTP POST.
|
||||
|
||||
## Шаг 3: Проверка конфигурации
|
||||
Проверьте корректность YAML:
|
||||
```sh
|
||||
vector --config /etc/vector/vector.yaml validate
|
||||
```
|
||||
Ожидаемый вывод: `Configuration is valid`.
|
||||
|
||||
## Шаг 4: Запуск Vector
|
||||
### Тестовый запуск (для отладки)
|
||||
```sh
|
||||
sudo vector --config /etc/vector/vector.yaml
|
||||
```
|
||||
|
||||
### Запуск как сервиса
|
||||
1. Включите и запустите сервис:
|
||||
```sh
|
||||
sudo systemctl enable vector
|
||||
sudo systemctl start vector
|
||||
```
|
||||
2. Проверьте статус:
|
||||
```sh
|
||||
sudo systemctl status vector
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Шаг 5: Проверка отправки в Gotify
|
||||
1. Убедитесь, что Gotify доступен по указанному URL.
|
||||
2. Добавьте тестовую строку лога в `/opt/org_ccalm_main/logs/ccalm.log`:
|
||||
```sh
|
||||
echo '{"level": "ERROR", "message": "Database connection failed", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_main/logs/ccalm.log
|
||||
```
|
||||
3. Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed".
|
||||
|
||||
## Шаг 6: Отладка
|
||||
- Логи Vector: `/var/log/vector/vector.log` или stdout (в тестовом режиме).
|
||||
- Проверьте логи при проблемах:
|
||||
```sh
|
||||
cat /var/log/vector/vector.log
|
||||
```
|
||||
|
||||
## Дополнительные настройки
|
||||
- **Права доступа к файлу логов**:
|
||||
```sh
|
||||
sudo chown vector:vector /opt/org_ccalm_main/logs/ccalm.log
|
||||
sudo chmod 644 /opt/org_ccalm_main/logs/ccalm.log
|
||||
```
|
||||
- **Если JSON-формат отличается**: Если поле `level` называется иначе (например, `log_level`), замените `.level` на `.log_level` в `condition`.
|
||||
- **HTTP вместо HTTPS**: Если Gotify использует HTTP, замените `https://` на `http://` в `uri`.
|
||||
|
||||
## Примечания
|
||||
- Убедитесь, что Gotify настроен и токен действителен.
|
||||
- Если логи не отправляются, проверьте сетевую доступность Gotify и правильность URL/токена.
|
||||
- Для чтения только новых логов удалите `read_from: beginning` в конфигурации.
|
||||
197
Logs/Vector_dev_install_telegram.md
Normal file
197
Logs/Vector_dev_install_telegram.md
Normal file
@ -0,0 +1,197 @@
|
||||
Шаг 1: Создание Telegram-бота
|
||||
Зарегистрируйте бота через BotFather:
|
||||
|
||||
Откройте Telegram и найдите @BotFather.
|
||||
Отправьте команду /start.
|
||||
Отправьте /newbot, чтобы создать нового бота.
|
||||
Следуйте инструкциям:
|
||||
Укажите имя бота (например, MyLogBot).
|
||||
Укажите username бота, заканчивающийся на bot (например, @MyLogAllBot).
|
||||
После создания вы получите токен (например, 8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws). Сохраните его, он понадобится для API.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Настройка Vector для отправки логов в Gotify
|
||||
|
||||
Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла `/opt/org_ccalm_main/logs/ccalm.log`, фильтрации строк с уровнем `ERROR` и отправки уведомлений в Gotify.
|
||||
|
||||
---
|
||||
## 0. ✅ Подключаемся к инфраструктуре
|
||||
|
||||
```sh
|
||||
ssh igor@ccalm.org -p 2200
|
||||
```
|
||||
|
||||
## Предварительные требования
|
||||
- ОС: Ubuntu/Debian (для других ОС уточните, чтобы адаптировать команды).
|
||||
- Файл логов: `/opt/org_ccalm_main/logs/ccalm.log` с JSON-строками (поля `level` и `message`).
|
||||
- Gotify: Доступный сервер Gotify с URL и токеном (например, `https://gotify.example.com/message?token=<your-token>`).
|
||||
- Доступ к терминалу с правами `sudo`.
|
||||
|
||||
|
||||
## Шаг 1: Установка Vector
|
||||
|
||||
Пробуем скачать deb пакет с сайта
|
||||
|
||||
```sh
|
||||
curl -L https://packages.timber.io/vector/0.46.X/vector_0.46.1-1_amd64.deb -o vector_0.46.1-1_amd64.deb &&
|
||||
sudo dpkg -i vector_0.46.1-1_amd64.deb &&
|
||||
sudo apt-get install -f &&
|
||||
vector --version
|
||||
```
|
||||
|
||||
That make deleting:
|
||||
```sh
|
||||
sudo apt remove --purge vector
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Шаг 2: Создание конфигурации Vector
|
||||
Vector использует YAML для конфигурации. Настроим чтение логов, фильтрацию `ERROR` и отправку в Gotify.
|
||||
|
||||
1. Создайте файл конфигурации `/etc/vector/vector.yaml`:
|
||||
```sh
|
||||
cd /etc/vector &&
|
||||
sudo tee vector.yaml > /dev/null <<'EOF'
|
||||
data_dir: "/var/lib/vector"
|
||||
|
||||
sources:
|
||||
ccalm_logs:
|
||||
type: file
|
||||
include:
|
||||
- /opt/org_ccalm_main/logs/ccalm.log
|
||||
read_from: beginning
|
||||
|
||||
transforms:
|
||||
parse_json:
|
||||
type: remap
|
||||
inputs:
|
||||
- ccalm_logs
|
||||
source: |
|
||||
structured, err = parse_json(.message)
|
||||
if err != null {
|
||||
abort
|
||||
}
|
||||
merged, err = merge(., structured)
|
||||
if err != null {
|
||||
abort
|
||||
}
|
||||
. = merged
|
||||
|
||||
filter_errors:
|
||||
type: filter
|
||||
inputs:
|
||||
- parse_json
|
||||
condition: '.level == "ERROR"'
|
||||
|
||||
format_telegram_json:
|
||||
type: remap
|
||||
inputs:
|
||||
- filter_errors
|
||||
source: |
|
||||
msg, err = string(.message)
|
||||
if err != null {
|
||||
msg = "Unable to parse message"
|
||||
}
|
||||
.message = "{\"chat_id\":\"307675888\",\"text\":\"ERROR: " + msg + "\"}"
|
||||
|
||||
sinks:
|
||||
telegram:
|
||||
type: http
|
||||
inputs:
|
||||
- format_telegram_json
|
||||
uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage"
|
||||
method: post
|
||||
encoding:
|
||||
codec: text
|
||||
request:
|
||||
headers:
|
||||
Content-Type: "application/json"
|
||||
batch:
|
||||
max_events: 1
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
curl https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/getUpdates
|
||||
|
||||
|
||||
Пробую отправку через curl
|
||||
```sh
|
||||
curl -X POST -k "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"message": "Test message", "priority": 5}'
|
||||
```
|
||||
|
||||
|
||||
Проверяем что gotify работает:
|
||||
```sh
|
||||
curl -k -X POST -H "Content-Type: application/json" -H "Host: gotify.geovizor.top" -d '{"message":"Test message 00","priority":5}' --http1.1 https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ -v
|
||||
```
|
||||
|
||||
### Объяснение конфигурации
|
||||
- **Source (`ccalm_logs`)**: Читает логи из файла, парсит JSON, поддерживает многострочные логи.
|
||||
- **Transform (`filter_errors`)**: Фильтрует логи с `level: "ERROR"`.
|
||||
- **Sink (`gotify`)**: Отправляет отфильтрованные логи в Gotify через HTTP POST.
|
||||
|
||||
## Шаг 3: Проверка конфигурации
|
||||
Проверьте корректность YAML:
|
||||
```sh
|
||||
vector --config /etc/vector/vector.yaml validate
|
||||
```
|
||||
Ожидаемый вывод: `Configuration is valid`.
|
||||
|
||||
## Шаг 4: Запуск Vector
|
||||
### Тестовый запуск (для отладки)
|
||||
```sh
|
||||
sudo vector --config /etc/vector/vector.yaml
|
||||
```
|
||||
|
||||
### Запуск как сервиса
|
||||
1. Включите и запустите сервис:
|
||||
```sh
|
||||
sudo systemctl enable vector
|
||||
sudo systemctl start vector
|
||||
```
|
||||
2. Проверьте статус:
|
||||
```sh
|
||||
sudo systemctl status vector
|
||||
```
|
||||
```sh
|
||||
sudo systemctl stop vector
|
||||
```
|
||||
|
||||
|
||||
## Шаг 5: Проверка отправки в Gotify
|
||||
1. Убедитесь, что Gotify доступен по указанному URL.
|
||||
2. Добавьте тестовую строку лога в `/opt/org_ccalm_main/logs/ccalm.log`:
|
||||
```sh
|
||||
echo '{"level": "ERROR", "message": "Database connection failed", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_main/logs/ccalm.log
|
||||
```
|
||||
3. Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed".
|
||||
|
||||
## Шаг 6: Отладка
|
||||
- Логи Vector: `/var/log/vector/vector.log` или stdout (в тестовом режиме).
|
||||
- Проверьте логи при проблемах:
|
||||
```sh
|
||||
cat /var/log/vector/vector.log
|
||||
```
|
||||
|
||||
## Дополнительные настройки
|
||||
- **Права доступа к файлу логов**:
|
||||
```sh
|
||||
sudo chown vector:vector /opt/org_ccalm_main/logs/ccalm.log
|
||||
sudo chmod 644 /opt/org_ccalm_main/logs/ccalm.log
|
||||
```
|
||||
- **Если JSON-формат отличается**: Если поле `level` называется иначе (например, `log_level`), замените `.level` на `.log_level` в `condition`.
|
||||
- **HTTP вместо HTTPS**: Если Gotify использует HTTP, замените `https://` на `http://` в `uri`.
|
||||
|
||||
## Примечания
|
||||
- Убедитесь, что Gotify настроен и токен действителен.
|
||||
- Если логи не отправляются, проверьте сетевую доступность Gotify и правильность URL/токена.
|
||||
- Для чтения только новых логов удалите `read_from: beginning` в конфигурации.
|
||||
@ -11,7 +11,7 @@ ssh igor@88.218.94.134 -p 2200
|
||||
----------------------------------------------------------------------------------------------------
|
||||
```sh
|
||||
sudo apt-get update &&
|
||||
sudo apt-get install nginx
|
||||
sudo apt-get install nginx -y
|
||||
```
|
||||
Настройка самоподписанного сертификата для SSL nginx
|
||||
```sh
|
||||
@ -19,36 +19,56 @@ sudo apt-get install nginx
|
||||
```
|
||||
Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера.
|
||||
```sh
|
||||
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
|
||||
sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048
|
||||
```
|
||||
Создаём файл:
|
||||
```sh
|
||||
sudo mcedit /etc/nginx/conf.d/ssl.conf
|
||||
```
|
||||
И вписываем в него:
|
||||
```conf
|
||||
server {
|
||||
listen 8091 ssl http2;
|
||||
listen [::]:8091 ssl http2;
|
||||
|
||||
server_name istransit.kg;
|
||||
И вписываем в него:
|
||||
```sh
|
||||
cd /etc/nginx/sites-available/ &&
|
||||
sudo tee ccalm.org > /dev/null <<'EOF'
|
||||
server {
|
||||
listen 8081 ssl http2;
|
||||
listen [::]:8081 ssl http2;
|
||||
|
||||
root /opt/www/org_ccalm;
|
||||
index index.html;
|
||||
|
||||
server_name ccalm.org www.ccalm.org;
|
||||
|
||||
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
|
||||
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
|
||||
ssl_dhparam /etc/nginx/dhparam.pem;
|
||||
|
||||
root /opt/www/istransit.kg;
|
||||
index index.html index.htm;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404; # Попытка найти файл или возвращение 404
|
||||
try_files $uri $uri/ =404;
|
||||
|
||||
# Оптимизация для быстрой отдачи статики
|
||||
sendfile on; # Использует sendfile() ядра Linux для ускорения
|
||||
tcp_nopush off; # Отключает задержку Nagle (если нужна мгновенная отправка)
|
||||
}
|
||||
location ~ /index\.html$ {
|
||||
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";
|
||||
add_header Pragma "no-cache";
|
||||
add_header Expires 0;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
Теперь можно включить виртуальный хост:
|
||||
```sh
|
||||
sudo ln -s /etc/nginx/sites-available/ccalm.org /etc/nginx/sites-enabled/
|
||||
```
|
||||
|
||||
```sh
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
Журнал последних 50 записей
|
||||
```sh
|
||||
journalctl -u nginx.service -n 50
|
||||
```
|
||||
|
||||
Также есть такие команды:
|
||||
nginx -s stop — быстрое завершение
|
||||
nginx -s quit — плавное завершение
|
||||
@ -78,13 +98,25 @@ server {
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
location ~ /index\.html$ {
|
||||
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";
|
||||
add_header Pragma "no-cache";
|
||||
add_header Expires 0;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
|
||||
Теперь можно включить виртуальный хост:
|
||||
```sh
|
||||
sudo ln -s /etc/nginx/sites-available/istransit.kz /etc/nginx/sites-enabled/
|
||||
```
|
||||
Проверяем правильность конфигурации:
|
||||
```sh
|
||||
sudo nginx -t
|
||||
```
|
||||
Перезапускаем:
|
||||
```sh
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
@ -22,7 +22,7 @@ sudo apt install -y docker.io docker-compose
|
||||
```
|
||||
|
||||
Вставьте следующий конфигурационный файл:
|
||||
|
||||
В кодфиге прописан корневой сертификат чтобы node.js ему доверял
|
||||
```yaml
|
||||
services:
|
||||
uptime-kuma:
|
||||
@ -33,6 +33,9 @@ services:
|
||||
- "3001:3001"
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- /usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro
|
||||
environment:
|
||||
- NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt
|
||||
```
|
||||
|
||||
## 4. Запуск контейнера
|
||||
@ -63,4 +66,3 @@ start http://192.168.200.84:3001
|
||||
```
|
||||
|
||||
Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀
|
||||
|
||||
@ -1,18 +1,27 @@
|
||||
|
||||
https://documentation.wazuh.com/current/installation-guide/wazuh-server/installation-assistant.html
|
||||
|
||||
Подключаемся к нужному серверу:
|
||||
Connectiong to server:
|
||||
```sh
|
||||
ssh igor@192.168.200.86
|
||||
```
|
||||
|
||||
Execute installation commman:
|
||||
```sh
|
||||
curl -sO https://packages.wazuh.com/4.11/wazuh-install.sh
|
||||
curl -sO https://packages.wazuh.com/4.11/wazuh-install.sh &&
|
||||
sudo bash wazuh-install.sh -a
|
||||
```
|
||||
|
||||
20/04/2025 12:07:15 INFO: You can access the web interface https://<wazuh-dashboard-ip>:443
|
||||
User: admin
|
||||
Password: LsR1i+*DT6Az37rBDTnuyw54wB+Ce*1+
|
||||
|
||||
|
||||
debian virtual box
|
||||
admin
|
||||
KD7Iv+BCJkARvxPA6UYp+HdxhacTUNy6
|
||||
|
||||
|
||||
```sh
|
||||
start https://192.168.200.86:443
|
||||
open https://127.0.0.1:443
|
||||
```
|
||||
Компонент Порт по умолчанию Доступ
|
||||
Wazuh API 55000 Внутренний
|
||||
@ -75,9 +84,17 @@ sudo grep -i "history" /var/log/wazuh-indexer/wazuh-cluster.log
|
||||
sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log
|
||||
```
|
||||
|
||||
Инициализируем кластер безопасности:
|
||||
|
||||
|
||||
|
||||
Временно отключаю аудит:
|
||||
```sh
|
||||
/usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh \
|
||||
sudo mcedit /etc/wazuh-indexer/opensearch-security/audit.yml
|
||||
```
|
||||
|
||||
Инициализируем кластер безопасности (после отключения аудита перенастраиваем):
|
||||
```sh
|
||||
sudo -u wazuh-indexer /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh \
|
||||
-cd /etc/wazuh-indexer/opensearch-security/ \
|
||||
-icl -nhnv \
|
||||
-cacert /etc/wazuh-indexer/certs/root-ca.pem \
|
||||
@ -85,6 +102,11 @@ sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log
|
||||
-key /etc/wazuh-indexer/certs/admin-key.pem
|
||||
```
|
||||
|
||||
Перезагружаем после применения настроек
|
||||
```sh
|
||||
sudo systemctl restart wazuh-indexer
|
||||
```
|
||||
|
||||
|
||||
Проверьте конфигурацию аудита в файле /etc/wazuh-indexer/opensearch.yml:
|
||||
```sh
|
||||
@ -102,3 +124,6 @@ opensearch_security.audit.enable_transport: true
|
||||
```sh
|
||||
sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log
|
||||
```
|
||||
|
||||
|
||||
sudo chown -R wazuh-indexer:wazuh-indexer /etc/wazuh-indexer /var/lib/wazuh-indexer /var/log/wazuh-indexer
|
||||
@ -150,9 +150,12 @@ sudo mcedit /etc/postgresql/16/main/pg_hba.conf
|
||||
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
|
||||
pg_restore --host=127.0.0.1 --username=postgres --dbname=CCALM --verbose /tmp/CCALM.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
|
||||
|
||||
91
PostgreSQL/PostgreSQL_select.md
Normal file
91
PostgreSQL/PostgreSQL_select.md
Normal file
@ -0,0 +1,91 @@
|
||||
Подключаюсь к инфраструктуре:
|
||||
```sh
|
||||
ssh ivanov_i@10.101.1.3
|
||||
```
|
||||
|
||||
Зеркало APP Астана RabbitMQ
|
||||
```sh
|
||||
ssh ivanov_i@10.201.1.3 -p 22
|
||||
```
|
||||
|
||||
```sh
|
||||
psql -h 10.101.1.6 -U user_developer_igor_i -d transit
|
||||
```
|
||||
|
||||
|
||||
```sh
|
||||
psql -h 10.201.1.6 -U postgres -d transit
|
||||
```
|
||||
|
||||
## Логи по Базе
|
||||
|
||||
0) Создание таблицы
|
||||
```sql
|
||||
CREATE TABLE public.test_table (id bigint, PRIMARY KEY (id));
|
||||
```
|
||||
1) Немного изменил права:
|
||||
```sql
|
||||
ALTER TABLE IF EXISTS public.test_table OWNER to user_developer_igor_i;
|
||||
```
|
||||
2) Удаление таблицы
|
||||
```sql
|
||||
DROP TABLE public.test_table;
|
||||
```
|
||||
3) Создание пользователя БД
|
||||
```sql
|
||||
CREATE ROLE test_user WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOREPLICATION NOBYPASSRLS CONNECTION LIMIT -1 VALID UNTIL '2025-05-22T00:00:00+05:00' PASSWORD '!Ii123456';
|
||||
```
|
||||
|
||||
|
||||
|
||||
4) Изменение прав пользователя !!!!!!!!!!Вадим не видел!!!!!!!!!!!
|
||||
```sql
|
||||
ALTER ROLE user_developer_igor_i NOLOGIN VALID UNTIL '2025-05-22T00:00:00+05:00';
|
||||
```
|
||||
```sql
|
||||
GRANT app_authorization TO user_developer_igor_i;
|
||||
```
|
||||
```sql
|
||||
REVOKE app_authorization FROM user_developer_igor_i;
|
||||
```
|
||||
```sql
|
||||
REVOKE SELECT ON TABLE public.test_table FROM user_developer_igor_i;
|
||||
```
|
||||
```sql
|
||||
GRANT SELECT ON public.test_table TO user_developer_igor_i;
|
||||
```
|
||||
|
||||
|
||||
5) Удаление пользователя БД
|
||||
```sql
|
||||
DROP ROLE test_user;
|
||||
```
|
||||
```sql
|
||||
CREATE DATABASE test_db WITH OWNER = user_developer_igor_i ENCODING = 'UTF8' LOCALE_PROVIDER = 'libc' CONNECTION LIMIT = -1 IS_TEMPLATE = False;
|
||||
```
|
||||
```sql
|
||||
DROP DATABASE test_db;
|
||||
```
|
||||
|
||||
Выходим:
|
||||
```sql
|
||||
\q
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Логи по ППО:
|
||||
1) Попытки не верного ввода пароля/логина
|
||||
2) Авторизация
|
||||
3) Выход из системы
|
||||
4) Создание пользователя
|
||||
5) Изменение прав пользователю.
|
||||
6) Удаление пользователя
|
||||
7) Создание перевозки
|
||||
8) Проведение оплаты
|
||||
|
||||
|
||||
|
||||
@ -109,7 +109,7 @@ stats auth igor:i123456
|
||||
````
|
||||
Также можно в журнале посмотреть что написал HAProxy:
|
||||
```sh
|
||||
sudo journalctl -u haproxy --no-pager | tail -n 50
|
||||
sudo journalctl -u haproxy --no-pager -n 50 -f
|
||||
````
|
||||
Перезагружаем:
|
||||
```sh
|
||||
@ -1,8 +1,10 @@
|
||||
С внешки во внутрянную инфраструктуру подключаемся через HAProxy а уже внутри использую Traefik
|
||||
|
||||
Открываю нужный сервер
|
||||
```sh
|
||||
wsl
|
||||
```
|
||||
Или такой:
|
||||
Открывает traefik на 192.168.200.85:
|
||||
```sh
|
||||
ssh igor@192.168.200.85 -p 22
|
||||
```
|
||||
@ -37,7 +39,7 @@ wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_
|
||||
```
|
||||
|
||||
Проверь версию:
|
||||
```bash
|
||||
```sh
|
||||
traefik version
|
||||
```
|
||||
|
||||
@ -74,12 +76,13 @@ api:
|
||||
providers:
|
||||
file:
|
||||
filename: "/etc/traefik/dynamic.yml"
|
||||
watch: true
|
||||
|
||||
# Настройка сертификатов (пример с Let's Encrypt)
|
||||
certificatesResolvers:
|
||||
myresolver:
|
||||
acme:
|
||||
email: "your-email@example.com"
|
||||
email: "irigm@mail.ru"
|
||||
storage: "/etc/traefik/acme.json"
|
||||
httpChallenge:
|
||||
entryPoint: web
|
||||
@ -102,56 +105,63 @@ http:
|
||||
service: api@internal
|
||||
|
||||
ccalm-api-auth:
|
||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
|
||||
service: org_ccalm_api_authorization_v02
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
|
||||
service: org_ccalm_api_authorization_v02
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
middlewares:
|
||||
- strip-auth-prefix
|
||||
|
||||
ccalm-dbms:
|
||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
|
||||
service: org_ccalm_dbms_v09
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
|
||||
service: org_ccalm_dbms_v09
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
middlewares:
|
||||
- strip-dbms-prefix
|
||||
|
||||
ccalm-translation:
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/translation/v01/`)"
|
||||
service: org_ccalm_translation_v01
|
||||
entryPoints:
|
||||
- websecure
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
middlewares:
|
||||
- strip-translation-prefix
|
||||
#middlewares:
|
||||
# - strip-translation-prefix
|
||||
|
||||
ccalm-login:
|
||||
rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
|
||||
service: org_ccalm_login_v01
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
|
||||
service: org_ccalm_login_v01
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
|
||||
ccalm-default:
|
||||
rule: "Host(`ccalm.test`)"
|
||||
service: org_ccalm
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "Host(`ccalm.test`)"
|
||||
service: org_ccalm
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
|
||||
powerdns:
|
||||
rule: "Host(`powerdns.local`)"
|
||||
service: local_powerdns
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "Host(`powerdns.local`)"
|
||||
service: local_powerdns
|
||||
tls: {}
|
||||
|
||||
gotify:
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "Host(`gotify.local`)"
|
||||
service: local_gotify
|
||||
tls: {}
|
||||
|
||||
middlewares:
|
||||
@ -163,7 +173,7 @@ http:
|
||||
stripPrefix:
|
||||
prefixes:
|
||||
- "/api/dbms/v09"
|
||||
strip-dbms-prefix:
|
||||
strip-translation-prefix:
|
||||
stripPrefix:
|
||||
prefixes:
|
||||
- "/api/translation/v01"
|
||||
@ -179,6 +189,16 @@ http:
|
||||
path: "/"
|
||||
interval: "5s"
|
||||
|
||||
# Бэкенд для local_gotify
|
||||
local_gotify:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "https://192.168.200.84:8080"
|
||||
serversTransport: insecureTransport
|
||||
healthCheck:
|
||||
path: "/"
|
||||
interval: "5s"
|
||||
|
||||
# Бэкенд для org_ccalm_api_authorization_v02 (HTTPS с отключенной проверкой SSL)
|
||||
org_ccalm_api_authorization_v02:
|
||||
loadBalancer:
|
||||
@ -203,10 +223,12 @@ http:
|
||||
org_ccalm_translation_v01:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "https://192.168.200.184:8085"
|
||||
#- url: "https://192.168.200.184:8085"
|
||||
- url: "https://ccalm.org"
|
||||
passHostHeader: false
|
||||
serversTransport: insecureTransport
|
||||
healthCheck:
|
||||
path: "/"
|
||||
path: ""
|
||||
interval: "5s"
|
||||
|
||||
# Бэкенд для org_ccalm_login_v01 (HTTP, без SSL)
|
||||
@ -240,6 +262,8 @@ tls:
|
||||
keyFile: "/etc/traefik/certs/ccalm.test.key"
|
||||
- certFile: "/etc/traefik/certs/powerdns.local.crt"
|
||||
keyFile: "/etc/traefik/certs/powerdns.local.key"
|
||||
- certFile: "/etc/traefik/certs/gotify.local.crt"
|
||||
keyFile: "/etc/traefik/certs/gotify.local.key"
|
||||
- certFile: "/etc/traefik/certs/wildcard.local.crt"
|
||||
keyFile: "/etc/traefik/certs/wildcard.local.key"
|
||||
- certFile: "/etc/traefik/certs/wildcard.test.crt"
|
||||
@ -293,7 +317,7 @@ EOF
|
||||
## 🔎 Шаг 6. Проверка работы
|
||||
Откройте в браузере:
|
||||
```sh
|
||||
open http://localhost:8080/dashboard/
|
||||
open http://192.168.200.85:8080/dashboard/
|
||||
```
|
||||
|
||||
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.
|
||||
@ -1,7 +1,7 @@
|
||||
# Устанавливаю Traefik на туречский сервер
|
||||
# Устанавливаю Traefik cервер в Астане
|
||||
|
||||
```sh
|
||||
ssh igor@156.244.31.209 -p 2200
|
||||
ssh ubuntu@194.32.140.11 -p 22
|
||||
```
|
||||
|
||||
# Установка Traefik на Linux Mint / Ubuntu
|
||||
@ -24,6 +24,18 @@ cd ~ &&
|
||||
wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_linux_amd64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
## 📥 Создаём группу и пользователя под которым будет запускаться traefik
|
||||
|
||||
Создаём домашнюю директорию, группу и пользователя:
|
||||
```sh
|
||||
sudo mkdir -p /etc/traefik &&
|
||||
cd /etc/traefik &&
|
||||
sudo groupadd traefik &&
|
||||
sudo useradd -s /bin/false -g traefik -d /etc/traefik traefik
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 📥 Шаг 3. Распаковка и установка
|
||||
@ -38,6 +50,12 @@ wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_
|
||||
traefik version
|
||||
```
|
||||
|
||||
Разрешаем занимать порты с номером меньше 1024
|
||||
```sh
|
||||
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/traefik
|
||||
```
|
||||
|
||||
|
||||
```conf
|
||||
Version: 3.3.4
|
||||
Codename: saintnectaire
|
||||
@ -48,12 +66,6 @@ OS/Arch: linux/amd64
|
||||
|
||||
---
|
||||
|
||||
## 📁 Шаг 4. Создание директории и базового конфига
|
||||
```sh
|
||||
sudo mkdir -p /etc/traefik &&
|
||||
cd /etc/traefik
|
||||
```
|
||||
|
||||
### Пример `traefik.yml`
|
||||
```sh
|
||||
cd /etc/traefik &&
|
||||
@ -70,15 +82,11 @@ entryPoints:
|
||||
websecure:
|
||||
address: ":443"
|
||||
traefik:
|
||||
address: ":8080"
|
||||
address: ":8070"
|
||||
|
||||
api:
|
||||
dashboard: true
|
||||
insecure: true
|
||||
|
||||
providers:
|
||||
file:
|
||||
filename: "/etc/traefik/dynamic.yml"
|
||||
#insecure: true
|
||||
|
||||
# Настройка сертификатов (пример с Let's Encrypt)
|
||||
certificatesResolvers:
|
||||
@ -89,6 +97,11 @@ certificatesResolvers:
|
||||
httpChallenge:
|
||||
entryPoint: web
|
||||
|
||||
providers:
|
||||
file:
|
||||
filename: "/etc/traefik/dynamic.yml"
|
||||
watch: true
|
||||
|
||||
log:
|
||||
level: DEBUG
|
||||
EOF
|
||||
@ -98,61 +111,163 @@ EOF
|
||||
```sh
|
||||
cd /etc/traefik &&
|
||||
sudo tee /etc/traefik/dynamic.yml > /dev/null <<'EOF'
|
||||
---
|
||||
http:
|
||||
routers:
|
||||
|
||||
dashboard:
|
||||
entryPoints:
|
||||
- traefik
|
||||
rule: "Host(`localhost`)"
|
||||
rule: "Host(`194.32.140.11`)"
|
||||
service: api@internal
|
||||
middlewares:
|
||||
- dashboard-auth
|
||||
|
||||
geovizor-api-zones:
|
||||
rule: "Host(`geovizor.top`) && PathPrefix(`/api/v1/servers/localhost/zones/`)"
|
||||
service: top_geovizor_api_zones_v01
|
||||
ccalm-api-auth:
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/authorization/v02/`)"
|
||||
service: org_ccalm_api_authorization_v02
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
middlewares:
|
||||
- strip-auth-prefix
|
||||
|
||||
ccalm-dbms:
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/dbms/v09/`)"
|
||||
service: org_ccalm_dbms_v09
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
middlewares:
|
||||
- strip-dbms-prefix
|
||||
|
||||
ccalm-translation:
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/translation/v01/`)"
|
||||
service: org_ccalm_translation_v01
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
middlewares:
|
||||
- strip-translation-prefix
|
||||
|
||||
ccalm-login:
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/login/`)"
|
||||
service: org_ccalm_login_v01
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
|
||||
geovizor-default:
|
||||
rule: "Host(`geovizor.top`)"
|
||||
service: top_geovizor_default
|
||||
org-ccalm-main:
|
||||
entryPoints:
|
||||
- websecure
|
||||
rule: "Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)"
|
||||
service: org_ccalm_main
|
||||
tls:
|
||||
certresolver: myresolver
|
||||
|
||||
acme-http:
|
||||
rule: "PathPrefix(`/.well-known/acme-challenge/`)"
|
||||
entryPoints:
|
||||
- web
|
||||
middlewares: []
|
||||
service: noop
|
||||
priority: 1000
|
||||
|
||||
services:
|
||||
|
||||
top_geovizor_api_zones_v01:
|
||||
# backend org_ccalm_api_authorization_v02
|
||||
org_ccalm_api_authorization_v02:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://156.244.31.209:8081"
|
||||
- url: "https://127.0.0.1:8082"
|
||||
serversTransport: insecureTransport
|
||||
healthCheck:
|
||||
path: "/"
|
||||
interval: "5s"
|
||||
|
||||
# Бэкенд по умолчанию top_geovizor
|
||||
top_geovizor_default:
|
||||
# org_ccalm_dbms_v09 backend
|
||||
org_ccalm_dbms_v09:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://127.0.0.1:8082"
|
||||
- url: "https://127.0.0.1:8084"
|
||||
serversTransport: insecureTransport
|
||||
healthCheck:
|
||||
path: "/"
|
||||
interval: "5s"
|
||||
|
||||
# Translation backend
|
||||
org_ccalm_translation_v01:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "https://127.0.0.1:8085"
|
||||
passHostHeader: false
|
||||
serversTransport: insecureTransport
|
||||
healthCheck:
|
||||
path: ""
|
||||
interval: "5s"
|
||||
|
||||
# Backend for org_ccalm_login_v01 (HTTP, without SSL)
|
||||
org_ccalm_login_v01:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "https://127.0.0.1:8081"
|
||||
healthCheck:
|
||||
path: "/"
|
||||
interval: "5s"
|
||||
serversTransport: insecureTransport
|
||||
|
||||
# Default backend for ccalm.org
|
||||
org_ccalm_main:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "https://127.0.0.1:8083"
|
||||
healthCheck:
|
||||
path: "/"
|
||||
interval: "5s"
|
||||
serversTransport: insecureTransport
|
||||
|
||||
# Fake noop secvices
|
||||
noop:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://127.0.0.1"
|
||||
|
||||
# Определяем транспорт для отключения проверки SSL
|
||||
serversTransports:
|
||||
insecureTransport:
|
||||
insecureSkipVerify: true
|
||||
|
||||
# Добавляем сертификаты
|
||||
tls:
|
||||
certificates:
|
||||
middlewares:
|
||||
strip-dbms-prefix:
|
||||
stripPrefix:
|
||||
prefixes:
|
||||
- "/api/dbms/v09"
|
||||
strip-auth-prefix:
|
||||
stripPrefix:
|
||||
prefixes:
|
||||
- "/api/authorization/v02"
|
||||
strip-translation-prefix:
|
||||
stripPrefix:
|
||||
prefixes:
|
||||
- "/api/translation/v01"
|
||||
dashboard-auth:
|
||||
basicAuth:
|
||||
users:
|
||||
- "admin:$apr1$NUoqcU3I$O6VxeuGhsA6RSIyh6rNbo." # htpasswd -nb admin t745632746573t
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
For checking syntactic:
|
||||
```sh
|
||||
yamllint -d "{extends: default, rules: {line-length: disable}}" /etc/traefik/dynamic.yml
|
||||
```
|
||||
|
||||
|
||||
Для хранения сертификатов файл:
|
||||
```sh
|
||||
sudo touch /etc/traefik/acme.json &&
|
||||
@ -167,10 +282,12 @@ EOF
|
||||
cd /etc/systemd/system &&
|
||||
sudo tee /etc/systemd/system/traefik.service > /dev/null <<'EOF'
|
||||
[Unit]
|
||||
Description=Traefik
|
||||
Description=Reverse proxy Traefik
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=traefik
|
||||
Group=traefik
|
||||
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
|
||||
Restart=always
|
||||
|
||||
@ -179,7 +296,6 @@ WantedBy=multi-user.target
|
||||
EOF
|
||||
```
|
||||
|
||||
|
||||
Примените:
|
||||
```sh
|
||||
sudo systemctl daemon-reload &&
|
||||
@ -193,14 +309,13 @@ EOF
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
ыгвщ куищще
|
||||
## 🔎 Шаг 6. Проверка работы
|
||||
Откройте в браузере:
|
||||
Откройте в браузере cпаролем что быше "":
|
||||
```sh
|
||||
open http://localhost:8080/dashboard/
|
||||
open http://194.32.140.11:8070/dashboard
|
||||
```
|
||||
|
||||
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.
|
||||
|
||||
---
|
||||
|
||||
@ -220,6 +335,9 @@ sudo journalctl -u traefik -f
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 🐳 Как вариант можно установить через Docker
|
||||
|
||||
|
||||
@ -251,7 +369,7 @@ services:
|
||||
ports:
|
||||
- "80:80" # HTTP
|
||||
- "443:443" # HTTPS
|
||||
- "8080:8080" # Dashboard
|
||||
- "8070:8070" # Dashboard
|
||||
volumes:
|
||||
- /etc/traefik:/etc/traefik
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
@ -277,7 +395,7 @@ EOF
|
||||
|
||||
Откройте в браузере:
|
||||
```sh
|
||||
open http://192.168.200.85:8080/dashboard/
|
||||
open http://192.168.200.85:8070/dashboard/
|
||||
```
|
||||
|
||||
```sh
|
||||
@ -1,8 +0,0 @@
|
||||
|
||||
```sh
|
||||
ssh administrator@10.101.1.37 -p 22
|
||||
```
|
||||
|
||||
```sh
|
||||
sudo rabbitmqctl change_password admin KGf4nxT8vxZWv3jqNasP
|
||||
```
|
||||
@ -79,6 +79,17 @@ openssl x509 -in powerdns.local.crt -text -noout
|
||||
```
|
||||
|
||||
|
||||
Создаём и подписываем одной группой команд:
|
||||
```sh
|
||||
openssl version &&
|
||||
openssl genrsa -out gotify.local.key 2048 &&
|
||||
openssl req -new -key gotify.local.key -out gotify.local.csr -subj "/CN=gotify.local" -addext "subjectAltName=DNS:gotify.local" &&
|
||||
openssl x509 -req -in gotify.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out gotify.local.crt -days 365 -sha256 -copy_extensions copy &&
|
||||
openssl x509 -in gotify.local.crt -text -noout &&
|
||||
cat gotify.local.crt gotify.local.key > gotify.local.pem
|
||||
```
|
||||
Теперь можно устанавливать в HAProxy этот gotify.local.pem сертификат
|
||||
|
||||
|
||||
|
||||
Подписать корневым CA:
|
||||
382
Ubuntu.md
382
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) <id:d497c32>
|
||||
Можно проверить какой IP выдаст на DNS запрос
|
||||
dig locust.kz A
|
||||
|
||||
На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns.
|
||||
|
||||
|
||||
|
||||
|
||||
Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками
|
||||
|
||||
Перейдем в него.
|
||||
cd /etc/bind/
|
||||
Генерируем пару ключь для обмена информацией между клиентом и сервером:
|
||||
sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key
|
||||
sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key
|
||||
Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ.
|
||||
include "/etc/bind/dirt.kz.key";
|
||||
include "/etc/bind/locust.kz.key";
|
||||
Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем.
|
||||
zone "dirt.kz" {
|
||||
type master;
|
||||
allow-update {key dirt.kz;};
|
||||
file "/var/cache/bind/dirt.kz";
|
||||
};
|
||||
|
||||
zone "locust.kz" {
|
||||
type master;
|
||||
allow-update {key locust.kz;};
|
||||
file "/var/cache/bind/locust.kz";
|
||||
};
|
||||
|
||||
|
||||
В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где:
|
||||
В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где:
|
||||
|
||||
Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте
|
||||
Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/
|
||||
SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA
|
||||
NS — Сервер имён
|
||||
A — рекорд
|
||||
MX — Почта для обмена
|
||||
CN — Каноническое имя
|
||||
PTR — указатель
|
||||
И таким содержимым:
|
||||
|
||||
$ORIGIN dirt.kz
|
||||
$TTL 604800
|
||||
@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. (
|
||||
8 ; Serial
|
||||
604800 ; Refresh
|
||||
86400 ; Retry
|
||||
2419200 ; Expire
|
||||
604800 ) ; Negative Cache TTL
|
||||
;
|
||||
@ IN NS bigfoottrade.kz.
|
||||
|
||||
Второй файл для locust.kz:
|
||||
|
||||
$ORIGIN .
|
||||
$TTL 604800 ; 1 week
|
||||
locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. (
|
||||
134 ; serial
|
||||
604800 ; refresh (1 week)
|
||||
86400 ; retry (1 day)
|
||||
1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds)
|
||||
604800 ; minimum (1 week)
|
||||
)
|
||||
NS bigfoottrade.kz.
|
||||
$TTL 3600 ; 1 hour
|
||||
A 5.76.254.182
|
||||
$ORIGIN locust.kz.
|
||||
* A 127.0.0.1
|
||||
|
||||
|
||||
Правлю права доступа:
|
||||
sudo chown -R bind:bind /etc/bind
|
||||
|
||||
Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой:
|
||||
sudo rndc reconfig
|
||||
Потом следует вызвать:
|
||||
sudo systemctl restart bind9
|
||||
Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду
|
||||
После настроек сервера перезагружаем его:
|
||||
sudo named-checkconf
|
||||
sudo rndc reload
|
||||
sudo systemctl restart bind9
|
||||
sudo rndc status
|
||||
journalctl | grep bind
|
||||
sudo journalctl -u bind9 -n 50
|
||||
|
||||
|
||||
Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу:
|
||||
|
||||
Файл из примера:
|
||||
#!/bin/bash
|
||||
TTL=3600
|
||||
SERVER=ns.dyndns.my
|
||||
HOSTNAME=dhost.dyndns.my
|
||||
ZONE=dyndns.my
|
||||
KEYFILE=Kdyndns.my.+157+48025.private
|
||||
new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере!
|
||||
cd /etc/ddns
|
||||
nsupdate -v -k $KEYFILE << EOF
|
||||
server $SERVER
|
||||
zone $ZONE
|
||||
update delete $HOSTNAME A
|
||||
update add $HOSTNAME $TTL A $new_ip_address
|
||||
send
|
||||
EOF
|
||||
|
||||
Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже:
|
||||
#!/bin/bash
|
||||
TTL=3600
|
||||
SERVER=127.0.0.1
|
||||
HOSTNAME=*.dirt.kz
|
||||
ZONE=dirt.kz
|
||||
KEYFILE=/etc/bind/dirt.kz.key
|
||||
|
||||
new_ip_address=
|
||||
FILE=/etc/ddns/ip.txt
|
||||
if test -f "$FILE"; then
|
||||
new_ip_address=`cat $FILE`
|
||||
rm $FILE
|
||||
fi
|
||||
|
||||
len=${#new_ip_address}
|
||||
if [ $len -gt 3 ]
|
||||
then
|
||||
echo "New IP address = $new_ip_address"
|
||||
else
|
||||
echo "Not find IP address"
|
||||
exit
|
||||
fi
|
||||
|
||||
cd /etc/ddns
|
||||
sudo nsupdate -v -k $KEYFILE << EOF
|
||||
server $SERVER
|
||||
zone $ZONE
|
||||
update delete $HOSTNAME A
|
||||
update add $HOSTNAME $TTL A $new_ip_address
|
||||
update delete dirt.kz A
|
||||
update add dirt.kz $TTL A $new_ip_address
|
||||
send
|
||||
EOF
|
||||
echo "OK"
|
||||
|
||||
Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента:
|
||||
<?php
|
||||
|
||||
echo '<pre>'; print_r(getallheaders()); echo '</pre>';
|
||||
|
||||
// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x"
|
||||
foreach ( getallheaders() as $k => $v) {
|
||||
if ( strtolower($k) == 'x-forwarded-for' ) {
|
||||
$tmp = explode(', ', $v);
|
||||
if ( $tmp[count($tmp)-1] != '' )
|
||||
$_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1];
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){
|
||||
$myfile = fopen("/etc/ddns/ip.txt", "w");
|
||||
fwrite($myfile, $_SERVER['REMOTE_ADDR']);
|
||||
fclose($myfile);
|
||||
}
|
||||
|
||||
echo $_SERVER['REMOTE_ADDR'];
|
||||
|
||||
?>
|
||||
|
||||
Проверяем что находит IP по доменному имени
|
||||
nslookup dirt.kz 127.0.0.1
|
||||
|
||||
|
||||
****************************************************************************************************
|
||||
Установка сервиса обмена сообщениями RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/
|
||||
sudo apt-get update
|
||||
sudo apt-get dist-upgrade
|
||||
sudo apt install rabbitmq-server
|
||||
Посмотреть список используемых плагинов:
|
||||
sudo rabbitmq-plugins list
|
||||
Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную.
|
||||
sudo rabbitmq-plugins enable rabbitmq_management
|
||||
|
||||
rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672
|
||||
Но для активации нужно добавить пользователя, смотрим пользователей:
|
||||
sudo rabbitmqctl list_users
|
||||
sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера
|
||||
sudo rabbitmqctl set_user_tags admin administrator
|
||||
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
|
||||
Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43
|
||||
|
||||
Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed.
|
||||
Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password
|
||||
producer: клиент, выполняющий отправку сообщения
|
||||
queue: собственно очередь сообщений
|
||||
consumer: клиент, получающий сообщения из очереди
|
||||
exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html)
|
||||
|
||||
Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y
|
||||
https://www.rabbitmq.com/devtools.html :
|
||||
Создаю Maven проект в консоли:
|
||||
cd O:\projects\Workspace_Java\
|
||||
mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
|
||||
Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client:
|
||||
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
|
||||
<dependency>
|
||||
<groupId>com.rabbitmq</groupId>
|
||||
<artifactId>amqp-client</artifactId>
|
||||
<version>5.14.2</version>
|
||||
</dependency>
|
||||
Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA.
|
||||
|
||||
Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/
|
||||
или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/
|
||||
Добавил в POM файл:
|
||||
<repositories>
|
||||
<repository>
|
||||
<name>RabbitMQ</name>
|
||||
<url>https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0</url>
|
||||
<id>com.rabbitmq</id>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.rabbitmq</groupId>
|
||||
<artifactId>amqp-client</artifactId>
|
||||
<version>5.16.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
|
||||
Перезагружаем:
|
||||
sudo service rabbitmq-server restart
|
||||
|
||||
****************************************************************************************************
|
||||
Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel
|
||||
|
||||
Активирую плагин командой:
|
||||
sudo rabbitmq-plugins enable rabbitmq_shovel
|
||||
sudo rabbitmq-plugins enable rabbitmq_shovel_management
|
||||
|
||||
Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку:
|
||||
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation",
|
||||
"src-queue": "TO_KAZ",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground",
|
||||
"dest-exchange": "swap",
|
||||
"dest-exchange-key": ".KAZ.",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
|
||||
Для Росии такие настройки:
|
||||
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_rus '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus",
|
||||
"src-queue": "TO_RUS",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground",
|
||||
"dest-exchange": "swap",
|
||||
"dest-exchange-key": "KZ",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
|
||||
Для Беларусии такие настройки:
|
||||
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_blr '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr",
|
||||
"src-queue": "TO_BLR",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber",
|
||||
"dest-exchange": "eec.swap",
|
||||
"dest-exchange-key": "KZ",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
|
||||
Для Армении такие настройки:
|
||||
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_arm '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm",
|
||||
"src-queue": "TO_ARM",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation",
|
||||
"dest-exchange": "swap_kz",
|
||||
"dest-exchange-key": "KZ_ISTT",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
|
||||
Для Кыргызстана (таможенная инфраструктура)
|
||||
|
||||
sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz",
|
||||
"src-queue": "TO_KGZ",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz",
|
||||
"dest-exchange": "swap",
|
||||
"dest-exchange-key": "KAZ",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
|
||||
Удалять так:
|
||||
sudo rabbitmqctl clear_parameter shovel kaz_to_kgz
|
||||
|
||||
Для отправки из Киргизии нам то такие настройки:
|
||||
|
||||
sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{
|
||||
"src-protocol": "amqp091",
|
||||
"src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz",
|
||||
"src-queue": "TO_KAZ",
|
||||
"dest-protocol": "amqp091",
|
||||
"dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz",
|
||||
"dest-exchange": "swap",
|
||||
"dest-exchange-key": "KGZ",
|
||||
"ack-mode": "on-confirm",
|
||||
"publish-properties": {
|
||||
"delivery_mode": 2
|
||||
}
|
||||
}'
|
||||
|
||||
Удалять так:
|
||||
sudo rabbitmqctl clear_parameter shovel kgz_to_kaz
|
||||
|
||||
|
||||
Чтобы проверить текущие параметры Shovel:
|
||||
sudo rabbitmqctl list_parameters
|
||||
А также можно взглянуть что создалось через WEB интерфейс
|
||||
|
||||
Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает.
|
||||
|
||||
****************************************************************************************************
|
||||
Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/
|
||||
|
||||
Reference in New Issue
Block a user