This commit is contained in:
2025-04-07 07:46:21 +05:00
parent 04b8e941d1
commit 584960dd14
36 changed files with 8203 additions and 6871 deletions

16
.idea/Ubuntu.iml generated
View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4"> <module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true"> <component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output /> <exclude-output />
<content url="file://$MODULE_DIR$" /> <content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
</module> </module>

10
.idea/misc.xml generated
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
</project> </project>

14
.idea/modules.xml generated
View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Ubuntu.iml" filepath="$PROJECT_DIR$/.idea/Ubuntu.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/Ubuntu.iml" filepath="$PROJECT_DIR$/.idea/Ubuntu.iml" />
</modules> </modules>
</component> </component>
</project> </project>

10
.idea/vcs.xml generated
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" /> <mapping directory="" vcs="Git" />
</component> </component>
</project> </project>

102
.idea/workspace.xml generated
View File

@ -1,26 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="AutoImportSettings"> <component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" /> <option name="autoReloadType" value="SELECTIVE" />
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="e1fbeaad-6efe-4e4e-9cc3-db157d3cbbd0" name="Changes" comment="" /> <list default="true" id="e1fbeaad-6efe-4e4e-9cc3-db157d3cbbd0" name="Changes" comment="" />
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" /> <option name="LAST_RESOLUTION" value="IGNORE" />
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component> </component>
<component name="ProjectColorInfo">{ <component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 2 &quot;associatedIndex&quot;: 2
}</component> }</component>
<component name="ProjectId" id="2t3w0yc2N4mk67dYNBrpPZpSXiI" /> <component name="ProjectId" id="2t3w0yc2N4mk67dYNBrpPZpSXiI" />
<component name="ProjectViewState"> <component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" /> <option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
</component> </component>
<component name="PropertiesComponent"><![CDATA[{ <component name="PropertiesComponent"><![CDATA[{
"keyToString": { "keyToString": {
"RunOnceActivity.ShowReadmeOnStart": "true", "RunOnceActivity.ShowReadmeOnStart": "true",
@ -36,34 +36,34 @@
"nodejs_package_manager_path": "npm", "nodejs_package_manager_path": "npm",
"vue.rearranger.settings.migration": "true" "vue.rearranger.settings.migration": "true"
} }
}]]></component> }]]></component>
<component name="SharedIndexes"> <component name="SharedIndexes">
<attachedChunks> <attachedChunks>
<set> <set>
<option value="bundled-jdk-9823dce3aa75-fdfe4dae3a2d-intellij.indexing.shared.core-IU-243.21565.193" /> <option value="bundled-jdk-9823dce3aa75-fdfe4dae3a2d-intellij.indexing.shared.core-IU-243.21565.193" />
<option value="bundled-js-predefined-d6986cc7102b-e768b9ed790e-JavaScript-IU-243.21565.193" /> <option value="bundled-js-predefined-d6986cc7102b-e768b9ed790e-JavaScript-IU-243.21565.193" />
</set> </set>
</attachedChunks> </attachedChunks>
</component> </component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager"> <component name="TaskManager">
<task active="true" id="Default" summary="Default task"> <task active="true" id="Default" summary="Default task">
<changelist id="e1fbeaad-6efe-4e4e-9cc3-db157d3cbbd0" name="Changes" comment="" /> <changelist id="e1fbeaad-6efe-4e4e-9cc3-db157d3cbbd0" name="Changes" comment="" />
<created>1739593846366</created> <created>1739593846366</created>
<option name="number" value="Default" /> <option name="number" value="Default" />
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1739593846366</updated> <updated>1739593846366</updated>
<workItem from="1739593847495" duration="18000" /> <workItem from="1739593847495" duration="18000" />
<workItem from="1739594598328" duration="1702000" /> <workItem from="1739594598328" duration="1702000" />
<workItem from="1739615418937" duration="12348000" /> <workItem from="1739615418937" duration="12348000" />
<workItem from="1739638286710" duration="2801000" /> <workItem from="1739638286710" duration="2801000" />
<workItem from="1739696550212" duration="15168000" /> <workItem from="1739696550212" duration="15168000" />
<workItem from="1739987384678" duration="5000" /> <workItem from="1739987384678" duration="5000" />
<workItem from="1739987550416" duration="37000" /> <workItem from="1739987550416" duration="37000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" /> <option name="version" value="3" />
</component> </component>
</project> </project>

129
Certificates_config.md Normal file
View File

@ -0,0 +1,129 @@
## Подключаемся к инфраструктуре
```sh
wsl
```
```sh
cd /mnt/o/MyDocuments/projects/_Doc/Certificates &&
ls
```
# Создадим корневой ключ и сертификат:
Create root certificate
```sh
openssl genrsa -out rootCA.key 4096 &&
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.crt
```
Add root certificate to trusted
```sh
cd /mnt/o/MyDocuments/projects/_Doc/Certificates &&
sudo cp rootCA.crt /usr/local/share/ca-certificates/ &&
sudo update-ca-certificates
```
## Отдельные сертификаты для каждого домена
Отдельно для домена "ccalm.test" можно создать сертификат так:
```sh
openssl genrsa -out ccalm.test.key 2048
openssl req -new -key ccalm.test.key -out ccalm.test.csr -subj "/CN=ccalm.test"
```
Подписать сертификат корневым CA
```sh
openssl x509 -req -in ccalm.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out ccalm.test.crt -days 365 -sha256
```
## Если домены связаны то можно создать один wildcard-сертификат (*.test)
Так как это все мои домены для тестированя системы то мне легче создать единый сертификат
***Внимание: для поддоменов не работает!***
Создать ключ и CSR для *.test
```sh
openssl version &&
openssl genrsa -out ccalm.test.key 2048 &&
openssl req -new -key ccalm.test.key -out ccalm.test.csr -subj "/CN=ccalm.test" -addext "subjectAltName=DNS:ccalm.test" &&
openssl x509 -req -in ccalm.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out ccalm.test.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in ccalm.test.crt -text -noout
```
```sh
openssl version &&
openssl genrsa -out wildcard.test.key 2048 &&
openssl req -new -key wildcard.test.key -out wildcard.test.csr -subj "/CN=*.test" -addext "subjectAltName=DNS:*.test" &&
openssl x509 -req -in wildcard.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out wildcard.test.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in wildcard.test.crt -text -noout
```
## Создаём ключ и сертификат для *.local потом подписываем корневым
Создаю:
```sh
openssl version &&
openssl genrsa -out wildcard.local.key 2048 &&
openssl req -new -key wildcard.local.key -out wildcard.local.csr -subj "/CN=*.local" -addext "subjectAltName=DNS:*.local" &&
openssl x509 -req -in wildcard.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out wildcard.local.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in wildcard.local.crt -text -noout
```
Создаём и подписываем одной группой команд:
```sh
openssl version &&
openssl genrsa -out powerdns.local.key 2048 &&
openssl req -new -key powerdns.local.key -out powerdns.local.csr -subj "/CN=powerdns.local" -addext "subjectAltName=DNS:powerdns.local" &&
openssl x509 -req -in powerdns.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out powerdns.local.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in powerdns.local.crt -text -noout
```
Подписать корневым CA:
```sh
openssl x509 -req -in wildcard.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out wildcard.local.crt -days 365 -sha256
```
```sh
openssl x509 -req -in powerdns.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out powerdns.local.crt -days 365 -sha256
```
## Один сертификат с SAN (Subject Alternative Names)
Написать san.cnf
```conf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = ccalm.test
DNS.2 = git.test
DNS.3 = geoserver.ccalm.test
DNS.4 = another.domain
```
Генерировать CSR и подписать:
```sh
openssl req -new -key multi.test.key -out multi.test.csr -config san.cnf
openssl x509 -req -in multi.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out multi.test.crt -days 365 -sha256 -extfile san.cnf -extensions v3_req
```
Как использовать:
Подходит, если у вас несколько несвязанных доменов.
Можно защитить корневой домен и поддомены (example.com + www.example.com).
### Проверка
```sh
openssl x509 -in rootCA.crt -text -noout
```
```sh
openssl x509 -in powerdns.local.crt -text -noout
```

11
ChatGPT_install.md Normal file
View File

@ -0,0 +1,11 @@
Не стал устанавливать буду использовать WEB версию
Устанавливаем недостающие пакеты:
```sh
apt search libwebkit2gtk
```
```sh
sudo apt update &&
sudo apt install libwebkit2gtk-4.1-dev -y
```

View File

