Compare commits

..

10 Commits

Author SHA1 Message Date
3f831b68ab + 2025-05-22 03:49:49 +05:00
332e1b84e9 По директориям раскидал 2025-05-20 20:16:22 +05:00
cab906cff1 PowerDNS modif 2025-05-16 22:34:24 +05:00
19407be225 Merge branch 'master' of https://git.dirt.kz/igor/Ubuntu_docs
# Conflicts:
#	DNS/PowerDNS_install.md
2025-05-15 21:20:52 +05:00
1d99814706 разное 2025-05-15 21:19:32 +05:00
7380add41d Новые каталоги 2025-05-15 09:04:57 +05:00
aa0179f6c0 Merge branch 'master' of https://git.dirt.kz/igor/Ubuntu_docs
# Conflicts:
#	PostgreSQL_select.md
2025-05-12 09:28:09 +05:00
2d79601c7a Тестирование ИБ при проверки на ГТС 2025-05-12 09:27:05 +05:00
3bbdd7e866 Разное 2025-05-03 19:34:13 +05:00
72ba8986d4 +select 2025-04-23 17:02:52 +05:00
32 changed files with 3526 additions and 2648 deletions

224
Brokers/RabbitMQ_install.md Normal file
View 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" иначе маршрутизация не сработает.

View File

@ -1,341 +1,341 @@
Heres a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly: Heres a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly:
--- ---
## **Step 1: Prepare the Servers** ## **Step 1: Prepare the Servers**
Ensure you have at least **three** nodes (recommended for HA) with: Ensure you have at least **three** nodes (recommended for HA) with:
- Ubuntu 22.04 (or a supported OS) - Ubuntu 22.04 (or a supported OS)
- Sufficient CPU/RAM based on workload - Sufficient CPU/RAM based on workload
- Open necessary firewall ports (**5672, 15672, 25672**) - Open necessary firewall ports (**5672, 15672, 25672**)
Set hostnames for clarity: Set hostnames for clarity:
```bash ```bash
sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node
``` ```
--- ---
## **Step 2: Install Erlang and RabbitMQ** ## **Step 2: Install Erlang and RabbitMQ**
Run the following on **all nodes**: Run the following on **all nodes**:
### **1. Add the RabbitMQ Repository** ### **1. Add the RabbitMQ Repository**
```bash ```bash
sudo apt update sudo apt update
sudo apt install -y curl gnupg sudo apt install -y curl gnupg
curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/rabbitmq-key.asc curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/rabbitmq-key.asc
echo "deb [signed-by=/usr/share/keyrings/rabbitmq-key.asc] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list echo "deb [signed-by=/usr/share/keyrings/rabbitmq-key.asc] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
``` ```
### **2. Install Erlang and RabbitMQ** ### **2. Install Erlang and RabbitMQ**
```bash ```bash
sudo apt update sudo apt update
sudo apt install -y rabbitmq-server sudo apt install -y rabbitmq-server
``` ```
### **3. Enable RabbitMQ** ### **3. Enable RabbitMQ**
```bash ```bash
sudo systemctl enable --now rabbitmq-server sudo systemctl enable --now rabbitmq-server
``` ```
--- ---
## **Step 3: Configure Clustering** ## **Step 3: Configure Clustering**
### **1. Stop RabbitMQ on All Nodes** ### **1. Stop RabbitMQ on All Nodes**
```bash ```bash
sudo systemctl stop rabbitmq-server sudo systemctl stop rabbitmq-server
``` ```
### **2. Configure Cookie for Clustering** ### **2. Configure Cookie for Clustering**
Run on **all nodes** (same cookie ensures clustering works): Run on **all nodes** (same cookie ensures clustering works):
```bash ```bash
echo "MY_CLUSTER_COOKIE" | sudo tee /var/lib/rabbitmq/.erlang.cookie echo "MY_CLUSTER_COOKIE" | sudo tee /var/lib/rabbitmq/.erlang.cookie
sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie
``` ```
Replace `"MY_CLUSTER_COOKIE"` with a strong, identical value on all nodes. Replace `"MY_CLUSTER_COOKIE"` with a strong, identical value on all nodes.
--- ---
## **Step 4: Join Nodes to the Cluster** ## **Step 4: Join Nodes to the Cluster**
Perform this on **nodes 2 and 3**, joining them to **node1**: Perform this on **nodes 2 and 3**, joining them to **node1**:
```bash ```bash
sudo rabbitmqctl stop_app sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1 sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1
sudo rabbitmqctl start_app sudo rabbitmqctl start_app
``` ```
Check cluster status: Check cluster status:
```bash ```bash
sudo rabbitmqctl cluster_status sudo rabbitmqctl cluster_status
``` ```
--- ---
## **Step 5: Enable High Availability (HA) Mirroring** ## **Step 5: Enable High Availability (HA) Mirroring**
To replicate all queues, run on **any one node**: To replicate all queues, run on **any one node**:
```bash ```bash
rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}' rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
``` ```
This ensures all queues are **replicated across all nodes**. This ensures all queues are **replicated across all nodes**.
--- ---
## **Step 6: Enable Management UI** ## **Step 6: Enable Management UI**
Run on **each node** to enable the web interface: Run on **each node** to enable the web interface:
```bash ```bash
sudo rabbitmq-plugins enable rabbitmq_management sudo rabbitmq-plugins enable rabbitmq_management
``` ```
Access at: Access at:
**http://[NODE_IP]:15672** **http://[NODE_IP]:15672**
(Default login: `guest/guest`, change this for security.) (Default login: `guest/guest`, change this for security.)
--- ---
## **Step 7: Test the Cluster** ## **Step 7: Test the Cluster**
Run on **each node**: Run on **each node**:
```bash ```bash
rabbitmqctl list_queues rabbitmqctl list_queues
``` ```
Queues should be visible and synchronized. Queues should be visible and synchronized.
--- ---
## **Step 8: Enable Auto-Recovery** (Optional) ## **Step 8: Enable Auto-Recovery** (Optional)
Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add: Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add:
```ini ```ini
cluster_formation.peer_discovery_backend = classic_config cluster_formation.peer_discovery_backend = classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1 cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2 cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3 cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3
``` ```
Then restart RabbitMQ: Then restart RabbitMQ:
```bash ```bash
sudo systemctl restart rabbitmq-server sudo systemctl restart rabbitmq-server
``` ```
--- ---
## **Step 9: Secure the Cluster** (Recommended) ## **Step 9: Secure the Cluster** (Recommended)
### **1. Create an Admin User** ### **1. Create an Admin User**
```bash ```bash
rabbitmqctl add_user admin StrongPassword123! rabbitmqctl add_user admin StrongPassword123!
rabbitmqctl set_user_tags admin administrator rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
``` ```
Then **disable the guest account**: Then **disable the guest account**:
```bash ```bash
rabbitmqctl delete_user guest rabbitmqctl delete_user guest
``` ```
### **2. Enable TLS (Optional)** ### **2. Enable TLS (Optional)**
For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQs [TLS guide](https://www.rabbitmq.com/ssl.html). For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQs [TLS guide](https://www.rabbitmq.com/ssl.html).
--- ---
## **Step 10: Setup Monitoring (Optional)** ## **Step 10: Setup Monitoring (Optional)**
Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**: Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**:
```bash ```bash
sudo rabbitmq-plugins enable rabbitmq_prometheus sudo rabbitmq-plugins enable rabbitmq_prometheus
``` ```
--- ---
Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀 Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀
--- ---
<br> <br>
<br> <br>
<br> <br>
<br> <br>
# Instructions to fix **unexpected** configuration errors # Instructions to fix **unexpected** configuration errors
If you can't find the RabbitMQ config file under `/etc/rabbitmq`, it may not exist by default. You need to **create it manually**. Here's how: If you can't find the RabbitMQ config file under `/etc/rabbitmq`, it may not exist by default. You need to **create it manually**. Here's how:
## **1⃣ Create the Configuration File** ## **1⃣ Create the Configuration File**
RabbitMQ uses either a **`.conf` file** (modern format) or a **`.config` file** (legacy format). The recommended format is `.conf`. RabbitMQ uses either a **`.conf` file** (modern format) or a **`.config` file** (legacy format). The recommended format is `.conf`.
Create the file if it doesn't exist: Create the file if it doesn't exist:
```bash ```bash
sudo nano /etc/rabbitmq/rabbitmq.conf sudo nano /etc/rabbitmq/rabbitmq.conf
``` ```
Then add the following cluster configuration: Then add the following cluster configuration:
``` ```
cluster_formation.peer_discovery_backend = classic_config cluster_formation.peer_discovery_backend = classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica
``` ```
Save and exit (`CTRL+X`, then `Y`, then `Enter`). Save and exit (`CTRL+X`, then `Y`, then `Enter`).
--- ---
## **2⃣ Set Correct Permissions** ## **2⃣ Set Correct Permissions**
Ensure the RabbitMQ user can read it: Ensure the RabbitMQ user can read it:
```bash ```bash
sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf
sudo chmod 644 /etc/rabbitmq/rabbitmq.conf sudo chmod 644 /etc/rabbitmq/rabbitmq.conf
``` ```
--- ---
## **3⃣ Restart RabbitMQ** ## **3⃣ Restart RabbitMQ**
After modifying the configuration, restart the RabbitMQ service: After modifying the configuration, restart the RabbitMQ service:
```bash ```bash
sudo systemctl restart rabbitmq-server sudo systemctl restart rabbitmq-server
``` ```
Check the status: Check the status:
```bash ```bash
sudo systemctl status rabbitmq-server sudo systemctl status rabbitmq-server
``` ```
--- ---
## **4⃣ Verify the Cluster Configuration** ## **4⃣ Verify the Cluster Configuration**
After restarting, verify that clustering is working: After restarting, verify that clustering is working:
```bash ```bash
rabbitmqctl cluster_status rabbitmqctl cluster_status
``` ```
If the nodes are listed correctly, your setup is working. If the nodes are listed correctly, your setup is working.
--- ---
## **5⃣ If Using the Legacy `.config` Format** ## **5⃣ If Using the Legacy `.config` Format**
Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create: Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create:
```bash ```bash
sudo nano /etc/rabbitmq/rabbitmq.config sudo nano /etc/rabbitmq/rabbitmq.config
``` ```
Add this: Add this:
```erlang ```erlang
[ [
{rabbit, [ {rabbit, [
{cluster_formation, [ {cluster_formation, [
{peer_discovery_backend, classic_config}, {peer_discovery_backend, classic_config},
{classic_config, [ {classic_config, [
{nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']} {nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']}
]} ]}
]} ]}
]} ]}
]. ].
``` ```
Then restart RabbitMQ: Then restart RabbitMQ:
```bash ```bash
sudo systemctl restart rabbitmq-server sudo systemctl restart rabbitmq-server
``` ```
--- ---
### **🔍 Troubleshooting** ### **🔍 Troubleshooting**
**RabbitMQ doesn't restart?** **RabbitMQ doesn't restart?**
Check logs for errors: Check logs for errors:
```bash ```bash
sudo journalctl -u rabbitmq-server --no-pager | tail -50 sudo journalctl -u rabbitmq-server --no-pager | tail -50
``` ```
**Cluster not forming?** **Cluster not forming?**
Try forcing a node to join manually: Try forcing a node to join manually:
```bash ```bash
rabbitmqctl stop_app rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq-main rabbitmqctl join_cluster rabbit@rabbitmq-main
rabbitmqctl start_app rabbitmqctl start_app
``` ```
--- ---
<br> <br>
<br> <br>
<br> <br>
<br> <br>
# Instructions to fix **unexpected** management UI authentication errors # Instructions to fix **unexpected** management UI authentication errors
stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837) stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837)
## Answer ## Answer
### ❌ **Cannot login with guest/guest credentials** ### ❌ **Cannot login with guest/guest credentials**
I had the same Problem.. I had the same Problem..
I installed RabbitMQ and Enabled Web Interface also but still couldn't sign in with any user i newly created, this is because you need to be administrator to access this. I installed RabbitMQ and Enabled Web Interface also but still couldn't sign in with any user i newly created, this is because you need to be administrator to access this.
Do not create any config file and mess with it.. Do not create any config file and mess with it..
This is what i did then, This is what i did then,
1. Add a new/fresh user, say user test and password test: 1. Add a new/fresh user, say user test and password test:
```bash ```bash
rabbitmqctl add_user test test rabbitmqctl add_user test test
``` ```
2. Give administrative access to the new user: 2. Give administrative access to the new user:
```bash ```bash
rabbitmqctl set_user_tags test administrator rabbitmqctl set_user_tags test administrator
``` ```
3. Set permission to newly created user: 3. Set permission to newly created user:
```bash ```bash
rabbitmqctl set_permissions -p / test ".*" ".*" ".*" rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
``` ```
That's it, enjoy :) That's it, enjoy :)

