+
This commit is contained in:
16
.idea/Ubuntu.iml
generated
16
.idea/Ubuntu.iml
generated
@ -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
10
.idea/misc.xml
generated
@ -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
14
.idea/modules.xml
generated
@ -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
10
.idea/vcs.xml
generated
@ -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
102
.idea/workspace.xml
generated
@ -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">{
|
||||||
"associatedIndex": 2
|
"associatedIndex": 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
129
Certificates_config.md
Normal 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
11
ChatGPT_install.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Не стал устанавливать буду использовать WEB версию
|
||||||
|
|
||||||
|
Устанавливаем недостающие пакеты:
|
||||||
|
```sh
|
||||||
|
apt search libwebkit2gtk
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt update &&
|
||||||
|
sudo apt install libwebkit2gtk-4.1-dev -y
|
||||||
|
```
|
||||||
216
Dahy_install.md
216
Dahy_install.md
@ -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
38
Docker_install.md
Normal 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
|
||||||
|
```
|
||||||
@ -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`). 🚀
|
||||||
|
|||||||
@ -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 сертификат Let’s Encrypt для HAPROXY
|
|
||||||
****************************************************************************************************
|
И теперь должно открываться но адресу: http://data.ccalm.org:8989/
|
||||||
Бесплатный SSL сертификат Let’s 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 сертификат Let’s Encrypt для HAPROXY
|
||||||
````
|
****************************************************************************************************
|
||||||
Для удаления PPA нужно выполнить:
|
Бесплатный SSL сертификат Let’s 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
|
||||||
|
|||||||
144
HTTPTunnel.md
144
HTTPTunnel.md
@ -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
|
||||||
```
|
```
|
||||||
@ -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 установлен и готов к использованию! 🚀
|
||||||
|
|
||||||
|
|||||||
@ -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 🚀
|
||||||
|
|
||||||
|
|||||||
@ -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 system’s sources.list:
|
Next, add the Jenkins repository to your system’s 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
412
POSTFIX_DOVECOT_install.md
Normal 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
|
||||||
|
```
|
||||||
@ -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!
|
||||||
|
|||||||
@ -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
|
||||||
@ -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();
|
||||||
|
|
||||||
Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора):
|
Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора):
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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**
|
||||||
|
|
||||||
Готово! 🎉
|
Готово! 🎉
|
||||||
|
|
||||||
|
|||||||
1213
PowerDNS_install.md
1213
PowerDNS_install.md
File diff suppressed because it is too large
Load Diff
145
PowerDNS_install_MarinaDB.md
Normal file
145
PowerDNS_install_MarinaDB.md
Normal 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
|
||||||
|
```
|
||||||
25
PowerDNS_install_PostgreSQL.md
Normal file
25
PowerDNS_install_PostgreSQL.md
Normal 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
133
PowerDNS_install_SQIite3.md
Normal 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/
|
||||||
@ -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
|
||||||
@ -1,3 +1,3 @@
|
|||||||
# Ubuntu_docs
|
# Ubuntu_docs
|
||||||
|
|
||||||
Установка различных программ в Ubuntu
|
Установка различных программ в Ubuntu
|
||||||
@ -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
357
Traefik_install.md
Normal 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
285
Traefik_install_CCALM.md
Normal 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
|
||||||
|
```
|
||||||
94
Unbound_install.md
Normal file
94
Unbound_install.md
Normal 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
|
||||||
|
```
|
||||||
@ -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. 🚀
|
||||||
|
|
||||||
|
|||||||
@ -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=Привет из консоли!"
|
||||||
```
|
```
|
||||||
|
|||||||
@ -1,341 +1,341 @@
|
|||||||
Here’s a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly:
|
Here’s 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 RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html).
|
For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## **Step 10: Setup Monitoring (Optional)**
|
## **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 :)
|
||||||
|
|||||||
Reference in New Issue
Block a user