@ -1,108 +1,108 @@
# Устанавливаем дашборд Dashy на сервер # Устанавливаем дашборд Dashy на сервер
<div style="display: flex; align-items: flex-start;"> <div style="display: flex; align-items: flex-start;">
<img src="./icons/dashy.png" alt="Dashy" width="64" height="64" style="margin-right: 10px;"> <img src="./icons/dashy.png" alt="Dashy" width="64" height="64" style="margin-right: 10px;">
<p>Dashy — это открытый (open-source) дашборд для удобного управления и организации ссылок на сервисы, приложения и веб-ресурсы. Он предназначен для домашнего использования (Home Lab) и DevOps-окружений.</p> <p>Dashy — это открытый (open-source) дашборд для удобного управления и организации ссылок на сервисы, приложения и веб-ресурсы. Он предназначен для домашнего использования (Home Lab) и DevOps-окружений.</p>
</div> </div>
## 2. Подключаемся к нужному серверу ## 2. Подключаемся к нужному серверу
```sh ```sh
ssh igor@192.168.200.84 -p 22 ssh igor@192.168.200.84 -p 22
``` ```
## 3. Создаём директории ## 3. Создаём директории
```sh ```sh
sudo mkdir -p /opt/dashy && sudo mkdir -p /opt/dashy &&
sudo mkdir -p /opt/dashy/data && sudo mkdir -p /opt/dashy/data &&
sudo chmod -R 777 /opt/dashy && sudo chmod -R 777 /opt/dashy &&
sudo chown -R $USER:$USER /opt/dashy sudo chown -R $USER:$USER /opt/dashy
``` ```
Создаём файл конфигурации Создаём файл конфигурации
```sh ```sh
cd /opt/dashy/data && cd /opt/dashy/data &&
tee conf.yml > /dev/null <<EOF tee conf.yml > /dev/null <<'EOF'
pageInfo: pageInfo:
title: Home Lab title: Home Lab
sections: # An array of sections sections: # An array of sections
- name: Example Section - name: Example Section
icon: far fa-rocket icon: far fa-rocket
items: items:
- title: GitHub - title: GitHub
description: Dashy source code and docs description: Dashy source code and docs
icon: fab fa-github icon: fab fa-github
url: https://github.com/Lissy93/dashy url: https://github.com/Lissy93/dashy
- title: Issues - title: Issues
description: View open issues, or raise a new one description: View open issues, or raise a new one
icon: fas fa-bug icon: fas fa-bug
url: https://github.com/Lissy93/dashy/issues url: https://github.com/Lissy93/dashy/issues
- name: Local Services - name: Local Services
items: items:
- title: ProxMox - title: ProxMox
icon: https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/images/logo.png icon: https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/images/logo.png
url: https://192.168.200.80:8006 url: https://192.168.200.80:8006
- title: Grafana - title: Grafana
icon: https://static-00.iconduck.com/assets.00/grafana-icon-942x1024-18c9p0yp.png icon: https://static-00.iconduck.com/assets.00/grafana-icon-942x1024-18c9p0yp.png
url: http://192.168.200.84:3000 url: http://192.168.200.84:3000
- title: Uptime-kuma - title: Uptime-kuma
icon: https://raw.githubusercontent.com/louislam/uptime-kuma/b45dc6787db6530e8dda1388a37e8a80683da5a8/public/icon.svg icon: https://raw.githubusercontent.com/louislam/uptime-kuma/b45dc6787db6530e8dda1388a37e8a80683da5a8/public/icon.svg
url: http://192.168.200.84:3001 url: http://192.168.200.84:3001
- title: Gotify - title: Gotify
icon: https://192.168.200.84:8080/static/defaultapp.png icon: https://192.168.200.84:8080/static/defaultapp.png
url: https://192.168.200.84:8080 url: https://192.168.200.84:8080
- title: portainer.io - title: portainer.io
icon: https://icon.icepanel.io/Technology/svg/Portainer.svg icon: https://icon.icepanel.io/Technology/svg/Portainer.svg
url: https://192.168.200.84:9443 url: https://192.168.200.84:9443
- title: Prometheus - title: Prometheus
icon: https://static-00.iconduck.com/assets.00/prometheus-icon-511x512-1vmxbcxr.png icon: https://static-00.iconduck.com/assets.00/prometheus-icon-511x512-1vmxbcxr.png
url: http://192.168.200.84:9090 url: http://192.168.200.84:9090
- name: PowerDNS - name: PowerDNS
items: items:
- title: PowerDNS-Admin - title: PowerDNS-Admin
icon: https://avatars.githubusercontent.com/u/1282630?s=200&v=4 icon: https://avatars.githubusercontent.com/u/1282630?s=200&v=4
url: http://192.168.200.85:9191 url: http://192.168.200.85:9191
EOF EOF
``` ```
```sh ```sh
sudo chmod 666 /opt/dashy/data/conf.yml sudo chmod 666 /opt/dashy/data/conf.yml
``` ```
## 3. Создаём файл и записываем настройки: ## 3. Создаём файл и записываем настройки:
```sh ```sh
cd /opt/dashy && cd /opt/dashy &&
cat > docker-compose.yml <<EOF cat > docker-compose.yml <<'EOF'
services: services:
dashy: dashy:
image: lissy93/dashy:latest image: lissy93/dashy:latest
container_name: my-dashboard container_name: my-dashboard
ports: ports:
- "3002:8080" - "3002:8080"
volumes: volumes:
- /opt/dashy/data/conf.yml:/app/user-data/conf.yml - /opt/dashy/data/conf.yml:/app/user-data/conf.yml
restart: always restart: always
EOF EOF
``` ```
## 4. Запуск контейнера
## 4. Запуск контейнера ```sh
```sh cd /opt/dashy &&
cd /opt/dashy && sudo docker-compose up -d
sudo docker-compose up -d ```
``` ```sh
```sh cd /opt/dashy &&
cd /opt/dashy && sudo docker-compose down
sudo docker-compose down ```
```
```sh
exit
```
```sh ```sh
exit start http://192.168.200.84:3002
``` ```
```sh
start http://192.168.200.84:3002
```

38
Docker_install.md Normal file
View File

@ -0,0 +1,38 @@
Добавьте официальный репозиторий Docker:
```sh
sudo apt-get update &&
sudo apt-get install ca-certificates curl &&
sudo install -m 0755 -d /etc/apt/keyrings &&
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc &&
sudo chmod a+r /etc/apt/keyrings/docker.asc &&
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null &&
sudo apt-get update
```
Раз у тебя Linux Mint то нужно будет поменять:
```conf
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu xia stable
```
на
```conf
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable
```
```sh
sudo apt update &&
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
Если Docker не установлен, установим его:
```sh
sudo apt update && sudo apt upgrade -y &&
sudo apt install -y docker.io docker-compose-plugin &&
sudo systemctl enable --now docker
```
Проверим версию:
```sh
docker --version &&
docker compose version
```

View File

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

View File

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

View File

@ -1,73 +1,73 @@
# 📌 Туннелирование SSH через HTTP # 📌 Туннелирование SSH через HTTP
**************************************************************************************************** ****************************************************************************************************
Исходники тут: https://github.com/larsbrinkhoff/httptunnel: Исходники тут: https://github.com/larsbrinkhoff/httptunnel:
```sh ```sh
sudo apt-get install httptunnel sudo apt-get install httptunnel
```` ````
Настроил HAProxy примерно так, чтобы проверялся параметр "mybiglogfile" для редиректа: Настроил HAProxy примерно так, чтобы проверялся параметр "mybiglogfile" для редиректа:
``` ```
frontend frontend-http frontend frontend-http
bind *:80 bind *:80
mode http mode http
acl v_tunnel url_param(mybiglogfile) -m found acl v_tunnel url_param(mybiglogfile) -m found
use_backend httptunnel_backend if v_tunnel use_backend httptunnel_backend if v_tunnel
http-request redirect scheme https code 301 unless { ssl_fc } || v_tunnel http-request redirect scheme https code 301 unless { ssl_fc } || v_tunnel
``` ```
Проверить нет ли редирект можно так: Проверить нет ли редирект можно так:
curl -I http://192.168.200.81/index.html?mybiglogfile=all curl -I http://192.168.200.81/index.html?mybiglogfile=all
curl -I http://locust.kz/index.html?mybiglogfile=all curl -I http://locust.kz/index.html?mybiglogfile=all
На сервере запустил прослушку на 9999 и перенаправление на 22: На сервере запустил прослушку на 9999 и перенаправление на 22:
```sh ```sh
sudo hts -F 127.0.0.1:22 9999 sudo hts -F 127.0.0.1:22 9999
```` ````
Для остановки Для остановки
```sh ```sh
ps aux | grep hts ps aux | grep hts
sudo kill 1854 sudo kill 1854
``` ```
Можно запустить как сервис так sudo mcedit /etc/systemd/system/httptunnel.service: Можно запустить как сервис так sudo mcedit /etc/systemd/system/httptunnel.service:
``` ```
[Unit] [Unit]
Description=HTTP Tunnel Service Description=HTTP Tunnel Service
After=network.target After=network.target
[Service] [Service]
ExecStart=hts -F 127.0.0.1:22 9999 ExecStart=hts -F 127.0.0.1:22 9999
Restart=always Restart=always
User=root User=root
RestartSec=10 RestartSec=10
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
``` ```
Потом: Потом:
```sh ```sh
sudo systemctl daemon-reload sudo systemctl daemon-reload
sudo systemctl enable httptunnel sudo systemctl enable httptunnel
sudo systemctl stop httptunnel sudo systemctl stop httptunnel
sudo systemctl start httptunnel sudo systemctl start httptunnel
sudo systemctl status httptunnel sudo systemctl status httptunnel
tail -f /var/log/syslog | grep --line-buffered "htc" tail -f /var/log/syslog | grep --line-buffered "htc"
``` ```
На клиенте запускаем локальный порт также указал 9999 а ключь На клиенте запускаем локальный порт также указал 9999 а ключь
```sh ```sh
htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80 htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80
htc -F 9999 --base-uri /index.html?mybiglogfile=all locust.kz:80 htc -F 9999 --base-uri /index.html?mybiglogfile=all locust.kz:80
``` ```
Для остановки Для остановки
```sh ```sh
ps aux | grep htc ps aux | grep htc
Потом Потом
sudo kill 783 sudo kill 783
``` ```
Пробую подключиться после настройки тунеля: Пробую подключиться после настройки тунеля:
```sh ```sh
ssh igor@127.0.0.1 -p 9999 ssh igor@127.0.0.1 -p 9999
``` ```