View File

@ -1,138 +1,139 @@
# 📌 Установка Gotify в Docker на Ubuntu 24.04 # 📌 Установка Gotify в Docker на Ubuntu 24.04
## 1. Установка Docker и Docker Compose ## 1. Установка Docker и Docker Compose
Если Docker не установлен, установим его: Если Docker не установлен, установим его:
```sh ```sh
sudo apt update && sudo apt upgrade -y sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose sudo apt install -y docker.io docker-compose
sudo systemctl enable --now docker sudo systemctl enable --now docker
``` ```
Проверим версию: Проверим версию:
```sh ```sh
docker --version docker --version
docker-compose --version docker-compose --version
``` ```
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
## 2. Создание директории для Gotify ## 2. Создание директории для Gotify
Лучшее место для сторонних сервисов — `/opt`: Лучшее место для сторонних сервисов — `/opt`:
```sh ```sh
sudo mkdir -p /opt/gotify sudo mkdir -p /opt/gotify
cd /opt/gotify cd /opt/gotify
``` ```
## 3. Создаём самоподписанный сертификат ## 3. Создаём самоподписанный сертификат
```sh ```sh
sudo mkdir -p /opt/gotify/certs && cd /opt/gotify/certs sudo mkdir -p /opt/gotify/certs && cd /opt/gotify/certs
openssl req -x509 -newkey rsa:4096 -keyout gotify.key -out gotify.crt -days 365 -nodes -subj "/CN=your.domain.com" openssl req -x509 -newkey rsa:4096 -keyout gotify.key -out gotify.crt -days 365 -nodes -subj "/CN=your.domain.com"
``` ```
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
## 3. Создание `docker-compose.yml` ## 3. Создание `docker-compose.yml`
Создадим конфигурацию: Создадим конфигурацию:
```sh ```sh
sudo mcedit /opt/gotify/docker-compose.yml sudo mcedit /opt/gotify/docker-compose.yml
``` ```
Добавляем: Добавляем:
```yaml ```yaml
services: services:
gotify: gotify:
image: gotify/server image: gotify/server
container_name: gotify container_name: gotify
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- "./certs:/certs" - "./certs:/certs"
- "./data:/app/data" - "./data:/app/data"
ports: ports:
- "8080:443" # HTTPS - "8080:443" # HTTPS
environment: environment:
- GOTIFY_DEFAULTUSER_NAME=admin - GOTIFY_DEFAULTUSER_NAME=admin
- GOTIFY_DEFAULTUSER_PASS=s23uBXreliGIAVOohXhW - GOTIFY_DEFAULTUSER_PASS=s23uBXreliGIAVOohXhW
- TZ=Asia/Almaty - TZ=Asia/Almaty
- 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
networks: - GIN_MODE=debug
- gotify-net networks:
- gotify-net
networks:
gotify-net: networks:
driver: bridge gotify-net:
``` driver: bridge
💡 **Что здесь важно?** ```
- **`security_opt: - no-new-privileges:true`** → запрещает повышать привилегии в контейнере. 💡 **Что здесь важно?**
- **`volumes: ./data:/app/data`** → сохраняет данные вне контейнера. - **`security_opt: - no-new-privileges:true`** → запрещает повышать привилегии в контейнере.
- **`restart: unless-stopped`** → перезапускает Gotify, если он внезапно упадёт. - **`volumes: ./data:/app/data`** → сохраняет данные вне контейнера.
- **`ports: - "8080:80"`** → Gotify будет доступен на порту `8080`. - **`restart: unless-stopped`** → перезапускает Gotify, если он внезапно упадёт.
- **`ports: - "8080:80"`** → Gotify будет доступен на порту `8080`.
🔑 **Замените пароль** (`supersecretpassword`) на свой!
🔑 **Замените пароль** (`supersecretpassword`) на свой!
---
---
## 4. Запуск Gotify
Запускаем контейнер: ## 4. Запуск Gotify
```sh Запускаем контейнер:
cd /opt/gotify ```sh
sudo docker compose down cd /opt/gotify
sudo docker-compose up -d sudo docker compose down
``` sudo docker-compose up -d
Проверяем статус: ```
```sh Проверяем статус:
sudo docker ps ```sh
``` sudo docker ps
Вы должны увидеть работающий контейнер `gotify`. ```
Вы должны увидеть работающий контейнер `gotify`.
---
---
## 5. Проверка работы
Открываем браузер и переходим: ## 5. Проверка работы
👉 **https://192.168.200.84:8080** Открываем браузер и переходим:
👉 **https://gotify.locust.kz:8443** 👉 **https://192.168.200.84:8080**
👉 **https://gotify.locust.kz:8443**
Логинимся:
- **Имя**: `admin` Логинимся:
- **Пароль**: тот, что указан в `GOTIFY_DEFAULTUSER_PASS` - **Имя**: `admin`
- **Пароль**: тот, что указан в `GOTIFY_DEFAULTUSER_PASS`
---
---
## 6. Автоматический запуск при загрузке
Docker уже настроен на автозапуск, но проверим: ## 6. Автоматический запуск при загрузке
```sh Docker уже настроен на автозапуск, но проверим:
sudo systemctl enable --now docker ```sh
``` sudo systemctl enable --now docker
Чтобы Gotify запускался автоматически: ```
```sh Чтобы Gotify запускался автоматически:
cd /opt/gotify ```sh
sudo docker-compose restart cd /opt/gotify
``` sudo docker-compose restart
```
---
---
## 7. Логи и управление
Просмотр логов: ## 7. Логи и управление
```sh Просмотр логов:
sudo docker-compose logs -f ```sh
``` sudo docker-compose logs -f
Перезапуск контейнера: ```
```sh Перезапуск контейнера:
sudo docker-compose restart ```sh
``` sudo docker-compose restart
Остановка: ```
```sh Остановка:
sudo docker-compose down ```sh
``` sudo docker-compose down
```
---
---
## 8. Удаление Gotify (если потребуется)
```sh ## 8. Удаление Gotify (если потребуется)
cd /opt/gotify ```sh
sudo docker-compose down cd /opt/gotify
sudo rm -rf /opt/gotify sudo docker-compose down
``` sudo rm -rf /opt/gotify
```
---
---
## ✅ Готово!
Теперь Gotify работает на порту `80` с безопасными настройками (`no-new-privileges:true`). 🚀 ## ✅ Готово!
Теперь Gotify работает на порту `80` с безопасными настройками (`no-new-privileges:true`). 🚀

View File

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

215
DNS/BIND_install.md Normal file
View 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

View File

@ -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 &&

View File

@ -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
View 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
```

View File

@ -1,94 +1,94 @@
```sh ```sh
sudo apt update && sudo apt update &&
sudo apt install unbound -y && sudo apt install unbound -y &&
unbound -V unbound -V
``` ```
```sh ```sh
sudo systemctl start unbound && sudo systemctl start unbound &&
sudo systemctl enable unbound && sudo systemctl enable unbound &&
sudo systemctl status unbound sudo systemctl status unbound
``` ```
On Windows configuration is: On Windows configuration is:
```yaml ```yaml
server: server:
verbosity: 4 verbosity: 4
qname-minimisation: no qname-minimisation: no
interface: 127.0.0.1 interface: 127.0.0.1
do-ip6: no do-ip6: no
do-ip4: yes do-ip4: yes
logfile: "C:\unbound.log" logfile: "C:\unbound.log"
domain-insecure: "test." domain-insecure: "test."
domain-insecure: "local." domain-insecure: "local."
domain-insecure: "pizza." domain-insecure: "pizza."
auto-trust-anchor-file: "C:\Program Files\Unbound\root.key" auto-trust-anchor-file: "C:\Program Files\Unbound\root.key"
private-address: ::/0 private-address: ::/0
harden-dnssec-stripped: no harden-dnssec-stripped: no
harden-referral-path: no harden-referral-path: no
# Явно указываем, что зона "test." не локальная # Явно указываем, что зона "test." не локальная
local-zone: "test." transparent local-zone: "test." transparent
forward-zone: forward-zone:
name: "test." name: "test."
forward-addr: 192.168.200.85@5300 forward-addr: 192.168.200.85@5300
forward-zone: forward-zone:
name: "local." name: "local."
forward-addr: 192.168.200.85@5300 forward-addr: 192.168.200.85@5300
forward-zone: forward-zone:
name: "pizza." name: "pizza."
forward-addr: 10.101.1.31@53 forward-addr: 10.101.1.31@53
forward-zone: forward-zone:
name: "srv." name: "srv."
forward-addr: 10.101.1.31@53 forward-addr: 10.101.1.31@53
remote-control: remote-control:
control-enable: yes control-enable: yes
control-interface: 127.0.0.1 control-interface: 127.0.0.1
control-use-cert: no control-use-cert: no
``` ```
On Linux conf file devide on anoter files On Linux conf file devide on anoter files
```sh ```sh
sudo mcedit /etc/unbound/unbound.conf sudo mcedit /etc/unbound/unbound.conf
``` ```
```sh ```sh
cd /etc/unbound/ && cd /etc/unbound/ &&
sudo mc sudo mc
``` ```
Получить полный список локальных зон можно так: unbound-control Получить полный список локальных зон можно так: unbound-control
```sh ```sh
unbound-control list_local_zones unbound-control list_local_zones
``` ```
```sh ```sh
sudo systemctl restart unbound sudo systemctl restart unbound
``` ```
```sh ```sh
sudo systemctl status unbound.service sudo systemctl status unbound.service
``` ```
```sh ```sh
sudo journalctl -xeu unbound.service sudo journalctl -xeu unbound.service
``` ```
Check on errors: Check on errors:
```sh ```sh
sudo unbound-checkconf /etc/unbound/unbound.conf sudo unbound-checkconf /etc/unbound/unbound.conf
``` ```
Прописываем для определенного интерфейса: Прописываем для определенного интерфейса:
```sh ```sh
sudo resolvectl dns wlp14s0 127.0.0.1 sudo resolvectl dns wlp14s0 127.0.0.1
``` ```
Проверяем что стоит в качестве NDS резольвера Проверяем что стоит в качестве NDS резольвера
```sh ```sh
resolvectl status resolvectl status
``` ```

View File

@ -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
View 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` в конфигурации.

View 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` в конфигурации.

View File

@ -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
```
Перезапускаем: Перезапускаем:
sudo systemctl restart nginx ```sh
sudo systemctl restart nginx
```

View File

