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_ENABLED=true
|
||||||
- GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt
|
- GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt
|
||||||
- GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key
|
- GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key
|
||||||
|
- GIN_MODE=debug
|
||||||
networks:
|
networks:
|
||||||
- gotify-net
|
- 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. Подключаемся к нужному серверу
|
## 2. Подключаемся к нужному серверу
|
||||||
```sh
|
```sh
|
||||||
ssh igor@192.168.200.85 -p 22
|
ssh root@bigfoottrade.kz -p 2222
|
||||||
```
|
```
|
||||||
Connect to CCALM Georgia infrastructure:
|
Connect to CCALM Georgia infrastructure:
|
||||||
```sh
|
```sh
|
||||||
@ -15,31 +15,32 @@ DNS на Ubuntu 24.04 согласно инстркции https://phoenixnap.com
|
|||||||
Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт)
|
Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт)
|
||||||
Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html
|
Устанавливаем сам 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
|
```sh
|
||||||
sudo apt-get update &&
|
sudo apt-get update &&
|
||||||
sudo apt-get upgrade -y
|
sudo apt-get upgrade -y
|
||||||
```
|
```
|
||||||
|
|
||||||
Install PowerDNS server
|
Install PowerDNS server
|
||||||
```sh
|
```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 смотри:
|
Как настроить MariaDB базу для использования в PowerDNS смотри:
|
||||||
[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md)
|
[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md)
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
Как настроить SQLite3 базу для использования в PowerDNS смотри:
|
Как настроить SQLite3 базу для использования в PowerDNS смотри:
|
||||||
[Установка PowerDNS с MariaDB](./PowerDNS_install_SQIite3.md)
|
[Установка PowerDNS с SQIite3](./PowerDNS_install_SQIite3.md)
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
Как настроить PostgreSQL базу для использования в PowerDNS смотри:
|
Как настроить 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й табуляции):
|
Наспройку файла 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
|
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
|
Write new settings rr
|
||||||
```sh
|
```sh
|
||||||
cd /etc/powerdns/ &&
|
cd /etc/powerdns/ &&
|
||||||
@ -57,9 +64,10 @@ allow-axfr-ips=127.0.0.1
|
|||||||
also-notify=127.0.0.1
|
also-notify=127.0.0.1
|
||||||
|
|
||||||
include-dir=/etc/powerdns/pdns.d
|
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
|
local-port=53
|
||||||
|
|
||||||
log-dns-details=on
|
log-dns-details=on
|
||||||
@ -68,9 +76,9 @@ log-timestamp=yes
|
|||||||
loglevel=4
|
loglevel=4
|
||||||
|
|
||||||
webserver=yes
|
webserver=yes
|
||||||
webserver-address=127.0.0.1
|
webserver-address=0.0.0.0
|
||||||
webserver-allow-from=::/0, 0.0.0.0/0
|
webserver-allow-from=::/0, 0.0.0.0/0
|
||||||
webserver-port=8091
|
webserver-port=8070
|
||||||
|
|
||||||
master=yes
|
master=yes
|
||||||
slave=no
|
slave=no
|
||||||
@ -80,14 +88,28 @@ api=yes
|
|||||||
api-key=40c89f2a-e2f3-4ff8-a245-3547111f6677
|
api-key=40c89f2a-e2f3-4ff8-a245-3547111f6677
|
||||||
EOF
|
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:
|
Проверяю соединение к базе перезапустив PowerDNS:
|
||||||
```sh
|
```sh
|
||||||
sudo systemctl stop pdns &&
|
sudo systemctl stop pdns &&
|
||||||
sudo pdns_server --daemon=no --guardian=no --loglevel=9
|
sudo pdns_server --daemon=no --guardian=no --loglevel=9
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Пытаемся открыть WEB интерфейс
|
Пытаемся открыть WEB интерфейс
|
||||||
```sh
|
```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 create-zone test ns1.test &&
|
||||||
sudo pdnsutil add-record test ccalm A 192.168.200.184
|
sudo pdnsutil add-record test ccalm A 192.168.200.184
|
||||||
```
|
```
|
||||||
Добавляем зону и две записи
|
Добавляем зону и записи
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo pdnsutil create-zone geovizor.top ns1.geovizor.top &&
|
sudo pdnsutil create-zone mesh.kz &&
|
||||||
sudo pdnsutil replace-rrset geovizor.top @ SOA "ns1.geovizor.top admin.geovizor.top $(date +%Y%m%d)01 10800 3600 604800 3600" &&
|
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 geovizor.top ns1 A 88.218.94.134 &&
|
sudo pdnsutil add-record mesh.kz @ A 5.251.150.30 &&
|
||||||
sudo pdnsutil add-record geovizor.top ns2 A 88.218.94.134 &&
|
sudo pdnsutil add-record mesh.kz "*" A 5.251.150.30 &&
|
||||||
sudo pdnsutil add-record geovizor.top @ A 88.218.94.134 &&
|
sudo pdnsutil add-record mesh.kz @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
|
||||||
sudo pdnsutil add-record geovizor.top * A 88.218.94.134 &&
|
sudo pdnsutil add-record mesh.kz @ TXT 3600 "\"v=spf1 ip4:77.240.38.108 -all\"" &&
|
||||||
sudo pdnsutil add-record geovizor.top @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
|
sudo pdnsutil add-record mesh.kz @ MX 3600 "10 mail.mesh.kz." &&
|
||||||
sudo pdnsutil add-record geovizor.top @ TXT 3600 "\"v=spf1 ip4:88.218.94.134 -all\"" &&
|
sudo pdnsutil add-record mesh.kz mail A 3600 77.240.38.108
|
||||||
sudo pdnsutil add-record geovizor.top @ MX 3600 "10 mail.geovizor.top." &&
|
sudo pdnsutil add-record mesh.kz @ NS 3600 ns1.mesh.kz
|
||||||
sudo pdnsutil add-record geovizor.top mail A 3600 88.218.94.134 &&
|
sudo pdnsutil add-record mesh.kz @ NS 3600 ns2.mesh.kz
|
||||||
sudo pdnsutil add-record geovizor.top powerdns A 3600 88.218.94.134
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```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
|
```conf
|
||||||
Refresh = 10800 (3 часа)
|
Refresh = 10800 (3 часа)
|
||||||
@ -141,8 +228,11 @@ sudo pdnsutil list-zone geovizor.top
|
|||||||
```
|
```
|
||||||
Проверяем отвечалет ли:
|
Проверяем отвечалет ли:
|
||||||
```sh
|
```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
|
```sh
|
||||||
dig @127.0.0.1 -p 53 geovizor.top A
|
dig @127.0.0.1 -p 53 geovizor.top A
|
||||||
```
|
```
|
||||||
@ -182,8 +272,6 @@ curl -X PATCH \
|
|||||||
}'
|
}'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## ********** Настройка рекурсивного DNS от PowerDNS Recursor 4.9.3 порту 53 будет обрабатывать запросы с локальной машины **********
|
## ********** Настройка рекурсивного DNS от PowerDNS Recursor 4.9.3 порту 53 будет обрабатывать запросы с локальной машины **********
|
||||||
Документация: https://doc.powerdns.com/recursor/index.html
|
Документация: https://doc.powerdns.com/recursor/index.html
|
||||||
Документация: https://docs.powerdns.com/recursor/indexTOC.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)
|
Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved)
|
||||||
```sh
|
```sh
|
||||||
@ -526,7 +614,7 @@ open http://192.168.200.85:9191/login
|
|||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
Настраиваем запус на постоянную работу через Gunicorn и systemd
|
Настраиваем запуск на постоянную работу через Gunicorn и systemd
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cd /opt/web/powerdns-admin &&
|
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/
|
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 а ключь
|
На клиенте запускаем локальный порт также указал 9999 а ключь
|
||||||
```sh
|
```sh
|
||||||
htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80
|
htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80
|
||||||
htc -F 9999 --base-uri /index.html?mybiglogfile=all locust.kz:80
|
htc -F 9999 --base-uri /index.html?mybiglogfile=all dirt.kz:8080
|
||||||
```
|
```
|
||||||
|
|
||||||
Для остановки
|
Для остановки
|
||||||
|
|||||||
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
|
```sh
|
||||||
sudo apt-get update &&
|
sudo apt-get update &&
|
||||||
sudo apt-get install nginx
|
sudo apt-get install nginx -y
|
||||||
```
|
```
|
||||||
Настройка самоподписанного сертификата для SSL nginx
|
Настройка самоподписанного сертификата для SSL nginx
|
||||||
```sh
|
```sh
|
||||||
@ -19,36 +19,56 @@ sudo apt-get install nginx
|
|||||||
```
|
```
|
||||||
Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера.
|
Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера.
|
||||||
```sh
|
```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 /etc/ssl/certs/nginx-selfsigned.crt;
|
||||||
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
|
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
|
||||||
ssl_dhparam /etc/nginx/dhparam.pem;
|
ssl_dhparam /etc/nginx/dhparam.pem;
|
||||||
|
|
||||||
root /opt/www/istransit.kg;
|
|
||||||
index index.html index.htm;
|
|
||||||
|
|
||||||
location / {
|
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
|
```sh
|
||||||
sudo systemctl restart nginx
|
sudo systemctl restart nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Журнал последних 50 записей
|
||||||
|
```sh
|
||||||
|
journalctl -u nginx.service -n 50
|
||||||
|
```
|
||||||
|
|
||||||
Также есть такие команды:
|
Также есть такие команды:
|
||||||
nginx -s stop — быстрое завершение
|
nginx -s stop — быстрое завершение
|
||||||
nginx -s quit — плавное завершение
|
nginx -s quit — плавное завершение
|
||||||
@ -67,24 +87,36 @@ server {
|
|||||||
cd /etc/nginx/sites-available/ &&
|
cd /etc/nginx/sites-available/ &&
|
||||||
sudo tee geovizor.top > /dev/null <<'EOF'
|
sudo tee geovizor.top > /dev/null <<'EOF'
|
||||||
server {
|
server {
|
||||||
listen 8081;
|
listen 8081;
|
||||||
listen [::]:8081;
|
listen [::]:8081;
|
||||||
|
|
||||||
root /opt/www/istransit.kz;
|
root /opt/www/istransit.kz;
|
||||||
index index.html;
|
index index.html;
|
||||||
|
|
||||||
server_name istransit.kz www.istransit.kz;
|
server_name istransit.kz www.istransit.kz;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ =404;
|
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
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Теперь можно включить виртуальный хост:
|
Теперь можно включить виртуальный хост:
|
||||||
|
```sh
|
||||||
sudo ln -s /etc/nginx/sites-available/istransit.kz /etc/nginx/sites-enabled/
|
sudo ln -s /etc/nginx/sites-available/istransit.kz /etc/nginx/sites-enabled/
|
||||||
|
```
|
||||||
Проверяем правильность конфигурации:
|
Проверяем правильность конфигурации:
|
||||||
|
```sh
|
||||||
sudo nginx -t
|
sudo nginx -t
|
||||||
|
```
|
||||||
Перезапускаем:
|
Перезапускаем:
|
||||||
|
```sh
|
||||||
sudo systemctl restart nginx
|
sudo systemctl restart nginx
|
||||||
|
```
|
||||||
@ -22,7 +22,7 @@ sudo apt install -y docker.io docker-compose
|
|||||||
```
|
```
|
||||||
|
|
||||||
Вставьте следующий конфигурационный файл:
|
Вставьте следующий конфигурационный файл:
|
||||||
|
В кодфиге прописан корневой сертификат чтобы node.js ему доверял
|
||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
uptime-kuma:
|
uptime-kuma:
|
||||||
@ -33,6 +33,9 @@ services:
|
|||||||
- "3001:3001"
|
- "3001:3001"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./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. Запуск контейнера
|
## 4. Запуск контейнера
|
||||||
@ -63,4 +66,3 @@ start http://192.168.200.84:3001
|
|||||||
```
|
```
|
||||||
|
|
||||||
Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀
|
Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀
|
||||||
|
|
||||||
@ -1,18 +1,27 @@
|
|||||||
|
|
||||||
https://documentation.wazuh.com/current/installation-guide/wazuh-server/installation-assistant.html
|
https://documentation.wazuh.com/current/installation-guide/wazuh-server/installation-assistant.html
|
||||||
|
|
||||||
Подключаемся к нужному серверу:
|
Connectiong to server:
|
||||||
```sh
|
```sh
|
||||||
ssh igor@192.168.200.86
|
ssh igor@192.168.200.86
|
||||||
```
|
```
|
||||||
|
Execute installation commman:
|
||||||
```sh
|
```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
|
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
|
```sh
|
||||||
start https://192.168.200.86:443
|
open https://127.0.0.1:443
|
||||||
```
|
```
|
||||||
Компонент Порт по умолчанию Доступ
|
Компонент Порт по умолчанию Доступ
|
||||||
Wazuh API 55000 Внутренний
|
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
|
sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log
|
||||||
```
|
```
|
||||||
|
|
||||||
Инициализируем кластер безопасности:
|
|
||||||
|
|
||||||
|
|
||||||
|
Временно отключаю аудит:
|
||||||
```sh
|
```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/ \
|
-cd /etc/wazuh-indexer/opensearch-security/ \
|
||||||
-icl -nhnv \
|
-icl -nhnv \
|
||||||
-cacert /etc/wazuh-indexer/certs/root-ca.pem \
|
-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
|
-key /etc/wazuh-indexer/certs/admin-key.pem
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Перезагружаем после применения настроек
|
||||||
|
```sh
|
||||||
|
sudo systemctl restart wazuh-indexer
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Проверьте конфигурацию аудита в файле /etc/wazuh-indexer/opensearch.yml:
|
Проверьте конфигурацию аудита в файле /etc/wazuh-indexer/opensearch.yml:
|
||||||
```sh
|
```sh
|
||||||
@ -102,3 +124,6 @@ opensearch_security.audit.enable_transport: true
|
|||||||
```sh
|
```sh
|
||||||
sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log
|
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_new -1 /home/administrator/temp/transit.backup
|
||||||
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
|
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
|
||||||
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
|
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
|
||||||
|
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
|
sudo -u postgres psql -d transit -f /tmp/transit.backup
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Или из архива (первоначально задать trust на 127.0.0.1) так:
|
Или из архива (первоначально задать trust на 127.0.0.1) так:
|
||||||
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
|
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
|
||||||
|
|
||||||
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:
|
Также можно в журнале посмотреть что написал HAProxy:
|
||||||
```sh
|
```sh
|
||||||
sudo journalctl -u haproxy --no-pager | tail -n 50
|
sudo journalctl -u haproxy --no-pager -n 50 -f
|
||||||
````
|
````
|
||||||
Перезагружаем:
|
Перезагружаем:
|
||||||
```sh
|
```sh
|
||||||
@ -1,8 +1,10 @@
|
|||||||
|
С внешки во внутрянную инфраструктуру подключаемся через HAProxy а уже внутри использую Traefik
|
||||||
|
|
||||||
Открываю нужный сервер
|
Открываю нужный сервер
|
||||||
```sh
|
```sh
|
||||||
wsl
|
wsl
|
||||||
```
|
```
|
||||||
Или такой:
|
Открывает traefik на 192.168.200.85:
|
||||||
```sh
|
```sh
|
||||||
ssh igor@192.168.200.85 -p 22
|
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
|
traefik version
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -74,12 +76,13 @@ api:
|
|||||||
providers:
|
providers:
|
||||||
file:
|
file:
|
||||||
filename: "/etc/traefik/dynamic.yml"
|
filename: "/etc/traefik/dynamic.yml"
|
||||||
|
watch: true
|
||||||
|
|
||||||
# Настройка сертификатов (пример с Let's Encrypt)
|
# Настройка сертификатов (пример с Let's Encrypt)
|
||||||
certificatesResolvers:
|
certificatesResolvers:
|
||||||
myresolver:
|
myresolver:
|
||||||
acme:
|
acme:
|
||||||
email: "your-email@example.com"
|
email: "irigm@mail.ru"
|
||||||
storage: "/etc/traefik/acme.json"
|
storage: "/etc/traefik/acme.json"
|
||||||
httpChallenge:
|
httpChallenge:
|
||||||
entryPoint: web
|
entryPoint: web
|
||||||
@ -102,56 +105,63 @@ http:
|
|||||||
service: api@internal
|
service: api@internal
|
||||||
|
|
||||||
ccalm-api-auth:
|
ccalm-api-auth:
|
||||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
|
|
||||||
service: org_ccalm_api_authorization_v02
|
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
|
rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
|
||||||
|
service: org_ccalm_api_authorization_v02
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
middlewares:
|
middlewares:
|
||||||
- strip-auth-prefix
|
- strip-auth-prefix
|
||||||
|
|
||||||
ccalm-dbms:
|
ccalm-dbms:
|
||||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
|
|
||||||
service: org_ccalm_dbms_v09
|
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
|
rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
|
||||||
|
service: org_ccalm_dbms_v09
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
middlewares:
|
middlewares:
|
||||||
- strip-dbms-prefix
|
- strip-dbms-prefix
|
||||||
|
|
||||||
ccalm-translation:
|
ccalm-translation:
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/translation/v01/`)"
|
rule: "Host(`ccalm.test`) && PathPrefix(`/api/translation/v01/`)"
|
||||||
service: org_ccalm_translation_v01
|
service: org_ccalm_translation_v01
|
||||||
entryPoints:
|
|
||||||
- websecure
|
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
middlewares:
|
#middlewares:
|
||||||
- strip-translation-prefix
|
# - strip-translation-prefix
|
||||||
|
|
||||||
ccalm-login:
|
ccalm-login:
|
||||||
rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
|
|
||||||
service: org_ccalm_login_v01
|
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
|
rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
|
||||||
|
service: org_ccalm_login_v01
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
|
|
||||||
ccalm-default:
|
ccalm-default:
|
||||||
rule: "Host(`ccalm.test`)"
|
|
||||||
service: org_ccalm
|
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
|
rule: "Host(`ccalm.test`)"
|
||||||
|
service: org_ccalm
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
|
|
||||||
powerdns:
|
powerdns:
|
||||||
rule: "Host(`powerdns.local`)"
|
|
||||||
service: local_powerdns
|
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
|
rule: "Host(`powerdns.local`)"
|
||||||
|
service: local_powerdns
|
||||||
|
tls: {}
|
||||||
|
|
||||||
|
gotify:
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
rule: "Host(`gotify.local`)"
|
||||||
|
service: local_gotify
|
||||||
tls: {}
|
tls: {}
|
||||||
|
|
||||||
middlewares:
|
middlewares:
|
||||||
@ -163,7 +173,7 @@ http:
|
|||||||
stripPrefix:
|
stripPrefix:
|
||||||
prefixes:
|
prefixes:
|
||||||
- "/api/dbms/v09"
|
- "/api/dbms/v09"
|
||||||
strip-dbms-prefix:
|
strip-translation-prefix:
|
||||||
stripPrefix:
|
stripPrefix:
|
||||||
prefixes:
|
prefixes:
|
||||||
- "/api/translation/v01"
|
- "/api/translation/v01"
|
||||||
@ -179,6 +189,16 @@ http:
|
|||||||
path: "/"
|
path: "/"
|
||||||
interval: "5s"
|
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 (HTTPS с отключенной проверкой SSL)
|
||||||
org_ccalm_api_authorization_v02:
|
org_ccalm_api_authorization_v02:
|
||||||
loadBalancer:
|
loadBalancer:
|
||||||
@ -203,10 +223,12 @@ http:
|
|||||||
org_ccalm_translation_v01:
|
org_ccalm_translation_v01:
|
||||||
loadBalancer:
|
loadBalancer:
|
||||||
servers:
|
servers:
|
||||||
- url: "https://192.168.200.184:8085"
|
#- url: "https://192.168.200.184:8085"
|
||||||
|
- url: "https://ccalm.org"
|
||||||
|
passHostHeader: false
|
||||||
serversTransport: insecureTransport
|
serversTransport: insecureTransport
|
||||||
healthCheck:
|
healthCheck:
|
||||||
path: "/"
|
path: ""
|
||||||
interval: "5s"
|
interval: "5s"
|
||||||
|
|
||||||
# Бэкенд для org_ccalm_login_v01 (HTTP, без SSL)
|
# Бэкенд для org_ccalm_login_v01 (HTTP, без SSL)
|
||||||
@ -240,6 +262,8 @@ tls:
|
|||||||
keyFile: "/etc/traefik/certs/ccalm.test.key"
|
keyFile: "/etc/traefik/certs/ccalm.test.key"
|
||||||
- certFile: "/etc/traefik/certs/powerdns.local.crt"
|
- certFile: "/etc/traefik/certs/powerdns.local.crt"
|
||||||
keyFile: "/etc/traefik/certs/powerdns.local.key"
|
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"
|
- certFile: "/etc/traefik/certs/wildcard.local.crt"
|
||||||
keyFile: "/etc/traefik/certs/wildcard.local.key"
|
keyFile: "/etc/traefik/certs/wildcard.local.key"
|
||||||
- certFile: "/etc/traefik/certs/wildcard.test.crt"
|
- certFile: "/etc/traefik/certs/wildcard.test.crt"
|
||||||
@ -293,7 +317,7 @@ EOF
|
|||||||
## 🔎 Шаг 6. Проверка работы
|
## 🔎 Шаг 6. Проверка работы
|
||||||
Откройте в браузере:
|
Откройте в браузере:
|
||||||
```sh
|
```sh
|
||||||
open http://localhost:8080/dashboard/
|
open http://192.168.200.85:8080/dashboard/
|
||||||
```
|
```
|
||||||
|
|
||||||
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.
|
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.
|
||||||
@ -1,7 +1,7 @@
|
|||||||
# Устанавливаю Traefik на туречский сервер
|
# Устанавливаю Traefik cервер в Астане
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ssh igor@156.244.31.209 -p 2200
|
ssh ubuntu@194.32.140.11 -p 22
|
||||||
```
|
```
|
||||||
|
|
||||||
# Установка Traefik на Linux Mint / Ubuntu
|
# Установка 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
|
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. Распаковка и установка
|
## 📥 Шаг 3. Распаковка и установка
|
||||||
@ -38,6 +50,12 @@ wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_
|
|||||||
traefik version
|
traefik version
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Разрешаем занимать порты с номером меньше 1024
|
||||||
|
```sh
|
||||||
|
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
```conf
|
```conf
|
||||||
Version: 3.3.4
|
Version: 3.3.4
|
||||||
Codename: saintnectaire
|
Codename: saintnectaire
|
||||||
@ -48,12 +66,6 @@ OS/Arch: linux/amd64
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📁 Шаг 4. Создание директории и базового конфига
|
|
||||||
```sh
|
|
||||||
sudo mkdir -p /etc/traefik &&
|
|
||||||
cd /etc/traefik
|
|
||||||
```
|
|
||||||
|
|
||||||
### Пример `traefik.yml`
|
### Пример `traefik.yml`
|
||||||
```sh
|
```sh
|
||||||
cd /etc/traefik &&
|
cd /etc/traefik &&
|
||||||
@ -70,15 +82,11 @@ entryPoints:
|
|||||||
websecure:
|
websecure:
|
||||||
address: ":443"
|
address: ":443"
|
||||||
traefik:
|
traefik:
|
||||||
address: ":8080"
|
address: ":8070"
|
||||||
|
|
||||||
api:
|
api:
|
||||||
dashboard: true
|
dashboard: true
|
||||||
insecure: true
|
#insecure: true
|
||||||
|
|
||||||
providers:
|
|
||||||
file:
|
|
||||||
filename: "/etc/traefik/dynamic.yml"
|
|
||||||
|
|
||||||
# Настройка сертификатов (пример с Let's Encrypt)
|
# Настройка сертификатов (пример с Let's Encrypt)
|
||||||
certificatesResolvers:
|
certificatesResolvers:
|
||||||
@ -89,6 +97,11 @@ certificatesResolvers:
|
|||||||
httpChallenge:
|
httpChallenge:
|
||||||
entryPoint: web
|
entryPoint: web
|
||||||
|
|
||||||
|
providers:
|
||||||
|
file:
|
||||||
|
filename: "/etc/traefik/dynamic.yml"
|
||||||
|
watch: true
|
||||||
|
|
||||||
log:
|
log:
|
||||||
level: DEBUG
|
level: DEBUG
|
||||||
EOF
|
EOF
|
||||||
@ -98,61 +111,163 @@ EOF
|
|||||||
```sh
|
```sh
|
||||||
cd /etc/traefik &&
|
cd /etc/traefik &&
|
||||||
sudo tee /etc/traefik/dynamic.yml > /dev/null <<'EOF'
|
sudo tee /etc/traefik/dynamic.yml > /dev/null <<'EOF'
|
||||||
|
---
|
||||||
http:
|
http:
|
||||||
routers:
|
routers:
|
||||||
|
|
||||||
dashboard:
|
dashboard:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- traefik
|
- traefik
|
||||||
rule: "Host(`localhost`)"
|
rule: "Host(`194.32.140.11`)"
|
||||||
service: api@internal
|
service: api@internal
|
||||||
|
middlewares:
|
||||||
|
- dashboard-auth
|
||||||
|
|
||||||
geovizor-api-zones:
|
ccalm-api-auth:
|
||||||
rule: "Host(`geovizor.top`) && PathPrefix(`/api/v1/servers/localhost/zones/`)"
|
|
||||||
service: top_geovizor_api_zones_v01
|
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- 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:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
|
|
||||||
geovizor-default:
|
org-ccalm-main:
|
||||||
rule: "Host(`geovizor.top`)"
|
|
||||||
service: top_geovizor_default
|
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
|
rule: "Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)"
|
||||||
|
service: org_ccalm_main
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
|
|
||||||
|
acme-http:
|
||||||
|
rule: "PathPrefix(`/.well-known/acme-challenge/`)"
|
||||||
|
entryPoints:
|
||||||
|
- web
|
||||||
|
middlewares: []
|
||||||
|
service: noop
|
||||||
|
priority: 1000
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
|
||||||
top_geovizor_api_zones_v01:
|
# backend org_ccalm_api_authorization_v02
|
||||||
|
org_ccalm_api_authorization_v02:
|
||||||
loadBalancer:
|
loadBalancer:
|
||||||
servers:
|
servers:
|
||||||
- url: "http://156.244.31.209:8081"
|
- url: "https://127.0.0.1:8082"
|
||||||
|
serversTransport: insecureTransport
|
||||||
healthCheck:
|
healthCheck:
|
||||||
path: "/"
|
path: "/"
|
||||||
interval: "5s"
|
interval: "5s"
|
||||||
|
|
||||||
# Бэкенд по умолчанию top_geovizor
|
# org_ccalm_dbms_v09 backend
|
||||||
top_geovizor_default:
|
org_ccalm_dbms_v09:
|
||||||
loadBalancer:
|
loadBalancer:
|
||||||
servers:
|
servers:
|
||||||
- url: "http://127.0.0.1:8082"
|
- url: "https://127.0.0.1:8084"
|
||||||
|
serversTransport: insecureTransport
|
||||||
healthCheck:
|
healthCheck:
|
||||||
path: "/"
|
path: "/"
|
||||||
interval: "5s"
|
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
|
# Определяем транспорт для отключения проверки SSL
|
||||||
serversTransports:
|
serversTransports:
|
||||||
insecureTransport:
|
insecureTransport:
|
||||||
insecureSkipVerify: true
|
insecureSkipVerify: true
|
||||||
|
|
||||||
# Добавляем сертификаты
|
middlewares:
|
||||||
tls:
|
strip-dbms-prefix:
|
||||||
certificates:
|
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
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For checking syntactic:
|
||||||
|
```sh
|
||||||
|
yamllint -d "{extends: default, rules: {line-length: disable}}" /etc/traefik/dynamic.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Для хранения сертификатов файл:
|
Для хранения сертификатов файл:
|
||||||
```sh
|
```sh
|
||||||
sudo touch /etc/traefik/acme.json &&
|
sudo touch /etc/traefik/acme.json &&
|
||||||
@ -167,10 +282,12 @@ EOF
|
|||||||
cd /etc/systemd/system &&
|
cd /etc/systemd/system &&
|
||||||
sudo tee /etc/systemd/system/traefik.service > /dev/null <<'EOF'
|
sudo tee /etc/systemd/system/traefik.service > /dev/null <<'EOF'
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Traefik
|
Description=Reverse proxy Traefik
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
User=traefik
|
||||||
|
Group=traefik
|
||||||
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
|
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
@ -179,7 +296,6 @@ WantedBy=multi-user.target
|
|||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Примените:
|
Примените:
|
||||||
```sh
|
```sh
|
||||||
sudo systemctl daemon-reload &&
|
sudo systemctl daemon-reload &&
|
||||||
@ -193,14 +309,13 @@ EOF
|
|||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
ыгвщ куищще
|
||||||
## 🔎 Шаг 6. Проверка работы
|
## 🔎 Шаг 6. Проверка работы
|
||||||
Откройте в браузере:
|
Откройте в браузере cпаролем что быше "":
|
||||||
```sh
|
```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
|
## 🐳 Как вариант можно установить через Docker
|
||||||
|
|
||||||
|
|
||||||
@ -251,7 +369,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "80:80" # HTTP
|
- "80:80" # HTTP
|
||||||
- "443:443" # HTTPS
|
- "443:443" # HTTPS
|
||||||
- "8080:8080" # Dashboard
|
- "8070:8070" # Dashboard
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/traefik:/etc/traefik
|
- /etc/traefik:/etc/traefik
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
@ -277,7 +395,7 @@ EOF
|
|||||||
|
|
||||||
Откройте в браузере:
|
Откройте в браузере:
|
||||||
```sh
|
```sh
|
||||||
open http://192.168.200.85:8080/dashboard/
|
open http://192.168.200.85:8070/dashboard/
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh
|
```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:
|
Подписать корневым CA:
|
||||||
382
Ubuntu.md
382
Ubuntu.md
@ -2011,388 +2011,6 @@ restart: always: Гарантирует, что контейнер будет а
|
|||||||
|
|
||||||
Открываем: https://127.0.0.1:9443
|
Открываем: https://127.0.0.1:9443
|
||||||
После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM]
|
После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM]
|
||||||
****************************************************************************************************
|
|
||||||
Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install bind9 dnsutils
|
|
||||||
sudo apt-get install bind9utils
|
|
||||||
Добавляем сервис в автозапуск
|
|
||||||
systemctl enable bind9
|
|
||||||
Проверяем что сервис работает
|
|
||||||
nslookup dmosk.ru 127.0.0.1
|
|
||||||
Открываем настройки:
|
|
||||||
mcedit /etc/bind/named.conf.options
|
|
||||||
Для глобальных запросов добавляем строку: allow-query { any; };
|
|
||||||
Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных
|
|
||||||
//forwarders {
|
|
||||||
// 8.8.8.8;
|
|
||||||
// 8.8.4.4;
|
|
||||||
//};
|
|
||||||
Проверяем настройки командой (ответ должен быть пустым):
|
|
||||||
sudo named-checkconf
|
|
||||||
Перезагружаем:
|
|
||||||
sudo systemctl restart bind9
|
|
||||||
Проверяю версию BIND:
|
|
||||||
named -v
|
|
||||||
Выдало: BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>
|
|
||||||
Можно проверить какой IP выдаст на DNS запрос
|
|
||||||
dig locust.kz A
|
|
||||||
|
|
||||||
На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками
|
|
||||||
|
|
||||||
Перейдем в него.
|
|
||||||
cd /etc/bind/
|
|
||||||
Генерируем пару ключь для обмена информацией между клиентом и сервером:
|
|
||||||
sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key
|
|
||||||
sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key
|
|
||||||
Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ.
|
|
||||||
include "/etc/bind/dirt.kz.key";
|
|
||||||
include "/etc/bind/locust.kz.key";
|
|
||||||
Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем.
|
|
||||||
zone "dirt.kz" {
|
|
||||||
type master;
|
|
||||||
allow-update {key dirt.kz;};
|
|
||||||
file "/var/cache/bind/dirt.kz";
|
|
||||||
};
|
|
||||||
|
|
||||||
zone "locust.kz" {
|
|
||||||
type master;
|
|
||||||
allow-update {key locust.kz;};
|
|
||||||
file "/var/cache/bind/locust.kz";
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где:
|
|
||||||
В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где:
|
|
||||||
|
|
||||||
Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте
|
|
||||||
Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/
|
|
||||||
SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA
|
|
||||||
NS — Сервер имён
|
|
||||||
A — рекорд
|
|
||||||
MX — Почта для обмена
|
|
||||||
CN — Каноническое имя
|
|
||||||
PTR — указатель
|
|
||||||
И таким содержимым:
|
|
||||||
|
|
||||||
$ORIGIN dirt.kz
|
|
||||||
$TTL 604800
|
|
||||||
@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. (
|
|
||||||
8 ; Serial
|
|
||||||
604800 ; Refresh
|
|
||||||
86400 ; Retry
|
|
||||||
2419200 ; Expire
|
|
||||||
604800 ) ; Negative Cache TTL
|
|
||||||
;
|
|
||||||
@ IN NS bigfoottrade.kz.
|
|
||||||
|
|
||||||
Второй файл для locust.kz:
|
|
||||||
|
|
||||||
$ORIGIN .
|
|
||||||
$TTL 604800 ; 1 week
|
|
||||||
locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. (
|
|
||||||
134 ; serial
|
|
||||||
604800 ; refresh (1 week)
|
|
||||||
86400 ; retry (1 day)
|
|
||||||
1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds)
|
|
||||||
604800 ; minimum (1 week)
|
|
||||||
)
|
|
||||||
NS bigfoottrade.kz.
|
|
||||||
$TTL 3600 ; 1 hour
|
|
||||||
A 5.76.254.182
|
|
||||||
$ORIGIN locust.kz.
|
|
||||||
* A 127.0.0.1
|
|
||||||
|
|
||||||
|
|
||||||
Правлю права доступа:
|
|
||||||
sudo chown -R bind:bind /etc/bind
|
|
||||||
|
|
||||||
Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой:
|
|
||||||
sudo rndc reconfig
|
|
||||||
Потом следует вызвать:
|
|
||||||
sudo systemctl restart bind9
|
|
||||||
Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду
|
|
||||||
После настроек сервера перезагружаем его:
|
|
||||||
sudo named-checkconf
|
|
||||||
sudo rndc reload
|
|
||||||
sudo systemctl restart bind9
|
|
||||||
sudo rndc status
|
|
||||||
journalctl | grep bind
|
|
||||||
sudo journalctl -u bind9 -n 50
|
|
||||||
|
|
||||||
|
|
||||||
Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу:
|
|
||||||
|
|
||||||
Файл из примера:
|
|
||||||
#!/bin/bash
|
|
||||||
TTL=3600
|
|
||||||
SERVER=ns.dyndns.my
|
|
||||||
HOSTNAME=dhost.dyndns.my
|
|
||||||
ZONE=dyndns.my
|
|
||||||
KEYFILE=Kdyndns.my.+157+48025.private
|
|
||||||
new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере!
|
|
||||||
cd /etc/ddns
|
|
||||||
nsupdate -v -k $KEYFILE << EOF
|
|
||||||
server $SERVER
|
|
||||||
zone $ZONE
|
|
||||||
update delete $HOSTNAME A
|
|
||||||
update add $HOSTNAME $TTL A $new_ip_address
|
|
||||||
send
|
|
||||||
EOF
|
|
||||||
|
|
||||||
Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже:
|
|
||||||
#!/bin/bash
|
|
||||||
TTL=3600
|
|
||||||
SERVER=127.0.0.1
|
|
||||||
HOSTNAME=*.dirt.kz
|
|
||||||
ZONE=dirt.kz
|
|
||||||
KEYFILE=/etc/bind/dirt.kz.key
|
|
||||||
|
|
||||||
new_ip_address=
|
|
||||||
FILE=/etc/ddns/ip.txt
|
|
||||||
if test -f "$FILE"; then
|
|
||||||
new_ip_address=`cat $FILE`
|
|
||||||
rm $FILE
|
|
||||||
fi
|
|
||||||
|
|
||||||
len=${#new_ip_address}
|
|
||||||
if [ $len -gt 3 ]
|
|
||||||
then
|
|
||||||
echo "New IP address = $new_ip_address"
|
|
||||||
else
|
|
||||||
echo "Not find IP address"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd /etc/ddns
|
|
||||||
sudo nsupdate -v -k $KEYFILE << EOF
|
|
||||||
server $SERVER
|
|
||||||
zone $ZONE
|
|
||||||
update delete $HOSTNAME A
|
|
||||||
update add $HOSTNAME $TTL A $new_ip_address
|
|
||||||
update delete dirt.kz A
|
|
||||||
update add dirt.kz $TTL A $new_ip_address
|
|
||||||
send
|
|
||||||
EOF
|
|
||||||
echo "OK"
|
|
||||||
|
|
||||||
Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента:
|
|
||||||
<?php
|
|
||||||
|
|
||||||
echo '<pre>'; print_r(getallheaders()); echo '</pre>';
|
|
||||||
|
|
||||||
// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x"
|
|
||||||
foreach ( getallheaders() as $k => $v) {
|
|
||||||
if ( strtolower($k) == 'x-forwarded-for' ) {
|
|
||||||
$tmp = explode(', ', $v);
|
|
||||||
if ( $tmp[count($tmp)-1] != '' )
|
|
||||||
$_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){
|
|
||||||
$myfile = fopen("/etc/ddns/ip.txt", "w");
|
|
||||||
fwrite($myfile, $_SERVER['REMOTE_ADDR']);
|
|
||||||
fclose($myfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
echo $_SERVER['REMOTE_ADDR'];
|
|
||||||
|
|
||||||
?>
|
|
||||||
|
|
||||||
Проверяем что находит IP по доменному имени
|
|
||||||
nslookup dirt.kz 127.0.0.1
|
|
||||||
|
|
||||||
|
|
||||||
****************************************************************************************************
|
|
||||||
Установка сервиса обмена сообщениями RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get dist-upgrade
|
|
||||||
sudo apt install rabbitmq-server
|
|
||||||
Посмотреть список используемых плагинов:
|
|
||||||
sudo rabbitmq-plugins list
|
|
||||||
Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную.
|
|
||||||
sudo rabbitmq-plugins enable rabbitmq_management
|
|
||||||
|
|
||||||
rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672
|
|
||||||
Но для активации нужно добавить пользователя, смотрим пользователей:
|
|
||||||
sudo rabbitmqctl list_users
|
|
||||||
sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера
|
|
||||||
sudo rabbitmqctl set_user_tags admin administrator
|
|
||||||
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
|
|
||||||
Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43
|
|
||||||
|
|
||||||
Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed.
|
|
||||||
Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password
|
|
||||||
producer: клиент, выполняющий отправку сообщения
|
|
||||||
queue: собственно очередь сообщений
|
|
||||||
consumer: клиент, получающий сообщения из очереди
|
|
||||||
exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html)
|
|
||||||
|
|
||||||
Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y
|
|
||||||
https://www.rabbitmq.com/devtools.html :
|
|
||||||
Создаю Maven проект в консоли:
|
|
||||||
cd O:\projects\Workspace_Java\
|
|
||||||
mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
|
|
||||||
Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client:
|
|
||||||
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.rabbitmq</groupId>
|
|
||||||
<artifactId>amqp-client</artifactId>
|
|
||||||
<version>5.14.2</version>
|
|
||||||
</dependency>
|
|
||||||
Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA.
|
|
||||||
|
|
||||||
Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/
|
|
||||||
или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/
|
|
||||||
Добавил в POM файл:
|
|
||||||
<repositories>
|
|
||||||
<repository>
|
|
||||||
<name>RabbitMQ</name>
|
|
||||||
<url>https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0</url>
|
|
||||||
<id>com.rabbitmq</id>
|
|
||||||
<releases>
|
|
||||||
<enabled>false</enabled>
|
|
||||||
</releases>
|
|
||||||
<snapshots>
|
|
||||||
<enabled>true</enabled>
|
|
||||||
</snapshots>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.rabbitmq</groupId>
|
|
||||||
<artifactId>amqp-client</artifactId>
|
|
||||||
<version>5.16.0</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Перезагружаем:
|
|
||||||
sudo service rabbitmq-server restart
|
|
||||||
|
|
||||||
****************************************************************************************************
|
|
||||||
Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel
|
|
||||||
|
|
||||||
Активирую плагин командой:
|
|
||||||
sudo rabbitmq-plugins enable rabbitmq_shovel
|
|
||||||
sudo rabbitmq-plugins enable rabbitmq_shovel_management
|
|
||||||
|
|
||||||
Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку:
|
|
||||||
|
|
||||||
sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{
|
|
||||||
"src-protocol": "amqp091",
|
|
||||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation",
|
|
||||||
"src-queue": "TO_KAZ",
|
|
||||||
"dest-protocol": "amqp091",
|
|
||||||
"dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground",
|
|
||||||
"dest-exchange": "swap",
|
|
||||||
"dest-exchange-key": ".KAZ.",
|
|
||||||
"ack-mode": "on-confirm",
|
|
||||||
"publish-properties": {
|
|
||||||
"delivery_mode": 2
|
|
||||||
}
|
|
||||||
}'
|
|
||||||
|
|
||||||
Для Росии такие настройки:
|
|
||||||
|
|
||||||
sudo rabbitmqctl set_parameter shovel kaz_to_rus '{
|
|
||||||
"src-protocol": "amqp091",
|
|
||||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus",
|
|
||||||
"src-queue": "TO_RUS",
|
|
||||||
"dest-protocol": "amqp091",
|
|
||||||
"dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground",
|
|
||||||
"dest-exchange": "swap",
|
|
||||||
"dest-exchange-key": "KZ",
|
|
||||||
"ack-mode": "on-confirm",
|
|
||||||
"publish-properties": {
|
|
||||||
"delivery_mode": 2
|
|
||||||
}
|
|
||||||
}'
|
|
||||||
|
|
||||||
Для Беларусии такие настройки:
|
|
||||||
|
|
||||||
sudo rabbitmqctl set_parameter shovel kaz_to_blr '{
|
|
||||||
"src-protocol": "amqp091",
|
|
||||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr",
|
|
||||||
"src-queue": "TO_BLR",
|
|
||||||
"dest-protocol": "amqp091",
|
|
||||||
"dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber",
|
|
||||||
"dest-exchange": "eec.swap",
|
|
||||||
"dest-exchange-key": "KZ",
|
|
||||||
"ack-mode": "on-confirm",
|
|
||||||
"publish-properties": {
|
|
||||||
"delivery_mode": 2
|
|
||||||
}
|
|
||||||
}'
|
|
||||||
|
|
||||||
Для Армении такие настройки:
|
|
||||||
|
|
||||||
sudo rabbitmqctl set_parameter shovel kaz_to_arm '{
|
|
||||||
"src-protocol": "amqp091",
|
|
||||||
"src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm",
|
|
||||||
"src-queue": "TO_ARM",
|
|
||||||
"dest-protocol": "amqp091",
|
|
||||||
"dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation",
|
|
||||||
"dest-exchange": "swap_kz",
|
|
||||||
"dest-exchange-key": "KZ_ISTT",
|
|
||||||
"ack-mode": "on-confirm",
|
|
||||||
"publish-properties": {
|
|
||||||
"delivery_mode": 2
|
|
||||||
}
|
|
||||||
}'
|
|
||||||
|
|
||||||
Для Кыргызстана (таможенная инфраструктура)
|
|
||||||
|
|
||||||
sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{
|
|
||||||
"src-protocol": "amqp091",
|
|
||||||
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz",
|
|
||||||
"src-queue": "TO_KGZ",
|
|
||||||
"dest-protocol": "amqp091",
|
|
||||||
"dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz",
|
|
||||||
"dest-exchange": "swap",
|
|
||||||
"dest-exchange-key": "KAZ",
|
|
||||||
"ack-mode": "on-confirm",
|
|
||||||
"publish-properties": {
|
|
||||||
"delivery_mode": 2
|
|
||||||
}
|
|
||||||
}'
|
|
||||||
|
|
||||||
Удалять так:
|
|
||||||
sudo rabbitmqctl clear_parameter shovel kaz_to_kgz
|
|
||||||
|
|
||||||
Для отправки из Киргизии нам то такие настройки:
|
|
||||||
|
|
||||||
sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{
|
|
||||||
"src-protocol": "amqp091",
|
|
||||||
"src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz",
|
|
||||||
"src-queue": "TO_KAZ",
|
|
||||||
"dest-protocol": "amqp091",
|
|
||||||
"dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz",
|
|
||||||
"dest-exchange": "swap",
|
|
||||||
"dest-exchange-key": "KGZ",
|
|
||||||
"ack-mode": "on-confirm",
|
|
||||||
"publish-properties": {
|
|
||||||
"delivery_mode": 2
|
|
||||||
}
|
|
||||||
}'
|
|
||||||
|
|
||||||
Удалять так:
|
|
||||||
sudo rabbitmqctl clear_parameter shovel kgz_to_kaz
|
|
||||||
|
|
||||||
|
|
||||||
Чтобы проверить текущие параметры Shovel:
|
|
||||||
sudo rabbitmqctl list_parameters
|
|
||||||
А также можно взглянуть что создалось через WEB интерфейс
|
|
||||||
|
|
||||||
Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает.
|
|
||||||
|
|
||||||
****************************************************************************************************
|
****************************************************************************************************
|
||||||
Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/
|
Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/
|
||||||
|
|||||||
Reference in New Issue
Block a user