View File

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

View File

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

View File

@ -1,87 +1,87 @@
Install by docs from https://www.cherryservers.com/blog/install-jenkins-ubuntu Install by docs from https://www.cherryservers.com/blog/install-jenkins-ubuntu
## Prepare installation ## Prepare installation
Открываю нужный сервер Открываю нужный сервер
```sh ```sh
wsl wsl
``` ```
```sh ```sh
sudo apt update sudo apt update
``` ```
```sh ```sh
sudo apt upgrade sudo apt upgrade
``` ```
```sh ```sh
sudo apt install openjdk-21-jdk openjdk-21-jre -y && sudo apt install openjdk-21-jdk openjdk-21-jre -y &&
java -version java -version
``` ```
## Add Jenkins Repository ## Add Jenkins Repository
```sh ```sh
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
``` ```
Next, add the Jenkins repository to your systems sources.list: Next, add the Jenkins repository to your systems sources.list:
```sh ```sh
sudo sh -c 'echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian binary/ > /etc/apt/sources.list.d/jenkins.list' sudo sh -c 'echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
``` ```
```sh ```sh
sudo apt update sudo apt update
``` ```
```sh ```sh
sudo apt install jenkins -y sudo apt install jenkins -y
``` ```
If the software was installed incorrectly, you can reinstall it after uninstalling it first.: If the software was installed incorrectly, you can reinstall it after uninstalling it first.:
```sh ```sh
sudo apt remove --purge jenkins sudo apt remove --purge jenkins
``` ```
```sh ```sh
jenkins --version jenkins --version
``` ```
Try run jenkins without service Try run jenkins without service
```sh ```sh
sudo -u jenkins /usr/bin/jenkins --httpPort=8081 --httpListenAddress=0.0.0.0 sudo -u jenkins /usr/bin/jenkins --httpPort=8081 --httpListenAddress=0.0.0.0
``` ```
```sh ```sh
sudo mcedit /lib/systemd/system/jenkins.service sudo mcedit /lib/systemd/system/jenkins.service
``` ```
```sh ```sh
sudo systemctl start jenkins && sudo systemctl start jenkins &&
sudo systemctl enable jenkins && sudo systemctl enable jenkins &&
sudo systemctl status jenkins sudo systemctl status jenkins
``` ```
```sh ```sh
sudo journalctl -xeu jenkins.service | tail -n 50 sudo journalctl -xeu jenkins.service | tail -n 50
``` ```
Если порт занят, проверяем кем: Если порт занят, проверяем кем:
```sh ```sh
sudo lsof -i :8081 sudo lsof -i :8081
``` ```
Переопределяем порт: Переопределяем порт:
```sh ```sh
sudo mcedit /etc/default/jenkins sudo mcedit /etc/default/jenkins
``` ```
```conf ```conf
HTTP_PORT=8081 HTTP_PORT=8081
``` ```
```sh ```sh
sudo systemctl restart jenkins sudo systemctl restart jenkins
``` ```
```sh ```sh
start http://127.0.0.1:8081 start http://127.0.0.1:8081
``` ```
See what port in locked See what port in locked
```sh ```sh
netstat -tpln netstat -tpln
``` ```

412
POSTFIX_DOVECOT_install.md Normal file
View File