@ -1,66 +1,68 @@
# Установка Uptime Kuma в Ubuntu 24.04 с помощью Docker Compose # Установка Uptime Kuma в Ubuntu 24.04 с помощью Docker Compose
## 1. Установка необходимых пакетов ## 1. Установка необходимых пакетов
Обновите систему и установите Docker и Docker Compose: Обновите систему и установите Docker и Docker Compose:
```sh ```sh
sudo apt update && sudo apt upgrade -y sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose sudo apt install -y docker.io docker-compose
``` ```
## 2. Создание директории для Uptime Kuma ## 2. Создание директории для Uptime Kuma
```sh ```sh
sudo mkdir -p /opt/uptime-kuma sudo mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma cd /opt/uptime-kuma
``` ```
## 3. Создание `docker-compose.yml` ## 3. Создание `docker-compose.yml`
Создайте файл `docker-compose.yml`: Создайте файл `docker-compose.yml`:
```sh ```sh
sudo mcedit /opt/uptime-kuma/docker-compose.yml sudo mcedit /opt/uptime-kuma/docker-compose.yml
``` ```
Вставьте следующий конфигурационный файл: Вставьте следующий конфигурационный файл:
В кодфиге прописан корневой сертификат чтобы node.js ему доверял
```yaml ```yaml
services: services:
uptime-kuma: uptime-kuma:
image: louislam/uptime-kuma:latest image: louislam/uptime-kuma:latest
container_name: uptime-kuma container_name: uptime-kuma
restart: always restart: always
ports: ports:
- "3001:3001" - "3001:3001"
volumes: volumes:
- ./data:/app/data - ./data:/app/data
``` - /usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro
environment:
## 4. Запуск контейнера - NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt
```sh ```
sudo docker-compose up -d
``` ## 4. Запуск контейнера
```sh
## 5. Проверка работы Uptime Kuma sudo docker-compose up -d
Откройте браузер и перейдите по адресу: ```
```sh ## 5. Проверка работы Uptime Kuma
start http://192.168.200.84:3001 Откройте браузер и перейдите по адресу:
```
```sh
## 6. Управление контейнером start http://192.168.200.84:3001
- **Остановить Uptime Kuma:** ```
```sh
sudo docker-compose down ## 6. Управление контейнером
``` - **Остановить Uptime Kuma:**
- **Перезапустить контейнер:** ```sh
```sh sudo docker-compose down
sudo docker-compose restart ```
``` - **Перезапустить контейнер:**
- **Просмотреть логи:** ```sh
sudo docker-compose restart
```sh ```
sudo docker-compose logs -f - **Просмотреть логи:**
```
```sh
Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀 sudo docker-compose logs -f
```
Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀

View File

@ -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

View File

@ -1,141 +1,141 @@
Устанавливаю согласно инструкции из: Устанавливаю согласно инструкции из:
https://github.com/prometheus-community/postgres_exporter https://github.com/prometheus-community/postgres_exporter
Подключаюсь к нужной машине Подключаюсь к нужной машине
```sh ```sh
ssh igor@ccalm.org -p 2200 ssh igor@ccalm.org -p 2200
``` ```
Configure postgresql.conf Configure postgresql.conf
```conf ```conf
shared_preload_libraries = 'pg_stat_statements' shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all pg_stat_statements.track = all
``` ```
## 1. Установка Docker и Docker Compose ## 1. Установка Docker и Docker Compose
Если Docker не установлен, установим его: Если Docker не установлен, установим его:
```sh ```sh
sudo apt update && sudo apt upgrade -y && sudo apt update && sudo apt upgrade -y &&
sudo apt install -y docker.io docker-compose && sudo apt install -y docker.io docker-compose &&
sudo systemctl enable --now docker sudo systemctl enable --now docker
``` ```
## 2. Установка postgres-exporter в докере из заранее подготовленного образа ## 2. Установка postgres-exporter в докере из заранее подготовленного образа
```sh ```sh
sudo mkdir -p /opt/postgres-exporter && sudo mkdir -p /opt/postgres-exporter &&
sudo chown $USER:$USER /opt/postgres-exporter && sudo chown $USER:$USER /opt/postgres-exporter &&
cd /opt/postgres-exporter cd /opt/postgres-exporter
``` ```
Создаю файл с настройками Создаю файл с настройками
```sh ```sh
cd /opt/postgres-exporter/ && cd /opt/postgres-exporter/ &&
cat > docker-compose.yml <<'EOF' cat > docker-compose.yml <<'EOF'
services: services:
postgres-exporter: postgres-exporter:
image: quay.io/prometheuscommunity/postgres-exporter image: quay.io/prometheuscommunity/postgres-exporter
container_name: postgres-exporter container_name: postgres-exporter
restart: unless-stopped restart: unless-stopped
network_mode: "host" network_mode: "host"
environment: environment:
DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable" DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable"
volumes: volumes:
- ./postgres_exporter.yml:/etc/postgres_exporter.yml - ./postgres_exporter.yml:/etc/postgres_exporter.yml
command: command:
- "--config.file=/etc/postgres_exporter.yml" - "--config.file=/etc/postgres_exporter.yml"
EOF EOF
``` ```
Создаём файл с настройками Создаём файл с настройками
```sh ```sh
cd /opt/postgres-exporter/ && cd /opt/postgres-exporter/ &&
cat > postgres_exporter.yml <<'EOF' cat > postgres_exporter.yml <<'EOF'
collectors: collectors:
- database - database
- index - index
- query - query
- table - table
EOF EOF
``` ```
Запускаю: Запускаю:
```sh ```sh
cd /opt/postgres-exporter && cd /opt/postgres-exporter &&
sudo docker-compose up -d sudo docker-compose up -d
``` ```
Проверяю запущен ли докер Проверяю запущен ли докер
```sh ```sh
sudo docker ps sudo docker ps
``` ```
Testing with: Testing with:
```sh ```sh
curl "http://127.0.0.1:9187/metrics" curl "http://127.0.0.1:9187/metrics"
``` ```
Посмотреть журнал за сегодня: Посмотреть журнал за сегодня:
```sh ```sh
journalctl --since today journalctl --since today
``` ```
Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера
```sh ```sh
sudo mcedit /etc/haproxy/haproxy.cfg sudo mcedit /etc/haproxy/haproxy.cfg
``` ```
Настраиваем: Настраиваем:
```text ```text
acl v_metrics_nd path_beg /metrics_nd acl v_metrics_nd path_beg /metrics_nd
acl v_basic_auth http_auth(prometheus_list) acl v_basic_auth http_auth(prometheus_list)
http-request auth realm Metrics_org_ccalm_nd if v_metrics_nd !v_basic_auth http-request auth realm Metrics_org_ccalm_nd if v_metrics_nd !v_basic_auth
use_backend b_metrics_nd if v_metrics_nd v_basic_auth use_backend b_metrics_nd if v_metrics_nd v_basic_auth
backend b_metrics_nd backend b_metrics_nd
mode http mode http
option http-keep-alive option http-keep-alive
http-request replace-path .* /metrics http-request replace-path .* /metrics
server web1 127.0.0.1:9100 check server web1 127.0.0.1:9100 check
``` ```
Проверяем Проверяем
```sh ```sh
haproxy -f /etc/haproxy/haproxy.cfg -c haproxy -f /etc/haproxy/haproxy.cfg -c
```` ````
Перезагружаем: Перезагружаем:
```sh ```sh
sudo systemctl restart haproxy sudo systemctl restart haproxy
```` ````
Подключаюсь к машине где Prometeus: Подключаюсь к машине где Prometeus:
```sh ```sh
ssh igor@192.168.200.84 -p 22 ssh igor@192.168.200.84 -p 22
``` ```
Перезагружаем prometheus чтобы он начал собирать метрики Перезагружаем prometheus чтобы он начал собирать метрики
```sh ```sh
sudo systemctl restart prometheus sudo systemctl restart prometheus
``` ```
Теперь можно настраивать графану, вот готовыдашбоард Теперь можно настраивать графану, вот готовыдашбоард
Открыть Grafana Открыть Grafana
Перейти в Dashboards → Import Перейти в Dashboards → Import
Вставить ID: 9628 Вставить ID: 9628
Выбрать источник данных Prometheus (с PostgreSQL Exporter) Выбрать источник данных Prometheus (с PostgreSQL Exporter)
Нажать Import Нажать Import
Теперь можно настраивать графану, вот готовыдашбоард Теперь можно настраивать графану, вот готовыдашбоард
Открыть Grafana Открыть Grafana
Перейти в Dashboards → Import Перейти в Dashboards → Import
Вставить ID: 12273 Вставить ID: 12273
Выбрать источник данных Prometheus (с PostgreSQL Exporter) Выбрать источник данных Prometheus (с PostgreSQL Exporter)
Нажать Import Нажать Import

View File

@ -1,61 +1,61 @@
**************************************************************************************************** ****************************************************************************************************
Установка и настройка проверяльщик паролей credcheck Установка и настройка проверяльщик паролей credcheck
PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/ PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/
Тестовая база Тестовая база
```sh ```sh
ssh administrator@10.201.3.36 -p 22 ssh administrator@10.201.3.36 -p 22
``` ```
Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём: Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём:
```sh ```sh
apt search credcheck apt search credcheck
``` ```
Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен): Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен):
```sh ```sh
sudo apt-get install postgresql-server-dev-16 && sudo apt-get install postgresql-server-dev-16 &&
sudo apt-get install build-essential && sudo apt-get install build-essential &&
git clone https://github.com/HexaCluster/credcheck.git && git clone https://github.com/HexaCluster/credcheck.git &&
cd credcheck && cd credcheck &&
make && make &&
sudo make install sudo make install
``` ```
Подключаемся к базе данных для выполнения запросов Подключаемся к базе данных для выполнения запросов
```sh ```sh
psql -h 127.0.0.1 -U postgres -d transit psql -h 127.0.0.1 -U postgres -d transit
``` ```
Проверяем что настройки имеются: Проверяем что настройки имеются:
```sh ```sh
SELECT name, setting, unit, source, sourcefile, sourceline SELECT name, setting, unit, source, sourcefile, sourceline
FROM pg_settings FROM pg_settings
WHERE name LIKE 'credcheck%'; WHERE name LIKE 'credcheck%';
``` ```
Читаем текущие настройки Читаем текущие настройки
```sh ```sh
SHOW ALL; SHOW ALL;
``` ```
Создаём расширение в базе postgres: Создаём расширение в базе postgres:
```sh ```sh
CREATE EXTENSION credcheck; CREATE EXTENSION credcheck;
``` ```
Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck: Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck:
-- Configure credential policies to enforce username and password standards and reload configuration files -- Configure credential policies to enforce username and password standards and reload configuration files
ALTER SYSTEM SET credcheck.username_min_length = 4; ALTER SYSTEM SET credcheck.username_min_length = 4;
ALTER SYSTEM SET credcheck.password_min_length = 8; ALTER SYSTEM SET credcheck.password_min_length = 8;
ALTER SYSTEM SET credcheck.password_min_special = 1; ALTER SYSTEM SET credcheck.password_min_special = 1;
SELECT pg_reload_conf(); SELECT pg_reload_conf();
-- Attempt to create a user for a new park ranger, which does not meet the credential policies -- Attempt to create a user for a new park ranger, which does not meet the credential policies
CREATE USER ranger_ WITH PASSWORD 'forest'; CREATE USER ranger_ WITH PASSWORD 'forest';
ERROR: password length should match the configured credcheck.password_min_length ERROR: password length should match the configured credcheck.password_min_length
Для пароля установить: Для пароля установить:
ALTER SYSTEM SET credcheck.password_expiration_days = 90; ALTER SYSTEM SET credcheck.password_expiration_days = 90;
SELECT pg_reload_conf(); SELECT pg_reload_conf();
Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора): Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора):

View File

