diff --git a/RabbitMQ_install.md b/Brokers/RabbitMQ_install.md
similarity index 100%
rename from RabbitMQ_install.md
rename to Brokers/RabbitMQ_install.md
diff --git a/rabbitmq_replication_setup_instructions.md b/Brokers/rabbitmq_replication_setup_instructions.md
similarity index 95%
rename from rabbitmq_replication_setup_instructions.md
rename to Brokers/rabbitmq_replication_setup_instructions.md
index 6b105b3..33d2302 100644
--- a/rabbitmq_replication_setup_instructions.md
+++ b/Brokers/rabbitmq_replication_setup_instructions.md
@@ -1,341 +1,341 @@
-Here’s a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly:
-
----
-
-## **Step 1: Prepare the Servers**
-
-Ensure you have at least **three** nodes (recommended for HA) with:
-
-- Ubuntu 22.04 (or a supported OS)
-- Sufficient CPU/RAM based on workload
-- Open necessary firewall ports (**5672, 15672, 25672**)
-
-Set hostnames for clarity:
-
-```bash
-sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node
-```
-
----
-
-## **Step 2: Install Erlang and RabbitMQ**
-
-Run the following on **all nodes**:
-
-### **1. Add the RabbitMQ Repository**
-
-```bash
-sudo apt update
-sudo apt install -y curl gnupg
-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
-```
-
-### **2. Install Erlang and RabbitMQ**
-
-```bash
-sudo apt update
-sudo apt install -y rabbitmq-server
-```
-
-### **3. Enable RabbitMQ**
-
-```bash
-sudo systemctl enable --now rabbitmq-server
-```
-
----
-
-## **Step 3: Configure Clustering**
-
-### **1. Stop RabbitMQ on All Nodes**
-
-```bash
-sudo systemctl stop rabbitmq-server
-```
-
-### **2. Configure Cookie for Clustering**
-
-Run on **all nodes** (same cookie ensures clustering works):
-
-```bash
-echo "MY_CLUSTER_COOKIE" | sudo tee /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.
-
----
-
-## **Step 4: Join Nodes to the Cluster**
-
-Perform this on **nodes 2 and 3**, joining them to **node1**:
-
-```bash
-sudo rabbitmqctl stop_app
-sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1
-sudo rabbitmqctl start_app
-```
-
-Check cluster status:
-
-```bash
-sudo rabbitmqctl cluster_status
-```
-
----
-
-## **Step 5: Enable High Availability (HA) Mirroring**
-
-To replicate all queues, run on **any one node**:
-
-```bash
-rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
-```
-
-This ensures all queues are **replicated across all nodes**.
-
----
-
-## **Step 6: Enable Management UI**
-
-Run on **each node** to enable the web interface:
-
-```bash
-sudo rabbitmq-plugins enable rabbitmq_management
-```
-
-Access at:
-**http://[NODE_IP]:15672**
-(Default login: `guest/guest`, change this for security.)
-
----
-
-## **Step 7: Test the Cluster**
-
-Run on **each node**:
-
-```bash
-rabbitmqctl list_queues
-```
-
-Queues should be visible and synchronized.
-
----
-
-## **Step 8: Enable Auto-Recovery** (Optional)
-
-Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add:
-
-```ini
-cluster_formation.peer_discovery_backend = classic_config
-cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1
-cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2
-cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3
-```
-
-Then restart RabbitMQ:
-
-```bash
-sudo systemctl restart rabbitmq-server
-```
-
----
-
-## **Step 9: Secure the Cluster** (Recommended)
-
-### **1. Create an Admin User**
-
-```bash
-rabbitmqctl add_user admin StrongPassword123!
-rabbitmqctl set_user_tags admin administrator
-rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
-```
-
-Then **disable the guest account**:
-
-```bash
-rabbitmqctl delete_user guest
-```
-
-### **2. Enable TLS (Optional)**
-
-For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html).
-
----
-
-## **Step 10: Setup Monitoring (Optional)**
-
-Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**:
-
-```bash
-sudo rabbitmq-plugins enable rabbitmq_prometheus
-```
-
----
-
-Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀
-
----
-
-
-
-
-
-
-# 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:
-
-## **1️⃣ Create the Configuration File**
-
-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:
-
-```bash
-sudo nano /etc/rabbitmq/rabbitmq.conf
-```
-
-Then add the following cluster configuration:
-
-```
-cluster_formation.peer_discovery_backend = classic_config
-cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main
-cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica
-```
-
-Save and exit (`CTRL+X`, then `Y`, then `Enter`).
-
----
-
-## **2️⃣ Set Correct Permissions**
-
-Ensure the RabbitMQ user can read it:
-
-```bash
-sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf
-sudo chmod 644 /etc/rabbitmq/rabbitmq.conf
-```
-
----
-
-## **3️⃣ Restart RabbitMQ**
-
-After modifying the configuration, restart the RabbitMQ service:
-
-```bash
-sudo systemctl restart rabbitmq-server
-```
-
-Check the status:
-
-```bash
-sudo systemctl status rabbitmq-server
-```
-
----
-
-## **4️⃣ Verify the Cluster Configuration**
-
-After restarting, verify that clustering is working:
-
-```bash
-rabbitmqctl cluster_status
-```
-
-If the nodes are listed correctly, your setup is working.
-
----
-
-## **5️⃣ If Using the Legacy `.config` Format**
-
-Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create:
-
-```bash
-sudo nano /etc/rabbitmq/rabbitmq.config
-```
-
-Add this:
-
-```erlang
-[
- {rabbit, [
- {cluster_formation, [
- {peer_discovery_backend, classic_config},
- {classic_config, [
- {nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']}
- ]}
- ]}
- ]}
-].
-```
-
-Then restart RabbitMQ:
-
-```bash
-sudo systemctl restart rabbitmq-server
-```
-
----
-
-### **🔍 Troubleshooting**
-
-❌ **RabbitMQ doesn't restart?**
-Check logs for errors:
-
-```bash
-sudo journalctl -u rabbitmq-server --no-pager | tail -50
-```
-
-❌ **Cluster not forming?**
-Try forcing a node to join manually:
-
-```bash
-rabbitmqctl stop_app
-rabbitmqctl join_cluster rabbit@rabbitmq-main
-rabbitmqctl start_app
-```
-
----
-
-
-
-
-
-
-# Instructions to fix **unexpected** management UI authentication errors
-
-stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837)
-
-## Answer
-
-### ❌ **Cannot login with guest/guest credentials**
-
-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.
-
-Do not create any config file and mess with it..
-
-This is what i did then,
-
-1. Add a new/fresh user, say user test and password test:
-
-```bash
-rabbitmqctl add_user test test
-```
-
-2. Give administrative access to the new user:
-
-```bash
-rabbitmqctl set_user_tags test administrator
-```
-
-3. Set permission to newly created user:
-
-```bash
-rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
-```
-
-That's it, enjoy :)
+Here’s a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly:
+
+---
+
+## **Step 1: Prepare the Servers**
+
+Ensure you have at least **three** nodes (recommended for HA) with:
+
+- Ubuntu 22.04 (or a supported OS)
+- Sufficient CPU/RAM based on workload
+- Open necessary firewall ports (**5672, 15672, 25672**)
+
+Set hostnames for clarity:
+
+```bash
+sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node
+```
+
+---
+
+## **Step 2: Install Erlang and RabbitMQ**
+
+Run the following on **all nodes**:
+
+### **1. Add the RabbitMQ Repository**
+
+```bash
+sudo apt update
+sudo apt install -y curl gnupg
+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
+```
+
+### **2. Install Erlang and RabbitMQ**
+
+```bash
+sudo apt update
+sudo apt install -y rabbitmq-server
+```
+
+### **3. Enable RabbitMQ**
+
+```bash
+sudo systemctl enable --now rabbitmq-server
+```
+
+---
+
+## **Step 3: Configure Clustering**
+
+### **1. Stop RabbitMQ on All Nodes**
+
+```bash
+sudo systemctl stop rabbitmq-server
+```
+
+### **2. Configure Cookie for Clustering**
+
+Run on **all nodes** (same cookie ensures clustering works):
+
+```bash
+echo "MY_CLUSTER_COOKIE" | sudo tee /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.
+
+---
+
+## **Step 4: Join Nodes to the Cluster**
+
+Perform this on **nodes 2 and 3**, joining them to **node1**:
+
+```bash
+sudo rabbitmqctl stop_app
+sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1
+sudo rabbitmqctl start_app
+```
+
+Check cluster status:
+
+```bash
+sudo rabbitmqctl cluster_status
+```
+
+---
+
+## **Step 5: Enable High Availability (HA) Mirroring**
+
+To replicate all queues, run on **any one node**:
+
+```bash
+rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
+```
+
+This ensures all queues are **replicated across all nodes**.
+
+---
+
+## **Step 6: Enable Management UI**
+
+Run on **each node** to enable the web interface:
+
+```bash
+sudo rabbitmq-plugins enable rabbitmq_management
+```
+
+Access at:
+**http://[NODE_IP]:15672**
+(Default login: `guest/guest`, change this for security.)
+
+---
+
+## **Step 7: Test the Cluster**
+
+Run on **each node**:
+
+```bash
+rabbitmqctl list_queues
+```
+
+Queues should be visible and synchronized.
+
+---
+
+## **Step 8: Enable Auto-Recovery** (Optional)
+
+Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add:
+
+```ini
+cluster_formation.peer_discovery_backend = classic_config
+cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1
+cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2
+cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3
+```
+
+Then restart RabbitMQ:
+
+```bash
+sudo systemctl restart rabbitmq-server
+```
+
+---
+
+## **Step 9: Secure the Cluster** (Recommended)
+
+### **1. Create an Admin User**
+
+```bash
+rabbitmqctl add_user admin StrongPassword123!
+rabbitmqctl set_user_tags admin administrator
+rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
+```
+
+Then **disable the guest account**:
+
+```bash
+rabbitmqctl delete_user guest
+```
+
+### **2. Enable TLS (Optional)**
+
+For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html).
+
+---
+
+## **Step 10: Setup Monitoring (Optional)**
+
+Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**:
+
+```bash
+sudo rabbitmq-plugins enable rabbitmq_prometheus
+```
+
+---
+
+Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀
+
+---
+
+
+
+
+
+
+# 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:
+
+## **1️⃣ Create the Configuration File**
+
+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:
+
+```bash
+sudo nano /etc/rabbitmq/rabbitmq.conf
+```
+
+Then add the following cluster configuration:
+
+```
+cluster_formation.peer_discovery_backend = classic_config
+cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main
+cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica
+```
+
+Save and exit (`CTRL+X`, then `Y`, then `Enter`).
+
+---
+
+## **2️⃣ Set Correct Permissions**
+
+Ensure the RabbitMQ user can read it:
+
+```bash
+sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf
+sudo chmod 644 /etc/rabbitmq/rabbitmq.conf
+```
+
+---
+
+## **3️⃣ Restart RabbitMQ**
+
+After modifying the configuration, restart the RabbitMQ service:
+
+```bash
+sudo systemctl restart rabbitmq-server
+```
+
+Check the status:
+
+```bash
+sudo systemctl status rabbitmq-server
+```
+
+---
+
+## **4️⃣ Verify the Cluster Configuration**
+
+After restarting, verify that clustering is working:
+
+```bash
+rabbitmqctl cluster_status
+```
+
+If the nodes are listed correctly, your setup is working.
+
+---
+
+## **5️⃣ If Using the Legacy `.config` Format**
+
+Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create:
+
+```bash
+sudo nano /etc/rabbitmq/rabbitmq.config
+```
+
+Add this:
+
+```erlang
+[
+ {rabbit, [
+ {cluster_formation, [
+ {peer_discovery_backend, classic_config},
+ {classic_config, [
+ {nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']}
+ ]}
+ ]}
+ ]}
+].
+```
+
+Then restart RabbitMQ:
+
+```bash
+sudo systemctl restart rabbitmq-server
+```
+
+---
+
+### **🔍 Troubleshooting**
+
+❌ **RabbitMQ doesn't restart?**
+Check logs for errors:
+
+```bash
+sudo journalctl -u rabbitmq-server --no-pager | tail -50
+```
+
+❌ **Cluster not forming?**
+Try forcing a node to join manually:
+
+```bash
+rabbitmqctl stop_app
+rabbitmqctl join_cluster rabbit@rabbitmq-main
+rabbitmqctl start_app
+```
+
+---
+
+
+
+
+
+
+# Instructions to fix **unexpected** management UI authentication errors
+
+stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837)
+
+## Answer
+
+### ❌ **Cannot login with guest/guest credentials**
+
+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.
+
+Do not create any config file and mess with it..
+
+This is what i did then,
+
+1. Add a new/fresh user, say user test and password test:
+
+```bash
+rabbitmqctl add_user test test
+```
+
+2. Give administrative access to the new user:
+
+```bash
+rabbitmqctl set_user_tags test administrator
+```
+
+3. Set permission to newly created user:
+
+```bash
+rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
+```
+
+That's it, enjoy :)
diff --git a/Gotify_install.md b/Chats/Gotify_install.md
similarity index 96%
rename from Gotify_install.md
rename to Chats/Gotify_install.md
index bb05b45..6f655a8 100644
--- a/Gotify_install.md
+++ b/Chats/Gotify_install.md
@@ -1,138 +1,139 @@
-# 📌 Установка Gotify в Docker на Ubuntu 24.04
-
-## 1. Установка Docker и Docker Compose
-Если Docker не установлен, установим его:
-```sh
- sudo apt update && sudo apt upgrade -y
- sudo apt install -y docker.io docker-compose
- sudo systemctl enable --now docker
-```
-Проверим версию:
-```sh
- docker --version
- docker-compose --version
-```
-
-----------------------------------------------------------------------------------------------------
-
-## 2. Создание директории для Gotify
-Лучшее место для сторонних сервисов — `/opt`:
-```sh
- sudo mkdir -p /opt/gotify
- cd /opt/gotify
-```
-
-## 3. Создаём самоподписанный сертификат
-```sh
- 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"
-```
-----------------------------------------------------------------------------------------------------
-
-## 3. Создание `docker-compose.yml`
-Создадим конфигурацию:
-```sh
- sudo mcedit /opt/gotify/docker-compose.yml
-```
-Добавляем:
-```yaml
-services:
- gotify:
- image: gotify/server
- container_name: gotify
- restart: unless-stopped
- volumes:
- - "./certs:/certs"
- - "./data:/app/data"
- ports:
- - "8080:443" # HTTPS
- environment:
- - GOTIFY_DEFAULTUSER_NAME=admin
- - GOTIFY_DEFAULTUSER_PASS=s23uBXreliGIAVOohXhW
- - TZ=Asia/Almaty
- - GOTIFY_SERVER_SSL_ENABLED=true
- - GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt
- - GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key
- networks:
- - gotify-net
-
-networks:
- gotify-net:
- driver: bridge
-```
-💡 **Что здесь важно?**
-- **`security_opt: - no-new-privileges:true`** → запрещает повышать привилегии в контейнере.
-- **`volumes: ./data:/app/data`** → сохраняет данные вне контейнера.
-- **`restart: unless-stopped`** → перезапускает Gotify, если он внезапно упадёт.
-- **`ports: - "8080:80"`** → Gotify будет доступен на порту `8080`.
-
-🔑 **Замените пароль** (`supersecretpassword`) на свой!
-
----
-
-## 4. Запуск Gotify
-Запускаем контейнер:
-```sh
- cd /opt/gotify
- sudo docker compose down
- sudo docker-compose up -d
-```
-Проверяем статус:
-```sh
- sudo docker ps
-```
-Вы должны увидеть работающий контейнер `gotify`.
-
----
-
-## 5. Проверка работы
-Открываем браузер и переходим:
-👉 **https://192.168.200.84:8080**
-👉 **https://gotify.locust.kz:8443**
-
-Логинимся:
-- **Имя**: `admin`
-- **Пароль**: тот, что указан в `GOTIFY_DEFAULTUSER_PASS`
-
----
-
-## 6. Автоматический запуск при загрузке
-Docker уже настроен на автозапуск, но проверим:
-```sh
- sudo systemctl enable --now docker
-```
-Чтобы Gotify запускался автоматически:
-```sh
- cd /opt/gotify
- sudo docker-compose restart
-```
-
----
-
-## 7. Логи и управление
-Просмотр логов:
-```sh
- sudo docker-compose logs -f
-```
-Перезапуск контейнера:
-```sh
- sudo docker-compose restart
-```
-Остановка:
-```sh
- sudo docker-compose down
-```
-
----
-
-## 8. Удаление Gotify (если потребуется)
-```sh
- cd /opt/gotify
- sudo docker-compose down
- sudo rm -rf /opt/gotify
-```
-
----
-
-## ✅ Готово!
-Теперь Gotify работает на порту `80` с безопасными настройками (`no-new-privileges:true`). 🚀
+# 📌 Установка Gotify в Docker на Ubuntu 24.04
+
+## 1. Установка Docker и Docker Compose
+Если Docker не установлен, установим его:
+```sh
+ sudo apt update && sudo apt upgrade -y
+ sudo apt install -y docker.io docker-compose
+ sudo systemctl enable --now docker
+```
+Проверим версию:
+```sh
+ docker --version
+ docker-compose --version
+```
+
+----------------------------------------------------------------------------------------------------
+
+## 2. Создание директории для Gotify
+Лучшее место для сторонних сервисов — `/opt`:
+```sh
+ sudo mkdir -p /opt/gotify
+ cd /opt/gotify
+```
+
+## 3. Создаём самоподписанный сертификат
+```sh
+ 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"
+```
+----------------------------------------------------------------------------------------------------
+
+## 3. Создание `docker-compose.yml`
+Создадим конфигурацию:
+```sh
+ sudo mcedit /opt/gotify/docker-compose.yml
+```
+Добавляем:
+```yaml
+services:
+ gotify:
+ image: gotify/server
+ container_name: gotify
+ restart: unless-stopped
+ volumes:
+ - "./certs:/certs"
+ - "./data:/app/data"
+ ports:
+ - "8080:443" # HTTPS
+ environment:
+ - GOTIFY_DEFAULTUSER_NAME=admin
+ - GOTIFY_DEFAULTUSER_PASS=s23uBXreliGIAVOohXhW
+ - TZ=Asia/Almaty
+ - GOTIFY_SERVER_SSL_ENABLED=true
+ - GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt
+ - GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key
+ - GIN_MODE=debug
+ networks:
+ - gotify-net
+
+networks:
+ gotify-net:
+ driver: bridge
+```
+💡 **Что здесь важно?**
+- **`security_opt: - no-new-privileges:true`** → запрещает повышать привилегии в контейнере.
+- **`volumes: ./data:/app/data`** → сохраняет данные вне контейнера.
+- **`restart: unless-stopped`** → перезапускает Gotify, если он внезапно упадёт.
+- **`ports: - "8080:80"`** → Gotify будет доступен на порту `8080`.
+
+🔑 **Замените пароль** (`supersecretpassword`) на свой!
+
+---
+
+## 4. Запуск Gotify
+Запускаем контейнер:
+```sh
+ cd /opt/gotify
+ sudo docker compose down
+ sudo docker-compose up -d
+```
+Проверяем статус:
+```sh
+ sudo docker ps
+```
+Вы должны увидеть работающий контейнер `gotify`.
+
+---
+
+## 5. Проверка работы
+Открываем браузер и переходим:
+👉 **https://192.168.200.84:8080**
+👉 **https://gotify.locust.kz:8443**
+
+Логинимся:
+- **Имя**: `admin`
+- **Пароль**: тот, что указан в `GOTIFY_DEFAULTUSER_PASS`
+
+---
+
+## 6. Автоматический запуск при загрузке
+Docker уже настроен на автозапуск, но проверим:
+```sh
+ sudo systemctl enable --now docker
+```
+Чтобы Gotify запускался автоматически:
+```sh
+ cd /opt/gotify
+ sudo docker-compose restart
+```
+
+---
+
+## 7. Логи и управление
+Просмотр логов:
+```sh
+ sudo docker-compose logs -f
+```
+Перезапуск контейнера:
+```sh
+ sudo docker-compose restart
+```
+Остановка:
+```sh
+ sudo docker-compose down
+```
+
+---
+
+## 8. Удаление Gotify (если потребуется)
+```sh
+ cd /opt/gotify
+ sudo docker-compose down
+ sudo rm -rf /opt/gotify
+```
+
+---
+
+## ✅ Готово!
+Теперь Gotify работает на порту `80` с безопасными настройками (`no-new-privileges:true`). 🚀
diff --git a/Zulip_install.md b/Chats/Zulip_install.md
similarity index 96%
rename from Zulip_install.md
rename to Chats/Zulip_install.md
index 8f5a5bd..8b6c352 100644
--- a/Zulip_install.md
+++ b/Chats/Zulip_install.md
@@ -1,38 +1,38 @@
-Открываю нужный сервер
-```sh
-wsl
-```
-
-```sh
-curl -sSX POST https://istt-kz.zulipchat.com/api/v1/fetch_api_key \
- --data-urlencode username=ivanov.i@istt.kz \
- --data-urlencode password=fsUHb3hf3QCdpBLsKyhL
-```
-Выдало:
-```json
-{
- "result":"success",
- "msg":"",
- "api_key":"91kQqr13HCwFP2HeARWPHxrfksYPH82p",
- "email":"ivanov.i@istt.kz",
- "user_id":880555
-}
-```
-
-```sh
-curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \
- -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \
- -d "type=stream" \
- -d "to=general" \
- -d "topic=Тест5" \
- -d "content=Привет из консоли!"
-```
-
-```sh
-curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \
- -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \
- -d "type=private" \
- -d "to=ivanov.i@istt.kz" \
- -d "topic=Тест5" \
- -d "content=Привет из консоли!"
-```
+Открываю нужный сервер
+```sh
+wsl
+```
+
+```sh
+curl -sSX POST https://istt-kz.zulipchat.com/api/v1/fetch_api_key \
+ --data-urlencode username=ivanov.i@istt.kz \
+ --data-urlencode password=fsUHb3hf3QCdpBLsKyhL
+```
+Выдало:
+```json
+{
+ "result":"success",
+ "msg":"",
+ "api_key":"91kQqr13HCwFP2HeARWPHxrfksYPH82p",
+ "email":"ivanov.i@istt.kz",
+ "user_id":880555
+}
+```
+
+```sh
+curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \
+ -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \
+ -d "type=stream" \
+ -d "to=general" \
+ -d "topic=Тест5" \
+ -d "content=Привет из консоли!"
+```
+
+```sh
+curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \
+ -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \
+ -d "type=private" \
+ -d "to=ivanov.i@istt.kz" \
+ -d "topic=Тест5" \
+ -d "content=Привет из консоли!"
+```
diff --git a/DNS/PowerDNS_install.md b/DNS/PowerDNS_install.md
index e4704d4..df2c00e 100644
--- a/DNS/PowerDNS_install.md
+++ b/DNS/PowerDNS_install.md
@@ -206,7 +206,8 @@ sudo pdnsutil add-record locust.ge @ NS 3600 ns2.geovizor.top
For deleting record please run command:
```sh
-pdnsutil delete-rrset locust.ge locust.ge.locust.ge NS
+sudo pdnsutil delete-rrset locust.ge locust.ge.locust.ge NS
+sudo pdnsutil delete-rrset geovizor.top gotify A
```
@@ -223,7 +224,7 @@ Minimum = 3600 (1 час)
Проверим список зон
```sh
sudo pdnsutil list-all-zones &&
-sudo pdnsutil list-zone locust.kz
+sudo pdnsutil list-zone geovizor.top
```
Проверяем отвечалет ли:
```sh
@@ -245,6 +246,22 @@ dig @88.218.94.134 -p 53 powerdns.geovizor.top A
### Теперь можно настроить HTTPS для взаимодействия через API с сервером для динамического задания IP адресов
```sh
+new_ip_address=
+FILE=/etc/ddns/mesh.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
+
API_KEY="40c89f2a-e2f3-4ff8-a245-3547111f6677"
SERVER="156.244.31.209"
ZONE="geovizor.top"
@@ -364,7 +381,7 @@ journalctl -u pdns-recursor --no-pager | tail -n 50
```
----------------------------------------------------------------------------------------------------
-## ********** По идее отключать не нужно так как systemd-resolved использует другой IP: 127.0.0.54:53 (Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS) **********
+## ********** По идее systemd-resolved отключать не нужно так как он использует другой IP: 127.0.0.54:53 **********
Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved)
```sh
@@ -613,7 +630,7 @@ open http://192.168.200.85:9191/login
----------------------------------------------------------------------------------------------------
-Настраиваем запус на постоянную работу через Gunicorn и systemd
+Настраиваем запуск на постоянную работу через Gunicorn и systemd
```sh
cd /opt/web/powerdns-admin &&
diff --git a/DNS/Ubuntu_config.md b/DNS/Ubuntu_config.md
new file mode 100644
index 0000000..ee40403
--- /dev/null
+++ b/DNS/Ubuntu_config.md
@@ -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
+```
diff --git a/Unbound_install.md b/DNS/Unbound_install.md
similarity index 95%
rename from Unbound_install.md
rename to DNS/Unbound_install.md
index 2145027..ebee21a 100644
--- a/Unbound_install.md
+++ b/DNS/Unbound_install.md
@@ -1,94 +1,94 @@
-```sh
- sudo apt update &&
- sudo apt install unbound -y &&
- unbound -V
-```
-
-```sh
- sudo systemctl start unbound &&
- sudo systemctl enable unbound &&
- sudo systemctl status unbound
-```
-On Windows configuration is:
-
-```yaml
-server:
- verbosity: 4
- qname-minimisation: no
- interface: 127.0.0.1
- do-ip6: no
- do-ip4: yes
- logfile: "C:\unbound.log"
- domain-insecure: "test."
- domain-insecure: "local."
- domain-insecure: "pizza."
- auto-trust-anchor-file: "C:\Program Files\Unbound\root.key"
- private-address: ::/0
- harden-dnssec-stripped: no
- harden-referral-path: no
-
-# Явно указываем, что зона "test." не локальная
-local-zone: "test." transparent
-
-forward-zone:
- name: "test."
- forward-addr: 192.168.200.85@5300
-
-forward-zone:
- name: "local."
- forward-addr: 192.168.200.85@5300
-
-forward-zone:
- name: "pizza."
- forward-addr: 10.101.1.31@53
-
-forward-zone:
- name: "srv."
- forward-addr: 10.101.1.31@53
-
-remote-control:
- control-enable: yes
- control-interface: 127.0.0.1
- control-use-cert: no
-```
-
-On Linux conf file devide on anoter files
-```sh
- sudo mcedit /etc/unbound/unbound.conf
-```
-
-```sh
- cd /etc/unbound/ &&
- sudo mc
-```
-
-Получить полный список локальных зон можно так: unbound-control
-```sh
- unbound-control list_local_zones
-```
-
-```sh
- sudo systemctl restart unbound
-```
-
-```sh
- sudo systemctl status unbound.service
-```
-```sh
- sudo journalctl -xeu unbound.service
-```
-
-Check on errors:
-```sh
- sudo unbound-checkconf /etc/unbound/unbound.conf
-```
-
-
-Прописываем для определенного интерфейса:
-```sh
- sudo resolvectl dns wlp14s0 127.0.0.1
-```
-Проверяем что стоит в качестве NDS резольвера
-```sh
- resolvectl status
-```
+```sh
+ sudo apt update &&
+ sudo apt install unbound -y &&
+ unbound -V
+```
+
+```sh
+ sudo systemctl start unbound &&
+ sudo systemctl enable unbound &&
+ sudo systemctl status unbound
+```
+On Windows configuration is:
+
+```yaml
+server:
+ verbosity: 4
+ qname-minimisation: no
+ interface: 127.0.0.1
+ do-ip6: no
+ do-ip4: yes
+ logfile: "C:\unbound.log"
+ domain-insecure: "test."
+ domain-insecure: "local."
+ domain-insecure: "pizza."
+ auto-trust-anchor-file: "C:\Program Files\Unbound\root.key"
+ private-address: ::/0
+ harden-dnssec-stripped: no
+ harden-referral-path: no
+
+# Явно указываем, что зона "test." не локальная
+local-zone: "test." transparent
+
+forward-zone:
+ name: "test."
+ forward-addr: 192.168.200.85@5300
+
+forward-zone:
+ name: "local."
+ forward-addr: 192.168.200.85@5300
+
+forward-zone:
+ name: "pizza."
+ forward-addr: 10.101.1.31@53
+
+forward-zone:
+ name: "srv."
+ forward-addr: 10.101.1.31@53
+
+remote-control:
+ control-enable: yes
+ control-interface: 127.0.0.1
+ control-use-cert: no
+```
+
+On Linux conf file devide on anoter files
+```sh
+ sudo mcedit /etc/unbound/unbound.conf
+```
+
+```sh
+ cd /etc/unbound/ &&
+ sudo mc
+```
+
+Получить полный список локальных зон можно так: unbound-control
+```sh
+ unbound-control list_local_zones
+```
+
+```sh
+ sudo systemctl restart unbound
+```
+
+```sh
+ sudo systemctl status unbound.service
+```
+```sh
+ sudo journalctl -xeu unbound.service
+```
+
+Check on errors:
+```sh
+ sudo unbound-checkconf /etc/unbound/unbound.conf
+```
+
+
+Прописываем для определенного интерфейса:
+```sh
+ sudo resolvectl dns wlp14s0 127.0.0.1
+```
+Проверяем что стоит в качестве NDS резольвера
+```sh
+ resolvectl status
+```
diff --git a/Logs/Vector_dev_install.md b/Logs/Vector_dev_install.md
new file mode 100644
index 0000000..12f0a13
--- /dev/null
+++ b/Logs/Vector_dev_install.md
@@ -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=`).
+- Доступ к терминалу с правами `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` в конфигурации.
\ No newline at end of file
diff --git a/Logs/Vector_dev_install_telegram.md b/Logs/Vector_dev_install_telegram.md
new file mode 100644
index 0000000..fe6718e
--- /dev/null
+++ b/Logs/Vector_dev_install_telegram.md
@@ -0,0 +1,434 @@
+Шаг 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 ubuntu@almaty.ccalm.org -p 22
+```
+
+## Предварительные требования
+- ОС: Ubuntu/Debian (для других ОС уточните, чтобы адаптировать команды).
+- Файл логов: `/opt/org_ccalm_main/logs/ccalm.log` с JSON-строками (поля `level` и `message`).
+- Gotify: Доступный сервер Gotify с URL и токеном (например, `https://gotify.example.com/message?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/org-ccalm-main.log
+ read_from: beginning
+
+ ccalm_translation_logs:
+ type: file
+ include:
+ - /opt/org_ccalm_translation/logs/org-ccalm-translation.log
+ read_from: beginning
+
+ ccalm_dbms_logs:
+ type: file
+ include:
+ - /opt/org_ccalm_dbms/logs/org-ccalm-dbms.log
+ read_from: beginning
+
+ ccalm_jwt_logs:
+ type: file
+ include:
+ - /opt/org_ccalm_jwt/logs/org-ccalm-jwt.log
+ read_from: beginning
+
+transforms:
+ parse_json_ccalm:
+ type: remap
+ inputs:
+ - ccalm_logs
+ source: |
+ structured, err = parse_json(.message)
+ if err != null {
+ abort
+ }
+ merged, err = merge(., structured)
+ if err != null {
+ abort
+ }
+ . = merged
+
+ parse_json_translation:
+ type: remap
+ inputs:
+ - ccalm_translation_logs
+ source: |
+ structured, err = parse_json(.message)
+ if err != null {
+ abort
+ }
+ merged, err = merge(., structured)
+ if err != null {
+ abort
+ }
+ . = merged
+
+ parse_json_dbms:
+ type: remap
+ inputs:
+ - ccalm_dbms_logs
+ source: |
+ structured, err = parse_json(.message)
+ if err != null {
+ abort
+ }
+ merged, err = merge(., structured)
+ if err != null {
+ abort
+ }
+ . = merged
+
+ parse_json_jwt:
+ type: remap
+ inputs:
+ - ccalm_jwt_logs
+ source: |
+ structured, err = parse_json(.message)
+ if err != null {
+ abort
+ }
+ merged, err = merge(., structured)
+ if err != null {
+ abort
+ }
+ . = merged
+
+ filter_errors_ccalm:
+ type: filter
+ inputs:
+ - parse_json_ccalm
+ condition: '.level == "ERROR" || .level == "WARN"'
+
+ filter_errors_translation:
+ type: filter
+ inputs:
+ - parse_json_translation
+ condition: '.level == "ERROR" || .level == "WARN"'
+
+ filter_errors_dbms:
+ type: filter
+ inputs:
+ - parse_json_dbms
+ condition: '.level == "ERROR" || .level == "WARN"'
+
+ filter_errors_jwt:
+ type: filter
+ inputs:
+ - parse_json_jwt
+ condition: '.level == "ERROR" || .level == "WARN"'
+
+ format_telegram_json_ccalm:
+ type: remap
+ inputs:
+ - filter_errors_ccalm
+ source: |
+ msg, err = string(.message)
+ if err != null {
+ msg = "Unable to parse message"
+ }
+ marker_str = ""
+ if exists(.marker) {
+ m, err = string(.marker)
+ if err == null && length(m) > 0 {
+ marker_str = "Marker: ```text\n" + m + "```"
+ }
+ }
+ level_str = ""
+ icon_str = ""
+ if exists(.level) {
+ m, err = string(.level)
+ if err == null {
+ level_str = "level: ```text\n" + m + "```"
+ }
+ if m == "ERROR" {
+ icon_str = "‼"
+ }
+ if m == "WARN" {
+ icon_str = "⚠️"
+ }
+ }
+ .message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":2,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
+
+ format_telegram_json_translation:
+ type: remap
+ inputs:
+ - filter_errors_translation
+ source: |
+ msg, err = string(.message)
+ if err != null {
+ msg = "Unable to parse message"
+ }
+ marker_str = ""
+ if exists(.marker) {
+ m, err = string(.marker)
+ if err == null && length(m) > 0 {
+ marker_str = "Marker: ```text\n" + m + "```"
+ }
+ }
+ level_str = ""
+ icon_str = ""
+ if exists(.level) {
+ m, err = string(.level)
+ if err == null {
+ level_str = "level: ```text\n" + m + "```"
+ }
+ if m == "ERROR" {
+ icon_str = "‼"
+ }
+ if m == "WARN" {
+ icon_str = "⚠️"
+ }
+ }
+ .message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":24,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
+
+ format_telegram_json_dbms:
+ type: remap
+ inputs:
+ - filter_errors_dbms
+ source: |
+ msg, err = string(.message)
+ if err != null {
+ msg = "Unable to parse message"
+ }
+ marker_str = ""
+ if exists(.marker) {
+ m, err = string(.marker)
+ if err == null && length(m) > 0 {
+ marker_str = "Marker: ```text\n" + m + "```"
+ }
+ }
+ level_str = ""
+ icon_str = ""
+ if exists(.level) {
+ m, err = string(.level)
+ if err == null {
+ level_str = "level: ```text\n" + m + "```"
+ }
+ if m == "ERROR" {
+ icon_str = "‼"
+ }
+ if m == "WARN" {
+ icon_str = "⚠️"
+ }
+ }
+ .message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":9,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
+
+ format_telegram_json_jwt:
+ type: remap
+ inputs:
+ - filter_errors_jwt
+ source: |
+ msg, err = string(.message)
+ if err != null {
+ msg = "Unable to parse message"
+ }
+ marker_str = ""
+ if exists(.marker) {
+ m, err = string(.marker)
+ if err == null && length(m) > 0 {
+ marker_str = "Marker: ```text\n" + m + "```"
+ }
+ }
+ level_str = ""
+ icon_str = ""
+ if exists(.level) {
+ m, err = string(.level)
+ if err == null {
+ level_str = "level: ```text\n" + m + "```"
+ }
+ if m == "ERROR" {
+ icon_str = "‼"
+ }
+ if m == "WARN" {
+ icon_str = "⚠️"
+ }
+ }
+ .message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":4,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
+
+
+sinks:
+ telegram_ccalm:
+ type: http
+ inputs:
+ - format_telegram_json_ccalm
+ uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage"
+ method: post
+ encoding:
+ codec: text
+ request:
+ headers:
+ Content-Type: "application/json"
+ batch:
+ max_events: 1
+
+ telegram_translation:
+ type: http
+ inputs:
+ - format_telegram_json_translation
+ uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage"
+ method: post
+ encoding:
+ codec: text
+ request:
+ headers:
+ Content-Type: "application/json"
+ batch:
+ max_events: 1
+
+ telegram_dbms:
+ type: http
+ inputs:
+ - format_telegram_json_dbms
+ uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage"
+ method: post
+ encoding:
+ codec: text
+ request:
+ headers:
+ Content-Type: "application/json"
+ batch:
+ max_events: 1
+
+ telegram_jwt:
+ type: http
+ inputs:
+ - format_telegram_json_jwt
+ 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
+```
+```sh
+ 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", "marker":"12345", "message": "Database connection failed 0", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_jwt/logs/org-ccalm-jwt.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` в конфигурации.
\ No newline at end of file
diff --git a/Nginx_install.md b/Nginx_install.md
index 0753298..ca8fffe 100644
--- a/Nginx_install.md
+++ b/Nginx_install.md
@@ -19,8 +19,9 @@ sudo apt-get install nginx -y
```
Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера.
```sh
- sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
+ sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048
```
+
И вписываем в него:
```sh
cd /etc/nginx/sites-available/ &&
@@ -29,17 +30,26 @@ server {
listen 8081 ssl http2;
listen [::]:8081 ssl http2;
- server_name ccalm.org;
+ root /opt/www/org_ccalm;
+ index index.html;
+
+ server_name ccalm.org www.ccalm.org;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_dhparam /etc/nginx/dhparam.pem;
- root /opt/www/org_ccalm;
- index index.html index.htm;
-
location / {
- try_files $uri $uri/ =404; # Попытка найти файл или возвращение 404
+ try_files $uri $uri/ =404;
+
+ # Оптимизация для быстрой отдачи статики
+ sendfile on; # Использует sendfile() ядра Linux для ускорения
+ tcp_nopush off; # Отключает задержку Nagle (если нужна мгновенная отправка)
+ }
+ location ~ /index\.html$ {
+ add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";
+ add_header Pragma "no-cache";
+ add_header Expires 0;
}
}
EOF
@@ -50,8 +60,6 @@ EOF
sudo ln -s /etc/nginx/sites-available/ccalm.org /etc/nginx/sites-enabled/
```
-
-
```sh
sudo systemctl restart nginx
```
@@ -79,17 +87,17 @@ journalctl -u nginx.service -n 50
cd /etc/nginx/sites-available/ &&
sudo tee geovizor.top > /dev/null <<'EOF'
server {
- listen 8081;
- listen [::]:8081;
+ listen 8081;
+ listen [::]:8081;
- root /opt/www/istransit.kz;
- index index.html;
+ root /opt/www/istransit.kz;
+ index index.html;
- server_name istransit.kz www.istransit.kz;
+ server_name istransit.kz www.istransit.kz;
- location / {
- try_files $uri $uri/ =404;
- }
+ location / {
+ try_files $uri $uri/ =404;
+ }
location ~ /index\.html$ {
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";
add_header Pragma "no-cache";
diff --git a/Uptime_Kuma_install.md b/Observing/Uptime_Kuma_install.md
similarity index 84%
rename from Uptime_Kuma_install.md
rename to Observing/Uptime_Kuma_install.md
index 6e6d56d..afa357a 100644
--- a/Uptime_Kuma_install.md
+++ b/Observing/Uptime_Kuma_install.md
@@ -1,66 +1,68 @@
-# Установка Uptime Kuma в Ubuntu 24.04 с помощью Docker Compose
-
-## 1. Установка необходимых пакетов
-Обновите систему и установите Docker и Docker Compose:
-
-```sh
-sudo apt update && sudo apt upgrade -y
-sudo apt install -y docker.io docker-compose
-```
-
-## 2. Создание директории для Uptime Kuma
-```sh
- sudo mkdir -p /opt/uptime-kuma
- cd /opt/uptime-kuma
-```
-
-## 3. Создание `docker-compose.yml`
-Создайте файл `docker-compose.yml`:
-
-```sh
- sudo mcedit /opt/uptime-kuma/docker-compose.yml
-```
-
-Вставьте следующий конфигурационный файл:
-
-```yaml
-services:
- uptime-kuma:
- image: louislam/uptime-kuma:latest
- container_name: uptime-kuma
- restart: always
- ports:
- - "3001:3001"
- volumes:
- - ./data:/app/data
-```
-
-## 4. Запуск контейнера
-```sh
- sudo docker-compose up -d
-```
-
-## 5. Проверка работы Uptime Kuma
-Откройте браузер и перейдите по адресу:
-
-```sh
-start http://192.168.200.84:3001
-```
-
-## 6. Управление контейнером
-- **Остановить Uptime Kuma:**
-```sh
- sudo docker-compose down
-```
-- **Перезапустить контейнер:**
-```sh
- sudo docker-compose restart
-```
-- **Просмотреть логи:**
-
-```sh
- sudo docker-compose logs -f
-```
-
-Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀
-
+# Установка Uptime Kuma в Ubuntu 24.04 с помощью Docker Compose
+
+## 1. Установка необходимых пакетов
+Обновите систему и установите Docker и Docker Compose:
+
+```sh
+sudo apt update && sudo apt upgrade -y
+sudo apt install -y docker.io docker-compose
+```
+
+## 2. Создание директории для Uptime Kuma
+```sh
+ sudo mkdir -p /opt/uptime-kuma
+ cd /opt/uptime-kuma
+```
+
+## 3. Создание `docker-compose.yml`
+Создайте файл `docker-compose.yml`:
+
+```sh
+ sudo mcedit /opt/uptime-kuma/docker-compose.yml
+```
+
+Вставьте следующий конфигурационный файл:
+В кодфиге прописан корневой сертификат чтобы node.js ему доверял
+```yaml
+services:
+ uptime-kuma:
+ image: louislam/uptime-kuma:latest
+ container_name: uptime-kuma
+ restart: always
+ ports:
+ - "3001:3001"
+ volumes:
+ - ./data:/app/data
+ - /usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro
+ environment:
+ - NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt
+```
+
+## 4. Запуск контейнера
+```sh
+ sudo docker-compose up -d
+```
+
+## 5. Проверка работы Uptime Kuma
+Откройте браузер и перейдите по адресу:
+
+```sh
+start http://192.168.200.84:3001
+```
+
+## 6. Управление контейнером
+- **Остановить Uptime Kuma:**
+```sh
+ sudo docker-compose down
+```
+- **Перезапустить контейнер:**
+```sh
+ sudo docker-compose restart
+```
+- **Просмотреть логи:**
+
+```sh
+ sudo docker-compose logs -f
+```
+
+Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀
diff --git a/Wazuh_install.md b/Observing/Wazuh_install.md
similarity index 100%
rename from Wazuh_install.md
rename to Observing/Wazuh_install.md
diff --git a/PostgreSQL/PostgreSQL_install.md b/PostgreSQL/PostgreSQL_install.md
index a47691e..ff9d314 100644
--- a/PostgreSQL/PostgreSQL_install.md
+++ b/PostgreSQL/PostgreSQL_install.md
@@ -122,6 +122,8 @@ sudo mcedit /etc/postgresql/16/main/pg_hba.conf
sudo netstat -tap | grep 5432
Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain):
+ pg_dump --host=192.168.200.17 --username=postgres salevizor > /home/igor/salevizor.sql
+
pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root
pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres
pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres
@@ -156,8 +158,11 @@ sudo mcedit /etc/postgresql/16/main/pg_hba.conf
pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
+ pg_restore --host=127.0.0.1 --username=postgres --dbname=CCALM --verbose /tmp/CCALM.backup
sudo -u postgres psql -d transit -f /tmp/transit.backup
+
+
Или из архива (первоначально задать trust на 127.0.0.1) так:
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
@@ -287,6 +292,7 @@ sudo apt-get install phppgadmin
Установка pgAdmin4 через докер контейнер
```sh
+ sudo mkdir -p /opt/pgAdmin4/backups &&
sudo mkdir -p /opt/pgAdmin4 &&
sudo chmod -R 777 /opt/pgAdmin4 &&
sudo chown -R $USER:$USER /opt/pgAdmin4
@@ -307,7 +313,7 @@ services:
PGADMIN_DEFAULT_PASSWORD: 123456
volumes:
- pgadmin_data:/var/lib/pgadmin
-
+ - /opt/pgAdmin4/backups:/var/lib/pgadmin/storage
volumes:
pgadmin_data:
EOF
@@ -325,8 +331,9 @@ EOF
sudo docker compose down
```
-
-
+```sh
+open http://localhost:5050
+```
Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/
diff --git a/PostgreSQL/backup/backup.sh b/PostgreSQL/backup/backup.sh
new file mode 100644
index 0000000..841c1f3
--- /dev/null
+++ b/PostgreSQL/backup/backup.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+# Конфигурация
+DB_NAME="CCALM"
+DB_HOST="127.0.0.1"
+DB_USER="postgres"
+BACKUP_DIR="/opt/backups/data"
+TIMESTAMP=$(date +%Y%m%d_%H%M)
+BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.backup"
+
+# Проверка существования директории для бэкапов
+if [ ! -d "$BACKUP_DIR" ]; then
+ echo "Ошибка: Директория $BACKUP_DIR не существует. Создаю..."
+ mkdir -p "$BACKUP_DIR"
+ if [ $? -ne 0 ]; then
+ echo "Ошибка: Не удалось создать директорию $BACKUP_DIR"
+ exit 1
+ fi
+fi
+
+# Установка прав для пользователя webdav
+chown rclone:rclone "$BACKUP_DIR"
+chmod 755 "$BACKUP_DIR"
+
+# Экспорт пароля (если не используется .pgpass)
+# Замените 'your_password' на реальный пароль или настройте .pgpass
+export PGPASSWORD='309A86FF65A78FB428F4E38DFE35F730'
+
+# Выполнение pg_dump
+echo "Создание резервной копии базы данных $DB_NAME в $BACKUP_FILE..."
+pg_dump "$DB_NAME" \
+ --host="$DB_HOST" \
+ --username="$DB_USER" \
+ --format=custom \
+ --file="$BACKUP_FILE"
+
+# Проверка успешности выполнения
+if [ $? -eq 0 ]; then
+ echo "Резервная копия успешно создана: $BACKUP_FILE"
+ # Установка прав для пользователя webdav
+ chown webdav:webdav "$BACKUP_FILE"
+ chmod 644 "$BACKUP_FILE"
+else
+ echo "Ошибка: Не удалось создать резервную копию"
+ exit 1
+fi
+
+# Очистка старых бэкапов (например, старше 7 дней)
+find "$BACKUP_DIR" -name "${DB_NAME}_*.backup" -mtime +7 -delete
+echo "Старые бэкапы (старше 7 дней) удалены"
+
+# Перемещаю на другой сервер
+rclone move /opt/backups/data mywebdav:/backups --progress --no-check-certificate
\ No newline at end of file
diff --git a/HAProxy_install.md b/Proxy/HAProxy_install.md
similarity index 97%
rename from HAProxy_install.md
rename to Proxy/HAProxy_install.md
index f0bc7e4..57f2db6 100644
--- a/HAProxy_install.md
+++ b/Proxy/HAProxy_install.md
@@ -1,260 +1,260 @@
-# 📌 Установка HAProxy на Ubuntu 20.04
-****************************************************************************************************
-На основе инструкции из https://itsecforu.ru/2019/07/15/⏳-настройка-балансировщика-нагрузки-h/
-
-Connect to the required server:
-```sh
-ssh administrator@10.101.1.3 -p 22
-```
-Connect to CCALM Turkish infrastructure:
-```sh
-ssh igor@88.218.94.134 -p 2200
-```
-----------------------------------------------------------------------------------------------------
-## Install haproxy
-```sh
- sudo apt-get update && sudo apt-get install haproxy -y
-````
-Создаём резервную копию файла:
-```sh
-sudo cp /etc/haproxy/haproxy.cfg{,.bak}
-````
-Редактируем конфигурацию (Описание конфигурационного файла HAProxy https://habr.com/ru/sandbox/34354/)
-```sh
- mcedit /etc/haproxy/haproxy.cfg
-```
-В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов):
-```conf
-frontend frontend-http
- bind *:80
- mode http
-
- # ACL для определения запросов на проверку Let's Encrypt
- acl is_certbot path_beg /.well-known/acme-challenge/
-
- # Если это не запрос Let's Encrypt, перенаправляем на HTTPS
- http-request redirect scheme https code 301 unless is_certbot
-
- # Отправляем запросы Let's Encrypt на backend-certbot
- use_backend backend-certbot if is_certbot
-
-frontend LOADBALANCER-01
- bind *:80
- bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem crt /etc/ssl/certs/bigfoottrade_kz.pem
- mode http #режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика
- option httpclose #Закрывает пассивные соединения
-
- http-request set-header x-Forwarded-for %[src]
- http-request set-header x-Forwarded-uri %[url]
-
- acl v_geoserver2 hdr(host) -i geoserver2.ccalm.org
- use_backend geoserver2_ccalm_org if v_geoserver2
-
- #Если различные нестандартные порты то так
- acl v_locust_kz hdr_reg(host) -i ^locust\.kz(:.*)?$
- use_backend b_locust_kz if v_locust_kz
-
- #Перенаправление одной страницы по адресу http://geoserver2.ccalm.org/data/ на другой backend
- acl v_geo_data hdr(host) -i geoserver2.ccalm.org/data
- use_backend WEBSERVERS-01 if v_geo_data
-
- default_backend WEBSERVER
-
-backend WEBSERVER
- balance roundrobin
- server web1 127.0.0.1:8080 check inter 5s ssl verify none
- option httpchk GET /index.html
-
-
- backend geoserver2_ccalm_org
- balance roundrobin
- server web1 192.168.0.90:80 check
- option httpchk
-
- listen stats
- bind *:8989
- stats enable
- stats uri /
- stats realm Haproxy\ Statistics
- stats auth igor:i123456
-
-frontend f-RabbitMQ
-mode tcp
-bind 10.1.7.73:21000
-default_backend b-RabbitMQ
-
-backend b-RabbitMQ
-mode tcp
-server srv1 10.10.16.21:20000
-```
-Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx
-
-Для использования 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 AAA_Certificate_Services.crt GoGetSSL_RSA_DV_CA.crt istransit_kz.crt istransit_kz.key > istransit_kz.pem
-
- SSLCertificateFile
- SSLCertificateKeyFile
-
-Для включения WEB статистики на 9000 порту добавить в конец конфигурации:
-listen stats
-bind *:8989
-stats enable
-stats uri /stats
-stats realm Haproxy\ Statistics
-stats auth igor:i123456
-Тестирую файл конфигурации:
-```sh
- haproxy -f /etc/haproxy/haproxy.cfg -c
-````
-Также можно в журнале посмотреть что написал HAProxy:
-```sh
- sudo journalctl -u haproxy --no-pager | tail -n 50
-````
-Перезагружаем:
-```sh
- sudo systemctl restart haproxy
-````
-
-Посмотреть что в журнале можно так:
-Посмотреть что в журнале можно так:
-```sh
- journalctl -u haproxy --since "1 minutes ago"
- journalctl -u haproxy --since "30 minutes ago" | grep "backend"
- tail -f /var/log/haproxy.log
-```
-
-
-
-administrator@app:~$ journalctl -u haproxy --since "30 minutes ago" | grep "backend"
-backend 'transit_acquiring_v01_kz' has no server available!
-backend 'transit_translation_v02_kz' has no server available!
-backend 'transit_mobile_kz' has no server available!
-backend 'transit_manager_kz' has no server available!
-backend 'transit_warehouse_kz' has no server available!
-backend 'transit_kgd_kz' has no server available!
-backend 'transit_monitoring_kz' has no server available!
-
-
-
-
-
-
-
-И теперь должно открываться но адресу: http://data.ccalm.org:8989/
-Обязательно проверить как установился SSL чекером: https://www.leaderssl.ru/tools/ssl_checker
-
-
-# 📌 Бесплатный SSL сертификат Let’s Encrypt для HAPROXY
-****************************************************************************************************
-Бесплатный SSL сертификат Let’s Encrypt для HAPROXY https://serversforhackers.com/c/letsencrypt-with-haproxy
-```sh
- sudo apt-get update
- sudo apt-get install certbot -y
-````
-Для удаления PPA нужно выполнить:
-```sh
- sudo apt-get remove certbot
- sudo add-apt-repository --remove ppa:certbot/certbot
- apt-get install -f
- apt autoremove
-```
-Если включён файрволл то разрешаем порт:
-```sh
- sudo ufw allow 9080/tcp
-```
-Проверяем что автообновление в certbot работает для этого выполняем команду:
-```sh
- sudo systemctl status certbot.timer
-```
-Затем пытаемся выполнить пробный прогон при помощи команды:
-```sh
- sudo certbot renew --dry-run
-```
-
-Согласно инструкции модифицируем конфигурационный файл haproxy добавив во frontend это:
-```
- # ACL for detecting Let's Encrypt validtion requests
- acl is_certbot path_beg /.well-known/acme-challenge/
- use_backend backend-certbot if is_certbot
-```
-А также ещё один backend:
-```
- # Certbot backend
- # Contains certbot stand-alone webserver
- backend backend-certbot
- mode http
- server certbot 127.0.0.1:9080
-```
-Перезагрузить и выполнить команду:
-
-```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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
-```
-
-После генерации файлы будут в:
- /etc/letsencrypt/live/geoserver2.ccalm.org/fullchain.pem
- /etc/letsencrypt/live/geoserver2.ccalm.org/privkey.pem
-
-Для обновления создаём файл /etc/letsencrypt/renew.sh (по моему этот скрипт не нужен так как рабтает сервис certbot.timer):
- #!/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
-
-Но для HAProxy нужно чтобы 2 файла были объединены поэтому добавляю спец скрипт /etc/haproxy/prepare.sh:
- #!/bin/bash
-
- # Loop through all Let's Encrypt certificates
- for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do
-
- CERTIFICATE=`basename $CERTIFICATE`
-
- # 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
-
- done
- systemctl reload haproxy.service
-
-Обновляем конфигурацию HAProxy добавив в frontend:
- bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem
-
-Устанавливаем права
- chmod +x /etc/haproxy/renew.sh
- chmod +x /etc/haproxy/prepare.sh
-И добавляем задание в cron "crontab -e" ниже текст это раз в 24 часа в 00:00:00 ночи:
- 0 0 * * * /bin/sh /etc/letsencrypt/renew.sh
+# 📌 Установка HAProxy на Ubuntu 20.04
+****************************************************************************************************
+На основе инструкции из https://itsecforu.ru/2019/07/15/⏳-настройка-балансировщика-нагрузки-h/
+
+Connect to the required server:
+```sh
+ssh administrator@10.101.1.3 -p 22
+```
+Home server
+```sh
+ssh igor@192.168.200.81 -p 22
+```
+----------------------------------------------------------------------------------------------------
+## Install haproxy
+```sh
+ sudo apt-get update && sudo apt-get install haproxy -y
+````
+Создаём резервную копию файла:
+```sh
+sudo cp /etc/haproxy/haproxy.cfg{,.bak}
+````
+Редактируем конфигурацию (Описание конфигурационного файла HAProxy https://habr.com/ru/sandbox/34354/)
+```sh
+ mcedit /etc/haproxy/haproxy.cfg
+```
+В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов):
+```conf
+frontend frontend-http
+ bind *:80
+ mode http
+
+ # ACL для определения запросов на проверку Let's Encrypt
+ acl is_certbot path_beg /.well-known/acme-challenge/
+
+ # Если это не запрос Let's Encrypt, перенаправляем на HTTPS
+ http-request redirect scheme https code 301 unless is_certbot
+
+ # Отправляем запросы Let's Encrypt на backend-certbot
+ use_backend backend-certbot if is_certbot
+
+frontend LOADBALANCER-01
+ bind *:80
+ bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem crt /etc/ssl/certs/bigfoottrade_kz.pem
+ mode http #режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика
+ option httpclose #Закрывает пассивные соединения
+
+ http-request set-header x-Forwarded-for %[src]
+ http-request set-header x-Forwarded-uri %[url]
+
+ acl v_geoserver2 hdr(host) -i geoserver2.ccalm.org
+ use_backend geoserver2_ccalm_org if v_geoserver2
+
+ #Если различные нестандартные порты то так
+ acl v_locust_kz hdr_reg(host) -i ^locust\.kz(:.*)?$
+ use_backend b_locust_kz if v_locust_kz
+
+ #Перенаправление одной страницы по адресу http://geoserver2.ccalm.org/data/ на другой backend
+ acl v_geo_data hdr(host) -i geoserver2.ccalm.org/data
+ use_backend WEBSERVERS-01 if v_geo_data
+
+ default_backend WEBSERVER
+
+backend WEBSERVER
+ balance roundrobin
+ server web1 127.0.0.1:8080 check inter 5s ssl verify none
+ option httpchk GET /index.html
+
+
+ backend geoserver2_ccalm_org
+ balance roundrobin
+ server web1 192.168.0.90:80 check
+ option httpchk
+
+ listen stats
+ bind *:8989
+ stats enable
+ stats uri /
+ stats realm Haproxy\ Statistics
+ stats auth igor:i123456
+
+frontend f-RabbitMQ
+mode tcp
+bind 10.1.7.73:21000
+default_backend b-RabbitMQ
+
+backend b-RabbitMQ
+mode tcp
+server srv1 10.10.16.21:20000
+```
+Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx
+
+Для использования 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 AAA_Certificate_Services.crt GoGetSSL_RSA_DV_CA.crt istransit_kz.crt istransit_kz.key > istransit_kz.pem
+
+ SSLCertificateFile
+ SSLCertificateKeyFile
+
+Для включения WEB статистики на 9000 порту добавить в конец конфигурации:
+listen stats
+bind *:8989
+stats enable
+stats uri /stats
+stats realm Haproxy\ Statistics
+stats auth igor:i123456
+Тестирую файл конфигурации:
+```sh
+ haproxy -f /etc/haproxy/haproxy.cfg -c
+````
+Также можно в журнале посмотреть что написал HAProxy:
+```sh
+ sudo journalctl -u haproxy --no-pager -n 50 -f
+````
+Перезагружаем:
+```sh
+ sudo systemctl restart haproxy
+````
+
+Посмотреть что в журнале можно так:
+Посмотреть что в журнале можно так:
+```sh
+ journalctl -u haproxy --since "1 minutes ago"
+ journalctl -u haproxy --since "30 minutes ago" | grep "backend"
+ tail -f /var/log/haproxy.log
+```
+
+
+
+administrator@app:~$ journalctl -u haproxy --since "30 minutes ago" | grep "backend"
+backend 'transit_acquiring_v01_kz' has no server available!
+backend 'transit_translation_v02_kz' has no server available!
+backend 'transit_mobile_kz' has no server available!
+backend 'transit_manager_kz' has no server available!
+backend 'transit_warehouse_kz' has no server available!
+backend 'transit_kgd_kz' has no server available!
+backend 'transit_monitoring_kz' has no server available!
+
+
+
+
+
+
+
+И теперь должно открываться но адресу: http://data.ccalm.org:8989/
+Обязательно проверить как установился SSL чекером: https://www.leaderssl.ru/tools/ssl_checker
+
+
+# 📌 Бесплатный SSL сертификат Let’s Encrypt для HAPROXY
+****************************************************************************************************
+Бесплатный SSL сертификат Let’s Encrypt для HAPROXY https://serversforhackers.com/c/letsencrypt-with-haproxy
+```sh
+ sudo apt-get update
+ sudo apt-get install certbot -y
+````
+Для удаления PPA нужно выполнить:
+```sh
+ sudo apt-get remove certbot
+ sudo add-apt-repository --remove ppa:certbot/certbot
+ apt-get install -f
+ apt autoremove
+```
+Если включён файрволл то разрешаем порт:
+```sh
+ sudo ufw allow 9080/tcp
+```
+Проверяем что автообновление в certbot работает для этого выполняем команду:
+```sh
+ sudo systemctl status certbot.timer
+```
+Затем пытаемся выполнить пробный прогон при помощи команды:
+```sh
+ sudo certbot renew --dry-run
+```
+
+Согласно инструкции модифицируем конфигурационный файл haproxy добавив во frontend это:
+```
+ # ACL for detecting Let's Encrypt validtion requests
+ acl is_certbot path_beg /.well-known/acme-challenge/
+ use_backend backend-certbot if is_certbot
+```
+А также ещё один backend:
+```
+ # Certbot backend
+ # Contains certbot stand-alone webserver
+ backend backend-certbot
+ mode http
+ server certbot 127.0.0.1:9080
+```
+Перезагрузить и выполнить команду:
+
+```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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
+```
+
+После генерации файлы будут в:
+ /etc/letsencrypt/live/geoserver2.ccalm.org/fullchain.pem
+ /etc/letsencrypt/live/geoserver2.ccalm.org/privkey.pem
+
+Для обновления создаём файл /etc/letsencrypt/renew.sh (по моему этот скрипт не нужен так как рабтает сервис certbot.timer):
+ #!/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
+
+Но для HAProxy нужно чтобы 2 файла были объединены поэтому добавляю спец скрипт /etc/haproxy/prepare.sh:
+ #!/bin/bash
+
+ # Loop through all Let's Encrypt certificates
+ for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do
+
+ CERTIFICATE=`basename $CERTIFICATE`
+
+ # 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
+
+ done
+ systemctl reload haproxy.service
+
+Обновляем конфигурацию HAProxy добавив в frontend:
+ bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem
+
+Устанавливаем права
+ chmod +x /etc/haproxy/renew.sh
+ chmod +x /etc/haproxy/prepare.sh
+И добавляем задание в cron "crontab -e" ниже текст это раз в 24 часа в 00:00:00 ночи:
+ 0 0 * * * /bin/sh /etc/letsencrypt/renew.sh
diff --git a/Traefik_install.md b/Proxy/Traefik_install.md
similarity index 83%
rename from Traefik_install.md
rename to Proxy/Traefik_install.md
index ecfadc8..913dfac 100644
--- a/Traefik_install.md
+++ b/Proxy/Traefik_install.md
@@ -1,8 +1,10 @@
+С внешки во внутрянную инфраструктуру подключаемся через HAProxy а уже внутри использую Traefik
+
Открываю нужный сервер
```sh
wsl
```
-Или такой:
+Открывает traefik на 192.168.200.85:
```sh
ssh igor@192.168.200.85 -p 22
```
@@ -105,7 +107,7 @@ http:
ccalm-api-auth:
entryPoints:
- websecure
- rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
+ rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/api/authorization/v02/`)"
service: org_ccalm_api_authorization_v02
tls:
certresolver: myresolver
@@ -115,7 +117,7 @@ http:
ccalm-dbms:
entryPoints:
- websecure
- rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
+ rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/api/dbms/v09/`)"
service: org_ccalm_dbms_v09
tls:
certresolver: myresolver
@@ -125,7 +127,7 @@ http:
ccalm-translation:
entryPoints:
- websecure
- rule: "Host(`ccalm.test`) && PathPrefix(`/api/translation/v01/`)"
+ rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/api/translation/v01/`)"
service: org_ccalm_translation_v01
tls:
certresolver: myresolver
@@ -135,7 +137,7 @@ http:
ccalm-login:
entryPoints:
- websecure
- rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
+ rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/login/`)"
service: org_ccalm_login_v01
tls:
certresolver: myresolver
@@ -143,7 +145,7 @@ http:
ccalm-default:
entryPoints:
- websecure
- rule: "Host(`ccalm.test`)"
+ rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`))"
service: org_ccalm
tls:
certresolver: myresolver
@@ -155,6 +157,20 @@ http:
service: local_powerdns
tls: {}
+ gotify:
+ entryPoints:
+ - websecure
+ rule: "Host(`gotify.local`)"
+ service: local_gotify
+ tls: {}
+
+ vault:
+ entryPoints:
+ - websecure
+ rule: "Host(`vault.local`)"
+ service: local_vault
+ tls: {}
+
middlewares:
strip-auth-prefix:
stripPrefix:
@@ -180,6 +196,26 @@ http:
path: "/"
interval: "5s"
+ # Бэкенд для local_gotify
+ local_gotify:
+ loadBalancer:
+ servers:
+ - url: "https://192.168.200.84:8080"
+ serversTransport: insecureTransport
+ healthCheck:
+ path: "/"
+ interval: "5s"
+
+ # Бэкенд для local_vault
+ local_vault:
+ loadBalancer:
+ servers:
+ - url: "https://192.168.200.85:8200"
+ serversTransport: insecureTransport
+ healthCheck:
+ path: "/"
+ interval: "5s"
+
# Бэкенд для org_ccalm_api_authorization_v02 (HTTPS с отключенной проверкой SSL)
org_ccalm_api_authorization_v02:
loadBalancer:
@@ -243,6 +279,10 @@ tls:
keyFile: "/etc/traefik/certs/ccalm.test.key"
- certFile: "/etc/traefik/certs/powerdns.local.crt"
keyFile: "/etc/traefik/certs/powerdns.local.key"
+ - certFile: "/etc/traefik/certs/gotify.local.crt"
+ keyFile: "/etc/traefik/certs/gotify.local.key"
+ - certFile: "/etc/traefik/certs/vault.local.crt"
+ keyFile: "/etc/traefik/certs/vault.local.key"
- certFile: "/etc/traefik/certs/wildcard.local.crt"
keyFile: "/etc/traefik/certs/wildcard.local.key"
- certFile: "/etc/traefik/certs/wildcard.test.crt"
diff --git a/Traefik_install_CCALM.md b/Proxy/Traefik_install_CCALM.md
similarity index 87%
rename from Traefik_install_CCALM.md
rename to Proxy/Traefik_install_CCALM.md
index a4cb12a..a9a9920 100644
--- a/Traefik_install_CCALM.md
+++ b/Proxy/Traefik_install_CCALM.md
@@ -1,7 +1,7 @@
# Устанавливаю Traefik cервер в Астане
```sh
-ssh igor@5.180.46.11 -p 2200
+ssh ubuntu@194.32.140.11 -p 22
```
# Установка Traefik на Linux Mint / Ubuntu
@@ -82,11 +82,11 @@ entryPoints:
websecure:
address: ":443"
traefik:
- address: ":8080"
+ address: ":8070"
api:
dashboard: true
- insecure: true
+ #insecure: true
# Настройка сертификатов (пример с Let's Encrypt)
certificatesResolvers:
@@ -118,13 +118,15 @@ http:
dashboard:
entryPoints:
- traefik
- rule: "Host(`localhost`)"
+ rule: "Host(`194.32.140.11`)"
service: api@internal
+ middlewares:
+ - dashboard-auth
ccalm-api-auth:
entryPoints:
- websecure
- rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/api/authorization/v02/`)"
+ rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/authorization/v02/`)"
service: org_ccalm_api_authorization_v02
tls:
certresolver: myresolver
@@ -134,7 +136,7 @@ http:
ccalm-dbms:
entryPoints:
- websecure
- rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/api/dbms/v09/`)"
+ rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/dbms/v09/`)"
service: org_ccalm_dbms_v09
tls:
certresolver: myresolver
@@ -144,15 +146,17 @@ http:
ccalm-translation:
entryPoints:
- websecure
- rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/api/translation/v01/`)"
+ 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(`test.ccalm.org`)) && PathPrefix(`/login/`)"
+ rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/login/`)"
service: org_ccalm_login_v01
tls:
certresolver: myresolver
@@ -160,7 +164,7 @@ http:
org-ccalm-main:
entryPoints:
- websecure
- rule: "Host(`locust.ge`) || Host(`test.ccalm.org`)"
+ rule: "Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)"
service: org_ccalm_main
tls:
certresolver: myresolver
@@ -199,7 +203,7 @@ http:
org_ccalm_translation_v01:
loadBalancer:
servers:
- - url: "https://ccalm.org"
+ - url: "https://127.0.0.1:8085"
passHostHeader: false
serversTransport: insecureTransport
healthCheck:
@@ -246,10 +250,14 @@ http:
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
+ - "admin:$apr1$NUoqcU3I$O6VxeuGhsA6RSIyh6rNbo." # htpasswd -nb admin t745632746573t
EOF
```
@@ -301,11 +309,11 @@ EOF
```
---
-
+ыгвщ куищще
## 🔎 Шаг 6. Проверка работы
Откройте в браузере cпаролем что быше "":
```sh
-open https://5.180.46.11:8080/dashboard
+open http://194.32.140.11:8070/dashboard
```
@@ -361,7 +369,7 @@ services:
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- - "8080:8080" # Dashboard
+ - "8070:8070" # Dashboard
volumes:
- /etc/traefik:/etc/traefik
- /var/run/docker.sock:/var/run/docker.sock:ro
@@ -387,7 +395,7 @@ EOF
Откройте в браузере:
```sh
-open http://192.168.200.85:8080/dashboard/
+open http://192.168.200.85:8070/dashboard/
```
```sh
diff --git a/RClone/NFS_install.md b/RClone/NFS_install.md
new file mode 100644
index 0000000..6bd5234
--- /dev/null
+++ b/RClone/NFS_install.md
@@ -0,0 +1,60 @@
+```sh
+sudo apt update &&
+sudo apt install nfs-kernel-server -y
+```
+
+```sh
+sudo mkdir -p /mnt/data/org_ccalm_almaty &&
+sudo chown nobody:nogroup /mnt/data/org_ccalm_almaty
+```
+
+Открой файл /etc/exports:
+
+```sh
+sudo mcedit /etc/exports
+```
+Добавь строку:
+```config
+/mnt/backups 192.168.200.0/24(rw,sync,no_subtree_check,no_root_squash)
+```
+Пояснение:
+/mnt/backups — путь к расшариваемой папке
+192.168.1.0/24 — подсеть, которой разрешён доступ
+rw — чтение и запись
+sync — синхронная запись (безопаснее)
+no_subtree_check — оптимизация доступа
+
+Применение изменений
+```sh
+sudo exportfs -ra
+```
+
+```sh
+sudo systemctl restart nfs-kernel-server
+```
+
+(Необязательно) Разрешить доступ через firewall
+```sh
+sudo ufw allow from 192.168.200.0/24 to any port nfs
+```
+Проверка экспортируемых папок
+```sh
+sudo exportfs -v
+```
+
+
+## Подключение к NFS на клиенте (например, другая машина/VM)
+```sh
+sudo apt install nfs-common &&
+sudo mount 192.168.200.80:/mnt/data/org_ccalm_almaty /mnt/nfs-backups
+```
+
+Чтобы монтировалось при загрузке, добавь строку в sudo mcedit /etc/fstab:
+```sh
+192.168.200.80:/mnt/data/org_ccalm_almaty /mnt/backups nfs defaults 0 0
+```
+
+Обновляем:
+```sh
+sudo mount -a
+```
\ No newline at end of file
diff --git a/RClone/RClone_install_linux.md b/RClone/RClone_install_linux.md
new file mode 100644
index 0000000..24c1f44
--- /dev/null
+++ b/RClone/RClone_install_linux.md
@@ -0,0 +1,69 @@
+Connecting to infrasturture
+
+```sh
+sudo useradd -r -s /sbin/nologin -d /opt/backup -m rclone
+```
+
+
+```sh
+ ssh ubuntu@almaty.ccalm.org -p 22
+```
+
+```sh
+sudo apt update &&
+sudo apt install rclone
+```
+
+```sh
+rclone version
+```
+
+Создаём настройку в ~/.config/rclone/rclone.conf
+```sh
+rclone config
+```
+
+При настройке для текущего пользователя задал такие параметры:
+```conf
+[mywebdav]
+type = webdav
+url = https://webdav.geovizor.top/
+vendor = other
+user = admin
+pass = iV6-JPSK7UOcY8xYfvKs9MjZtVMR4pqdKKCoXXtCaw
+```
+
+
+Перемещаю все файлы с ранее созданным конфигом:
+```sh
+rclone move /opt/backups/data mywebdav:/backups --progress --no-check-certificate
+```
+
+
+
+
+
+
+
+
+
+Предварительно нужно настроить подключение а потом можно вызывать команду для копирования:
+```sh
+rclone move /путь/к/локальной/директории webdav:/путь/на/сервере
+```
+
+
+Копирую файлы с сервера:
+```sh
+rclone copy webdav:/ E:\webdav --no-check-certificate --progress
+```
+
+Инициация синхронизации со списком файлов
+```sh
+rclone bisync webdav:/ E:\webdav --no-check-certificate --resync --verbose --create-empty-src-dirs
+```
+
+Регулярная двусторонняя синхронизация
+```sh
+rclone bisync webdav:/ E:\webdav --no-check-certificate --modify-window 1s --progress --create-empty-src-dirs
+```
diff --git a/RClone/WebDAV_install.md b/RClone/WebDAV_install.md
new file mode 100644
index 0000000..aa96c47
--- /dev/null
+++ b/RClone/WebDAV_install.md
@@ -0,0 +1,136 @@
+https://github.com/hacdias/webdav
+
+```sh
+ssh igor@192.168.200.81 -p 22
+```
+
+```sh
+sudo apt update &&
+sudo apt install golang-go
+```
+
+```sh
+git clone https://github.com/hacdias/webdav.git &&
+cd webdav
+```
+
+```sh
+go build -o webdav .
+```
+
+```sh
+cd /opt/webdav &&
+sudo tee config.yml > /dev/null <<'EOF'
+address: "0.0.0.0"
+port: 8085
+directory: "."
+permissions: "R"
+debug: true
+users:
+ - username: admin
+ password: "U8Z0a6YY7taZ965"
+ directory: "/mnt/backups"
+ permissions: "CRUD"
+EOF
+```
+
+Пытаемся запустить
+```sh
+cd /opt/webdav &&
+./webdav --config config.yml
+```
+Проверяем что работает:
+```sh
+open http://192.168.200.81:8085
+```
+
+Находим и убиваем процесс
+```sh
+ps aux | grep webdav
+```
+
+```sh
+pkill -f 'webdav --config config.yml'
+```
+
+Создаю пользователя webdav
+```sh
+sudo useradd -r -s /sbin/nologin -d /opt/webdav -m webdav &&
+sudo chown -R webdav:webdav /opt/webdav &&
+sudo chmod -R 750 /opt/webdav
+```
+
+```sh
+sudo nano /etc/systemd/system/webdav.service
+```
+
+```sh
+cd /etc/systemd/system/ &&
+sudo tee webdav.service > /dev/null <<'EOF'
+[Unit]
+Description=WebDAV Server
+After=network.target
+
+[Service]
+WorkingDirectory=/opt/webdav
+ExecStart=/opt/webdav/webdav --config config.yml
+User=webdav
+Group=webdav
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
+EOF
+```
+
+```sh
+sudo systemctl daemon-reexec &&
+sudo systemctl enable webdav &&
+sudo systemctl start webdav
+```
+
+```sh
+sudo systemctl status webdav
+```
+```sh
+sudo journalctl -u webdav -b
+```
+
+Теперь WebDAV доступен по адресу:
+```sh
+start https://yourdomain.com/webdav/
+```
+
+
+## Настройка HAProxy
+
+Edit haproxy configuration file:
+```sh
+sudo mcedit /etc/haproxy/haproxy.cfg
+```
+
+frontend HTTPS:
+```config
+frontend https-in
+ bind *:443 ssl crt /etc/ssl/private/yourdomain.pem
+ acl is_webdav path_beg /webdav
+ use_backend webdav_backend if is_webdav
+```
+
+В backend:
+```config
+backend webdav_backend
+ server webdav1 127.0.0.1:8085
+```
+
+```sh
+ haproxy -f /etc/haproxy/haproxy.cfg -c
+````
+```sh
+sudo systemctl restart haproxy
+```
+
+Для винды можно подключить диск при помощи:
+```
+open https://www.raidrive.com/
+```
\ No newline at end of file
diff --git a/Redis_install.md b/Redis_install.md
new file mode 100644
index 0000000..682ffe5
--- /dev/null
+++ b/Redis_install.md
@@ -0,0 +1,53 @@
+****************************************************************************************************
+Подключаемся к инфраструктуре
+```sh
+ ssh ubuntu@almaty.ccalm.org -p 22
+```
+****************************************************************************************************
+Install Redis по мативам: https://timeweb.cloud/tutorials/redis/ustanovka-i-nastrojka-redis-dlya-raznyh-os
+```sh
+ sudo apt-get update &&
+ sudo apt install redis -y &&
+ redis-cli --version
+```
+```sh
+ sudo systemctl restart redis
+```
+```sh
+ sudo systemctl status redis
+```
+Config:
+```sh
+ sudo mcedit /etc/redis/redis.conf
+```
+И меняем в конфигурации на: supervised systemd
+Также желательно проверить настройку чтобы слушался только IP: 127.0.0.1
+```
+ bind 0.0.0.0
+```
+Также в поле SECURITY нужно установить пароль, сгенерированный при помощи:
+```
+ openssl rand 25 | openssl base64 -A
+```
+Примерно такой должен быть получиться:
+```
+ requirepass 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw==
+```
+Перезагружаем:
+```sh
+ sudo systemctl restart redis-server
+```
+Проверяем Redis:
+```sh
+ redis-cli
+```
+Или так проверяем:
+```sh
+ redis-cli -h 127.0.0.1 -p 6379 -a 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw==
+```
+И пишем: ping
+
+Проверяем какие порты прослушиваются на компе:
+```sh
+ sudo netstat -lnp | grep redis
+```
diff --git a/Certificates_config.md b/Security/Certificates_config.md
similarity index 79%
rename from Certificates_config.md
rename to Security/Certificates_config.md
index 13eb01e..8435d3a 100644
--- a/Certificates_config.md
+++ b/Security/Certificates_config.md
@@ -79,6 +79,28 @@ 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 сертификат
+
+Создаём и подписываем одной группой команд:
+```sh
+openssl version &&
+openssl genrsa -out vault.local.key 2048 &&
+openssl req -new -key vault.local.key -out vault.local.csr -subj "/CN=vault.local" -addext "subjectAltName=DNS:vault.local" &&
+openssl x509 -req -in vault.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out vault.local.crt -days 365 -sha256 -copy_extensions copy &&
+openssl x509 -in vault.local.crt -text -noout &&
+cat vault.local.crt vault.local.key vault.local.csr > vault.local.pem
+```
+
+
Подписать корневым CA:
diff --git a/HashiCorp_Vault_install.md b/Security/HashiCorp_Vault_install.md
similarity index 84%
rename from HashiCorp_Vault_install.md
rename to Security/HashiCorp_Vault_install.md
index 9d781ee..25195c4 100644
--- a/HashiCorp_Vault_install.md
+++ b/Security/HashiCorp_Vault_install.md
@@ -1,361 +1,389 @@
-# Установка HashiCorp Vault на Ubuntu
-
-Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими.
-
-## 1. Установка Vault
-
-Открываю нужный сервер
-```sh
-wsl
-```
-Похоже vault из Москвы недоступен:
-```sh
-ssh root@45.144.64.218 -p 2200
-```
-
-### 1.1. Добавление репозитория HashiCorp
-
-1. Установите необходимые пакеты:
-```sh
- sudo apt update && sudo apt install -y gnupg software-properties-common curl
-```
-
-2. Добавьте официальный GPG-ключ HashiCorp:
-```sh
- curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
-```
-
-3. Добавьте репозиторий HashiCorp в систему:
-```sh
- sudo mcedit /etc/apt/sources.list.d/hashicorp.list
-```
-
-Заменяем на:
-```text
- deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main
-```
-Где noble это кодовое имя Ubuntu 24.04
-
-
-4. Обновите списки пакетов:
-```sh
- sudo apt update
-```
-
-5. Установите Vault:
-```sh
- sudo apt install -y vault
-```
-
-6. Проверьте, что Vault установлен правильно:
-```sh
- vault --version
-```
-Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z
-
-
-## 2. Запуск Vault
-
-### 2.1. Запуск в Dev-режиме (только для тестирования)
-
-If work stop it:
-```sh
- sudo pkill vault
-```
-If need delete old data:
-```sh
- sudo rm -rf ~/.vault-token ~/.vault/
-```
-For find where stored data read file:
-```sh
- sudo mcedit /etc/vault/config.hcl
-```
-In config file find this path: /opt/vault/data
-
-После удаления базы нужно инициализировать Vault заново:
-```sh
- sudo vault operator init
-```
-
-Run in developer mode (in dev mode data stored in RAM):
-```sh
- vault server -dev
-```
-
-```text
-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
-authenticated to the CLI, so you can immediately begin using Vault.
-
-You may need to set the following environment variables:
-
- $ export VAULT_ADDR='http://127.0.0.1:8200'
-
-The unseal key and root token are displayed below in case you want to
-seal/unseal the Vault or re-authenticate.
-
-Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s=
-Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w
-
-Development mode should NOT be used in production installations!
-```
-
-Теперь Vault работает по адресу:
-```sh
-start http://127.0.0.1:8200
-```
-Останавливаю нажатием Ctrl + C
-
-
-### 2.2. Настройка Vault в режиме сервера
-
-1. Создайте конфигурационный файл:
-```sh
- sudo mkdir -p /etc/vault &&
- sudo mcedit /etc/vault/config.hcl
-```
-
-2. Добавьте следующий конфиг:
-```text
-storage "file" {
- path = "/opt/vault/data"
-}
-
-listener "tcp" {
- address = "127.0.0.1:8200"
- tls_disable = 1
-}
-
-disable_mlock = true
-ui = true
-```
-
-3. Создайте папку для хранения данных:
-```sh
- sudo mkdir -p /opt/vault/data &&
- sudo chown vault:vault /opt/vault/data
-```
-
-4. Создайте systemd-сервис для Vault:
-```sh
-sudo tee /etc/systemd/system/vault.service > /dev/null <<'EOF'
-[Unit]
-Description=HashiCorp Vault
-After=network-online.target
-Requires=network-online.target
-
-[Service]
-User=vault
-Group=vault
-ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl
-ExecReload=/bin/kill --signal HUP \$MAINPID
-KillSignal=SIGTERM
-Restart=on-failure
-LimitMEMLOCK=infinity
-ProtectSystem=full
-CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_SYSLOG CAP_CHOWN
-NoNewPrivileges=yes
-
-[Install]
-WantedBy=multi-user.target
-EOF
-```
-Проверяем всё ли записалось:
-```sh
-sudo mcedit /etc/systemd/system/vault.service
-```
-
-5. Перезапустите systemd и включите Vault:
-```sh
- sudo systemctl daemon-reload &&
- sudo systemctl enable vault &&
- sudo systemctl start vault
-```
-
-7. Проверьте статус:
-```sh
- sudo systemctl status vault
-```
-
----
-
-## 3. Инициализация и разлочка Vault
-
-1. Экспортируйте переменную окружения:
-```sh
- export VAULT_ADDR='http://127.0.0.1:8200'
-```
-
-2. Инициализируйте хранилище (сохраните ключи!):
-```sh
- vault operator init
-```
-
-Выдало:
-```text
-Unseal Key 1: lQlJsb9RI8rSzLrc5iPnx1qJkWZbbXIkrEgnQGe5R6uO
-Unseal Key 2: 0qJJXRo570jlH/0Qs/wodXHNI2SF5VgL4jE04JawSPSB
-Unseal Key 3: VuYkOkQ8qmwofDmjqsTRQoMqGAH3Jv+nqQylL7Uibbtp
-Unseal Key 4: JJJ8Nqj00qzS9u5wNtTtExL/jWlJF9fgaBsiuaf0kFxC
-Unseal Key 5: L6lZMp/l7s24EZJAFnWS4Py5jsWOuMioC41g5LhUJKWL
-
-Initial Root Token: hvs.o07DY7tnSPcufxk60pjCXDzn
-
-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,
-restarted, or stopped, you must supply at least 3 of these keys to unseal it
-before it can start servicing requests.
-
-Vault does not store the generated root key. Without at least 3 keys to
-reconstruct the root key, Vault will remain permanently sealed!
-
-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.
-```
-
-3. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза выполнить эту команду):
-```sh
- vault operator unseal
-```
-
-4. Авторизуйтесь с root-токеном:
-```sh
- vault login hvs.MTFV72PjKXCVh5ZL6yCVE3Yw
-```
-
-5. Создаём(включаем) новое хранилище ключ-значение через ssh
-```sh
- vault secrets enable -path=org-ccalm kv-v2
-```
-
-
-
-5. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring)
-
-Заменит(создаст) значение:
-```sh
- vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4
-```
-Добавит (обновит):
-```sh
- vault kv patch org-ccalm/jwt vault.test=test2
-```
-```sh
- vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1
-```
-
-6. Read data from the kv
-```sh
- vault kv get org-ccalm/jwt
-```
-
-Должно вывести:
-```text
-Key Value
---- -----
-server.ssl.key-store-password M4yh4
-```
-
-6. Включаем AppRole для доступа из приложения
-```sh
- vault auth enable approle
-```
-
-7. Добавляем политики потом создаём ключ для этой политикиполитики
-
-Создаю файл политик
-```sh
-cd ~ &&
-sudo tee jwt-policy.hcl > /dev/null <<'EOF'
-path "org-ccalm/data/jwt" {
- capabilities = ["create", "read", "update", "delete", "list"]
-}
-path "org-ccalm/data/public" {
- capabilities = ["read", "list"]
-}
-EOF
-```
-Apply and delete configiration file:
-```sh
- vault policy write jwt-policy ~/jwt-policy.hcl &&
- rm -f jwt-policy.hcl
-```
-
-Создаём AppRole (на 10 лет)
-```sh
-vault write auth/approle/role/org-ccalm-jwt \
- secret_id_ttl=0 \
- token_ttl=87600h \
- token_max_ttl=87600h \
- policies="jwt-policy,another-policy,third-policy"
-```
-
-Получаем role_id и secret_id
-```sh
-vault read auth/approle/role/org-ccalm-jwt/role-id
-```
-Выдало
-```text
-Key Value
---- -----
-role_id c0064fe2-8f0e-b317-7fe7-66f7405b45a1
-```
-На команду
-```sh
-vault write -f auth/approle/role/org-ccalm-jwt/secret-id
-```
-Выдало:
-```text
-Key Value
---- -----
-secret_id 24f31c88-7185-0d93-9a51-e221c2925265
-secret_id_accessor 22fa68e3-fc73-2008-0a34-3506630b6693
-secret_id_num_uses 0
-secret_id_ttl 0s
-```
-Сохрани role_id и secret_id, они понадобятся Spring Boot.
-
-Хранить ключи лучьше в переменных окружения
-```sh
-export VAULT_ROLE_ID="your-role-id" &&
-export VAULT_SECRET_ID="your-secret-id"
-```
-
-
-Проверяем не больше какого значения можно задать время жизни кокена:
-```sh
-vault read sys/mounts/auth/token/tune
-```
-По умолчанию max_lease_ttl равен 32 дня!
-
-На год можно увеличить так:
-```sh
- vault write sys/mounts/auth/token/tune max_lease_ttl=8760h
-```
-
-Create data access token with set politics:
-```sh
- vault token create -policy=jwt-policy -ttl=0
-```
-
-Продлевать токен можно так:
-```sh
- vault token renew <твой-токен>
-```
-
-Проверяем зранятся ли токены в хранилище а не в памяти
-```sh
-vault read sys/auth/token/tune
-```
-token_type = default-service, значит Vault не хранит токены
-
-Включаем хранение токенов:
-```sh
- vault write sys/auth/token/tune token_type=service
-```
-
-
-
----
-Теперь HashiCorp Vault установлен и готов к использованию! 🚀
-
+# Установка HashiCorp Vault на Ubuntu
+
+Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими.
+
+## 1. Установка Vault
+
+Открываю нужный сервер
+```sh
+wsl
+```
+Connecting to infrastructure:
+```sh
+ssh igor@192.168.200.85 -p 22
+```
+
+### 1.1. Добавление репозитория HashiCorp
+
+1. Установите необходимые пакеты:
+```sh
+ sudo apt update && sudo apt install -y gnupg software-properties-common curl
+```
+
+2. Добавьте официальный GPG-ключ HashiCorp:
+```sh
+ curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
+```
+
+3. Добавьте репозиторий HashiCorp в систему:
+```sh
+ sudo mcedit /etc/apt/sources.list.d/hashicorp.list
+```
+
+Заменяем на:
+```text
+ deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main
+```
+Где noble это кодовое имя Ubuntu 24.04
+
+
+4. Обновите списки пакетов:
+```sh
+ sudo apt update
+```
+
+5. Установите Vault:
+```sh
+ sudo apt install -y vault
+```
+
+6. Проверьте, что Vault установлен правильно:
+```sh
+ vault --version
+```
+Выдало: Vault v1.19.4 (322786e236e268532e4b189845971ba67b5cbb23), built 2025-05-14T13:04:47Z
+
+
+## 2. Запуск Vault
+
+### 2.1. Запуск в Dev-режиме (только для тестирования)
+
+If work stop it:
+```sh
+ sudo pkill vault
+```
+If need delete old data:
+```sh
+ sudo rm -rf ~/.vault-token ~/.vault/
+```
+For find where stored data read file:
+```sh
+ sudo mcedit /etc/vault/config.hcl
+```
+In config file find this path: /opt/vault/data
+
+После удаления базы нужно инициализировать Vault заново:
+```sh
+ sudo vault operator init
+```
+
+Run in developer mode (in dev mode data stored in RAM):
+```sh
+ vault server -dev
+```
+
+```text
+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
+authenticated to the CLI, so you can immediately begin using Vault.
+
+You may need to set the following environment variables:
+
+ $ export VAULT_ADDR='http://127.0.0.1:8200'
+
+The unseal key and root token are displayed below in case you want to
+seal/unseal the Vault or re-authenticate.
+
+Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s=
+Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w
+
+Development mode should NOT be used in production installations!
+```
+
+Теперь Vault работает по адресу:
+```sh
+start http://127.0.0.1:8200
+```
+Останавливаю нажатием Ctrl + C
+
+### 2.2. Настройка Vault в режиме сервера
+
+Creating sel signed sertificate:
+```sh
+sudo openssl req -new -x509 -days 365 -nodes \
+ -out /etc/vault.d/vault.local.crt \
+ -keyout /etc/vault.d/vault.local.key \
+ -subj "/CN=yourdomain.local"
+```
+
+Set file owner
+```sh
+sudo chown -R vault:vault /etc/vault.d/
+```
+
+1. Создайте конфигурационный файл, Добавьте следующий конфиг:
+```sh
+sudo mkdir -p /etc/vault &&
+cd /etc/vault &&
+sudo tee config.hcl > /dev/null <<'EOF'
+
+storage "file" {
+ path = "/opt/vault/data"
+}
+
+listener "tcp" {
+ address = "0.0.0.0:8200"
+ tls_cert_file = "/etc/vault.d/vault.local.crt"
+ tls_key_file = "/etc/vault.d/vault.local.key"
+}
+
+disable_mlock = true
+ui = true
+EOF
+```
+
+3. Создайте папку для хранения данных:
+```sh
+ sudo mkdir -p /opt/vault/data &&
+ sudo chown vault:vault /opt/vault/data
+```
+
+4. Создайте systemd-сервис для Vault:
+```sh
+sudo tee /etc/systemd/system/vault.service > /dev/null <<'EOF'
+[Unit]
+Description=HashiCorp Vault
+After=network-online.target
+Requires=network-online.target
+
+[Service]
+User=vault
+Group=vault
+ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl
+ExecReload=/bin/kill --signal HUP \$MAINPID
+KillSignal=SIGTERM
+Restart=on-failure
+LimitMEMLOCK=infinity
+ProtectSystem=full
+CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_SYSLOG CAP_CHOWN
+NoNewPrivileges=yes
+
+[Install]
+WantedBy=multi-user.target
+EOF
+```
+Проверяем всё ли записалось:
+```sh
+sudo mcedit /etc/systemd/system/vault.service
+```
+
+5. Перезапустите systemd и включите Vault:
+```sh
+ sudo systemctl daemon-reload &&
+ sudo systemctl enable vault &&
+ sudo systemctl start vault
+```
+```sh
+sudo systemctl restart vault
+```
+7. Проверьте статус:
+```sh
+ sudo systemctl status vault
+```
+
+---
+
+## 3. Инициализация и разлочка Vault
+
+1. Экспортируйте переменную окружения:
+```sh
+ export VAULT_ADDR='http://127.0.0.1:8200'
+```
+
+2. Инициализируйте хранилище (сохраните ключи!):
+```sh
+ vault operator init
+```
+
+Выдало:
+```text
+Unseal Key 1: lQlJsb9RI8rSzLrc5iPnx1qJkWZbbXIkrEgnQGe5R6uO
+Unseal Key 2: 0qJJXRo570jlH/0Qs/wodXHNI2SF5VgL4jE04JawSPSB
+Unseal Key 3: VuYkOkQ8qmwofDmjqsTRQoMqGAH3Jv+nqQylL7Uibbtp
+Unseal Key 4: JJJ8Nqj00qzS9u5wNtTtExL/jWlJF9fgaBsiuaf0kFxC
+Unseal Key 5: L6lZMp/l7s24EZJAFnWS4Py5jsWOuMioC41g5LhUJKWL
+
+Initial Root Token: hvs.o07DY7tnSPcufxk60pjCXDzn
+
+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,
+restarted, or stopped, you must supply at least 3 of these keys to unseal it
+before it can start servicing requests.
+
+Vault does not store the generated root key. Without at least 3 keys to
+reconstruct the root key, Vault will remain permanently sealed!
+
+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.
+```
+
+3. Разблокируйте Vault, используя ключ (потом ещё 3 раза выполнить эту команду):
+```sh
+ vault operator unseal
+```
+
+4. Авторизуйтесь с root-токеном:
+```sh
+ vault login hvs.MTFV72PjKXCVh5ZL6yCVE3Yw
+```
+
+5. Создаём(включаем) новое хранилище ключ-значение через ssh
+```sh
+ export VAULT_TOKEN=hvs.FDMfGORUazCHm7jGrSofBVbx &&
+ vault secrets enable -path=org-ccalm kv-v2
+```
+
+
+
+5. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring)
+
+Заменит(создаст) значение:
+```sh
+ vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4
+```
+Добавит (обновит):
+```sh
+ vault kv patch org-ccalm/jwt vault.test=test2
+```
+```sh
+ vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1
+```
+
+6. Read data from the kv
+```sh
+ vault kv get org-ccalm/jwt
+```
+
+Должно вывести:
+```text
+Key Value
+--- -----
+server.ssl.key-store-password M4yh4
+```
+
+6. Включаем AppRole для доступа из приложения
+```sh
+ vault auth enable approle
+```
+
+7. Добавляем политики потом создаём ключ для этой политикиполитики
+
+Создаю файл политик
+```sh
+cd ~ &&
+sudo tee jwt-policy.hcl > /dev/null <<'EOF'
+path "org-ccalm/data/jwt" {
+ capabilities = ["create", "read", "update", "delete", "list"]
+}
+path "org-ccalm/data/public" {
+ capabilities = ["read", "list"]
+}
+EOF
+```
+Apply and delete configiration file:
+```sh
+ vault policy write jwt-policy ~/jwt-policy.hcl &&
+ rm -f jwt-policy.hcl
+```
+
+Создаём AppRole (на 10 лет)
+```sh
+vault write auth/approle/role/org-ccalm-jwt \
+ secret_id_ttl=0 \
+ token_ttl=87600h \
+ token_max_ttl=87600h \
+ policies="jwt-policy,another-policy,third-policy"
+```
+
+Получаем role_id и secret_id
+```sh
+vault read auth/approle/role/org-ccalm-jwt/role-id
+```
+Выдало
+```text
+Key Value
+--- -----
+role_id c0064fe2-8f0e-b317-7fe7-66f7405b45a1
+```
+На команду
+```sh
+vault write -f auth/approle/role/org-ccalm-jwt/secret-id
+```
+Выдало:
+```text
+Key Value
+--- -----
+secret_id 24f31c88-7185-0d93-9a51-e221c2925265
+secret_id_accessor 22fa68e3-fc73-2008-0a34-3506630b6693
+secret_id_num_uses 0
+secret_id_ttl 0s
+```
+Сохрани role_id и secret_id, они понадобятся Spring Boot.
+
+Хранить ключи лучьше в переменных окружения
+```sh
+export VAULT_ROLE_ID="your-role-id" &&
+export VAULT_SECRET_ID="your-secret-id"
+```
+
+
+Проверяем не больше какого значения можно задать время жизни кокена:
+```sh
+vault read sys/mounts/auth/token/tune
+```
+По умолчанию max_lease_ttl равен 32 дня!
+
+На год можно увеличить так:
+```sh
+ vault write sys/mounts/auth/token/tune max_lease_ttl=8760h
+```
+
+Create data access token with set politics:
+```sh
+ vault token create -policy=jwt-policy -ttl=0
+```
+
+Продлевать токен можно так:
+```sh
+ vault token renew <твой-токен>
+```
+
+Проверяем зранятся ли токены в хранилище а не в памяти
+```sh
+vault read sys/auth/token/tune
+```
+token_type = default-service, значит Vault не хранит токены
+
+Включаем хранение токенов:
+```sh
+ vault write sys/auth/token/tune token_type=service
+```
+
+
+
+---
+Согласно уроку желательно корневой сертификат создавать на 10 лет допустим: https://www.youtube.com/watch?v=eSDpMUeV2lQ
+Для полноценного использования pki нужно создать роль!
+
+certstrap --depot-path root init \
+ --organization "GEOVizor" \
+ --organizational-unit "IT" \
+ --country "KZ" \
+ --province "ALM" \
+ --locality "Almaty" \
+ --common-name "DemoCA Root Certificate Authority v1" \
+ --expires "30 years" \
+ --curve P-256 \
+ --path-length 2 \
+ --passphrase "pace_icy_hum_ward"
+
diff --git a/HashiCorp_Vault_install_windows.md b/Security/HashiCorp_Vault_install_windows.md
similarity index 97%
rename from HashiCorp_Vault_install_windows.md
rename to Security/HashiCorp_Vault_install_windows.md
index 1c6f3c3..49184b5 100644
--- a/HashiCorp_Vault_install_windows.md
+++ b/Security/HashiCorp_Vault_install_windows.md
@@ -1,136 +1,136 @@
-
-Загрузить в HashiCorp Vault настройки можно так:
-
-```sh
-vault kv put secret/org-ccalm-jwt \
-jwt.secret=my-secret-value \
-db.user=admin \
-db.pass=123456
-```
-
-Разбор параметров:
-1. vault kv put – команда для записи ключей и значений в KV-хранилище Vault.
-2. secret/org-ccalm-jwt – путь к секрету.
- * secret/ – это backend-хранилище (оно должно быть включено в Vault).
- * org-ccalm-jwt – имя секрета, под которым сохраняются параметры.
-3. jwt.secret=my-secret-value – ключ jwt.secret со значением my-secret-value.
-4. db.user=admin – ключ db.user со значением admin.
-5. db.pass=123456 – ключ db.pass со значением 123456.
-
-
-# 🚀 Установка и настройка HashiCorp Vault на Windows
-
-## 📌 1. Установка HashiCorp Vault
-
-1. **Скачайте Vault CLI** с официального сайта:
- 🔗 [https://developer.hashicorp.com/vault/downloads](https://developer.hashicorp.com/vault/downloads)
-2. Распакуйте архив и **добавьте путь к `vault.exe` в `PATH`**:
- - Кликните **ПКМ → Этот компьютер → Свойства → Дополнительные параметры системы**.
- - В **Переменные среды** добавьте путь к папке с `vault.exe`.
-3. Откройте **cmd** или **PowerShell** и проверьте установку командой:
-```sh
- vault --version
-```
- Если всё ОК, увидите версию Vault. Примерно такую: Vault v1.18.4 (503be623a3697e8c10c254dc87d26492c46753e1), built 2025-01-29T13:57:54Z
-
----
-
-## 📌 2. Запуск Vault-сервера (разработческий режим)
-
-Чтобы локально запустить Vault в **dev-режиме** (без авторизации), выполните:
-```sh
-vault server -dev
-```
-После запуска он покажет **root-токен** (сохраните его!):
-```plaintext
-Unseal Key: x1jUXpLJREI6M1+Qm6m/h3NLEhaEmBageqw0v+dSSKo=
-Root Token: hvs.V7Rc8uJ8YJ0AASKZfep6oYNe
-```
-
-Теперь Vault работает по адресу:
-```sh
-start http://127.0.0.1:8200
-```
-
----
-
-## 📌 3. Экспорт токена (чтобы не вводить каждый раз)
-
-Откройте **PowerShell** и выполните:
-```sh
-$env:VAULT_ADDR="http://127.0.0.1:8200"
-$env:VAULT_TOKEN="hvs.JDIyKgDMagA0WyIhLFQ4mAjZ"
-```
-(Замените `hvs.JDIyKgDMagA0WyIhLFQ4mAjZ` на свой токен.)
-
-Теперь можно работать с Vault без ввода токена каждый раз.
-
----
-
-## 📌 4. Запись значений в Vault на Windows
-
-Значения разделенные пробелами можно записать в вольт так:
-```sh
-vault kv put secret/kz-istransit-jwt server.ssl.key-store-password=MFNX344yh4
-```
-Выдаст примерно такое:
-======== Secret Path ========
-secret/data/kz-istransit-jwt
-
-======= Metadata =======
-Key Value
---- -----
-created_time 2025-02-24T12:49:45.7630328Z
-custom_metadata
-deletion_time n/a
-destroyed false
-version 1
-
----
-
-## 📌 5. Проверка сохранённых данных
-
-Чтобы посмотреть, что записано в Vault:
-```sh
-vault kv get secret/kz-istransit-jwt
-```
-Если всё настроено правильно, вы увидите примерно такой вывод:
-```plaintext
-====== Metadata ======
-Key Value
---- -----
-created_time 2025-02-24T12:00:00Z
-version 1
-
-====== Data ======
-Key Value
---- -----
-db.pass 123456
-db.user admin
-jwt.secret my-secret-value
-```
-
----
-
-## 📌 6. Удаление данных из Vault
-
-Удаление данных:
-```sh
-vault kv delete secret/org-ccalm-jwt
-```
-Полное уничтожение (без возможности восстановления):
-```sh
-vault kv destroy -versions=1 secret/org-ccalm-jwt
-```
-
----
-
-## 🎯 Итог
-✅ Установили Vault CLI
-✅ Запустили Vault сервер (`vault server -dev`)
-✅ Экспортировали `VAULT_ADDR` и `VAULT_TOKEN`
-✅ Записали настройки в Vault
-✅ Проверили данные
-
-Теперь можно интегрировать Vault в Spring Boot 🚀
-
+
+Загрузить в HashiCorp Vault настройки можно так:
+
+```sh
+vault kv put secret/org-ccalm-jwt \
+jwt.secret=my-secret-value \
+db.user=admin \
+db.pass=123456
+```
+
+Разбор параметров:
+1. vault kv put – команда для записи ключей и значений в KV-хранилище Vault.
+2. secret/org-ccalm-jwt – путь к секрету.
+ * secret/ – это backend-хранилище (оно должно быть включено в Vault).
+ * org-ccalm-jwt – имя секрета, под которым сохраняются параметры.
+3. jwt.secret=my-secret-value – ключ jwt.secret со значением my-secret-value.
+4. db.user=admin – ключ db.user со значением admin.
+5. db.pass=123456 – ключ db.pass со значением 123456.
+
+
+# 🚀 Установка и настройка HashiCorp Vault на Windows
+
+## 📌 1. Установка HashiCorp Vault
+
+1. **Скачайте Vault CLI** с официального сайта:
+ 🔗 [https://developer.hashicorp.com/vault/downloads](https://developer.hashicorp.com/vault/downloads)
+2. Распакуйте архив и **добавьте путь к `vault.exe` в `PATH`**:
+ - Кликните **ПКМ → Этот компьютер → Свойства → Дополнительные параметры системы**.
+ - В **Переменные среды** добавьте путь к папке с `vault.exe`.
+3. Откройте **cmd** или **PowerShell** и проверьте установку командой:
+```sh
+ vault --version
+```
+ Если всё ОК, увидите версию Vault. Примерно такую: Vault v1.18.4 (503be623a3697e8c10c254dc87d26492c46753e1), built 2025-01-29T13:57:54Z
+
+---
+
+## 📌 2. Запуск Vault-сервера (разработческий режим)
+
+Чтобы локально запустить Vault в **dev-режиме** (без авторизации), выполните:
+```sh
+vault server -dev
+```
+После запуска он покажет **root-токен** (сохраните его!):
+```plaintext
+Unseal Key: x1jUXpLJREI6M1+Qm6m/h3NLEhaEmBageqw0v+dSSKo=
+Root Token: hvs.V7Rc8uJ8YJ0AASKZfep6oYNe
+```
+
+Теперь Vault работает по адресу:
+```sh
+start http://127.0.0.1:8200
+```
+
+---
+
+## 📌 3. Экспорт токена (чтобы не вводить каждый раз)
+
+Откройте **PowerShell** и выполните:
+```sh
+$env:VAULT_ADDR="http://127.0.0.1:8200"
+$env:VAULT_TOKEN="hvs.JDIyKgDMagA0WyIhLFQ4mAjZ"
+```
+(Замените `hvs.JDIyKgDMagA0WyIhLFQ4mAjZ` на свой токен.)
+
+Теперь можно работать с Vault без ввода токена каждый раз.
+
+---
+
+## 📌 4. Запись значений в Vault на Windows
+
+Значения разделенные пробелами можно записать в вольт так:
+```sh
+vault kv put secret/kz-istransit-jwt server.ssl.key-store-password=MFNX344yh4
+```
+Выдаст примерно такое:
+======== Secret Path ========
+secret/data/kz-istransit-jwt
+
+======= Metadata =======
+Key Value
+--- -----
+created_time 2025-02-24T12:49:45.7630328Z
+custom_metadata
+deletion_time n/a
+destroyed false
+version 1
+
+---
+
+## 📌 5. Проверка сохранённых данных
+
+Чтобы посмотреть, что записано в Vault:
+```sh
+vault kv get secret/kz-istransit-jwt
+```
+Если всё настроено правильно, вы увидите примерно такой вывод:
+```plaintext
+====== Metadata ======
+Key Value
+--- -----
+created_time 2025-02-24T12:00:00Z
+version 1
+
+====== Data ======
+Key Value
+--- -----
+db.pass 123456
+db.user admin
+jwt.secret my-secret-value
+```
+
+---
+
+## 📌 6. Удаление данных из Vault
+
+Удаление данных:
+```sh
+vault kv delete secret/org-ccalm-jwt
+```
+Полное уничтожение (без возможности восстановления):
+```sh
+vault kv destroy -versions=1 secret/org-ccalm-jwt
+```
+
+---
+
+## 🎯 Итог
+✅ Установили Vault CLI
+✅ Запустили Vault сервер (`vault server -dev`)
+✅ Экспортировали `VAULT_ADDR` и `VAULT_TOKEN`
+✅ Записали настройки в Vault
+✅ Проверили данные
+
+Теперь можно интегрировать Vault в Spring Boot 🚀
+
diff --git a/Ubuntu.md b/Ubuntu.md
index 54eb5bf..e3c4df0 100644
--- a/Ubuntu.md
+++ b/Ubuntu.md
@@ -434,6 +434,8 @@ sudo tar cvpzf /media/usb/backup.tgz --exclude=/var/www --exclude=/etc/fstab --e
0 1 * * * wget -O /dev/null -q 'http://locust.kz/get/list.php'
0 1 * * * /opt/backups/backup.sh
+/opt/backups/backup.sh
+
Проверяю таблицу:
sudo crontab -l -u www-data
****************************************************************************************************
@@ -2057,34 +2059,6 @@ admin admin поменял на admin deSert!123
Ошибка на мейке...
install
****************************************************************************************************
-Install Redis по мативам: https://timeweb.cloud/tutorials/redis/ustanovka-i-nastrojka-redis-dlya-raznyh-os
- sudo apt-get update
- sudo apt install redis
- redis-cli --version
- sudo systemctl status redis
-Config:
- sudo mcedit /etc/redis/redis.conf
-И меняем в конфигурации на: supervised systemd
-Также желательно проверить настройку чтобы слушался только IP: 127.0.0.1
- bind 0.0.0.0
-
-Также в поле SECURITY нужно установить пароль, сгенерированный при помощи:
- openssl rand 25 | openssl base64 -A
-Примерно такой должен быть получиться:
- requirepass 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw==
-
-Перезагружаем:
- sudo systemctl restart redis-server
-Проверяем Redis:
- redis-cli
-Или так проверяем:
- redis-cli -h 127.0.0.1 -p 6379 -a 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw==
-И пишем: ping
-
-Проверяем какие порты прослушиваются на компе:
- sudo netstat -lnp | grep redis
-
-****************************************************************************************************
Для настройки локального сервера имен DNS сервер в место Bind9 теперь Dnsmasq так как он проще, понадобилось для haproxy
sudo apt-get install dnsmasq
sudo apt-get install resolvconf