@ -0,0 +1,412 @@
Подключаемся к нужному серверу:
```sh
ssh root@bigfoottrade.kz -p 2222
```
Настройка почты на POSTFIX(агент передачи почты) И DOVECOT на основе https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/ и https://www.youtube.com/watch?v=_pbH7GsVTrw&t=649s и https://www.youtube.com/watch?v=VptKRBVeCMo
****************************************************************************************************
## Устанавливаю Postfixadmin
Для начала создаю базу в PostgreSQL с базой mail и пользователем mailreader и паролем major!reader1
```sh
cd /var/www/html &&
sudo wget https://yer.dl.sourceforge.net/project/postfixadmin/postfixadmin-3.3.8/PostfixAdmin%203.3.8.tar.gz &&
sudo tar xzvf "PostfixAdmin 3.3.8.tar.gz"
```
Создаю временный каталог в /var/www/html/PostfixAdmin/templates_c
правлю способ подключения к базе:
```sh
sudo mcedit /srv/http/PostfixAdmin/config.inc.php
```
На это:
```conf
$CONF['configured'] = true;
$CONF['database_type'] = 'pgsql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'mailreader';
$CONF['database_password'] = 'major!reader1';
$CONF['database_name'] = 'mail';
$CONF['emailcheck_resolve_domain'] = 'NO';
```
Также нужно поднастроить апачи добавив следующтй код в: sudo mcedit /etc/apache2/apache2.conf ниже того что указывает на <Directory /var/www/>
Alias /PostfixAdmin/ "/var/www/html/PostfixAdmin/public/"
<Directory "/var/www/html/PostfixAdmin/public/">
Options FollowSymLinks
AllowOverride None
Allow from all
Order allow,deny
</Directory>
Перезагружаю:
```sh
systemctl restart apache2.service
```
На последок:
```sh
sudo chown www-data:www-data -R /var/www/ &&
sudo chown www-data:www-data -R /opt/app_api_mobile_v2/mobile_v2
```
Теперь можно открывать сайт по IP:
```sh
start http://77.240.38.108/PostfixAdmin/setup.php
```
```sh
start https://77.240.38.108/PostfixAdmin/login.php
```
Просит задать пароль, задал такой: 11qazxsw22
Результат генерации: $CONF['setup_password'] = '$2y$10$ySo40K0pOn0Q5jLcBoK1yua5JaGXI.NIzTmUVBn1dreTaP2RkZ2My';
И добавляем эту стору в: sudo mcedit /srv/http/PostfixAdmin/config.inc.php
Потом обновляем страницу.
Добавляем администратора введя пароль 11qazxsw22 емайл в качестве логина irigm@mail.ru и пароль: 33edcvfr44
Можно взглянуть базу там должны создаться таблицы
Теперь осталось пойти на Postfixadmin, завести сначала почтовый домен, потом ящик и протестировать нашу почтовую систему, например, с помощью Thunderbird. Отправляем письма себе, другому пользователю в нашей системе. Потом пробуем послать себе письма с Gmail, Yandex, Mail.ru и наблюдаем за поведением системы, изучая логи. Основная настройка почты завершена. Теперь необходимо настроить DKIM, SPF, чтобы другие почтовые системы воспринимали нас как доверенных отправителей. Но об этом я расскажу в другом посте.
******************************************************************************************
## Устанавливаю Postfix популярный почтовый агент (MTA) с открытым исходным кодом, который можно использовать для маршрутизации и доставки почты в системе Linux.
```sh
sudo apt-get update &&
sudo apt install postfix postfix-pgsql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql mailutils postgresql
```
Ссохраняю оригинальный конфигурационный файл:
```sh
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
```
Конфигурирую:
```sh
sudo dpkg-reconfigure postfix
```
Настраиваю так:
```conf
General type of mail configuration?: Internet Site
System mail name: example.com (не mail.example.com)
Root and postmaster mail recipient: имя пользователя основной учетной записи Linux (в наших примерах sammy)
Other destinations to accept mail for: $myhostname, example.com, mail.example.com, localhost.example.com, localhost
Force synchronous updates on mail queue?: No
Local networks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
Mailbox size limit: 0
Local address extension character: +
Internet protocols to use: all
```
Можно взглянуть на настройки так: sudo mcedit /etc/postfix/main.cf
Через pgAdmin создаю нового пользователя mailreader с паролем major!reader1
CREATE DATABASE mail WITH OWNER mailreader;
Добавляю: sudo mc edit /etc/postgresql/12/main/pg_hba.conf:
local postfix postfix md5
Перезагружаю базу данных:
service postgresql reload
Создаём файл для обращения к базе с алиасами: sudo mcedit /etc/postfix/pgsql_virtual_alias_maps.cf https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/
```conf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
```
Создаём файл для получения информации по виртуальным доменам: sudo mcedit /etc/postfix/pgsql_virtual_domains_maps.cf
```conf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT domain FROM domain WHERE domain='%u'
```
Создаём файл для получения информации о почтовых ящиках: sudo mcedit /etc/postfix/pgsql_virtual_mailbox_maps.cf
```conf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
```
Прописываем ранее созданные файлы в: sudo mcedit /etc/postfix/main.cf добавив строчки:
```conf
virtual_mailbox_base = /home/mail
virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1024
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
```
Настройки безопасного соединения (также просто вставил в конец файла):
```conf
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_tls_cert_file = /etc/ssl/certs/bigfoottrade_kz.crt
smtpd_tls_key_file = /etc/ssl/private/bigfoottrade_kz.key
smtpd_tls_security_level = encrypt
```
Похоже опции что ниже устарели:
```conf
smtpd_use_tls = yes
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_enforce_tls=yes
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
tls_preempt_cipherlist = yes
smtpd_tls_mandatory_ciphers = high
tls_high_cipherlist = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ADH-AES256-GCM-SHA384:ADH-AES256-SHA256:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:AES256-GCM-SHA384:AES256-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ADH-AES128-GCM-SHA256:ADH-AES128-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA256:NULL-SHA256
smtpd_tls_auth_only = yes
smtpd_helo_required = yes
smtp_tls_security_level = may
smtp_tls_ciphers = export
smtp_tls_loglevel = 1
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
```
Снимаем комментарии со следующих строк, или дописываем их при необходимости: sudo mcedit /etc/postfix/master.cf (просто добавил в конец файла)
```conf
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=/var/spool/postfix/private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
```
Проверяю на наличие ошибок:
```sh
sudo postfix check
```
В конфигурационном файле прописывается список дорменов которых обслуживает данный агент доставки.
```sh
sudo mcedit /etc/postfix/main.cf
```
Примерно таокое:
mydestination = $myhostname, your_domain, localhost.com, , localhost
Перезапускаем:
```sh
sudo systemctl restart postfix
```
******************************************************************************************
## Настройка dovecot the Secure IMAP server
Теперь устанавливаю и настраиваю Dovecot:
sudo apt install -y dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd
Создаю пользователя и каталог
sudo adduser --system --no-create-home --uid 1024 --group --disabled-password --disabled-login --gecos 'dovecot virtual mail user' vmail
mkdir /home/mail
chown vmail:vmail /home/mail
chmod 700 /home/mail
Смотрим что мы создали:
groups vmail
Настраиваем способ хранения сообщений: sudo mcedit /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/mail/%d/%u/
Настраиваем слушателя аутентификации: sudo mcedit /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
Настраиваем аутентификацию в Dovecot: sudo mcedit /etc/dovecot/conf.d/10-auth.conf
Комментируем одну строку, снимаем комментарий с другой.
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Настраиваем шифрование Dovecot: sudo mcedit /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/haproxy/ssl/bigfoottrade_kz.pem
ssl_key = </etc/haproxy/ssl/bigfoottrade_kz.pem
Указываем Dovecot автоматически создавать каталоги при первом подключении клиента: sudo mcedit /etc/dovecot/conf.d/15-lda.conf
lda_mailbox_autocreate = yes
Теперь настройка подключения к базе данных. Открываем файл: sudo mcedit /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Создаём файл с настройками для работы с PostgreSQL: sudo mcedit /etc/dovecot/dovecot-sql.conf.ext
driver = pgsql
connect = host=localhost dbname=mail user=mailreader password=major!reader1
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/home/mail/',LOWER(domain),'/',LOWER(maildir)),1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
Наконец, указываем интерфейсы, на которых будет слушать наш Dovecot: sudo mcedit /etc/dovecot/dovecot.conf
listen = *
Также добавить в этот файл следующую настройку:
service stats {
unix_listener stats-reader {
user = vmail
group = vmail
mode = 0660
}
unix_listener stats-writer {
user = vmail
group = vmail
mode = 0660
}
}
Настройка Dovecot завершена. Осталось сгенерировать сертификаты или получить их с помощью Let's Encrypt. Для тестовых целей сгенерируем самоподписанные сертификаты. Мы их положим в /etc/postfix:
openssl req -new -x509 -days 730 -nodes -out /etc/postfix/public.pem -keyout /etc/postfix/private.pem -subj "/C=RU/ST=Msk/L=Msk/O=Local/OU=Mail/CN=fedor.bigfoottrade.kz"
Добавляем пользователю "dovecot" группу "mail":
usermod -a -G dovecot mail
usermod -a -G vmail mail
sudo systemctl enable dovecot
sudo systemctl start dovecot
Теперь можно тестировать:
Сначала необходимо убедиться в том, что почта доходит до нового ящика. Сделать это можно с помощью тестового письма:
echo "Test mail" | mail -s "Test mail" admin@mqtt.kz
Сообщение должно появиться в папке /home/mail/mqtt.kz/admin/new/. Если письма нет, проверьте лог Postfix:
tail -f /var/log/mail.log
В настройках DNS настроил А запись на только что настроенный сервер:
mail.mqtt.kz
Также нужно настроить dkim чтобы почта не попадала в спам, записав открытый ключ шифрования в TXT запсь
****************************************************************************************************
## Настройка dkim для проверки что письмо действительно было отправлено с заявленного домена
Созданно по этой инструкции:
```sh
start https://fornex.com/ru/help/dkim-postfix/
```
```sh
sudo apt-get install opendkim opendkim-tools
```
mkdir -p /etc/postfix/dkim && cd /etc/postfix/dkim
opendkim-genkey -D /etc/postfix/dkim/ -d mqtt.kz -s mail
opendkim-genkey -D /etc/postfix/dkim/ -d geovizor.com -s mail
mv mail.private mail.mqtt.kz.private
mv mail.private mail.geovizor.com.private
mv mail.txt mail.mqtt.kz.txt
mv mail.txt mail.geovizor.com.txt
Создаём файл mcedit keytable и записываем в него ключи
#имя_ключа домен:селектор:/путь/до/ключа
mail._domainkey.mqtt.kz mqtt.kz:mail:/etc/postfix/dkim/mail.mqtt.kz.private
mail._domainkey.geovizor.com geovizor.com:mail:/etc/postfix/dkim/mail.geovizor.com.private
Создаём файл mcedit signingtable и записывает что чем подписывать
#домен имя ключа
*@mqtt.kz mail._domainkey.mqtt.kz
*@geovizor.com mail._domainkey.geovizor.com
Задаю права доступа:
chown root:opendkim *
chmod u=rw,g=r,o= *
chmod g+r /etc/postfix/dkim/
Смотрим содержимое TXT файла для записи в домен
cat /etc/postfix/dkim/mail.mqtt.kz.txt
cat /etc/postfix/dkim/mail.geovizor.com.txt
И добавляю в DNS на хостинг:
Name: mail._domainkey.mqtt.kz
Text: v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtrObJxHaUBVtR4XzNuFzoa449K3l1z6+Mi4e83rFbBYmBZRYjiJn5h2PeiK1i2IpSaEKn32AlPy5gB7Ej41Fhg6LXswwRhhfvz8vClhRbUKT4I8oPBj9WZr7+4aohG1Vcks1q9cgmwdcGN+6qhKq/DJ+AC1TirNrEpSvR6JAqd4G70aJazI9su0bY5cbIv0pZGezvt+2pwJw6xpb501KudTFE8FTHxB51aLkgYS257MkovSu+qlVzPjoOsZcOY7hQtF8WB/Czod0QN05Ob/N3Qc/k2E4tpvxgokLXdYl/8KBMLMX9cRfIVbv+atuo59VFKHYIGD8Kom6akORkFeIlQIDAQAB
Заменяем все настройки на то что ниже: sudo mcedit /etc/opendkim.conf
AutoRestart Yes
AutoRestartRate 10/1h
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@localhost
Umask 022
Canonicalization relaxed/relaxed
Selector default
MinimumKeyBits 1024
KeyFile /etc/postfix/dkim/${MAIL_DOMAIN}.private
KeyTable /etc/postfix/dkim/keytable
SigningTable refile:/etc/postfix/dkim/signingtable
Добавляем в конец: sudo mcedit /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
sudo systemctl start opendkim
sudo systemctl enable opendkim
service opendkim restart
service postfix restart
********** Настройка SPF **********
Например, SPF-запись «example.com. TXT «v=spf1 +a +mx -all»» говорит о том, что отправлять письма от имени домена «example.com» могут сервера, указанные в A и MX-записях этого домена, а письма, отправленные от других серверов должны быть удалены (Fail).
Содержимое TXT файла для записи в домен
Имя домена пустое:
Содержимое: v=spf1 +a +mx -all
********** Настройка DMARC https://www.unisender.com/ru/glossary/dmarc/**********
Содержимое TXT файла для записи в домен
Имя домена: _dmarc
Содержимое: v=DMARC1; p=none;
!!! Для тестирования сервера на прохождение спам фильтра пишем письмо на https://www.mail-tester.com/ или https://spamtest.smtp.bz !!!
********** web интерфейс для postfix — Roundcube **********
cd /var/www/html
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.5/roundcubemail-1.6.5-complete.tar.gz
tar xzvf roundcubemail-1.6.5-complete.tar.gz
chown -R www-data:www-data /var/www/html/Roundcube
sudo apt-get install aspell aspell-en dbconfig-common fonts-glyphicons-halflings javascript-common libaspell15 libjs-bootstrap libjs-bootstrap4 libjs-codemirror libjs-jquery libjs-jquery-minicolors libjs-jquery-ui libjs-jstimezonedetect libjs-popper.js libjs-sizzle node-jquery php-auth-sasl php-mail-mime php-masterminds-html5 php-net-sieve php-net-smtp php-net-socket php-pspell php7.4-pspell
https://bigfoottrade.kz/Roundcube/installer/
language — ru_RU
Предварительно создать базу:
```sh
start https://bigfoottrade.kz/Roundcube
```
```sh
start http://77.240.38.108/Roundcube
```