@ -1,348 +1,351 @@
# Install PostgreSQL database # Install PostgreSQL database
Coonect lto need server: Coonect lto need server:
```sh ```sh
wsl wsl
``` ```
Or coonect to need server: Or coonect to need server:
```sh ```sh
ssh igor@ccalm.org -p 2200 ssh igor@ccalm.org -p 2200
``` ```
**************************************************************************************************** ****************************************************************************************************
Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries: Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries:
Скачал, создаю дирректорию хранения данных: Скачал, создаю дирректорию хранения данных:
O:\MyDocuments\DataBases\postgresql-12.3-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_12.3 O:\MyDocuments\DataBases\postgresql-12.3-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_12.3
O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13 O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13
Потом создать BAT файл с тем текстом что отобразится при создании каталога базы Потом создать BAT файл с тем текстом что отобразится при создании каталога базы
База данных создаётся не под пользователем postgres а под локальным пользователем igor База данных создаётся не под пользователем postgres а под локальным пользователем igor
**************************************************************************************************** ****************************************************************************************************
Установка PostgreSQL 14 ubuntu 22.04 или 24.04 Установка PostgreSQL 14 ubuntu 22.04 или 24.04
```sh ```sh
sudo apt-get update sudo apt-get update
sudo apt-get install postgresql postgresql-contrib -y sudo apt-get install postgresql postgresql-contrib -y
``` ```
Или так если нужно установить PostGIS Или так если нужно установить PostGIS
```sh ```sh
sudo apt-get install postgis sudo apt-get install postgis
``` ```
Для удаления PostGIS в месте с зависимыми пакетами: Для удаления PostGIS в месте с зависимыми пакетами:
```sh ```sh
sudo apt-get remove --auto-remove postgis && sudo apt-get remove --auto-remove postgis &&
sudo apt-get purge postgis sudo apt-get purge postgis
``` ```
Добавить русскую локаль если её нет: Добавить русскую локаль если её нет:
```sh ```sh
sudo locale-gen ru_RU && sudo locale-gen ru_RU &&
sudo locale-gen ru_RU.UTF-8 && sudo locale-gen ru_RU.UTF-8 &&
sudo locale-gen kk_KZ && sudo locale-gen kk_KZ &&
sudo locale-gen kk_KZ.UTF-8 sudo locale-gen kk_KZ.UTF-8
``` ```
Проверить какая локаль по умолчанию: Проверить какая локаль по умолчанию:
```sh ```sh
localectl status localectl status
``` ```
И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры): И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры):
```sh ```sh
sudo dpkg-reconfigure locales sudo dpkg-reconfigure locales
``` ```
Для задания пароля в PostgreSQL выполнить: Для задания пароля в PostgreSQL выполнить:
```sh ```sh
sudo -u postgres psql && sudo -u postgres psql &&
\password postgres \password postgres
``` ```
Чтобы выйти нужно выпольнить команду: \q Чтобы выйти нужно выпольнить команду: \q
Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust
Задать пароль: Задать пароль:
sudo -u postgres psql sudo -u postgres psql
postgres=> SELECT usename FROM pg_user; postgres=> SELECT usename FROM pg_user;
postgres=> alter user postgres password 'PasSecrKey1'; postgres=> alter user postgres password 'PasSecrKey1';
postgres=> \q postgres=> \q
Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/ Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/
Создаём базу данных выполнив функцию: Создаём базу данных выполнив функцию:
CREATE DATABASE CCALM CREATE DATABASE CCALM
WITH OWNER = postgres WITH OWNER = postgres
TEMPLATE = template0 TEMPLATE = template0
ENCODING = 'UTF8' ENCODING = 'UTF8'
TABLESPACE = pg_default TABLESPACE = pg_default
LC_COLLATE = 'ru_RU.UTF-8' LC_COLLATE = 'ru_RU.UTF-8'
LC_CTYPE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8'
CONNECTION LIMIT = -1; CONNECTION LIMIT = -1;
Файл настроек postgresql: Файл настроек postgresql:
```sh ```sh
sudo mcedit /etc/postgresql/16/main/postgresql.conf sudo mcedit /etc/postgresql/16/main/postgresql.conf
``` ```
listen_addresses='*' #Разрешить подключение с внешки listen_addresses='*' #Разрешить подключение с внешки
#Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой #Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой
backslash_quote = on backslash_quote = on
escape_string_warning = off escape_string_warning = off
standard_conforming_strings = off standard_conforming_strings = off
Чтобы воводил двоичные данные по старому изменить на: Чтобы воводил двоичные данные по старому изменить на:
bytea_output = 'escape' bytea_output = 'escape'
Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду" Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду"
Для создания нового пользователя выполнить: Для создания нового пользователя выполнить:
sudo -u postgres psql sudo -u postgres psql
CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION; CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION;
Для подключения к определённой базе данных выполнить команду: Для подключения к определённой базе данных выполнить команду:
sudo -u postgres psql sudo -u postgres psql
\list or \l: для отображения всех баз \list or \l: для отображения всех баз
\connect zholak zholak \connect zholak zholak
\dt для отображения всех таблиц \dt для отображения всех таблиц
или написать со своим IP: host all all 2.133.238.240/24 trust или написать со своим IP: host all all 2.133.238.240/24 trust
Для подключения с любых IP адресов в " Для подключения с любых IP адресов в "
```sh ```sh
sudo mcedit /etc/postgresql/16/main/pg_hba.conf sudo mcedit /etc/postgresql/16/main/pg_hba.conf
``` ```
host all all 0.0.0.0/0 md5 host all all 0.0.0.0/0 md5
Либо с одного конкретного то: host all all 92.46.48.37/24 md5 Либо с одного конкретного то: host all all 92.46.48.37/24 md5
А также поменять на listen_addresses = '*' в postgresql.conf А также поменять на listen_addresses = '*' в postgresql.conf
Потом перезагрузить postgres: Потом перезагрузить postgres:
sudo service postgresql restart sudo service postgresql restart
sudo /etc/init.d/postgresql stop sudo /etc/init.d/postgresql stop
sudo /etc/init.d/postgresql restart sudo /etc/init.d/postgresql restart
sudo /etc/init.d/postgresql start sudo /etc/init.d/postgresql start
Проверить запущен или нет то: Проверить запущен или нет то:
sudo /etc/init.d/postgresql status sudo /etc/init.d/postgresql status
Посмотрель лог загрузки PostGreSQL: Посмотрель лог загрузки PostGreSQL:
dmesg |grep pg dmesg |grep pg
Чтобы посмотреть чем занят порт выполнить команду: Чтобы посмотреть чем занят порт выполнить команду:
sudo netstat -tap | grep 5432 sudo netstat -tap | grep 5432
Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain):
pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root
pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres
pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres
pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom
pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres
pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump CCALM>CCALM.backup --host=127.0.0.1 --username=postgres --format=custom pg_dump CCALM>CCALM.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql
pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz
Востановить Dump из текстового файла: Востановить Dump из текстового файла:
psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup
psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql
psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql
psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql
psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql
Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл: Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл:
/mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh /mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh
#!/bin/sh #!/bin/sh
pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz
Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться): Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться):
su - postgres su - postgres
pg_restore -U <username> -d <dbname> -1 <filename>.dump pg_restore -U <username> -d <dbname> -1 <filename>.dump
pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup
pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup
pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
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) так:
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
**************************************************************************************************** Или из архива (первоначально задать trust на 127.0.0.1) так:
Настройка отображения статистики для PostgreSQL: gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
https://habr.com/ru/articles/488968/
****************************************************************************************************
SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC; Настройка отображения статистики для PostgreSQL:
SELECT * FROM pg_stat_activity https://habr.com/ru/articles/488968/
SELECT * FROM pg_stat_replication
SELECT * FROM pg_stat_all_tables SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC;
SELECT * FROM pg_stat_activity
Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats SELECT * FROM pg_stat_replication
SELECT * FROM pg_stat_all_tables
Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL
По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/ Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats
По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU
**************************************************************************************************** Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL
Установка pgagent По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/
sudo apt-get update По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU
sudo apt-get install pgagent ****************************************************************************************************
Выполнить в консоли запрос: Установка pgagent
psql -h localhost -U postgres sudo apt-get update
create extension pgagent; sudo apt-get install pgagent
\q Выполнить в консоли запрос:
Для разрешения подключения откройте файл pg_hba.conf и замените строку на: psql -h localhost -U postgres
host all all 127.0.0.1/32 md5 create extension pgagent;
\q
Можно для теста запустить pgagent с повышенным уровнем логирования: Для разрешения подключения откройте файл pg_hba.conf и замените строку на:
/usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk host all all 127.0.0.1/32 md5
Если файла нет то пытаюсь его создать: Можно для теста запустить pgagent с повышенным уровнем логирования:
sudo mcedit /lib/systemd/system/pgagent.service /usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk
[Unit] Если файла нет то пытаюсь его создать:
Description=PostgreSQL PgAgent Service sudo mcedit /lib/systemd/system/pgagent.service
After=network.target
[Unit]
[Service] Description=PostgreSQL PgAgent Service
Type=simple After=network.target
User=postgres
ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1 [Service]
Type=simple
[Install] User=postgres
WantedBy=multi-user.target ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1
Проверяю что сервис был запущен: [Install]
sudo systemctl daemon-reload WantedBy=multi-user.target
sudo systemctl enable pgagent
sudo service pgagent start Проверяю что сервис был запущен:
sudo systemctl status pgagent sudo systemctl daemon-reload
sudo systemctl enable pgagent
sudo service pgagent start
Для проверки пробуем подключиться к базе данных sudo systemctl status pgagent
sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres
\q
Для проверки пробуем подключиться к базе данных
Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться: sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres
sudo -u postgres touch /var/lib/postgresql/.pgpass \q
sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass
sudo -u postgres mcedit /var/lib/postgresql/.pgpass Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться:
И прописать в него: sudo -u postgres touch /var/lib/postgresql/.pgpass
127.0.0.1:5432:postgres:postgres:PasSecrKey1 sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass
Где используется такой формат: hostname:port:database:username:password sudo -u postgres mcedit /var/lib/postgresql/.pgpass
Затем: И прописать в него:
sudo systemctl enable pgagent 127.0.0.1:5432:postgres:postgres:PasSecrKey1
sudo service pgagent start Где используется такой формат: hostname:port:database:username:password
sudo service pgagent status Затем:
Посмотреть логи: sudo systemctl enable pgagent
sudo journalctl -u pgagent sudo service pgagent start
sudo service pgagent status
**************************************************************************************************** Посмотреть логи:
Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт: sudo journalctl -u pgagent
****************************************************************************************************
**************************************************************************************************** Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт:
Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move
**************************************************************************************************** ****************************************************************************************************
Установка PostGIS на PostgreSQL выше 9.0 версии: Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move
sudo apt-get install postgis postgresql-9.3-postgis-2.1
Для 10й версии: ****************************************************************************************************
sudo apt install postgresql-10-postgis-2.4 Установка PostGIS на PostgreSQL выше 9.0 версии:
sudo apt install postgresql-10-postgis-scripts sudo apt-get install postgis postgresql-9.3-postgis-2.1
Для 12й версии: Для 10й версии:
sudo apt install postgresql-12-postgis-2.4 sudo apt install postgresql-10-postgis-2.4
sudo apt install postgresql-10-postgis-scripts
Создать базу данных и выполнть на ней следующие команды: Для 12й версии:
-- Enable PostGIS (includes raster) sudo apt install postgresql-12-postgis-2.4
CREATE EXTENSION postgis;
-- Enable Topology Создать базу данных и выполнть на ней следующие команды:
CREATE EXTENSION postgis_topology; -- Enable PostGIS (includes raster)
-- fuzzy matching needed for Tiger CREATE EXTENSION postgis;
CREATE EXTENSION fuzzystrmatch; -- Enable Topology
-- rule based standardizer CREATE EXTENSION postgis_topology;
CREATE EXTENSION address_standardizer; -- fuzzy matching needed for Tiger
-- example rule data set CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION address_standardizer_data_us; -- rule based standardizer
-- Enable US Tiger Geocoder CREATE EXTENSION address_standardizer;
CREATE EXTENSION postgis_tiger_geocoder; -- example rule data set
CREATE EXTENSION address_standardizer_data_us;
У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17 -- Enable US Tiger Geocoder
Аказывается расширение кудато делось установил: CREATE EXTENSION postgis_tiger_geocoder;
sudo apt-get install postgresql-9.5-postgis-2.2
**************************************************************************************************** У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17
Для добавления TOTP авторизации в Postgresql выполнить: Аказывается расширение кудато делось установил:
CREATE EXTENSION otp; sudo apt-get install postgresql-9.5-postgis-2.2
****************************************************************************************************
Для добавления TOTP авторизации в Postgresql выполнить:
**************************************************************************************************** CREATE EXTENSION otp;
sudo apt-get install libpq-dev libpq-fe
Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен
То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev ****************************************************************************************************
apt update sudo apt-get install libpq-dev libpq-fe
**************************************************************************************************** Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен
Установка phpPgAdmin через репозиторий: То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev
sudo apt-get install phppgadmin apt update
Можно открыть так: http://localhost/phppgadmin ****************************************************************************************************
Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all Установка phpPgAdmin через репозиторий:
Чтоб можно было залогинется под пользователем postgres меняем в: sudo apt-get install phppgadmin
/etc/phppgadmin/config.inc.php extra_login_security в false Можно открыть так: http://localhost/phppgadmin
Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost'; Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all
Чтоб можно было залогинется под пользователем postgres меняем в:
Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". /etc/phppgadmin/config.inc.php extra_login_security в false
**************************************************************************************************** Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost';
Установка pgAdmin4 через докер контейнер
Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php".
```sh ****************************************************************************************************
sudo mkdir -p /opt/pgAdmin4 && Установка pgAdmin4 через докер контейнер
sudo chmod -R 777 /opt/pgAdmin4 &&
sudo chown -R $USER:$USER /opt/pgAdmin4 ```sh
``` sudo mkdir -p /opt/pgAdmin4 &&
sudo chmod -R 777 /opt/pgAdmin4 &&
```sh sudo chown -R $USER:$USER /opt/pgAdmin4
cd /opt/pgAdmin4 && ```
cat > docker-compose.yml <<'EOF'
services: ```sh
pgadmin: cd /opt/pgAdmin4 &&
image: dpage/pgadmin4 cat > docker-compose.yml <<'EOF'
container_name: pgadmin4 services:
restart: unless-stopped pgadmin:
ports: image: dpage/pgadmin4
- "5050:80" container_name: pgadmin4
environment: restart: unless-stopped
PGADMIN_DEFAULT_EMAIL: irigm@mail.ru ports:
PGADMIN_DEFAULT_PASSWORD: 123456 - "5050:80"
volumes: environment:
- pgadmin_data:/var/lib/pgadmin PGADMIN_DEFAULT_EMAIL: irigm@mail.ru
PGADMIN_DEFAULT_PASSWORD: 123456
volumes: volumes:
pgadmin_data: - pgadmin_data:/var/lib/pgadmin
EOF
``` volumes:
pgadmin_data:
## 4. Запуск контейнера EOF
```
```sh
cd /opt/pgAdmin4 && ## 4. Запуск контейнера
sudo docker compose up -d
``` ```sh
cd /opt/pgAdmin4 &&
```sh sudo docker compose up -d
cd /opt/pgAdmin4 && ```
sudo docker compose down
``` ```sh
cd /opt/pgAdmin4 &&
sudo docker compose down
```
Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/
curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/bionic pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
sudo apt install pgadmin4 Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/
curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
И не запустился сервер оболочка пытается стартануть а сервер нет... sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/bionic pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
sudo apt install pgadmin4
sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' И не запустился сервер оболочка пытается стартануть а сервер нет...
sudo apt install pgadmin4
sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
Тоже не заработал sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
sudo apt install pgadmin4
Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/
Тоже не заработал
****************************************************************************************************
Балансировщик назрузки и потоковая репликация: Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/
Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью
https://ritorika.com.ua/dokument/6/pgpool-chto-jeto ****************************************************************************************************
**************************************************************************************************** Балансировщик назрузки и потоковая репликация:
Мониторинг запросов postgresql Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью
https://ritorika.com.ua/dokument/6/pgpool-chto-jeto
****************************************************************************************************
Мониторинг запросов postgresql