View File

@ -1,71 +1,71 @@
# Установка Portainer.io в Docker на Ubuntu 24.04 # Установка Portainer.io в Docker на Ubuntu 24.04
Пробую установить в ProxMox в контейнер созданный на основе Ubuntu, незабыть убрать галочку: Unprivileged container Пробую установить в ProxMox в контейнер созданный на основе Ubuntu, незабыть убрать галочку: Unprivileged container
Подключаюсь к нужной машине Подключаюсь к нужной машине
```sh ```sh
ssh igor@192.168.200.84 -p 22 ssh igor@192.168.200.84 -p 22
``` ```
## Шаг 1: Обновление системы и установка Docker ## Шаг 1: Обновление системы и установка Docker
Перед установкой Portainer убедитесь, что Docker установлен и запущен. Перед установкой Portainer убедитесь, что Docker установлен и запущен.
```bash ```bash
sudo apt update && sudo apt upgrade -y sudo apt update && sudo apt upgrade -y
sudo apt-get install python3-venv python3-pip sudo apt-get install python3-venv python3-pip
sudo apt install docker.io -y sudo apt install docker.io -y
sudo systemctl enable --now docker sudo systemctl enable --now docker
sudo systemctl start docker sudo systemctl start docker
sudo systemctl status docker sudo systemctl status docker
sudo apt install -y docker-compose sudo apt install -y docker-compose
docker-compose --version docker-compose --version
``` ```
Добавляем текущего пользователя в группу докера Добавляем текущего пользователя в группу докера
```sh ```sh
sudo usermod -aG docker $USER sudo usermod -aG docker $USER
```` ````
## Шаг 2: Создание директории для Portainer ## Шаг 2: Создание директории для Portainer
Создадим папку для хранения данных Portainer в `/opt`: Создадим папку для хранения данных Portainer в `/opt`:
```bash ```bash
sudo mkdir -p /opt/portainer/data sudo mkdir -p /opt/portainer/data
sudo chmod -R 777 /opt/portainer sudo chmod -R 777 /opt/portainer
``` ```
## Шаг 3: Создание docker-compose.yml ## Шаг 3: Создание docker-compose.yml
```sh ```sh
cd /opt/portainer cd /opt/portainer
sudo mcedit docker-compose.yml sudo mcedit docker-compose.yml
``` ```
```yaml ```yaml
services: services:
portainer: portainer:
image: portainer/portainer-ce:latest image: portainer/portainer-ce:latest
container_name: portainer container_name: portainer
restart: always restart: always
ports: ports:
- "8000:8000" - "8000:8000"
- "9443:9443" - "9443:9443"
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock
- ./data:/data - ./data:/data
``` ```
## Шаг 4: Запуск контейнера Portainer ## Шаг 4: Запуск контейнера Portainer
```sh ```sh
sudo docker-compose up -d sudo docker-compose up -d
``` ```
```sh ```sh
start https://192.168.200.84:9443 start https://192.168.200.84:9443
``` ```
## Шаг 5: Начальная настройка ## Шаг 5: Начальная настройка
1. Создайте учетную запись администратора. 1. Создайте учетную запись администратора.
2. Подключите локальный Docker-движок. 2. Подключите локальный Docker-движок.
3. Начните управлять контейнерами через Portainer! 3. Начните управлять контейнерами через Portainer!

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,145 @@
```sh
sudo apt-get install pdns-backend-mysql -y
```
Create database to MarinaDB
```sh
sudo mysql -u root -p
```
Create new user into MarinaDB
```sh
CREATE USER 'poweruser'@'%' IDENTIFIED BY 'uFqqXQEQwErjkQga6rcz';
GRANT ALL PRIVILEGES ON *.* TO 'poweruser'@'%';
FLUSH PRIVILEGES;
REVOKE ALL PRIVILEGES ON *.* FROM 'powerdns'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON poweruser.* TO 'poweruser'@'%';
FLUSH PRIVILEGES;
```
```sh
SELECT User, Host FROM mysql.user WHERE User = 'poweruser';
```
Create database
```sh
CREATE DATABASE powerdns;
GRANT ALL PRIVILEGES ON powerdns.* TO 'poweruser'@'%';
FLUSH PRIVILEGES;
```
Create file with SQL to create database, text from https://doc.powerdns.com/authoritative/backends/generic-mysql.html
```sql
sudo mysql -u poweruser -p powerdns <<'EOF'
CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(8) NOT NULL,
notified_serial INT UNSIGNED DEFAULT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
options VARCHAR(64000) DEFAULT NULL,
catalog VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);
CREATE TABLE records (
id BIGINT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
comment TEXT CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
published BOOL DEFAULT 1,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
EOF
```
Проверяем создалась ли таблицы в базе
```sh
mysql -u poweruser -p -e "SHOW TABLES FROM powerdns;"
```
----------------------------------------------------------------------------------------------------
Configure database connection from PowerDNS to SQLIte
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.mysql.conf <<'EOF'
launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-user=poweruser
gmysql-password=uFqqXQEQwErjkQga6rcz
gmysql-dbname=powerdns
gmysql-dnssec=yes
EOF
```
Set access level to file
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.mysql.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.mysql.conf
```

View File

@ -0,0 +1,25 @@
```sh
sudo apt-get install pdns-backend-pgsql -y
```
----------------------------------------------------------------------------------------------------
Подключаюсь к базе и создаю схему базу со схемой из: https://doc.powerdns.com/authoritative/backends/generic-postgresql.html
Настраиваю соединение с базой данных в:
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.gpgsql.conf <<'EOF'
launch+=gpgsql
# gmysql parameters
gpgsql-host=127.0.0.1
gpgsql-port=5432
gpgsql-dbname=powerdns
gpgsql-user=powerdns
gpgsql-password=y7HMHi0ATxx1VC3UU5WG
gpgsql-dnssec=no
EOF
```
Set access level to file:
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.gpgsql.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gpgsql.conf
```
----------------------------------------------------------------------------------------------------

133
PowerDNS_install_SQIite3.md Normal file
View File

@ -0,0 +1,133 @@
```sh
sudo apt-get install pdns-backend-sqlite3 -y
```
Для использования SQLIte копируем схему из https://doc.powerdns.com/authoritative/backends/generic-sqlite3.html
```sh
sudo apt-get install pdns-backend-sqlite3 -y
```
```sh
sudo apt install sqlite3 -y
```
Create database:
```sh
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 ".databases" &&
sudo chown pdns:pdns /var/lib/powerdns/pdns.sqlite3
```
Create database structure
```sql
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 <<'EOF'
PRAGMA foreign_keys = 1;
CREATE TABLE domains (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL COLLATE NOCASE,
master VARCHAR(128) DEFAULT NULL,
last_check INTEGER DEFAULT NULL,
type VARCHAR(8) NOT NULL,
notified_serial INTEGER DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
options VARCHAR(65535) DEFAULT NULL,
catalog VARCHAR(255) DEFAULT NULL
);
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);
CREATE TABLE records (
id INTEGER PRIMARY KEY,
domain_id INTEGER DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(65535) DEFAULT NULL,
ttl INTEGER DEFAULT NULL,
prio INTEGER DEFAULT NULL,
disabled BOOLEAN DEFAULT 0,
ordername VARCHAR(255),
auth BOOL DEFAULT 1,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX records_lookup_idx ON records(name, type);
CREATE INDEX records_lookup_id_idx ON records(domain_id, name, type);
CREATE INDEX records_order_idx ON records(domain_id, ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL COLLATE NOCASE,
account VARCHAR(40) NOT NULL
);
CREATE UNIQUE INDEX ip_nameserver_pk ON supermasters(ip, nameserver);
CREATE TABLE comments (
id INTEGER PRIMARY KEY,
domain_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) DEFAULT NULL,
comment VARCHAR(65535) NOT NULL,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX comments_idx ON comments(domain_id, name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
kind VARCHAR(32) COLLATE NOCASE,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainmetaidindex ON domainmetadata(domain_id);
CREATE TABLE cryptokeys (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
published BOOL DEFAULT 1,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INTEGER PRIMARY KEY,
name VARCHAR(255) COLLATE NOCASE,
algorithm VARCHAR(50) COLLATE NOCASE,
secret VARCHAR(255)
);
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
EOF
```
Configure database connection from PowerDNS to SQLIte
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.sqlite.conf <<'EOF'
launch=gsqlite3
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3
EOF
```
Set access level to file
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.sqlite.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.sqlite.conf
```
In PowerDNS configured to auto read config from dir /etc/powerdns/pdns.d/

View File

@ -1,7 +1,14 @@
Устанавливаем PowerDNS через Docker Compose в директорию /opt/powerdnsa # Устанавливаем авторитативный PowerDNS через Docker Compose в директорию /opt/powerdnsa
Эту версию пробовал: https://hub.docker.com/r/powerdns/pdns-auth-48 Эту версию пробовал: https://hub.docker.com/r/powerdns/pdns-auth-48
PowerDNS Authoritative PowerDNS Authoritative
Connect to CCALM Turkish infrastructure:
```sh
ssh igor@156.244.31.209 -p 2200
```
```sh ```sh
ssh-keygen -R 192.168.200.85 ssh-keygen -R 192.168.200.85
``` ```
@ -22,6 +29,94 @@ ssh igor@192.168.200.85 -p 22
cd /opt/powerdnsa/data cd /opt/powerdnsa/data
``` ```
----------------------------------------------------------------------------------------------------
Как настроить MariaDB базу для использования в PowerDNS смотри:
[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md)
----------------------------------------------------------------------------------------------------
Похоже что environment не работаею и нужно конфигурить через
```sh
cd /opt/powerdnsa
sudo tee docker-compose.yml > /dev/null <<'EOF'
services:
powerdns:
image: powerdns/pdns-auth-48
container_name: powerdns
restart: unless-stopped
network_mode: "host"
environment:
- PDNS_LOCAL_ADDRESS=127.0.0.1,156.244.31.209
- PDNS_LAUNCH=gmysql
- PDNS_API=yes
- PDNS_API_KEY=0aa08433-52a9-4611-9eed-5c5a08a508f0
- PDNS_MASTER=yes
- PDNS_ALLOW_AXFR_IPS=127.0.0.1
- PDNS_WEBSERVER=yes
- PDNS_WEBSERVER_ADDRESS=127.0.0.1,156.244.31.209
- PDNS_WEBSERVER_PORT=8081
# MariaDB connection settings
- PDNS_GMYSQL_HOST=127.0.0.1 # MariaDB на localhost хоста
- PDNS_GMYSQL_PORT=3306
- PDNS_GMYSQL_USER=poweruser
- PDNS_GMYSQL_PASSWORD=uFqqXQEQwErjkQga6rcz
- PDNS_GMYSQL_DBNAME=powerdns
- PDNS_GMYSQL_DNSSEC=yes
EOF
```
```sh
cd /opt/powerdnsa &&
sudo docker-compose up -d
```
```sh
cd /opt/powerdnsa &&
sudo docker-compose down
```
Проверяем какие порты открыты:
```sh
sudo netstat -tuln
```
Проверяем что страница работает
```sh
curl -v http://localhost:8081
```
Смотрим что в логе
```sh
sudo docker logs powerdns
```
```sh
curl -H "X-API-Key: 0aa08433-52a9-4611-9eed-5c5a08a508f0" http://localhost:8081/api/v1
```
пробуем добавить тестовую зону по ключу
```sh
curl -X POST -H "X-API-Key: 0aa08433-52a9-4611-9eed-5c5a08a508f0" \
-H "Content-Type: application/json" \
-d '{"name": "localhost.", "kind": "Master", "dnssec": false, "soa_edit": "", "soa_edit_api": "DEFAULT"}' \
http://localhost:8081/api/v1/servers/localhost/zones
```
Инициализируем базу данных так как сам контейнер её не создаёт Инициализируем базу данных так как сам контейнер её не создаёт
```sh ```sh
sudo apt install sqlite3 -y sudo apt install sqlite3 -y
@ -34,7 +129,7 @@ sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 ".databases"
Create database structure Create database structure
```sql ```sql
sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 <<EOF sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 <<'EOF'
PRAGMA foreign_keys = 1; PRAGMA foreign_keys = 1;
@ -147,7 +242,7 @@ sudo chmod -R 777 /opt/powerdnsa/data
```sh ```sh
cd /opt/powerdnsa cd /opt/powerdnsa
sudo tee docker-compose.yml > /dev/null <<EOF sudo tee docker-compose.yml > /dev/null <<'EOF'
services: services:
powerdns: powerdns:
image: powerdns/pdns-auth-48 image: powerdns/pdns-auth-48

View File

@ -1,3 +1,3 @@
# Ubuntu_docs # Ubuntu_docs
Установка различных программ в Ubuntu Установка различных программ в Ubuntu

View File