View File

@ -1,12 +1,12 @@
Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication
Подключаюсь к нужной машине Подключаюсь к нужной машине
```sh ```sh
ssh igor@192.168.200.84 -p 22 ssh igor@192.168.200.84 -p 22
``` ```

View File

@ -1,137 +1,137 @@
# Настройка PostgreSQL в синхронном режиме репликации # Настройка PostgreSQL в синхронном режиме репликации
Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики. Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики.
--- ---
## **1. Подготовка серверов** ## **1. Подготовка серверов**
Допустим, у нас есть: Допустим, у нас есть:
- **Основной сервер (Primary):** `192.168.1.1` - **Основной сервер (Primary):** `192.168.1.1`
- **Реплика (Standby):** `192.168.1.2` - **Реплика (Standby):** `192.168.1.2`
Убедитесь, что PostgreSQL установлен на обоих серверах. Убедитесь, что PostgreSQL установлен на обоих серверах.
--- ---
## **2. Настройка основного сервера (Primary)** ## **2. Настройка основного сервера (Primary)**
### **2.1 Разрешаем подключение реплики** ### **2.1 Разрешаем подключение реплики**
Редактируем `postgresql.conf`: Редактируем `postgresql.conf`:
```sh ```sh
sudo nano /etc/postgresql/15/main/postgresql.conf sudo nano /etc/postgresql/15/main/postgresql.conf
``` ```
Добавляем/изменяем параметры: Добавляем/изменяем параметры:
```conf ```conf
wal_level = replica wal_level = replica
synchronous_commit = on synchronous_commit = on
synchronous_standby_names = 'replica1' synchronous_standby_names = 'replica1'
max_wal_senders = 3 max_wal_senders = 3
wal_keep_size = 256MB wal_keep_size = 256MB
hot_standby = on hot_standby = on
``` ```
Редактируем `pg_hba.conf`, добавляя доступ для реплики: Редактируем `pg_hba.conf`, добавляя доступ для реплики:
```sh ```sh
sudo nano /etc/postgresql/15/main/pg_hba.conf sudo nano /etc/postgresql/15/main/pg_hba.conf
``` ```
Добавляем строку: Добавляем строку:
```conf ```conf
host replication replicator 192.168.1.2/32 md5 host replication replicator 192.168.1.2/32 md5
``` ```
### **2.2 Создаем пользователя для репликации** ### **2.2 Создаем пользователя для репликации**
```sql ```sql
CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password'; CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password';
``` ```
### **2.3 Перезапускаем PostgreSQL** ### **2.3 Перезапускаем PostgreSQL**
```sh ```sh
sudo systemctl restart postgresql sudo systemctl restart postgresql
``` ```
--- ---
## **3. Настройка реплики (Standby)** ## **3. Настройка реплики (Standby)**
### **3.1 Останавливаем PostgreSQL на реплике** ### **3.1 Останавливаем PostgreSQL на реплике**
```sh ```sh
sudo systemctl stop postgresql sudo systemctl stop postgresql
``` ```
### **3.2 Копируем данные с основного сервера** ### **3.2 Копируем данные с основного сервера**
На реплике выполняем: На реплике выполняем:
```sh ```sh
sudo -u postgres pg_basebackup -h 192.168.1.1 -U replicator -D /var/lib/postgresql/15/main -Fp -Xs -R -P sudo -u postgres pg_basebackup -h 192.168.1.1 -U replicator -D /var/lib/postgresql/15/main -Fp -Xs -R -P
``` ```
### **3.3 Указываем `application_name` вручную** ### **3.3 Указываем `application_name` вручную**
Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную: Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную:
```sh ```sh
sudo su postgres -c "psql -c \"ALTER SYSTEM SET primary_conninfo TO 'host=192.168.1.1 user=replicator password=your_password application_name=replica1';\"" sudo su postgres -c "psql -c \"ALTER SYSTEM SET primary_conninfo TO 'host=192.168.1.1 user=replicator password=your_password application_name=replica1';\""
``` ```
Затем перезапускаем PostgreSQL на реплике: Затем перезапускаем PostgreSQL на реплике:
```sh ```sh
sudo systemctl restart postgresql sudo systemctl restart postgresql
``` ```
### **3.4 Проверяем `primary_conninfo`** ### **3.4 Проверяем `primary_conninfo`**
```sh ```sh
cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo
``` ```
Ожидаемый результат: Ожидаемый результат:
```ini ```ini
primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1'
``` ```
Если строка отсутствует, редактируем файл вручную: Если строка отсутствует, редактируем файл вручную:
```sh ```sh
sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf
``` ```
Добавляем строку: Добавляем строку:
```ini ```ini
primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1'
``` ```
Сохраняем и перезапускаем PostgreSQL: Сохраняем и перезапускаем PostgreSQL:
```sh ```sh
sudo systemctl restart postgresql sudo systemctl restart postgresql
``` ```
--- ---
## **4. Обновляем настройки Primary для работы с репликой** ## **4. Обновляем настройки Primary для работы с репликой**
На основном сервере (Primary) выполняем: На основном сервере (Primary) выполняем:
```sh ```sh
sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\"" sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\""
``` ```
Перезапускаем PostgreSQL на Primary: Перезапускаем PostgreSQL на Primary:
```sh ```sh
sudo systemctl restart postgresql sudo systemctl restart postgresql
``` ```
--- ---
## **5. Проверка работы синхронной репликации** ## **5. Проверка работы синхронной репликации**
### **5.1 Проверяем статус репликации** ### **5.1 Проверяем статус репликации**
На **основном сервере (Primary)** выполняем: На **основном сервере (Primary)** выполняем:
```sql ```sql
SELECT application_name, sync_state FROM pg_stat_replication; SELECT application_name, sync_state FROM pg_stat_replication;
``` ```
Ожидаемый результат: Ожидаемый результат:
``` ```
application_name | sync_state application_name | sync_state
-----------------+------------ -----------------+------------
replica1 | sync replica1 | sync
``` ```
Если `sync_state = 'sync'`, значит синхронная репликация работает. Если `sync_state = 'sync'`, значит синхронная репликация работает.
--- ---
## **6. Итоговая проверка** ## **6. Итоговая проверка**
**Задали `primary_conninfo` вручную на реплике** **Задали `primary_conninfo` вручную на реплике**
**Перезапустили PostgreSQL на реплике** **Перезапустили PostgreSQL на реплике**
**Обновили `synchronous_standby_names` на основном сервере** **Обновили `synchronous_standby_names` на основном сервере**
**Перезапустили PostgreSQL на основном сервере** **Перезапустили PostgreSQL на основном сервере**
**Проверили `pg_stat_replication` на Primary** **Проверили `pg_stat_replication` на Primary**
Готово! 🎉 Готово! 🎉

View 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) Проведение оплаты

View File