@ -1,159 +1,159 @@
**************************************************************************************************** ****************************************************************************************************
Установка TomCat на Ubuntu 23.04 по руководству из https://www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804 Установка TomCat на Ubuntu 23.04 по руководству из https://www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804
```sh ```sh
ssh administrator@10.101.1.3 -p 22 ssh administrator@10.101.1.3 -p 22
``` ```
Обновляем пакеты: Обновляем пакеты:
```sh ```sh
sudo apt-get update sudo apt-get update
``` ```
Устанавливаем Java Development Kit 8 (не ниже 8й версии) (так старая установиться: sudo apt-get install default-jdk) Устанавливаем Java Development Kit 8 (не ниже 8й версии) (так старая установиться: sudo apt-get install default-jdk)
```sh ```sh
sudo apt install openjdk-21-jdk openjdk-21-jre -y && sudo apt install openjdk-21-jdk openjdk-21-jre -y &&
java -version java -version
``` ```
Создаём группу для томкат пользователя: Создаём группу для томкат пользователя:
```sh ```sh
sudo groupadd tomcat sudo groupadd tomcat
``` ```
Создаём пользователя: Создаём пользователя:
```sh ```sh
sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
``` ```
Скачиваю tomcat: Скачиваю tomcat:
```sh ```sh
cd /tmp && cd /tmp &&
curl -O https://archive.apache.org/dist/tomcat/tomcat-10/v10.1.30/bin/apache-tomcat-10.1.30.tar.gz curl -O https://archive.apache.org/dist/tomcat/tomcat-10/v10.1.30/bin/apache-tomcat-10.1.30.tar.gz
``` ```
Извлекаю tomcat: Извлекаю tomcat:
```sh ```sh
sudo mkdir /opt/tomcat && sudo mkdir /opt/tomcat &&
sudo tar xzvf apache-tomcat-10*.tar.gz -C /opt/tomcat --strip-components=1 sudo tar xzvf apache-tomcat-10*.tar.gz -C /opt/tomcat --strip-components=1
``` ```
Обновляю владельца папки: Обновляю владельца папки:
```sh ```sh
cd /opt/tomcat && cd /opt/tomcat &&
sudo chown tomcat:tomcat -R /opt/tomcat && sudo chown tomcat:tomcat -R /opt/tomcat &&
sudo chgrp -R tomcat /opt/tomcat && sudo chgrp -R tomcat /opt/tomcat &&
sudo chmod -R g+r conf && sudo chmod -R g+r conf &&
sudo chmod g+x conf && sudo chmod g+x conf &&
sudo chown -R tomcat webapps/ work/ temp/ logs/ sudo chown -R tomcat webapps/ work/ temp/ logs/
``` ```
Указываем где находится java: Указываем где находится java:
```sh ```sh
sudo update-java-alternatives -l sudo update-java-alternatives -l
Выдаст: /usr/lib/jvm/java-1.21.0-openjdk-amd64 Выдаст: /usr/lib/jvm/java-1.21.0-openjdk-amd64
sudo mcedit /etc/environment sudo mcedit /etc/environment
Записать: JAVA_HOME="/usr/lib/jvm/java-1.21.0-openjdk-amd64" Записать: JAVA_HOME="/usr/lib/jvm/java-1.21.0-openjdk-amd64"
echo $JAVA_HOME echo $JAVA_HOME
``` ```
Пропишу на всяк случай и $CATALINA_HOME (не обязательно) Пропишу на всяк случай и $CATALINA_HOME (не обязательно)
```sh ```sh
sudo mcedit /etc/environment sudo mcedit /etc/environment
Записать: CATALINA_HOME="/opt/tomcat" Записать: CATALINA_HOME="/opt/tomcat"
echo $CATALINA_HOME echo $CATALINA_HOME
``` ```
Создаём сервис для автозапуска в Ubuntu 16: https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04): Создаём сервис для автозапуска в Ubuntu 16: https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04):
```sh ```sh
sudo mcedit /etc/systemd/system/tomcat.service sudo mcedit /etc/systemd/system/tomcat.service
``` ```
И записываем в него следующее содержимое: И записываем в него следующее содержимое:
```conf ```conf
[Unit] [Unit]
Description=Apache Tomcat Web Application Container Description=Apache Tomcat Web Application Container
After=network.target After=network.target
[Service] [Service]
Type=forking Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-1.21.0-openjdk-amd64 Environment=JAVA_HOME=/usr/lib/jvm/java-1.21.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat User=tomcat
Group=tomcat Group=tomcat
UMask=0007 UMask=0007
RestartSec=10 RestartSec=10
Restart=always Restart=always
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
``` ```
Затем: Затем:
```sh ```sh
sudo systemctl daemon-reload && sudo systemctl daemon-reload &&
sudo systemctl start tomcat && sudo systemctl start tomcat &&
sudo systemctl status tomcat sudo systemctl status tomcat
``` ```
Для автозапуска сервиса томката выполнить команду: Для автозапуска сервиса томката выполнить команду:
```sh ```sh
sudo systemctl enable tomcat sudo systemctl enable tomcat
``` ```
Разрешаем порт в фаерволе: Разрешаем порт в фаерволе:
```sh ```sh
sudo ufw allow 8080 sudo ufw allow 8080
``` ```
Для использования менеджера веб. приложений томката настраиваем пользователя: Для использования менеджера веб. приложений томката настраиваем пользователя:
```sh ```sh
sudo mcedit /opt/tomcat/conf/tomcat-users.xml sudo mcedit /opt/tomcat/conf/tomcat-users.xml
``` ```
В этот файл добавить роли в раздел <tomcat-users>...</tomcat-users> запихнуть: В этот файл добавить роли в раздел <tomcat-users>...</tomcat-users> запихнуть:
```xml ```xml
<role rolename="tomcat"/> <role rolename="tomcat"/>
<role rolename="manager-gui"/> <role rolename="manager-gui"/>
<role rolename="manager-script"/> <role rolename="manager-script"/>
<role rolename="manager"/> <role rolename="manager"/>
<role rolename="admin-gui"/> <role rolename="admin-gui"/>
<role rolename="admin"/> <role rolename="admin"/>
<user username="tomcat" password="igareb0s" roles="admin-gui, tomcat, manager-gui, manager-script, manager,admin"/> <user username="tomcat" password="igareb0s" roles="admin-gui, tomcat, manager-gui, manager-script, manager,admin"/>
``` ```
Также закоментить содержимое тега Context в sudo mcedit $CATALINA_HOME/webapps/manager/META-INF/context.xml см.: http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Configuring_Manager_Application_Access Также закоментить содержимое тега Context в sudo mcedit $CATALINA_HOME/webapps/manager/META-INF/context.xml см.: http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Configuring_Manager_Application_Access
```xml ```xml
<Context antiResourceLocking="false" privileged="true" > <Context antiResourceLocking="false" privileged="true" >
<!--<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />--> <!--<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
</Context> </Context>
``` ```
Для того чтобы поменять порт на 80 нужно в: sudo mcedit /opt/tomcat/conf/server.xml Для того чтобы поменять порт на 80 нужно в: sudo mcedit /opt/tomcat/conf/server.xml
```xml ```xml
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/> <Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>
``` ```
Также при помощи authbind разрешить не-root программе быть назначенными младшим портам: Также при помощи authbind разрешить не-root программе быть назначенными младшим портам:
```sh ```sh
sudo apt-get install authbind && sudo apt-get install authbind &&
sudo touch /etc/authbind/byport/80 && sudo touch /etc/authbind/byport/80 &&
sudo chmod 500 /etc/authbind/byport/80 && sudo chmod 500 /etc/authbind/byport/80 &&
sudo chown tomcat /etc/authbind/byport/80 sudo chown tomcat /etc/authbind/byport/80
``` ```
Создать файл $CATALINA_HOME/bin/setenv.sh и добавить строку: Создать файл $CATALINA_HOME/bin/setenv.sh и добавить строку:
```conf ```conf
CATALINA_OPTS="-Djava.net.preferIPv4Stack=true" CATALINA_OPTS="-Djava.net.preferIPv4Stack=true"
AUTHBIND=yes AUTHBIND=yes
``` ```
Также заменить в $CATALINA_HOME/bin/startup.sh заменить: exec "$PRGDIR"/"$EXECUTABLE" start "$@" на Также заменить в $CATALINA_HOME/bin/startup.sh заменить: exec "$PRGDIR"/"$EXECUTABLE" start "$@" на
```conf ```conf
exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@" exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
``` ```
Так как размер WAR архива может быть большим чем 52428800 байт то в файле sudo mcedit /opt/tomcat/webapps/manager/WEB-INF/web.xml увеличиваем параметр "max-file-size" до 100000000 байт. Так как размер WAR архива может быть большим чем 52428800 байт то в файле sudo mcedit /opt/tomcat/webapps/manager/WEB-INF/web.xml увеличиваем параметр "max-file-size" до 100000000 байт.
Перезагружаю томкат: Перезагружаю томкат:
```sh ```sh
sudo service tomcat restart sudo service tomcat restart
``` ```
Останавливаю томкат: Останавливаю томкат:
```sh ```sh
sudo service tomcat stop sudo service tomcat stop
``` ```
Теперь можно запускать WEB интерфейс и деплоить проект: Теперь можно запускать WEB интерфейс и деплоить проект:
```sh ```sh
start http://91.215.138.115:8090 start http://91.215.138.115:8090
``` ```

357
Traefik_install.md Normal file
View File

@ -0,0 +1,357 @@
Открываю нужный сервер
```sh
wsl
```
Или такой:
```sh
ssh igor@192.168.200.85 -p 22
```
# Установка Traefik на Linux Mint / Ubuntu
## 📥 Шаг 1. Установка зависимостей
Убедитесь, что установлены `wget` и `systemd`:
```sh
sudo apt update &&
sudo apt install wget
```
---
## 📥 Шаг 2. Скачать последнюю версию Traefik
Проверь актуальную версию на: [Traefik Releases](https://github.com/traefik/traefik/releases)
Пример для версии `v3.0.0`:
```bash
cd ~ &&
wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_linux_amd64.tar.gz
```
---
## 📥 Шаг 3. Распаковка и установка
```bash
cd ~ &&
tar -xvzf traefik_v3.3.4_linux_amd64.tar.gz &&
sudo mv traefik /usr/local/bin/
```
Проверь версию:
```bash
traefik version
```
---
## 📁 Шаг 4. Создание директории и базового конфига
```sh
sudo mkdir -p /etc/traefik &&
cd /etc/traefik
```
### Пример `traefik.yml`
```sh
cd /etc/traefik &&
sudo tee /etc/traefik/traefik.yml > /dev/null <<'EOF'
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
websecure:
address: ":443"
traefik:
address: ":8080"
api:
dashboard: true
insecure: true
providers:
file:
filename: "/etc/traefik/dynamic.yml"
# Настройка сертификатов (пример с Let's Encrypt)
certificatesResolvers:
myresolver:
acme:
email: "your-email@example.com"
storage: "/etc/traefik/acme.json"
httpChallenge:
entryPoint: web
log:
level: DEBUG
EOF
```
### Пример `dynamic.yml`
```sh
cd /etc/traefik &&
sudo tee /etc/traefik/dynamic.yml > /dev/null <<'EOF'
http:
routers:
dashboard:
entryPoints:
- traefik
rule: "Host(`localhost`)"
service: api@internal
ccalm-api-auth:
rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
service: org_ccalm_api_authorization_v02
entryPoints:
- websecure
tls:
certresolver: myresolver
middlewares:
- strip-auth-prefix
ccalm-dbms:
rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
service: org_ccalm_dbms_v09
entryPoints:
- websecure
tls:
certresolver: myresolver
middlewares:
- strip-dbms-prefix
ccalm-login:
rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
service: org_ccalm_login_v01
entryPoints:
- websecure
tls:
certresolver: myresolver
ccalm-default:
rule: "Host(`ccalm.test`)"
service: org_ccalm
entryPoints:
- websecure
tls:
certresolver: myresolver
powerdns:
rule: "Host(`powerdns.local`)"
service: local_powerdns
entryPoints:
- websecure
tls: {}
middlewares:
strip-auth-prefix:
stripPrefix:
prefixes:
- "/api/authorization/v02"
strip-dbms-prefix:
stripPrefix:
prefixes:
- "/api/dbms/v09"
services:
# Бэкенд для local_powerdns
local_powerdns:
loadBalancer:
servers:
- url: "http://192.168.200.85:9191"
healthCheck:
path: "/"
interval: "5s"
# Бэкенд для org_ccalm_api_authorization_v02 (HTTPS с отключенной проверкой SSL)
org_ccalm_api_authorization_v02:
loadBalancer:
servers:
- url: "https://192.168.200.184:8082"
serversTransport: insecureTransport # Ссылка на транспорт с отключенной проверкой
healthCheck:
path: "/"
interval: "5s"
# Бэкенд для org_ccalm_dbms_v09 (HTTPS с отключенной проверкой SSL)
org_ccalm_dbms_v09:
loadBalancer:
servers:
- url: "https://192.168.200.184:8084"
serversTransport: insecureTransport
healthCheck:
path: "/"
interval: "5s"
# Бэкенд для org_ccalm_login_v01 (HTTP, без SSL)
org_ccalm_login_v01:
loadBalancer:
servers:
- url: "http://192.168.200.184:3000"
healthCheck:
path: "/"
interval: "5s"
# Бэкенд по умолчанию org_ccalm (HTTPS с отключенной проверкой SSL)
org_ccalm:
loadBalancer:
servers:
- url: "https://192.168.200.184:8083"
serversTransport: insecureTransport
healthCheck:
path: "/"
interval: "5s"
# Определяем транспорт для отключения проверки SSL
serversTransports:
insecureTransport:
insecureSkipVerify: true
# Добавляем сертификаты
tls:
certificates:
- certFile: "/etc/traefik/certs/ccalm.test.crt"
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/wildcard.local.crt"
keyFile: "/etc/traefik/certs/wildcard.local.key"
- certFile: "/etc/traefik/certs/wildcard.test.crt"
keyFile: "/etc/traefik/certs/wildcard.test.key"
EOF
```
Для хранения сертификатов файл:
```sh
sudo touch /etc/traefik/acme.json &&
sudo chmod 600 /etc/traefik/acme.json
```
---
## ⚙️ Шаг 5. Настройка systemd для автозапуска
Создайте файл сервиса:
```sh
cd /etc/systemd/system &&
sudo tee /etc/systemd/system/traefik.service > /dev/null <<'EOF'
[Unit]
Description=Traefik
After=network.target
[Service]
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
```
Примените:
```sh
sudo systemctl daemon-reload &&
sudo systemctl enable traefik &&
sudo systemctl start traefik &&
sudo systemctl status traefik
```
```sh
sudo systemctl restart traefik
```
---
## 🔎 Шаг 6. Проверка работы
Откройте в браузере:
```sh
open http://localhost:8080/dashboard/
```
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.
---
## ✅ Готово!
Traefik установлен, запущен как сервис и готов к работе.
Проверяем какие порты слушает:
```sh
sudo lsof -i -P -n | grep traefik
```
```sh
sudo journalctl -u traefik -f
```
---
## 🐳 Как вариант можно установить через Docker
Если 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
```
```sh
sudo mkdir -p /opt/traefik
cd /opt/traefik
```
```sh
cd /opt/traefik &&
sudo tee docker-compose.yml > /dev/null <<'EOF'
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "8080:8080" # Dashboard
volumes:
- /etc/traefik:/etc/traefik
- /var/run/docker.sock:/var/run/docker.sock:ro
command:
- "--configFile=/etc/traefik/traefik.yml"
networks:
- traefik-net
networks:
traefik-net:
driver: bridge
EOF
```
## Запуск контейнера
```sh
cd /opt/traefik &&
sudo docker-compose up -d
```
```sh
cd /opt/traefik &&
sudo docker-compose down
```
Откройте в браузере:
```sh
open http://192.168.200.85:8080/dashboard/
```
```sh
sudo docker logs traefik
```

285
Traefik_install_CCALM.md Normal file
View File

@ -0,0 +1,285 @@
# Устанавливаю Traefik на туречский сервер
```sh
ssh igor@156.244.31.209 -p 2200
```
# Установка Traefik на Linux Mint / Ubuntu
## 📥 Шаг 1. Установка зависимостей
Убедитесь, что установлены `wget` и `systemd`:
```sh
sudo apt update &&
sudo apt install wget
```
---
## 📥 Шаг 2. Скачать последнюю версию Traefik
Проверь актуальную версию на: [Traefik Releases](https://github.com/traefik/traefik/releases)
Пример для версии `v3.0.0`:sudo mc
```sh
cd ~ &&
wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_linux_amd64.tar.gz
```
---
## 📥 Шаг 3. Распаковка и установка
```sh
cd ~ &&
tar -xvzf traefik_v3.3.4_linux_amd64.tar.gz &&
sudo mv traefik /usr/local/bin/
```
Проверь версию:
```sh
traefik version
```
```conf
Version: 3.3.4
Codename: saintnectaire
Go version: go1.23.6
Built: 2025-02-25T10:11:01Z
OS/Arch: linux/amd64
```
---
## 📁 Шаг 4. Создание директории и базового конфига
```sh
sudo mkdir -p /etc/traefik &&
cd /etc/traefik
```
### Пример `traefik.yml`
```sh
cd /etc/traefik &&
sudo tee /etc/traefik/traefik.yml > /dev/null <<'EOF'
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
websecure:
address: ":443"
traefik:
address: ":8080"
api:
dashboard: true
insecure: true
providers:
file:
filename: "/etc/traefik/dynamic.yml"
# Настройка сертификатов (пример с Let's Encrypt)
certificatesResolvers:
myresolver:
acme:
email: "irigm@mail.ru"
storage: "/etc/traefik/acme.json"
httpChallenge:
entryPoint: web
log:
level: DEBUG
EOF
```
### Пример `dynamic.yml`
```sh
cd /etc/traefik &&
sudo tee /etc/traefik/dynamic.yml > /dev/null <<'EOF'
http:
routers:
dashboard:
entryPoints:
- traefik
rule: "Host(`localhost`)"
service: api@internal
geovizor-api-zones:
rule: "Host(`geovizor.top`) && PathPrefix(`/api/v1/servers/localhost/zones/`)"
service: top_geovizor_api_zones_v01
entryPoints:
- websecure
tls:
certresolver: myresolver
geovizor-default:
rule: "Host(`geovizor.top`)"
service: top_geovizor_default
entryPoints:
- websecure
tls:
certresolver: myresolver
services:
top_geovizor_api_zones_v01:
loadBalancer:
servers:
- url: "http://156.244.31.209:8081"
healthCheck:
path: "/"
interval: "5s"
# Бэкенд по умолчанию top_geovizor
top_geovizor_default:
loadBalancer:
servers:
- url: "http://127.0.0.1:8082"
healthCheck:
path: "/"
interval: "5s"
# Определяем транспорт для отключения проверки SSL
serversTransports:
insecureTransport:
insecureSkipVerify: true
# Добавляем сертификаты
tls:
certificates:
EOF
```
Для хранения сертификатов файл:
```sh
sudo touch /etc/traefik/acme.json &&
sudo chmod 600 /etc/traefik/acme.json
```
---
## ⚙️ Шаг 5. Настройка systemd для автозапуска
Создайте файл сервиса:
```sh
cd /etc/systemd/system &&
sudo tee /etc/systemd/system/traefik.service > /dev/null <<'EOF'
[Unit]
Description=Traefik
After=network.target
[Service]
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
```
Примените:
```sh
sudo systemctl daemon-reload &&
sudo systemctl enable traefik &&
sudo systemctl start traefik &&
sudo systemctl status traefik
```
```sh
sudo systemctl restart traefik
```
---
## 🔎 Шаг 6. Проверка работы
Откройте в браузере:
```sh
open http://localhost:8080/dashboard/
```
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.
---
## ✅ Готово!
Traefik установлен, запущен как сервис и готов к работе.
Проверяем какие порты слушает:
```sh
sudo lsof -i -P -n | grep traefik
```
```sh
sudo journalctl -u traefik -f
```
---
## 🐳 Как вариант можно установить через Docker
Если 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
```
```sh
sudo mkdir -p /opt/traefik
cd /opt/traefik
```
```sh
cd /opt/traefik &&
sudo tee docker-compose.yml > /dev/null <<'EOF'
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "8080:8080" # Dashboard
volumes:
- /etc/traefik:/etc/traefik
- /var/run/docker.sock:/var/run/docker.sock:ro
command:
- "--configFile=/etc/traefik/traefik.yml"
networks:
- traefik-net
networks:
traefik-net:
driver: bridge
EOF
```
## Запуск контейнера
```sh
cd /opt/traefik &&
sudo docker-compose up -d
```
```sh
cd /opt/traefik &&
sudo docker-compose down
```
Откройте в браузере:
```sh
open http://192.168.200.85:8080/dashboard/
```
```sh
sudo docker logs traefik
```

6975
Ubuntu.md

File diff suppressed because it is too large Load Diff

94
Unbound_install.md Normal file
View File

@ -0,0 +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
```

View File

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

View File

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

View File

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