@ -1,260 +1,260 @@
# 📌 Установка HAProxy на Ubuntu 20.04 # 📌 Установка HAProxy на Ubuntu 20.04
**************************************************************************************************** ****************************************************************************************************
На основе инструкции из https://itsecforu.ru/2019/07/15/⏳-настройка-балансировщика-нагрузки-h/ На основе инструкции из https://itsecforu.ru/2019/07/15/⏳-настройка-балансировщика-нагрузки-h/
Connect to the required server: Connect to the required server:
```sh ```sh
ssh administrator@10.101.1.3 -p 22 ssh administrator@10.101.1.3 -p 22
``` ```
Connect to CCALM Turkish infrastructure: Connect to CCALM Turkish infrastructure:
```sh ```sh
ssh igor@88.218.94.134 -p 2200 ssh igor@88.218.94.134 -p 2200
``` ```
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
## Install haproxy ## Install haproxy
```sh ```sh
sudo apt-get update && sudo apt-get install haproxy -y sudo apt-get update && sudo apt-get install haproxy -y
```` ````
Создаём резервную копию файла: Создаём резервную копию файла:
```sh ```sh
sudo cp /etc/haproxy/haproxy.cfg{,.bak} sudo cp /etc/haproxy/haproxy.cfg{,.bak}
```` ````
Редактируем конфигурацию (Описание конфигурационного файла HAProxy https://habr.com/ru/sandbox/34354/) Редактируем конфигурацию (Описание конфигурационного файла HAProxy https://habr.com/ru/sandbox/34354/)
```sh ```sh
mcedit /etc/haproxy/haproxy.cfg mcedit /etc/haproxy/haproxy.cfg
``` ```
В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов): В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов):
```conf ```conf
frontend frontend-http frontend frontend-http
bind *:80 bind *:80
mode http mode http
# ACL для определения запросов на проверку Let's Encrypt # ACL для определения запросов на проверку Let's Encrypt
acl is_certbot path_beg /.well-known/acme-challenge/ acl is_certbot path_beg /.well-known/acme-challenge/
# Если это не запрос Let's Encrypt, перенаправляем на HTTPS # Если это не запрос Let's Encrypt, перенаправляем на HTTPS
http-request redirect scheme https code 301 unless is_certbot http-request redirect scheme https code 301 unless is_certbot
# Отправляем запросы Let's Encrypt на backend-certbot # Отправляем запросы Let's Encrypt на backend-certbot
use_backend backend-certbot if is_certbot use_backend backend-certbot if is_certbot
frontend LOADBALANCER-01 frontend LOADBALANCER-01
bind *:80 bind *:80
bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem crt /etc/ssl/certs/bigfoottrade_kz.pem bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem crt /etc/ssl/certs/bigfoottrade_kz.pem
mode http #режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика mode http #режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика
option httpclose #Закрывает пассивные соединения option httpclose #Закрывает пассивные соединения
http-request set-header x-Forwarded-for %[src] http-request set-header x-Forwarded-for %[src]
http-request set-header x-Forwarded-uri %[url] http-request set-header x-Forwarded-uri %[url]
acl v_geoserver2 hdr(host) -i geoserver2.ccalm.org acl v_geoserver2 hdr(host) -i geoserver2.ccalm.org
use_backend geoserver2_ccalm_org if v_geoserver2 use_backend geoserver2_ccalm_org if v_geoserver2
#Если различные нестандартные порты то так #Если различные нестандартные порты то так
acl v_locust_kz hdr_reg(host) -i ^locust\.kz(:.*)?$ acl v_locust_kz hdr_reg(host) -i ^locust\.kz(:.*)?$
use_backend b_locust_kz if v_locust_kz use_backend b_locust_kz if v_locust_kz
#Перенаправление одной страницы по адресу http://geoserver2.ccalm.org/data/ на другой backend #Перенаправление одной страницы по адресу http://geoserver2.ccalm.org/data/ на другой backend
acl v_geo_data hdr(host) -i geoserver2.ccalm.org/data acl v_geo_data hdr(host) -i geoserver2.ccalm.org/data
use_backend WEBSERVERS-01 if v_geo_data use_backend WEBSERVERS-01 if v_geo_data
default_backend WEBSERVER default_backend WEBSERVER
backend WEBSERVER backend WEBSERVER
balance roundrobin balance roundrobin
server web1 127.0.0.1:8080 check inter 5s ssl verify none server web1 127.0.0.1:8080 check inter 5s ssl verify none
option httpchk GET /index.html option httpchk GET /index.html
backend geoserver2_ccalm_org backend geoserver2_ccalm_org
balance roundrobin balance roundrobin
server web1 192.168.0.90:80 check server web1 192.168.0.90:80 check
option httpchk option httpchk
listen stats listen stats
bind *:8989 bind *:8989
stats enable stats enable
stats uri / stats uri /
stats realm Haproxy\ Statistics stats realm Haproxy\ Statistics
stats auth igor:i123456 stats auth igor:i123456
frontend f-RabbitMQ frontend f-RabbitMQ
mode tcp mode tcp
bind 10.1.7.73:21000 bind 10.1.7.73:21000
default_backend b-RabbitMQ default_backend b-RabbitMQ
backend b-RabbitMQ backend b-RabbitMQ
mode tcp mode tcp
server srv1 10.10.16.21:20000 server srv1 10.10.16.21:20000
``` ```
Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx
Для использования SSL и перенаправляние по обычному сокету для начала нужно настроить pem файл объеденив crt и key (и незабыть изменить порт Apache с 433) Для использования SSL и перенаправляние по обычному сокету для начала нужно настроить pem файл объеденив crt и key (и незабыть изменить порт Apache с 433)
cat /etc/ssl/certs/bigfoottrade_kz.crt /etc/ssl/certs/bigfoottrade_kz_ca.crt /etc/ssl/private/bigfoottrade_kz.key > /etc/haproxy/ssl/bigfoottrade_kz.pem cat /etc/ssl/certs/bigfoottrade_kz.crt /etc/ssl/certs/bigfoottrade_kz_ca.crt /etc/ssl/private/bigfoottrade_kz.key > /etc/haproxy/ssl/bigfoottrade_kz.pem
cat AAA_Certificate_Services.crt GoGetSSL_RSA_DV_CA.crt istransit_kz.crt istransit_kz.key > istransit_kz.pem cat AAA_Certificate_Services.crt GoGetSSL_RSA_DV_CA.crt istransit_kz.crt istransit_kz.key > istransit_kz.pem
SSLCertificateFile SSLCertificateFile
SSLCertificateKeyFile SSLCertificateKeyFile
Для включения WEB статистики на 9000 порту добавить в конец конфигурации: Для включения WEB статистики на 9000 порту добавить в конец конфигурации:
listen stats listen stats
bind *:8989 bind *:8989
stats enable stats enable
stats uri /stats stats uri /stats
stats realm Haproxy\ Statistics stats realm Haproxy\ Statistics
stats auth igor:i123456 stats auth igor:i123456
Тестирую файл конфигурации: Тестирую файл конфигурации:
```sh ```sh
haproxy -f /etc/haproxy/haproxy.cfg -c haproxy -f /etc/haproxy/haproxy.cfg -c
```` ````
Также можно в журнале посмотреть что написал HAProxy: Также можно в журнале посмотреть что написал HAProxy:
```sh ```sh
sudo journalctl -u haproxy --no-pager | tail -n 50 sudo journalctl -u haproxy --no-pager -n 50 -f
```` ````
Перезагружаем: Перезагружаем:
```sh ```sh
sudo systemctl restart haproxy sudo systemctl restart haproxy
```` ````
Посмотреть что в журнале можно так: Посмотреть что в журнале можно так:
Посмотреть что в журнале можно так: Посмотреть что в журнале можно так:
```sh ```sh
journalctl -u haproxy --since "1 minutes ago" journalctl -u haproxy --since "1 minutes ago"
journalctl -u haproxy --since "30 minutes ago" | grep "backend" journalctl -u haproxy --since "30 minutes ago" | grep "backend"
tail -f /var/log/haproxy.log tail -f /var/log/haproxy.log
``` ```
administrator@app:~$ journalctl -u haproxy --since "30 minutes ago" | grep "backend" administrator@app:~$ journalctl -u haproxy --since "30 minutes ago" | grep "backend"
backend 'transit_acquiring_v01_kz' has no server available! backend 'transit_acquiring_v01_kz' has no server available!
backend 'transit_translation_v02_kz' has no server available! backend 'transit_translation_v02_kz' has no server available!
backend 'transit_mobile_kz' has no server available! backend 'transit_mobile_kz' has no server available!
backend 'transit_manager_kz' has no server available! backend 'transit_manager_kz' has no server available!
backend 'transit_warehouse_kz' has no server available! backend 'transit_warehouse_kz' has no server available!
backend 'transit_kgd_kz' has no server available! backend 'transit_kgd_kz' has no server available!
backend 'transit_monitoring_kz' has no server available! backend 'transit_monitoring_kz' has no server available!
И теперь должно открываться но адресу: http://data.ccalm.org:8989/ И теперь должно открываться но адресу: http://data.ccalm.org:8989/
Обязательно проверить как установился SSL чекером: https://www.leaderssl.ru/tools/ssl_checker Обязательно проверить как установился SSL чекером: https://www.leaderssl.ru/tools/ssl_checker
# 📌 Бесплатный SSL сертификат Lets Encrypt для HAPROXY # 📌 Бесплатный SSL сертификат Lets Encrypt для HAPROXY
**************************************************************************************************** ****************************************************************************************************
Бесплатный SSL сертификат Lets Encrypt для HAPROXY https://serversforhackers.com/c/letsencrypt-with-haproxy Бесплатный SSL сертификат Lets Encrypt для HAPROXY https://serversforhackers.com/c/letsencrypt-with-haproxy
```sh ```sh
sudo apt-get update sudo apt-get update
sudo apt-get install certbot -y sudo apt-get install certbot -y
```` ````
Для удаления PPA нужно выполнить: Для удаления PPA нужно выполнить:
```sh ```sh
sudo apt-get remove certbot sudo apt-get remove certbot
sudo add-apt-repository --remove ppa:certbot/certbot sudo add-apt-repository --remove ppa:certbot/certbot
apt-get install -f apt-get install -f
apt autoremove apt autoremove
``` ```
Если включён файрволл то разрешаем порт: Если включён файрволл то разрешаем порт:
```sh ```sh
sudo ufw allow 9080/tcp sudo ufw allow 9080/tcp
``` ```
Проверяем что автообновление в certbot работает для этого выполняем команду: Проверяем что автообновление в certbot работает для этого выполняем команду:
```sh ```sh
sudo systemctl status certbot.timer sudo systemctl status certbot.timer
``` ```
Затем пытаемся выполнить пробный прогон при помощи команды: Затем пытаемся выполнить пробный прогон при помощи команды:
```sh ```sh
sudo certbot renew --dry-run sudo certbot renew --dry-run
``` ```
Согласно инструкции модифицируем конфигурационный файл haproxy добавив во frontend это: Согласно инструкции модифицируем конфигурационный файл haproxy добавив во frontend это:
``` ```
# ACL for detecting Let's Encrypt validtion requests # ACL for detecting Let's Encrypt validtion requests
acl is_certbot path_beg /.well-known/acme-challenge/ acl is_certbot path_beg /.well-known/acme-challenge/
use_backend backend-certbot if is_certbot use_backend backend-certbot if is_certbot
``` ```
А также ещё один backend: А также ещё один backend:
``` ```
# Certbot backend # Certbot backend
# Contains certbot stand-alone webserver # Contains certbot stand-alone webserver
backend backend-certbot backend backend-certbot
mode http mode http
server certbot 127.0.0.1:9080 server certbot 127.0.0.1:9080
``` ```
Перезагрузить и выполнить команду: Перезагрузить и выполнить команду:
```sh ```sh
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d powerdns.geovizor.top --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d powerdns.geovizor.top --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.top --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.top --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d gotify.locust.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d gotify.locust.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d git.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d git.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d ru.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d ru.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rug.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rug.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kz.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kz.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kzg.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kzg.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d data.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d data.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver2.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver2.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d stations.istt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d stations.istt.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d uspdmanager.istt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d uspdmanager.istt.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d tourist.istt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d tourist.istt.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d monitoring.infracos.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d monitoring.infracos.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d aistransit.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d aistransit.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d istransit.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d istransit.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d main.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d main.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d transit.istt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d transit.istt.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.com --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.com --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mqtt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mqtt.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d observer.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d observer.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rigor.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rigor.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d pal.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d pal.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d elektronnaya-ochered.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d elektronnaya-ochered.kz --email irigm@mail.ru --agree-tos --non-interactive
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mcp.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mcp.kz --email irigm@mail.ru --agree-tos --non-interactive
``` ```
После генерации файлы будут в: После генерации файлы будут в:
/etc/letsencrypt/live/geoserver2.ccalm.org/fullchain.pem /etc/letsencrypt/live/geoserver2.ccalm.org/fullchain.pem
/etc/letsencrypt/live/geoserver2.ccalm.org/privkey.pem /etc/letsencrypt/live/geoserver2.ccalm.org/privkey.pem
Для обновления создаём файл /etc/letsencrypt/renew.sh (по моему этот скрипт не нужен так как рабтает сервис certbot.timer): Для обновления создаём файл /etc/letsencrypt/renew.sh (по моему этот скрипт не нужен так как рабтает сервис certbot.timer):
#!/bin/bash #!/bin/bash
certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepare.sh" --quiet certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepare.sh" --quiet
Но для HAProxy нужно чтобы 2 файла были объединены поэтому добавляю спец скрипт /etc/haproxy/prepare.sh: Но для HAProxy нужно чтобы 2 файла были объединены поэтому добавляю спец скрипт /etc/haproxy/prepare.sh:
#!/bin/bash #!/bin/bash
# Loop through all Let's Encrypt certificates # Loop through all Let's Encrypt certificates
for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do
CERTIFICATE=`basename $CERTIFICATE` CERTIFICATE=`basename $CERTIFICATE`
# Combine certificate and private key to single file # Combine certificate and private key to single file
cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem
done done
systemctl reload haproxy.service systemctl reload haproxy.service
Обновляем конфигурацию HAProxy добавив в frontend: Обновляем конфигурацию HAProxy добавив в frontend:
bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem
Устанавливаем права Устанавливаем права
chmod +x /etc/haproxy/renew.sh chmod +x /etc/haproxy/renew.sh
chmod +x /etc/haproxy/prepare.sh chmod +x /etc/haproxy/prepare.sh
И добавляем задание в cron "crontab -e" ниже текст это раз в 24 часа в 00:00:00 ночи: И добавляем задание в cron "crontab -e" ниже текст это раз в 24 часа в 00:00:00 ночи:
0 0 * * * /bin/sh /etc/letsencrypt/renew.sh 0 0 * * * /bin/sh /etc/letsencrypt/renew.sh

View File

@ -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. Для удалённого доступа настройте правила.

View File

@ -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

View File

@ -1,8 +0,0 @@
```sh
ssh administrator@10.101.1.37 -p 22
```
```sh
sudo rabbitmqctl change_password admin KGf4nxT8vxZWv3jqNasP
```

View File

@ -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:

View File

@ -1,361 +1,361 @@
# Установка HashiCorp Vault на Ubuntu # Установка HashiCorp Vault на Ubuntu
Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими. Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими.
## 1. Установка Vault ## 1. Установка Vault
Открываю нужный сервер Открываю нужный сервер
```sh ```sh
wsl wsl
``` ```
Похоже vault из Москвы недоступен: Похоже vault из Москвы недоступен:
```sh ```sh
ssh root@45.144.64.218 -p 2200 ssh root@45.144.64.218 -p 2200
``` ```
### 1.1. Добавление репозитория HashiCorp ### 1.1. Добавление репозитория HashiCorp
1. Установите необходимые пакеты: 1. Установите необходимые пакеты:
```sh ```sh
sudo apt update && sudo apt install -y gnupg software-properties-common curl sudo apt update && sudo apt install -y gnupg software-properties-common curl
``` ```
2. Добавьте официальный GPG-ключ HashiCorp: 2. Добавьте официальный GPG-ключ HashiCorp:
```sh ```sh
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
``` ```
3. Добавьте репозиторий HashiCorp в систему: 3. Добавьте репозиторий HashiCorp в систему:
```sh ```sh
sudo mcedit /etc/apt/sources.list.d/hashicorp.list sudo mcedit /etc/apt/sources.list.d/hashicorp.list
``` ```
Заменяем на: Заменяем на:
```text ```text
deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main
``` ```
Где noble это кодовое имя Ubuntu 24.04 Где noble это кодовое имя Ubuntu 24.04
4. Обновите списки пакетов: 4. Обновите списки пакетов:
```sh ```sh
sudo apt update sudo apt update
``` ```
5. Установите Vault: 5. Установите Vault:
```sh ```sh
sudo apt install -y vault sudo apt install -y vault
``` ```
6. Проверьте, что Vault установлен правильно: 6. Проверьте, что Vault установлен правильно:
```sh ```sh
vault --version vault --version
``` ```
Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z
## 2. Запуск Vault ## 2. Запуск Vault
### 2.1. Запуск в Dev-режиме (только для тестирования) ### 2.1. Запуск в Dev-режиме (только для тестирования)
If work stop it: If work stop it:
```sh ```sh
sudo pkill vault sudo pkill vault
``` ```
If need delete old data: If need delete old data:
```sh ```sh
sudo rm -rf ~/.vault-token ~/.vault/ sudo rm -rf ~/.vault-token ~/.vault/
``` ```
For find where stored data read file: For find where stored data read file:
```sh ```sh
sudo mcedit /etc/vault/config.hcl sudo mcedit /etc/vault/config.hcl
``` ```
In config file find this path: /opt/vault/data In config file find this path: /opt/vault/data
После удаления базы нужно инициализировать Vault заново: После удаления базы нужно инициализировать Vault заново:
```sh ```sh
sudo vault operator init sudo vault operator init
``` ```
Run in developer mode (in dev mode data stored in RAM): Run in developer mode (in dev mode data stored in RAM):
```sh ```sh
vault server -dev vault server -dev
``` ```
```text ```text
WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault. authenticated to the CLI, so you can immediately begin using Vault.
You may need to set the following environment variables: You may need to set the following environment variables:
$ export VAULT_ADDR='http://127.0.0.1:8200' $ export VAULT_ADDR='http://127.0.0.1:8200'
The unseal key and root token are displayed below in case you want to The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate. seal/unseal the Vault or re-authenticate.
Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s= Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s=
Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w
Development mode should NOT be used in production installations! Development mode should NOT be used in production installations!
``` ```
Теперь Vault работает по адресу: Теперь Vault работает по адресу:
```sh ```sh
start http://127.0.0.1:8200 start http://127.0.0.1:8200
``` ```
Останавливаю нажатием Ctrl + C Останавливаю нажатием Ctrl + C
### 2.2. Настройка Vault в режиме сервера ### 2.2. Настройка Vault в режиме сервера
1. Создайте конфигурационный файл: 1. Создайте конфигурационный файл:
```sh ```sh
sudo mkdir -p /etc/vault && sudo mkdir -p /etc/vault &&
sudo mcedit /etc/vault/config.hcl sudo mcedit /etc/vault/config.hcl
``` ```
2. Добавьте следующий конфиг: 2. Добавьте следующий конфиг:
```text ```text
storage "file" { storage "file" {
path = "/opt/vault/data" path = "/opt/vault/data"
} }
listener "tcp" { listener "tcp" {
address = "127.0.0.1:8200" address = "127.0.0.1:8200"
tls_disable = 1 tls_disable = 1
} }
disable_mlock = true disable_mlock = true
ui = true ui = true
``` ```
3. Создайте папку для хранения данных: 3. Создайте папку для хранения данных:
```sh ```sh
sudo mkdir -p /opt/vault/data && sudo mkdir -p /opt/vault/data &&
sudo chown vault:vault /opt/vault/data sudo chown vault:vault /opt/vault/data
``` ```
4. Создайте systemd-сервис для Vault: 4. Создайте systemd-сервис для Vault:
```sh ```sh
sudo tee /etc/systemd/system/vault.service > /dev/null <<'EOF' sudo tee /etc/systemd/system/vault.service > /dev/null <<'EOF'
[Unit] [Unit]
Description=HashiCorp Vault Description=HashiCorp Vault
After=network-online.target After=network-online.target
Requires=network-online.target Requires=network-online.target
[Service] [Service]
User=vault User=vault
Group=vault Group=vault
ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl
ExecReload=/bin/kill --signal HUP \$MAINPID ExecReload=/bin/kill --signal HUP \$MAINPID
KillSignal=SIGTERM KillSignal=SIGTERM
Restart=on-failure Restart=on-failure
LimitMEMLOCK=infinity LimitMEMLOCK=infinity
ProtectSystem=full ProtectSystem=full
CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_SYSLOG CAP_CHOWN CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_SYSLOG CAP_CHOWN
NoNewPrivileges=yes NoNewPrivileges=yes
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
``` ```
Проверяем всё ли записалось: Проверяем всё ли записалось:
```sh ```sh
sudo mcedit /etc/systemd/system/vault.service sudo mcedit /etc/systemd/system/vault.service
``` ```
5. Перезапустите systemd и включите Vault: 5. Перезапустите systemd и включите Vault:
```sh ```sh
sudo systemctl daemon-reload && sudo systemctl daemon-reload &&
sudo systemctl enable vault && sudo systemctl enable vault &&
sudo systemctl start vault sudo systemctl start vault
``` ```
7. Проверьте статус: 7. Проверьте статус:
```sh ```sh
sudo systemctl status vault sudo systemctl status vault
``` ```
--- ---
## 3. Инициализация и разлочка Vault ## 3. Инициализация и разлочка Vault
1. Экспортируйте переменную окружения: 1. Экспортируйте переменную окружения:
```sh ```sh
export VAULT_ADDR='http://127.0.0.1:8200' export VAULT_ADDR='http://127.0.0.1:8200'
``` ```
2. Инициализируйте хранилище (сохраните ключи!): 2. Инициализируйте хранилище (сохраните ключи!):
```sh ```sh
vault operator init vault operator init
``` ```
Выдало: Выдало:
```text ```text
Unseal Key 1: lQlJsb9RI8rSzLrc5iPnx1qJkWZbbXIkrEgnQGe5R6uO Unseal Key 1: lQlJsb9RI8rSzLrc5iPnx1qJkWZbbXIkrEgnQGe5R6uO
Unseal Key 2: 0qJJXRo570jlH/0Qs/wodXHNI2SF5VgL4jE04JawSPSB Unseal Key 2: 0qJJXRo570jlH/0Qs/wodXHNI2SF5VgL4jE04JawSPSB
Unseal Key 3: VuYkOkQ8qmwofDmjqsTRQoMqGAH3Jv+nqQylL7Uibbtp Unseal Key 3: VuYkOkQ8qmwofDmjqsTRQoMqGAH3Jv+nqQylL7Uibbtp
Unseal Key 4: JJJ8Nqj00qzS9u5wNtTtExL/jWlJF9fgaBsiuaf0kFxC Unseal Key 4: JJJ8Nqj00qzS9u5wNtTtExL/jWlJF9fgaBsiuaf0kFxC
Unseal Key 5: L6lZMp/l7s24EZJAFnWS4Py5jsWOuMioC41g5LhUJKWL Unseal Key 5: L6lZMp/l7s24EZJAFnWS4Py5jsWOuMioC41g5LhUJKWL
Initial Root Token: hvs.o07DY7tnSPcufxk60pjCXDzn Initial Root Token: hvs.o07DY7tnSPcufxk60pjCXDzn
Vault initialized with 5 key shares and a key threshold of 3. Please securely Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed, distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests. before it can start servicing requests.
Vault does not store the generated root key. Without at least 3 keys to Vault does not store the generated root key. Without at least 3 keys to
reconstruct the root key, Vault will remain permanently sealed! reconstruct the root key, Vault will remain permanently sealed!
It is possible to generate new unseal keys, provided you have a quorum of It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information. existing unseal keys shares. See "vault operator rekey" for more information.
``` ```
3. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза выполнить эту команду): 3. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза выполнить эту команду):
```sh ```sh
vault operator unseal vault operator unseal
``` ```
4. Авторизуйтесь с root-токеном: 4. Авторизуйтесь с root-токеном:
```sh ```sh
vault login hvs.MTFV72PjKXCVh5ZL6yCVE3Yw vault login hvs.MTFV72PjKXCVh5ZL6yCVE3Yw
``` ```
5. Создаём(включаем) новое хранилище ключ-значение через ssh 5. Создаём(включаем) новое хранилище ключ-значение через ssh
```sh ```sh
vault secrets enable -path=org-ccalm kv-v2 vault secrets enable -path=org-ccalm kv-v2
``` ```
5. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring) 5. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring)
Заменит(создаст) значение: Заменит(создаст) значение:
```sh ```sh
vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4 vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4
``` ```
Добавит (обновит): Добавит (обновит):
```sh ```sh
vault kv patch org-ccalm/jwt vault.test=test2 vault kv patch org-ccalm/jwt vault.test=test2
``` ```
```sh ```sh
vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1 vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1
``` ```
6. Read data from the kv 6. Read data from the kv
```sh ```sh
vault kv get org-ccalm/jwt vault kv get org-ccalm/jwt
``` ```
Должно вывести: Должно вывести:
```text ```text
Key Value Key Value
--- ----- --- -----
server.ssl.key-store-password M4yh4 server.ssl.key-store-password M4yh4
``` ```
6. Включаем AppRole для доступа из приложения 6. Включаем AppRole для доступа из приложения
```sh ```sh
vault auth enable approle vault auth enable approle
``` ```
7. Добавляем политики потом создаём ключ для этой политикиполитики 7. Добавляем политики потом создаём ключ для этой политикиполитики
Создаю файл политик Создаю файл политик
```sh ```sh
cd ~ && cd ~ &&
sudo tee jwt-policy.hcl > /dev/null <<'EOF' sudo tee jwt-policy.hcl > /dev/null <<'EOF'
path "org-ccalm/data/jwt" { path "org-ccalm/data/jwt" {
capabilities = ["create", "read", "update", "delete", "list"] capabilities = ["create", "read", "update", "delete", "list"]
} }
path "org-ccalm/data/public" { path "org-ccalm/data/public" {
capabilities = ["read", "list"] capabilities = ["read", "list"]
} }
EOF EOF
``` ```
Apply and delete configiration file: Apply and delete configiration file:
```sh ```sh
vault policy write jwt-policy ~/jwt-policy.hcl && vault policy write jwt-policy ~/jwt-policy.hcl &&
rm -f jwt-policy.hcl rm -f jwt-policy.hcl
``` ```
Создаём AppRole (на 10 лет) Создаём AppRole (на 10 лет)
```sh ```sh
vault write auth/approle/role/org-ccalm-jwt \ vault write auth/approle/role/org-ccalm-jwt \
secret_id_ttl=0 \ secret_id_ttl=0 \
token_ttl=87600h \ token_ttl=87600h \
token_max_ttl=87600h \ token_max_ttl=87600h \
policies="jwt-policy,another-policy,third-policy" policies="jwt-policy,another-policy,third-policy"
``` ```
Получаем role_id и secret_id Получаем role_id и secret_id
```sh ```sh
vault read auth/approle/role/org-ccalm-jwt/role-id vault read auth/approle/role/org-ccalm-jwt/role-id
``` ```
Выдало Выдало
```text ```text
Key Value Key Value
--- ----- --- -----
role_id c0064fe2-8f0e-b317-7fe7-66f7405b45a1 role_id c0064fe2-8f0e-b317-7fe7-66f7405b45a1
``` ```
На команду На команду
```sh ```sh
vault write -f auth/approle/role/org-ccalm-jwt/secret-id vault write -f auth/approle/role/org-ccalm-jwt/secret-id
``` ```
Выдало: Выдало:
```text ```text
Key Value Key Value
--- ----- --- -----
secret_id 24f31c88-7185-0d93-9a51-e221c2925265 secret_id 24f31c88-7185-0d93-9a51-e221c2925265
secret_id_accessor 22fa68e3-fc73-2008-0a34-3506630b6693 secret_id_accessor 22fa68e3-fc73-2008-0a34-3506630b6693
secret_id_num_uses 0 secret_id_num_uses 0
secret_id_ttl 0s secret_id_ttl 0s
``` ```
Сохрани role_id и secret_id, они понадобятся Spring Boot. Сохрани role_id и secret_id, они понадобятся Spring Boot.
Хранить ключи лучьше в переменных окружения Хранить ключи лучьше в переменных окружения
```sh ```sh
export VAULT_ROLE_ID="your-role-id" && export VAULT_ROLE_ID="your-role-id" &&
export VAULT_SECRET_ID="your-secret-id" export VAULT_SECRET_ID="your-secret-id"
``` ```
Проверяем не больше какого значения можно задать время жизни кокена: Проверяем не больше какого значения можно задать время жизни кокена:
```sh ```sh
vault read sys/mounts/auth/token/tune vault read sys/mounts/auth/token/tune
``` ```
По умолчанию max_lease_ttl равен 32 дня! По умолчанию max_lease_ttl равен 32 дня!
На год можно увеличить так: На год можно увеличить так:
```sh ```sh
vault write sys/mounts/auth/token/tune max_lease_ttl=8760h vault write sys/mounts/auth/token/tune max_lease_ttl=8760h
``` ```
Create data access token with set politics: Create data access token with set politics:
```sh ```sh
vault token create -policy=jwt-policy -ttl=0 vault token create -policy=jwt-policy -ttl=0
``` ```
Продлевать токен можно так: Продлевать токен можно так:
```sh ```sh
vault token renew <твой-токен> vault token renew <твой-токен>
``` ```
Проверяем зранятся ли токены в хранилище а не в памяти Проверяем зранятся ли токены в хранилище а не в памяти
```sh ```sh
vault read sys/auth/token/tune vault read sys/auth/token/tune
``` ```
token_type = default-service, значит Vault не хранит токены token_type = default-service, значит Vault не хранит токены
Включаем хранение токенов: Включаем хранение токенов:
```sh ```sh
vault write sys/auth/token/tune token_type=service vault write sys/auth/token/tune token_type=service
``` ```
--- ---
Теперь HashiCorp Vault установлен и готов к использованию! 🚀 Теперь HashiCorp Vault установлен и готов к использованию! 🚀

View File

@ -1,136 +1,136 @@
Загрузить в HashiCorp Vault настройки можно так: Загрузить в HashiCorp Vault настройки можно так:
```sh ```sh
vault kv put secret/org-ccalm-jwt \ vault kv put secret/org-ccalm-jwt \
jwt.secret=my-secret-value \ jwt.secret=my-secret-value \
db.user=admin \ db.user=admin \
db.pass=123456 db.pass=123456
``` ```
Разбор параметров: Разбор параметров:
1. vault kv put команда для записи ключей и значений в KV-хранилище Vault. 1. vault kv put команда для записи ключей и значений в KV-хранилище Vault.
2. secret/org-ccalm-jwt путь к секрету. 2. secret/org-ccalm-jwt путь к секрету.
* secret/ это backend-хранилище (оно должно быть включено в Vault). * secret/ это backend-хранилище (оно должно быть включено в Vault).
* org-ccalm-jwt имя секрета, под которым сохраняются параметры. * org-ccalm-jwt имя секрета, под которым сохраняются параметры.
3. jwt.secret=my-secret-value ключ jwt.secret со значением my-secret-value. 3. jwt.secret=my-secret-value ключ jwt.secret со значением my-secret-value.
4. db.user=admin ключ db.user со значением admin. 4. db.user=admin ключ db.user со значением admin.
5. db.pass=123456 ключ db.pass со значением 123456. 5. db.pass=123456 ключ db.pass со значением 123456.
# 🚀 Установка и настройка HashiCorp Vault на Windows # 🚀 Установка и настройка HashiCorp Vault на Windows
## 📌 1. Установка HashiCorp Vault ## 📌 1. Установка HashiCorp Vault
1. **Скачайте Vault CLI** с официального сайта: 1. **Скачайте Vault CLI** с официального сайта:
🔗 [https://developer.hashicorp.com/vault/downloads](https://developer.hashicorp.com/vault/downloads) 🔗 [https://developer.hashicorp.com/vault/downloads](https://developer.hashicorp.com/vault/downloads)
2. Распакуйте архив и **добавьте путь к `vault.exe` в `PATH`**: 2. Распакуйте архив и **добавьте путь к `vault.exe` в `PATH`**:
- Кликните **ПКМ → Этот компьютер → Свойства → Дополнительные параметры системы**. - Кликните **ПКМ → Этот компьютер → Свойства → Дополнительные параметры системы**.
- В **Переменные среды** добавьте путь к папке с `vault.exe`. - В **Переменные среды** добавьте путь к папке с `vault.exe`.
3. Откройте **cmd** или **PowerShell** и проверьте установку командой: 3. Откройте **cmd** или **PowerShell** и проверьте установку командой:
```sh ```sh
vault --version vault --version
``` ```
Если всё ОК, увидите версию Vault. Примерно такую: Vault v1.18.4 (503be623a3697e8c10c254dc87d26492c46753e1), built 2025-01-29T13:57:54Z Если всё ОК, увидите версию Vault. Примерно такую: Vault v1.18.4 (503be623a3697e8c10c254dc87d26492c46753e1), built 2025-01-29T13:57:54Z
--- ---
## 📌 2. Запуск Vault-сервера (разработческий режим) ## 📌 2. Запуск Vault-сервера (разработческий режим)
Чтобы локально запустить Vault в **dev-режиме** (без авторизации), выполните: Чтобы локально запустить Vault в **dev-режиме** (без авторизации), выполните:
```sh ```sh
vault server -dev vault server -dev
``` ```
После запуска он покажет **root-токен** (сохраните его!): После запуска он покажет **root-токен** (сохраните его!):
```plaintext ```plaintext
Unseal Key: x1jUXpLJREI6M1+Qm6m/h3NLEhaEmBageqw0v+dSSKo= Unseal Key: x1jUXpLJREI6M1+Qm6m/h3NLEhaEmBageqw0v+dSSKo=
Root Token: hvs.V7Rc8uJ8YJ0AASKZfep6oYNe Root Token: hvs.V7Rc8uJ8YJ0AASKZfep6oYNe
``` ```
Теперь Vault работает по адресу: Теперь Vault работает по адресу:
```sh ```sh
start http://127.0.0.1:8200 start http://127.0.0.1:8200
``` ```
--- ---
## 📌 3. Экспорт токена (чтобы не вводить каждый раз) ## 📌 3. Экспорт токена (чтобы не вводить каждый раз)
Откройте **PowerShell** и выполните: Откройте **PowerShell** и выполните:
```sh ```sh
$env:VAULT_ADDR="http://127.0.0.1:8200" $env:VAULT_ADDR="http://127.0.0.1:8200"
$env:VAULT_TOKEN="hvs.JDIyKgDMagA0WyIhLFQ4mAjZ" $env:VAULT_TOKEN="hvs.JDIyKgDMagA0WyIhLFQ4mAjZ"
``` ```
(Замените `hvs.JDIyKgDMagA0WyIhLFQ4mAjZ` на свой токен.) (Замените `hvs.JDIyKgDMagA0WyIhLFQ4mAjZ` на свой токен.)
Теперь можно работать с Vault без ввода токена каждый раз. Теперь можно работать с Vault без ввода токена каждый раз.
--- ---
## 📌 4. Запись значений в Vault на Windows ## 📌 4. Запись значений в Vault на Windows
Значения разделенные пробелами можно записать в вольт так: Значения разделенные пробелами можно записать в вольт так:
```sh ```sh
vault kv put secret/kz-istransit-jwt server.ssl.key-store-password=MFNX344yh4 vault kv put secret/kz-istransit-jwt server.ssl.key-store-password=MFNX344yh4
``` ```
Выдаст примерно такое: Выдаст примерно такое:
======== Secret Path ======== ======== Secret Path ========
secret/data/kz-istransit-jwt secret/data/kz-istransit-jwt
======= Metadata ======= ======= Metadata =======
Key Value Key Value
--- ----- --- -----
created_time 2025-02-24T12:49:45.7630328Z created_time 2025-02-24T12:49:45.7630328Z
custom_metadata <nil> custom_metadata <nil>
deletion_time n/a deletion_time n/a
destroyed false destroyed false
version 1 version 1
--- ---
## 📌 5. Проверка сохранённых данных ## 📌 5. Проверка сохранённых данных
Чтобы посмотреть, что записано в Vault: Чтобы посмотреть, что записано в Vault:
```sh ```sh
vault kv get secret/kz-istransit-jwt vault kv get secret/kz-istransit-jwt
``` ```
Если всё настроено правильно, вы увидите примерно такой вывод: Если всё настроено правильно, вы увидите примерно такой вывод:
```plaintext ```plaintext
====== Metadata ====== ====== Metadata ======
Key Value Key Value
--- ----- --- -----
created_time 2025-02-24T12:00:00Z created_time 2025-02-24T12:00:00Z
version 1 version 1
====== Data ====== ====== Data ======
Key Value Key Value
--- ----- --- -----
db.pass 123456 db.pass 123456
db.user admin db.user admin
jwt.secret my-secret-value jwt.secret my-secret-value
``` ```
--- ---
## 📌 6. Удаление данных из Vault ## 📌 6. Удаление данных из Vault
Удаление данных: Удаление данных:
```sh ```sh
vault kv delete secret/org-ccalm-jwt vault kv delete secret/org-ccalm-jwt
``` ```
Полное уничтожение (без возможности восстановления): Полное уничтожение (без возможности восстановления):
```sh ```sh
vault kv destroy -versions=1 secret/org-ccalm-jwt vault kv destroy -versions=1 secret/org-ccalm-jwt
``` ```
--- ---
## 🎯 Итог ## 🎯 Итог
✅ Установили Vault CLI ✅ Установили Vault CLI
✅ Запустили Vault сервер (`vault server -dev`) ✅ Запустили Vault сервер (`vault server -dev`)
✅ Экспортировали `VAULT_ADDR` и `VAULT_TOKEN` ✅ Экспортировали `VAULT_ADDR` и `VAULT_TOKEN`
✅ Записали настройки в Vault ✅ Записали настройки в Vault
✅ Проверили данные ✅ Проверили данные
Теперь можно интегрировать Vault в Spring Boot 🚀 Теперь можно интегрировать Vault в Spring Boot 🚀

382
Ubuntu.md
View File

@ -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/