From 584960dd14b562fb7c26be3fa6ddfa888900abdc Mon Sep 17 00:00:00 2001 From: igor Date: Mon, 7 Apr 2025 07:46:21 +0500 Subject: [PATCH] + --- .idea/Ubuntu.iml | 16 +- .idea/misc.xml | 10 +- .idea/modules.xml | 14 +- .idea/vcs.xml | 10 +- .idea/workspace.xml | 102 +- Certificates_config.md | 129 + ChatGPT_install.md | 11 + Dahy_install.md | 216 +- Docker_install.md | 38 + Gotify_install.md | 276 +- HAProxy_install.md | 509 +- HTTPTunnel.md | 144 +- HashiCorp_Vault_install.md | 722 +- HashiCorp_Vault_install_windows.md | 272 +- Jenkins_install.md | 172 +- POSTFIX_DOVECOT_install.md | 412 + Portainer_io_install.md | 142 +- PostgreSQL_Exporter.md | 280 +- PostgreSQL_credcheck.md | 122 +- PostgreSQL_install.md | 641 +- PostgreSQL_replication.md | 24 +- PostgreSQL_replication_synchronous.md | 274 +- PowerDNS_install.md | 1213 ++- PowerDNS_install_MarinaDB.md | 145 + PowerDNS_install_PostgreSQL.md | 25 + PowerDNS_install_SQIite3.md | 133 + ...er_install.md => PowerDNS_install_doker.md | 101 +- README.md | 4 +- Tomcat_install.md | 316 +- Traefik_install.md | 357 + Traefik_install_CCALM.md | 285 + Ubuntu.md | 6975 ++++++++--------- Unbound_install.md | 94 + Uptime_Kuma_install.md | 132 +- Zulip_install.md | 76 +- rabbitmq_replication_setup_instructions.md | 682 +- 36 files changed, 8203 insertions(+), 6871 deletions(-) create mode 100644 Certificates_config.md create mode 100644 ChatGPT_install.md create mode 100644 Docker_install.md create mode 100644 POSTFIX_DOVECOT_install.md create mode 100644 PowerDNS_install_MarinaDB.md create mode 100644 PowerDNS_install_PostgreSQL.md create mode 100644 PowerDNS_install_SQIite3.md rename PowerDNS_doker_install.md => PowerDNS_install_doker.md (74%) create mode 100644 Traefik_install.md create mode 100644 Traefik_install_CCALM.md create mode 100644 Unbound_install.md diff --git a/.idea/Ubuntu.iml b/.idea/Ubuntu.iml index d6ebd48..18ec59d 100644 --- a/.idea/Ubuntu.iml +++ b/.idea/Ubuntu.iml @@ -1,9 +1,9 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 6f29fee..d83b546 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 8a2e80f..1f07855 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -1,8 +1,8 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..c8397c9 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index dbd1cdb..9c22c11 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,26 +1,26 @@ - - - - - - - - - + + + + + + + + + { "associatedIndex": 2 -} - - - +} + + + - - - - - - - - - - - 1739593846366 - - - - - +}]]> + + + + + + + + + + + 1739593846366 + + + + + \ No newline at end of file diff --git a/Certificates_config.md b/Certificates_config.md new file mode 100644 index 0000000..13eb01e --- /dev/null +++ b/Certificates_config.md @@ -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 +``` \ No newline at end of file diff --git a/ChatGPT_install.md b/ChatGPT_install.md new file mode 100644 index 0000000..08951a3 --- /dev/null +++ b/ChatGPT_install.md @@ -0,0 +1,11 @@ +Не стал устанавливать буду использовать WEB версию + +Устанавливаем недостающие пакеты: +```sh + apt search libwebkit2gtk +``` + +```sh + sudo apt update && + sudo apt install libwebkit2gtk-4.1-dev -y +``` \ No newline at end of file diff --git a/Dahy_install.md b/Dahy_install.md index feaafb3..12edc35 100644 --- a/Dahy_install.md +++ b/Dahy_install.md @@ -1,108 +1,108 @@ -# Устанавливаем дашборд Dashy на сервер - -
- Dashy -

Dashy — это открытый (open-source) дашборд для удобного управления и организации ссылок на сервисы, приложения и веб-ресурсы. Он предназначен для домашнего использования (Home Lab) и DevOps-окружений.

-
- - -## 2. Подключаемся к нужному серверу -```sh -ssh igor@192.168.200.84 -p 22 -``` - -## 3. Создаём директории -```sh - sudo mkdir -p /opt/dashy && - sudo mkdir -p /opt/dashy/data && - sudo chmod -R 777 /opt/dashy && - sudo chown -R $USER:$USER /opt/dashy -``` - -Создаём файл конфигурации -```sh -cd /opt/dashy/data && -tee conf.yml > /dev/null < docker-compose.yml < + Dashy +

Dashy — это открытый (open-source) дашборд для удобного управления и организации ссылок на сервисы, приложения и веб-ресурсы. Он предназначен для домашнего использования (Home Lab) и DevOps-окружений.

+ + + +## 2. Подключаемся к нужному серверу +```sh +ssh igor@192.168.200.84 -p 22 +``` + +## 3. Создаём директории +```sh + sudo mkdir -p /opt/dashy && + sudo mkdir -p /opt/dashy/data && + sudo chmod -R 777 /opt/dashy && + sudo chown -R $USER:$USER /opt/dashy +``` + +Создаём файл конфигурации +```sh +cd /opt/dashy/data && +tee conf.yml > /dev/null <<'EOF' +pageInfo: + title: Home Lab +sections: # An array of sections +- name: Example Section + icon: far fa-rocket + items: + - title: GitHub + description: Dashy source code and docs + icon: fab fa-github + url: https://github.com/Lissy93/dashy + - title: Issues + description: View open issues, or raise a new one + icon: fas fa-bug + url: https://github.com/Lissy93/dashy/issues +- name: Local Services + items: + - title: ProxMox + icon: https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/images/logo.png + url: https://192.168.200.80:8006 + - title: Grafana + icon: https://static-00.iconduck.com/assets.00/grafana-icon-942x1024-18c9p0yp.png + url: http://192.168.200.84:3000 + - title: Uptime-kuma + icon: https://raw.githubusercontent.com/louislam/uptime-kuma/b45dc6787db6530e8dda1388a37e8a80683da5a8/public/icon.svg + url: http://192.168.200.84:3001 + - title: Gotify + icon: https://192.168.200.84:8080/static/defaultapp.png + url: https://192.168.200.84:8080 + - title: portainer.io + icon: https://icon.icepanel.io/Technology/svg/Portainer.svg + url: https://192.168.200.84:9443 + - title: Prometheus + icon: https://static-00.iconduck.com/assets.00/prometheus-icon-511x512-1vmxbcxr.png + url: http://192.168.200.84:9090 +- name: PowerDNS + items: + - title: PowerDNS-Admin + icon: https://avatars.githubusercontent.com/u/1282630?s=200&v=4 + url: http://192.168.200.85:9191 + +EOF +``` + +```sh +sudo chmod 666 /opt/dashy/data/conf.yml +``` + +## 3. Создаём файл и записываем настройки: + +```sh +cd /opt/dashy && +cat > docker-compose.yml <<'EOF' +services: + dashy: + image: lissy93/dashy:latest + container_name: my-dashboard + ports: + - "3002:8080" + volumes: + - /opt/dashy/data/conf.yml:/app/user-data/conf.yml + restart: always +EOF +``` + +## 4. Запуск контейнера +```sh + cd /opt/dashy && + sudo docker-compose up -d +``` +```sh + cd /opt/dashy && + sudo docker-compose down +``` + +```sh + exit +``` +```sh +start http://192.168.200.84:3002 +``` + + + diff --git a/Docker_install.md b/Docker_install.md new file mode 100644 index 0000000..a871695 --- /dev/null +++ b/Docker_install.md @@ -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 +``` \ No newline at end of file diff --git a/Gotify_install.md b/Gotify_install.md index 54c9e9c..bb05b45 100644 --- a/Gotify_install.md +++ b/Gotify_install.md @@ -1,138 +1,138 @@ -# 📌 Установка Gotify в Docker на Ubuntu 24.04 - -## 1. Установка Docker и Docker Compose -Если Docker не установлен, установим его: -```sh - sudo apt update && sudo apt upgrade -y - sudo apt install -y docker.io docker-compose - sudo systemctl enable --now docker -``` -Проверим версию: -```sh - docker --version - docker-compose --version -``` - ----------------------------------------------------------------------------------------------------- - -## 2. Создание директории для Gotify -Лучшее место для сторонних сервисов — `/opt`: -```sh - sudo mkdir -p /opt/gotify - cd /opt/gotify -``` - -## 3. Создаём самоподписанный сертификат -```sh - sudo mkdir -p /opt/gotify/certs && cd /opt/gotify/certs - openssl req -x509 -newkey rsa:4096 -keyout gotify.key -out gotify.crt -days 365 -nodes -subj "/CN=your.domain.com" -``` ----------------------------------------------------------------------------------------------------- - -## 3. Создание `docker-compose.yml` -Создадим конфигурацию: -```sh - sudo mcedit /opt/gotify/docker-compose.yml -``` -Добавляем: -```yaml -services: - gotify: - image: gotify/server - container_name: gotify - restart: unless-stopped - volumes: - - "./certs:/certs" - - "./data:/app/data" - ports: - - "8080:443" # HTTPS - environment: - - GOTIFY_DEFAULTUSER_NAME=admin - - GOTIFY_DEFAULTUSER_PASS=s23uBXreliGIAVOohXhW - - TZ=Asia/Almaty - - GOTIFY_SERVER_SSL_ENABLED=true - - GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt - - GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key - networks: - - gotify-net - -networks: - gotify-net: - driver: bridge -``` -💡 **Что здесь важно?** -- **`security_opt: - no-new-privileges:true`** → запрещает повышать привилегии в контейнере. -- **`volumes: ./data:/app/data`** → сохраняет данные вне контейнера. -- **`restart: unless-stopped`** → перезапускает Gotify, если он внезапно упадёт. -- **`ports: - "8080:80"`** → Gotify будет доступен на порту `8080`. - -🔑 **Замените пароль** (`supersecretpassword`) на свой! - ---- - -## 4. Запуск Gotify -Запускаем контейнер: -```sh - cd /opt/gotify - sudo docker compose down - sudo docker-compose up -d -``` -Проверяем статус: -```sh - sudo docker ps -``` -Вы должны увидеть работающий контейнер `gotify`. - ---- - -## 5. Проверка работы -Открываем браузер и переходим: -👉 **https://192.168.200.84:8080** -👉 **https://gotify.locust.kz:8443** - -Логинимся: -- **Имя**: `admin` -- **Пароль**: тот, что указан в `GOTIFY_DEFAULTUSER_PASS` - ---- - -## 6. Автоматический запуск при загрузке -Docker уже настроен на автозапуск, но проверим: -```sh - sudo systemctl enable --now docker -``` -Чтобы Gotify запускался автоматически: -```sh - cd /opt/gotify - sudo docker-compose restart -``` - ---- - -## 7. Логи и управление -Просмотр логов: -```sh - sudo docker-compose logs -f -``` -Перезапуск контейнера: -```sh - sudo docker-compose restart -``` -Остановка: -```sh - sudo docker-compose down -``` - ---- - -## 8. Удаление Gotify (если потребуется) -```sh - cd /opt/gotify - sudo docker-compose down - sudo rm -rf /opt/gotify -``` - ---- - -## ✅ Готово! -Теперь Gotify работает на порту `80` с безопасными настройками (`no-new-privileges:true`). 🚀 +# 📌 Установка Gotify в Docker на Ubuntu 24.04 + +## 1. Установка Docker и Docker Compose +Если Docker не установлен, установим его: +```sh + sudo apt update && sudo apt upgrade -y + sudo apt install -y docker.io docker-compose + sudo systemctl enable --now docker +``` +Проверим версию: +```sh + docker --version + docker-compose --version +``` + +---------------------------------------------------------------------------------------------------- + +## 2. Создание директории для Gotify +Лучшее место для сторонних сервисов — `/opt`: +```sh + sudo mkdir -p /opt/gotify + cd /opt/gotify +``` + +## 3. Создаём самоподписанный сертификат +```sh + sudo mkdir -p /opt/gotify/certs && cd /opt/gotify/certs + openssl req -x509 -newkey rsa:4096 -keyout gotify.key -out gotify.crt -days 365 -nodes -subj "/CN=your.domain.com" +``` +---------------------------------------------------------------------------------------------------- + +## 3. Создание `docker-compose.yml` +Создадим конфигурацию: +```sh + sudo mcedit /opt/gotify/docker-compose.yml +``` +Добавляем: +```yaml +services: + gotify: + image: gotify/server + container_name: gotify + restart: unless-stopped + volumes: + - "./certs:/certs" + - "./data:/app/data" + ports: + - "8080:443" # HTTPS + environment: + - GOTIFY_DEFAULTUSER_NAME=admin + - GOTIFY_DEFAULTUSER_PASS=s23uBXreliGIAVOohXhW + - TZ=Asia/Almaty + - GOTIFY_SERVER_SSL_ENABLED=true + - GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt + - GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key + networks: + - gotify-net + +networks: + gotify-net: + driver: bridge +``` +💡 **Что здесь важно?** +- **`security_opt: - no-new-privileges:true`** → запрещает повышать привилегии в контейнере. +- **`volumes: ./data:/app/data`** → сохраняет данные вне контейнера. +- **`restart: unless-stopped`** → перезапускает Gotify, если он внезапно упадёт. +- **`ports: - "8080:80"`** → Gotify будет доступен на порту `8080`. + +🔑 **Замените пароль** (`supersecretpassword`) на свой! + +--- + +## 4. Запуск Gotify +Запускаем контейнер: +```sh + cd /opt/gotify + sudo docker compose down + sudo docker-compose up -d +``` +Проверяем статус: +```sh + sudo docker ps +``` +Вы должны увидеть работающий контейнер `gotify`. + +--- + +## 5. Проверка работы +Открываем браузер и переходим: +👉 **https://192.168.200.84:8080** +👉 **https://gotify.locust.kz:8443** + +Логинимся: +- **Имя**: `admin` +- **Пароль**: тот, что указан в `GOTIFY_DEFAULTUSER_PASS` + +--- + +## 6. Автоматический запуск при загрузке +Docker уже настроен на автозапуск, но проверим: +```sh + sudo systemctl enable --now docker +``` +Чтобы Gotify запускался автоматически: +```sh + cd /opt/gotify + sudo docker-compose restart +``` + +--- + +## 7. Логи и управление +Просмотр логов: +```sh + sudo docker-compose logs -f +``` +Перезапуск контейнера: +```sh + sudo docker-compose restart +``` +Остановка: +```sh + sudo docker-compose down +``` + +--- + +## 8. Удаление Gotify (если потребуется) +```sh + cd /opt/gotify + sudo docker-compose down + sudo rm -rf /opt/gotify +``` + +--- + +## ✅ Готово! +Теперь Gotify работает на порту `80` с безопасными настройками (`no-new-privileges:true`). 🚀 diff --git a/HAProxy_install.md b/HAProxy_install.md index 0b2408b..f808aa4 100644 --- a/HAProxy_install.md +++ b/HAProxy_install.md @@ -1,252 +1,257 @@ -# 📌 Установка HAProxy на Ubuntu 20.04 -**************************************************************************************************** -На основе инструкции из https://itsecforu.ru/2019/07/15/⏳-настройка-балансировщика-нагрузки-h/ - -Connect to the required server: -```sh -ssh administrator@10.101.1.3 -p 22 -``` - -```sh - sudo apt-get update && sudo apt-get install haproxy -y -```` -Создаём резервную копию файла: -```sh -sudo cp /etc/haproxy/haproxy.cfg{,.bak} -```` -Редактируем конфигурацию (Описание конфигурационного файла HAProxy https://habr.com/ru/sandbox/34354/) -```sh - mcedit /etc/haproxy/haproxy.cfg -``` -В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов): - -frontend frontend-http -bind *:80 -mode http - - # ACL для определения запросов на проверку Let's Encrypt - acl is_certbot path_beg /.well-known/acme-challenge/ - - # Если это не запрос Let's Encrypt, перенаправляем на HTTPS - http-request redirect scheme https code 301 unless is_certbot - - # Отправляем запросы Let's Encrypt на backend-certbot - use_backend backend-certbot if is_certbot - - frontend LOADBALANCER-01 - bind *:80 - bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem crt /etc/ssl/certs/bigfoottrade_kz.pem - mode http #режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика - option httpclose #Закрывает пассивные соединения - - http-request set-header x-Forwarded-for %[src] - http-request set-header x-Forwarded-uri %[url] - - acl v_geoserver2 hdr(host) -i geoserver2.ccalm.org - use_backend geoserver2_ccalm_org if v_geoserver2 - - #Если различные нестандартные порты то так - acl v_locust_kz hdr_reg(host) -i ^locust\.kz(:.*)?$ - use_backend b_locust_kz if v_locust_kz - - #Перенаправление одной страницы по адресу http://geoserver2.ccalm.org/data/ на другой backend - acl v_geo_data hdr(host) -i geoserver2.ccalm.org/data - use_backend WEBSERVERS-01 if v_geo_data - - - default_backend WEBSERVERS-01 - - backend WEBSERVERS-01 - balance roundrobin - server web10 127.0.0.1:8081 check inter 5s ssl verify none - option httpchk - - backend geoserver2_ccalm_org - balance roundrobin - server web1 192.168.0.90:80 check - option httpchk - - listen stats - bind *:8989 - stats enable - stats uri / - stats realm Haproxy\ Statistics - stats auth igor:i123456 - -frontend f-RabbitMQ -mode tcp -bind 10.1.7.73:21000 -default_backend b-RabbitMQ - -backend b-RabbitMQ -mode tcp -server srv1 10.10.16.21:20000 - -Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx - -Для использования SSL и перенаправляние по обычному сокету для начала нужно настроить pem файл объеденив crt и key (и незабыть изменить порт Apache с 433) -cat /etc/ssl/certs/bigfoottrade_kz.crt /etc/ssl/certs/bigfoottrade_kz_ca.crt /etc/ssl/private/bigfoottrade_kz.key > /etc/haproxy/ssl/bigfoottrade_kz.pem -cat AAA_Certificate_Services.crt GoGetSSL_RSA_DV_CA.crt istransit_kz.crt istransit_kz.key > istransit_kz.pem - - SSLCertificateFile - SSLCertificateKeyFile - -Для включения WEB статистики на 9000 порту добавить в конец конфигурации: -listen stats -bind *:8989 -stats enable -stats uri /stats -stats realm Haproxy\ Statistics -stats auth igor:i123456 -Тестирую файл конфигурации: -```sh - haproxy -f /etc/haproxy/haproxy.cfg -c -```` -Также можно в журнале посмотреть что написал HAProxy: -```sh - sudo journalctl -u haproxy --no-pager | tail -n 50 -```` -Перезагружаем: -```sh - sudo systemctl restart haproxy -```` - -Посмотреть что в журнале можно так: -Посмотреть что в журнале можно так: -```sh - journalctl -u haproxy --since "1 minutes ago" - journalctl -u haproxy --since "30 minutes ago" | grep "backend" - tail -f /var/log/haproxy.log -``` - - - -administrator@app:~$ journalctl -u haproxy --since "30 minutes ago" | grep "backend" -backend 'transit_acquiring_v01_kz' has no server available! -backend 'transit_translation_v02_kz' has no server available! -backend 'transit_mobile_kz' has no server available! -backend 'transit_manager_kz' has no server available! -backend 'transit_warehouse_kz' has no server available! -backend 'transit_kgd_kz' has no server available! -backend 'transit_monitoring_kz' has no server available! - - - - - - - -И теперь должно открываться но адресу: http://data.ccalm.org:8989/ -Обязательно проверить как установился SSL чекером: https://www.leaderssl.ru/tools/ssl_checker - - -# 📌 Бесплатный SSL сертификат Let’s Encrypt для HAPROXY -**************************************************************************************************** -Бесплатный SSL сертификат Let’s Encrypt для HAPROXY https://serversforhackers.com/c/letsencrypt-with-haproxy -```sh - sudo apt-get update - sudo apt-get install -y certbot -```` -Для удаления PPA нужно выполнить: -```sh - sudo apt-get remove certbot - sudo add-apt-repository --remove ppa:certbot/certbot - apt-get install -f - apt autoremove -``` -Если включён файрволл то разрешаем порт: -```sh - sudo ufw allow 9080/tcp -``` -Проверяем что автообновление в certbot работает для этого выполняем команду: -```sh - sudo systemctl status certbot.timer -``` -Затем пытаемся выполнить пробный прогон при помощи команды: -```sh - sudo certbot renew --dry-run -``` - -Согласно инструкции модифицируем конфигурационный файл haproxy добавив во frontend это: -``` - # ACL for detecting Let's Encrypt validtion requests - acl is_certbot path_beg /.well-known/acme-challenge/ - use_backend backend-certbot if is_certbot -``` -А также ещё один backend: -``` - # Certbot backend - # Contains certbot stand-alone webserver - backend backend-certbot - mode http - server certbot 127.0.0.1:9080 -``` -Перезагрузить и выполнить команду: - -```sh - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d gotify.locust.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d git.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d ru.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rug.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kz.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kzg.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d data.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver2.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d stations.istt.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d uspdmanager.istt.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d tourist.istt.kz --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d monitoring.infracos.kz --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d aistransit.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d istransit.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d main.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d transit.istt.kz --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.com --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mqtt.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d observer.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rigor.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d pal.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d elektronnaya-ochered.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mcp.kz --email irigm@mail.ru --agree-tos --non-interactive -``` - -После генерации файлы будут в: - /etc/letsencrypt/live/geoserver2.ccalm.org/fullchain.pem - /etc/letsencrypt/live/geoserver2.ccalm.org/privkey.pem - -Для обновления создаём файл /etc/letsencrypt/renew.sh (по моему этот скрипт не нужен так как рабтает сервис certbot.timer): - #!/bin/bash - certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepare.sh" --quiet - -Но для HAProxy нужно чтобы 2 файла были объединены поэтому добавляю спец скрипт /etc/haproxy/prepare.sh: - #!/bin/bash - - # Loop through all Let's Encrypt certificates - for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do - - CERTIFICATE=`basename $CERTIFICATE` - - # Combine certificate and private key to single file - cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem - - done - systemctl reload haproxy.service - -Обновляем конфигурацию HAProxy добавив в frontend: - bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem - -Устанавливаем права - chmod +x /etc/haproxy/renew.sh - chmod +x /etc/haproxy/prepare.sh -И добавляем задание в cron "crontab -e" ниже текст это раз в 24 часа в 00:00:00 ночи: - 0 0 * * * /bin/sh /etc/letsencrypt/renew.sh +# 📌 Установка HAProxy на Ubuntu 20.04 +**************************************************************************************************** +На основе инструкции из https://itsecforu.ru/2019/07/15/⏳-настройка-балансировщика-нагрузки-h/ + +Connect to the required server: +```sh +ssh administrator@10.101.1.3 -p 22 +``` +Connect to CCALM Turkish infrastructure: +```sh +ssh igor@156.244.31.209 -p 2200 +``` +---------------------------------------------------------------------------------------------------- +## Install haproxy +```sh + sudo apt-get update && sudo apt-get install haproxy -y +```` +Создаём резервную копию файла: +```sh +sudo cp /etc/haproxy/haproxy.cfg{,.bak} +```` +Редактируем конфигурацию (Описание конфигурационного файла HAProxy https://habr.com/ru/sandbox/34354/) +```sh + mcedit /etc/haproxy/haproxy.cfg +``` +В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов): +```conf +frontend frontend-http +bind *:80 +mode http + + # ACL для определения запросов на проверку Let's Encrypt + acl is_certbot path_beg /.well-known/acme-challenge/ + + # Если это не запрос Let's Encrypt, перенаправляем на HTTPS + http-request redirect scheme https code 301 unless is_certbot + + # Отправляем запросы Let's Encrypt на backend-certbot + use_backend backend-certbot if is_certbot + + frontend LOADBALANCER-01 + bind *:80 + bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem crt /etc/ssl/certs/bigfoottrade_kz.pem + mode http #режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика + option httpclose #Закрывает пассивные соединения + + http-request set-header x-Forwarded-for %[src] + http-request set-header x-Forwarded-uri %[url] + + acl v_geoserver2 hdr(host) -i geoserver2.ccalm.org + use_backend geoserver2_ccalm_org if v_geoserver2 + + #Если различные нестандартные порты то так + acl v_locust_kz hdr_reg(host) -i ^locust\.kz(:.*)?$ + use_backend b_locust_kz if v_locust_kz + + #Перенаправление одной страницы по адресу http://geoserver2.ccalm.org/data/ на другой backend + acl v_geo_data hdr(host) -i geoserver2.ccalm.org/data + use_backend WEBSERVERS-01 if v_geo_data + + + default_backend WEBSERVERS-01 + + backend WEBSERVERS-01 + balance roundrobin + server web10 127.0.0.1:8081 check inter 5s ssl verify none + option httpchk + + backend geoserver2_ccalm_org + balance roundrobin + server web1 192.168.0.90:80 check + option httpchk + + listen stats + bind *:8989 + stats enable + stats uri / + stats realm Haproxy\ Statistics + stats auth igor:i123456 + +frontend f-RabbitMQ +mode tcp +bind 10.1.7.73:21000 +default_backend b-RabbitMQ + +backend b-RabbitMQ +mode tcp +server srv1 10.10.16.21:20000 +``` +Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx + +Для использования SSL и перенаправляние по обычному сокету для начала нужно настроить pem файл объеденив crt и key (и незабыть изменить порт Apache с 433) +cat /etc/ssl/certs/bigfoottrade_kz.crt /etc/ssl/certs/bigfoottrade_kz_ca.crt /etc/ssl/private/bigfoottrade_kz.key > /etc/haproxy/ssl/bigfoottrade_kz.pem +cat AAA_Certificate_Services.crt GoGetSSL_RSA_DV_CA.crt istransit_kz.crt istransit_kz.key > istransit_kz.pem + + SSLCertificateFile + SSLCertificateKeyFile + +Для включения WEB статистики на 9000 порту добавить в конец конфигурации: +listen stats +bind *:8989 +stats enable +stats uri /stats +stats realm Haproxy\ Statistics +stats auth igor:i123456 +Тестирую файл конфигурации: +```sh + haproxy -f /etc/haproxy/haproxy.cfg -c +```` +Также можно в журнале посмотреть что написал HAProxy: +```sh + sudo journalctl -u haproxy --no-pager | tail -n 50 +```` +Перезагружаем: +```sh + sudo systemctl restart haproxy +```` + +Посмотреть что в журнале можно так: +Посмотреть что в журнале можно так: +```sh + journalctl -u haproxy --since "1 minutes ago" + journalctl -u haproxy --since "30 minutes ago" | grep "backend" + tail -f /var/log/haproxy.log +``` + + + +administrator@app:~$ journalctl -u haproxy --since "30 minutes ago" | grep "backend" +backend 'transit_acquiring_v01_kz' has no server available! +backend 'transit_translation_v02_kz' has no server available! +backend 'transit_mobile_kz' has no server available! +backend 'transit_manager_kz' has no server available! +backend 'transit_warehouse_kz' has no server available! +backend 'transit_kgd_kz' has no server available! +backend 'transit_monitoring_kz' has no server available! + + + + + + + +И теперь должно открываться но адресу: http://data.ccalm.org:8989/ +Обязательно проверить как установился SSL чекером: https://www.leaderssl.ru/tools/ssl_checker + + +# 📌 Бесплатный SSL сертификат Let’s Encrypt для HAPROXY +**************************************************************************************************** +Бесплатный SSL сертификат Let’s Encrypt для HAPROXY https://serversforhackers.com/c/letsencrypt-with-haproxy +```sh + sudo apt-get update + sudo apt-get install -y certbot +```` +Для удаления PPA нужно выполнить: +```sh + sudo apt-get remove certbot + sudo add-apt-repository --remove ppa:certbot/certbot + apt-get install -f + apt autoremove +``` +Если включён файрволл то разрешаем порт: +```sh + sudo ufw allow 9080/tcp +``` +Проверяем что автообновление в certbot работает для этого выполняем команду: +```sh + sudo systemctl status certbot.timer +``` +Затем пытаемся выполнить пробный прогон при помощи команды: +```sh + sudo certbot renew --dry-run +``` + +Согласно инструкции модифицируем конфигурационный файл haproxy добавив во frontend это: +``` + # ACL for detecting Let's Encrypt validtion requests + acl is_certbot path_beg /.well-known/acme-challenge/ + use_backend backend-certbot if is_certbot +``` +А также ещё один backend: +``` + # Certbot backend + # Contains certbot stand-alone webserver + backend backend-certbot + mode http + server certbot 127.0.0.1:9080 +``` +Перезагрузить и выполнить команду: + +```sh + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d gotify.locust.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d git.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d ru.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rug.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kz.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kzg.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d data.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver2.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d stations.istt.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d uspdmanager.istt.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d tourist.istt.kz --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d monitoring.infracos.kz --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d aistransit.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d istransit.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d main.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d transit.istt.kz --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.com --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mqtt.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d observer.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rigor.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d pal.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d elektronnaya-ochered.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mcp.kz --email irigm@mail.ru --agree-tos --non-interactive +``` + +После генерации файлы будут в: + /etc/letsencrypt/live/geoserver2.ccalm.org/fullchain.pem + /etc/letsencrypt/live/geoserver2.ccalm.org/privkey.pem + +Для обновления создаём файл /etc/letsencrypt/renew.sh (по моему этот скрипт не нужен так как рабтает сервис certbot.timer): + #!/bin/bash + certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepare.sh" --quiet + +Но для HAProxy нужно чтобы 2 файла были объединены поэтому добавляю спец скрипт /etc/haproxy/prepare.sh: + #!/bin/bash + + # Loop through all Let's Encrypt certificates + for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do + + CERTIFICATE=`basename $CERTIFICATE` + + # Combine certificate and private key to single file + cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem + + done + systemctl reload haproxy.service + +Обновляем конфигурацию HAProxy добавив в frontend: + bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem + +Устанавливаем права + chmod +x /etc/haproxy/renew.sh + chmod +x /etc/haproxy/prepare.sh +И добавляем задание в cron "crontab -e" ниже текст это раз в 24 часа в 00:00:00 ночи: + 0 0 * * * /bin/sh /etc/letsencrypt/renew.sh diff --git a/HTTPTunnel.md b/HTTPTunnel.md index 351a533..ee3741c 100644 --- a/HTTPTunnel.md +++ b/HTTPTunnel.md @@ -1,73 +1,73 @@ -# 📌 Туннелирование SSH через HTTP -**************************************************************************************************** -Исходники тут: https://github.com/larsbrinkhoff/httptunnel: -```sh - sudo apt-get install httptunnel -```` -Настроил HAProxy примерно так, чтобы проверялся параметр "mybiglogfile" для редиректа: -``` -frontend frontend-http -bind *:80 -mode http - - acl v_tunnel url_param(mybiglogfile) -m found - use_backend httptunnel_backend if 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://locust.kz/index.html?mybiglogfile=all - -На сервере запустил прослушку на 9999 и перенаправление на 22: -```sh - sudo hts -F 127.0.0.1:22 9999 -```` -Для остановки -```sh - ps aux | grep hts - sudo kill 1854 -``` -Можно запустить как сервис так sudo mcedit /etc/systemd/system/httptunnel.service: -``` -[Unit] -Description=HTTP Tunnel Service -After=network.target - -[Service] -ExecStart=hts -F 127.0.0.1:22 9999 -Restart=always -User=root -RestartSec=10 - -[Install] -WantedBy=multi-user.target -``` -Потом: -```sh - sudo systemctl daemon-reload - sudo systemctl enable httptunnel - sudo systemctl stop httptunnel - sudo systemctl start httptunnel - sudo systemctl status httptunnel - tail -f /var/log/syslog | grep --line-buffered "htc" -``` - -На клиенте запускаем локальный порт также указал 9999 а ключь -```sh - 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 -``` - -Для остановки -```sh - ps aux | grep htc - Потом - sudo kill 783 -``` - -Пробую подключиться после настройки тунеля: -```sh - ssh igor@127.0.0.1 -p 9999 +# 📌 Туннелирование SSH через HTTP +**************************************************************************************************** +Исходники тут: https://github.com/larsbrinkhoff/httptunnel: +```sh + sudo apt-get install httptunnel +```` +Настроил HAProxy примерно так, чтобы проверялся параметр "mybiglogfile" для редиректа: +``` +frontend frontend-http +bind *:80 +mode http + + acl v_tunnel url_param(mybiglogfile) -m found + use_backend httptunnel_backend if 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://locust.kz/index.html?mybiglogfile=all + +На сервере запустил прослушку на 9999 и перенаправление на 22: +```sh + sudo hts -F 127.0.0.1:22 9999 +```` +Для остановки +```sh + ps aux | grep hts + sudo kill 1854 +``` +Можно запустить как сервис так sudo mcedit /etc/systemd/system/httptunnel.service: +``` +[Unit] +Description=HTTP Tunnel Service +After=network.target + +[Service] +ExecStart=hts -F 127.0.0.1:22 9999 +Restart=always +User=root +RestartSec=10 + +[Install] +WantedBy=multi-user.target +``` +Потом: +```sh + sudo systemctl daemon-reload + sudo systemctl enable httptunnel + sudo systemctl stop httptunnel + sudo systemctl start httptunnel + sudo systemctl status httptunnel + tail -f /var/log/syslog | grep --line-buffered "htc" +``` + +На клиенте запускаем локальный порт также указал 9999 а ключь +```sh + 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 +``` + +Для остановки +```sh + ps aux | grep htc + Потом + sudo kill 783 +``` + +Пробую подключиться после настройки тунеля: +```sh + ssh igor@127.0.0.1 -p 9999 ``` \ No newline at end of file diff --git a/HashiCorp_Vault_install.md b/HashiCorp_Vault_install.md index ad4714e..9d781ee 100644 --- a/HashiCorp_Vault_install.md +++ b/HashiCorp_Vault_install.md @@ -1,361 +1,361 @@ -# Установка HashiCorp Vault на Ubuntu - -Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими. - -## 1. Установка Vault - -Открываю нужный сервер -```sh -wsl -``` -Похоже vault из Москвы недоступен: -```sh -ssh root@45.144.64.218 -p 2200 -``` - -### 1.1. Добавление репозитория HashiCorp - -1. Установите необходимые пакеты: -```sh - sudo apt update && sudo apt install -y gnupg software-properties-common curl -``` - -2. Добавьте официальный GPG-ключ HashiCorp: -```sh - curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg -``` - -3. Добавьте репозиторий HashiCorp в систему: -```sh - sudo mcedit /etc/apt/sources.list.d/hashicorp.list -``` - -Заменяем на: -```text - deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main -``` -Где noble это кодовое имя Ubuntu 24.04 - - -4. Обновите списки пакетов: -```sh - sudo apt update -``` - -5. Установите Vault: -```sh - sudo apt install -y vault -``` - -6. Проверьте, что Vault установлен правильно: -```sh - vault --version -``` -Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z - - -## 2. Запуск Vault - -### 2.1. Запуск в Dev-режиме (только для тестирования) - -If work stop it: -```sh - sudo pkill vault -``` -If need delete old data: -```sh - sudo rm -rf ~/.vault-token ~/.vault/ -``` -For find where stored data read file: -```sh - sudo mcedit /etc/vault/config.hcl -``` -In config file find this path: /opt/vault/data - -После удаления базы нужно инициализировать Vault заново: -```sh - sudo vault operator init -``` - -Run in developer mode (in dev mode data stored in RAM): -```sh - vault server -dev -``` - -```text -WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory -and starts unsealed with a single unseal key. The root token is already -authenticated to the CLI, so you can immediately begin using Vault. - -You may need to set the following environment variables: - - $ export VAULT_ADDR='http://127.0.0.1:8200' - -The unseal key and root token are displayed below in case you want to -seal/unseal the Vault or re-authenticate. - -Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s= -Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w - -Development mode should NOT be used in production installations! -``` - -Теперь Vault работает по адресу: -```sh -start http://127.0.0.1:8200 -``` -Останавливаю нажатием Ctrl + C - - -### 2.2. Настройка Vault в режиме сервера - -1. Создайте конфигурационный файл: -```sh - sudo mkdir -p /etc/vault && - sudo mcedit /etc/vault/config.hcl -``` - -2. Добавьте следующий конфиг: -```text -storage "file" { - path = "/opt/vault/data" -} - -listener "tcp" { - address = "127.0.0.1:8200" - tls_disable = 1 -} - -disable_mlock = true -ui = true -``` - -3. Создайте папку для хранения данных: -```sh - sudo mkdir -p /opt/vault/data && - sudo chown vault:vault /opt/vault/data -``` - -4. Создайте systemd-сервис для Vault: -```sh -sudo tee /etc/systemd/system/vault.service > /dev/null < /dev/null < -``` - -Проверяем зранятся ли токены в хранилище а не в памяти -```sh -vault read sys/auth/token/tune -``` -token_type = default-service, значит Vault не хранит токены - -Включаем хранение токенов: -```sh - vault write sys/auth/token/tune token_type=service -``` - - - ---- -Теперь HashiCorp Vault установлен и готов к использованию! 🚀 - +# Установка HashiCorp Vault на Ubuntu + +Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими. + +## 1. Установка Vault + +Открываю нужный сервер +```sh +wsl +``` +Похоже vault из Москвы недоступен: +```sh +ssh root@45.144.64.218 -p 2200 +``` + +### 1.1. Добавление репозитория HashiCorp + +1. Установите необходимые пакеты: +```sh + sudo apt update && sudo apt install -y gnupg software-properties-common curl +``` + +2. Добавьте официальный GPG-ключ HashiCorp: +```sh + curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg +``` + +3. Добавьте репозиторий HashiCorp в систему: +```sh + sudo mcedit /etc/apt/sources.list.d/hashicorp.list +``` + +Заменяем на: +```text + deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main +``` +Где noble это кодовое имя Ubuntu 24.04 + + +4. Обновите списки пакетов: +```sh + sudo apt update +``` + +5. Установите Vault: +```sh + sudo apt install -y vault +``` + +6. Проверьте, что Vault установлен правильно: +```sh + vault --version +``` +Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z + + +## 2. Запуск Vault + +### 2.1. Запуск в Dev-режиме (только для тестирования) + +If work stop it: +```sh + sudo pkill vault +``` +If need delete old data: +```sh + sudo rm -rf ~/.vault-token ~/.vault/ +``` +For find where stored data read file: +```sh + sudo mcedit /etc/vault/config.hcl +``` +In config file find this path: /opt/vault/data + +После удаления базы нужно инициализировать Vault заново: +```sh + sudo vault operator init +``` + +Run in developer mode (in dev mode data stored in RAM): +```sh + vault server -dev +``` + +```text +WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory +and starts unsealed with a single unseal key. The root token is already +authenticated to the CLI, so you can immediately begin using Vault. + +You may need to set the following environment variables: + + $ export VAULT_ADDR='http://127.0.0.1:8200' + +The unseal key and root token are displayed below in case you want to +seal/unseal the Vault or re-authenticate. + +Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s= +Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w + +Development mode should NOT be used in production installations! +``` + +Теперь Vault работает по адресу: +```sh +start http://127.0.0.1:8200 +``` +Останавливаю нажатием Ctrl + C + + +### 2.2. Настройка Vault в режиме сервера + +1. Создайте конфигурационный файл: +```sh + sudo mkdir -p /etc/vault && + sudo mcedit /etc/vault/config.hcl +``` + +2. Добавьте следующий конфиг: +```text +storage "file" { + path = "/opt/vault/data" +} + +listener "tcp" { + address = "127.0.0.1:8200" + tls_disable = 1 +} + +disable_mlock = true +ui = true +``` + +3. Создайте папку для хранения данных: +```sh + sudo mkdir -p /opt/vault/data && + sudo chown vault:vault /opt/vault/data +``` + +4. Создайте systemd-сервис для Vault: +```sh +sudo tee /etc/systemd/system/vault.service > /dev/null <<'EOF' +[Unit] +Description=HashiCorp Vault +After=network-online.target +Requires=network-online.target + +[Service] +User=vault +Group=vault +ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl +ExecReload=/bin/kill --signal HUP \$MAINPID +KillSignal=SIGTERM +Restart=on-failure +LimitMEMLOCK=infinity +ProtectSystem=full +CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_SYSLOG CAP_CHOWN +NoNewPrivileges=yes + +[Install] +WantedBy=multi-user.target +EOF +``` +Проверяем всё ли записалось: +```sh +sudo mcedit /etc/systemd/system/vault.service +``` + +5. Перезапустите systemd и включите Vault: +```sh + sudo systemctl daemon-reload && + sudo systemctl enable vault && + sudo systemctl start vault +``` + +7. Проверьте статус: +```sh + sudo systemctl status vault +``` + +--- + +## 3. Инициализация и разлочка Vault + +1. Экспортируйте переменную окружения: +```sh + export VAULT_ADDR='http://127.0.0.1:8200' +``` + +2. Инициализируйте хранилище (сохраните ключи!): +```sh + vault operator init +``` + +Выдало: +```text +Unseal Key 1: lQlJsb9RI8rSzLrc5iPnx1qJkWZbbXIkrEgnQGe5R6uO +Unseal Key 2: 0qJJXRo570jlH/0Qs/wodXHNI2SF5VgL4jE04JawSPSB +Unseal Key 3: VuYkOkQ8qmwofDmjqsTRQoMqGAH3Jv+nqQylL7Uibbtp +Unseal Key 4: JJJ8Nqj00qzS9u5wNtTtExL/jWlJF9fgaBsiuaf0kFxC +Unseal Key 5: L6lZMp/l7s24EZJAFnWS4Py5jsWOuMioC41g5LhUJKWL + +Initial Root Token: hvs.o07DY7tnSPcufxk60pjCXDzn + +Vault initialized with 5 key shares and a key threshold of 3. Please securely +distribute the key shares printed above. When the Vault is re-sealed, +restarted, or stopped, you must supply at least 3 of these keys to unseal it +before it can start servicing requests. + +Vault does not store the generated root key. Without at least 3 keys to +reconstruct the root key, Vault will remain permanently sealed! + +It is possible to generate new unseal keys, provided you have a quorum of +existing unseal keys shares. See "vault operator rekey" for more information. +``` + +3. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза выполнить эту команду): +```sh + vault operator unseal +``` + +4. Авторизуйтесь с root-токеном: +```sh + vault login hvs.MTFV72PjKXCVh5ZL6yCVE3Yw +``` + +5. Создаём(включаем) новое хранилище ключ-значение через ssh +```sh + vault secrets enable -path=org-ccalm kv-v2 +``` + + + +5. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring) + +Заменит(создаст) значение: +```sh + vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4 +``` +Добавит (обновит): +```sh + vault kv patch org-ccalm/jwt vault.test=test2 +``` +```sh + vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1 +``` + +6. Read data from the kv +```sh + vault kv get org-ccalm/jwt +``` + +Должно вывести: +```text +Key Value +--- ----- +server.ssl.key-store-password M4yh4 +``` + +6. Включаем AppRole для доступа из приложения +```sh + vault auth enable approle +``` + +7. Добавляем политики потом создаём ключ для этой политикиполитики + +Создаю файл политик +```sh +cd ~ && +sudo tee jwt-policy.hcl > /dev/null <<'EOF' +path "org-ccalm/data/jwt" { + capabilities = ["create", "read", "update", "delete", "list"] +} +path "org-ccalm/data/public" { + capabilities = ["read", "list"] +} +EOF +``` +Apply and delete configiration file: +```sh + vault policy write jwt-policy ~/jwt-policy.hcl && + rm -f jwt-policy.hcl +``` + +Создаём AppRole (на 10 лет) +```sh +vault write auth/approle/role/org-ccalm-jwt \ + secret_id_ttl=0 \ + token_ttl=87600h \ + token_max_ttl=87600h \ + policies="jwt-policy,another-policy,third-policy" +``` + +Получаем role_id и secret_id +```sh +vault read auth/approle/role/org-ccalm-jwt/role-id +``` +Выдало +```text +Key Value +--- ----- +role_id c0064fe2-8f0e-b317-7fe7-66f7405b45a1 +``` +На команду +```sh +vault write -f auth/approle/role/org-ccalm-jwt/secret-id +``` +Выдало: +```text +Key Value +--- ----- +secret_id 24f31c88-7185-0d93-9a51-e221c2925265 +secret_id_accessor 22fa68e3-fc73-2008-0a34-3506630b6693 +secret_id_num_uses 0 +secret_id_ttl 0s +``` +Сохрани role_id и secret_id, они понадобятся Spring Boot. + +Хранить ключи лучьше в переменных окружения +```sh +export VAULT_ROLE_ID="your-role-id" && +export VAULT_SECRET_ID="your-secret-id" +``` + + +Проверяем не больше какого значения можно задать время жизни кокена: +```sh +vault read sys/mounts/auth/token/tune +``` +По умолчанию max_lease_ttl равен 32 дня! + +На год можно увеличить так: +```sh + vault write sys/mounts/auth/token/tune max_lease_ttl=8760h +``` + +Create data access token with set politics: +```sh + vault token create -policy=jwt-policy -ttl=0 +``` + +Продлевать токен можно так: +```sh + vault token renew <твой-токен> +``` + +Проверяем зранятся ли токены в хранилище а не в памяти +```sh +vault read sys/auth/token/tune +``` +token_type = default-service, значит Vault не хранит токены + +Включаем хранение токенов: +```sh + vault write sys/auth/token/tune token_type=service +``` + + + +--- +Теперь HashiCorp Vault установлен и готов к использованию! 🚀 + diff --git a/HashiCorp_Vault_install_windows.md b/HashiCorp_Vault_install_windows.md index 49184b5..1c6f3c3 100644 --- a/HashiCorp_Vault_install_windows.md +++ b/HashiCorp_Vault_install_windows.md @@ -1,136 +1,136 @@ - -Загрузить в HashiCorp Vault настройки можно так: - -```sh -vault kv put secret/org-ccalm-jwt \ -jwt.secret=my-secret-value \ -db.user=admin \ -db.pass=123456 -``` - -Разбор параметров: -1. vault kv put – команда для записи ключей и значений в KV-хранилище Vault. -2. secret/org-ccalm-jwt – путь к секрету. - * secret/ – это backend-хранилище (оно должно быть включено в Vault). - * org-ccalm-jwt – имя секрета, под которым сохраняются параметры. -3. jwt.secret=my-secret-value – ключ jwt.secret со значением my-secret-value. -4. db.user=admin – ключ db.user со значением admin. -5. db.pass=123456 – ключ db.pass со значением 123456. - - -# 🚀 Установка и настройка HashiCorp Vault на Windows - -## 📌 1. Установка HashiCorp Vault - -1. **Скачайте Vault CLI** с официального сайта: - 🔗 [https://developer.hashicorp.com/vault/downloads](https://developer.hashicorp.com/vault/downloads) -2. Распакуйте архив и **добавьте путь к `vault.exe` в `PATH`**: - - Кликните **ПКМ → Этот компьютер → Свойства → Дополнительные параметры системы**. - - В **Переменные среды** добавьте путь к папке с `vault.exe`. -3. Откройте **cmd** или **PowerShell** и проверьте установку командой: -```sh - vault --version -``` - Если всё ОК, увидите версию Vault. Примерно такую: Vault v1.18.4 (503be623a3697e8c10c254dc87d26492c46753e1), built 2025-01-29T13:57:54Z - ---- - -## 📌 2. Запуск Vault-сервера (разработческий режим) - -Чтобы локально запустить Vault в **dev-режиме** (без авторизации), выполните: -```sh -vault server -dev -``` -После запуска он покажет **root-токен** (сохраните его!): -```plaintext -Unseal Key: x1jUXpLJREI6M1+Qm6m/h3NLEhaEmBageqw0v+dSSKo= -Root Token: hvs.V7Rc8uJ8YJ0AASKZfep6oYNe -``` - -Теперь Vault работает по адресу: -```sh -start http://127.0.0.1:8200 -``` - ---- - -## 📌 3. Экспорт токена (чтобы не вводить каждый раз) - -Откройте **PowerShell** и выполните: -```sh -$env:VAULT_ADDR="http://127.0.0.1:8200" -$env:VAULT_TOKEN="hvs.JDIyKgDMagA0WyIhLFQ4mAjZ" -``` -(Замените `hvs.JDIyKgDMagA0WyIhLFQ4mAjZ` на свой токен.) - -Теперь можно работать с Vault без ввода токена каждый раз. - ---- - -## 📌 4. Запись значений в Vault на Windows - -Значения разделенные пробелами можно записать в вольт так: -```sh -vault kv put secret/kz-istransit-jwt server.ssl.key-store-password=MFNX344yh4 -``` -Выдаст примерно такое: -======== Secret Path ======== -secret/data/kz-istransit-jwt - -======= Metadata ======= -Key Value ---- ----- -created_time 2025-02-24T12:49:45.7630328Z -custom_metadata -deletion_time n/a -destroyed false -version 1 - ---- - -## 📌 5. Проверка сохранённых данных - -Чтобы посмотреть, что записано в Vault: -```sh -vault kv get secret/kz-istransit-jwt -``` -Если всё настроено правильно, вы увидите примерно такой вывод: -```plaintext -====== Metadata ====== -Key Value ---- ----- -created_time 2025-02-24T12:00:00Z -version 1 - -====== Data ====== -Key Value ---- ----- -db.pass 123456 -db.user admin -jwt.secret my-secret-value -``` - ---- - -## 📌 6. Удаление данных из Vault - -Удаление данных: -```sh -vault kv delete secret/org-ccalm-jwt -``` -Полное уничтожение (без возможности восстановления): -```sh -vault kv destroy -versions=1 secret/org-ccalm-jwt -``` - ---- - -## 🎯 Итог -✅ Установили Vault CLI -✅ Запустили Vault сервер (`vault server -dev`) -✅ Экспортировали `VAULT_ADDR` и `VAULT_TOKEN` -✅ Записали настройки в Vault -✅ Проверили данные - -Теперь можно интегрировать Vault в Spring Boot 🚀 - + +Загрузить в HashiCorp Vault настройки можно так: + +```sh +vault kv put secret/org-ccalm-jwt \ +jwt.secret=my-secret-value \ +db.user=admin \ +db.pass=123456 +``` + +Разбор параметров: +1. vault kv put – команда для записи ключей и значений в KV-хранилище Vault. +2. secret/org-ccalm-jwt – путь к секрету. + * secret/ – это backend-хранилище (оно должно быть включено в Vault). + * org-ccalm-jwt – имя секрета, под которым сохраняются параметры. +3. jwt.secret=my-secret-value – ключ jwt.secret со значением my-secret-value. +4. db.user=admin – ключ db.user со значением admin. +5. db.pass=123456 – ключ db.pass со значением 123456. + + +# 🚀 Установка и настройка HashiCorp Vault на Windows + +## 📌 1. Установка HashiCorp Vault + +1. **Скачайте Vault CLI** с официального сайта: + 🔗 [https://developer.hashicorp.com/vault/downloads](https://developer.hashicorp.com/vault/downloads) +2. Распакуйте архив и **добавьте путь к `vault.exe` в `PATH`**: + - Кликните **ПКМ → Этот компьютер → Свойства → Дополнительные параметры системы**. + - В **Переменные среды** добавьте путь к папке с `vault.exe`. +3. Откройте **cmd** или **PowerShell** и проверьте установку командой: +```sh + vault --version +``` + Если всё ОК, увидите версию Vault. Примерно такую: Vault v1.18.4 (503be623a3697e8c10c254dc87d26492c46753e1), built 2025-01-29T13:57:54Z + +--- + +## 📌 2. Запуск Vault-сервера (разработческий режим) + +Чтобы локально запустить Vault в **dev-режиме** (без авторизации), выполните: +```sh +vault server -dev +``` +После запуска он покажет **root-токен** (сохраните его!): +```plaintext +Unseal Key: x1jUXpLJREI6M1+Qm6m/h3NLEhaEmBageqw0v+dSSKo= +Root Token: hvs.V7Rc8uJ8YJ0AASKZfep6oYNe +``` + +Теперь Vault работает по адресу: +```sh +start http://127.0.0.1:8200 +``` + +--- + +## 📌 3. Экспорт токена (чтобы не вводить каждый раз) + +Откройте **PowerShell** и выполните: +```sh +$env:VAULT_ADDR="http://127.0.0.1:8200" +$env:VAULT_TOKEN="hvs.JDIyKgDMagA0WyIhLFQ4mAjZ" +``` +(Замените `hvs.JDIyKgDMagA0WyIhLFQ4mAjZ` на свой токен.) + +Теперь можно работать с Vault без ввода токена каждый раз. + +--- + +## 📌 4. Запись значений в Vault на Windows + +Значения разделенные пробелами можно записать в вольт так: +```sh +vault kv put secret/kz-istransit-jwt server.ssl.key-store-password=MFNX344yh4 +``` +Выдаст примерно такое: +======== Secret Path ======== +secret/data/kz-istransit-jwt + +======= Metadata ======= +Key Value +--- ----- +created_time 2025-02-24T12:49:45.7630328Z +custom_metadata +deletion_time n/a +destroyed false +version 1 + +--- + +## 📌 5. Проверка сохранённых данных + +Чтобы посмотреть, что записано в Vault: +```sh +vault kv get secret/kz-istransit-jwt +``` +Если всё настроено правильно, вы увидите примерно такой вывод: +```plaintext +====== Metadata ====== +Key Value +--- ----- +created_time 2025-02-24T12:00:00Z +version 1 + +====== Data ====== +Key Value +--- ----- +db.pass 123456 +db.user admin +jwt.secret my-secret-value +``` + +--- + +## 📌 6. Удаление данных из Vault + +Удаление данных: +```sh +vault kv delete secret/org-ccalm-jwt +``` +Полное уничтожение (без возможности восстановления): +```sh +vault kv destroy -versions=1 secret/org-ccalm-jwt +``` + +--- + +## 🎯 Итог +✅ Установили Vault CLI +✅ Запустили Vault сервер (`vault server -dev`) +✅ Экспортировали `VAULT_ADDR` и `VAULT_TOKEN` +✅ Записали настройки в Vault +✅ Проверили данные + +Теперь можно интегрировать Vault в Spring Boot 🚀 + diff --git a/Jenkins_install.md b/Jenkins_install.md index 2b8db32..1bdccff 100644 --- a/Jenkins_install.md +++ b/Jenkins_install.md @@ -1,87 +1,87 @@ -Install by docs from https://www.cherryservers.com/blog/install-jenkins-ubuntu - -## Prepare installation - -Открываю нужный сервер -```sh -wsl -``` -```sh -sudo apt update -``` -```sh -sudo apt upgrade -``` -```sh - sudo apt install openjdk-21-jdk openjdk-21-jre -y && - java -version -``` -## Add Jenkins Repository - -```sh -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: -```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' -``` - -```sh -sudo apt update -``` - -```sh -sudo apt install jenkins -y -``` -If the software was installed incorrectly, you can reinstall it after uninstalling it first.: -```sh -sudo apt remove --purge jenkins -``` - -```sh -jenkins --version -``` - -Try run jenkins without service -```sh -sudo -u jenkins /usr/bin/jenkins --httpPort=8081 --httpListenAddress=0.0.0.0 -``` - -```sh -sudo mcedit /lib/systemd/system/jenkins.service -``` - -```sh -sudo systemctl start jenkins && -sudo systemctl enable jenkins && -sudo systemctl status jenkins -``` - -```sh -sudo journalctl -xeu jenkins.service | tail -n 50 -``` -Если порт занят, проверяем кем: -```sh -sudo lsof -i :8081 -``` -Переопределяем порт: -```sh -sudo mcedit /etc/default/jenkins -``` -```conf -HTTP_PORT=8081 -``` - -```sh -sudo systemctl restart jenkins -``` - -```sh -start http://127.0.0.1:8081 -``` - - -See what port in locked -```sh -netstat -tpln +Install by docs from https://www.cherryservers.com/blog/install-jenkins-ubuntu + +## Prepare installation + +Открываю нужный сервер +```sh +wsl +``` +```sh +sudo apt update +``` +```sh +sudo apt upgrade +``` +```sh + sudo apt install openjdk-21-jdk openjdk-21-jre -y && + java -version +``` +## Add Jenkins Repository + +```sh +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: +```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' +``` + +```sh +sudo apt update +``` + +```sh +sudo apt install jenkins -y +``` +If the software was installed incorrectly, you can reinstall it after uninstalling it first.: +```sh +sudo apt remove --purge jenkins +``` + +```sh +jenkins --version +``` + +Try run jenkins without service +```sh +sudo -u jenkins /usr/bin/jenkins --httpPort=8081 --httpListenAddress=0.0.0.0 +``` + +```sh +sudo mcedit /lib/systemd/system/jenkins.service +``` + +```sh +sudo systemctl start jenkins && +sudo systemctl enable jenkins && +sudo systemctl status jenkins +``` + +```sh +sudo journalctl -xeu jenkins.service | tail -n 50 +``` +Если порт занят, проверяем кем: +```sh +sudo lsof -i :8081 +``` +Переопределяем порт: +```sh +sudo mcedit /etc/default/jenkins +``` +```conf +HTTP_PORT=8081 +``` + +```sh +sudo systemctl restart jenkins +``` + +```sh +start http://127.0.0.1:8081 +``` + + +See what port in locked +```sh +netstat -tpln ``` \ No newline at end of file diff --git a/POSTFIX_DOVECOT_install.md b/POSTFIX_DOVECOT_install.md new file mode 100644 index 0000000..7518af1 --- /dev/null +++ b/POSTFIX_DOVECOT_install.md @@ -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 ниже того что указывает на + Alias /PostfixAdmin/ "/var/www/html/PostfixAdmin/public/" + + Options FollowSymLinks + AllowOverride None + Allow from all + Order allow,deny + +Перезагружаю: +```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 = docker-compose.yml < postgres_exporter.yml < docker-compose.yml <<'EOF' +services: + postgres-exporter: + image: quay.io/prometheuscommunity/postgres-exporter + container_name: postgres-exporter + restart: unless-stopped + network_mode: "host" + environment: + DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable" + volumes: + - ./postgres_exporter.yml:/etc/postgres_exporter.yml + command: + - "--config.file=/etc/postgres_exporter.yml" + +EOF +``` + +Создаём файл с настройками +```sh +cd /opt/postgres-exporter/ && +cat > postgres_exporter.yml <<'EOF' +collectors: + - database + - index + - query + - table +EOF +``` +Запускаю: +```sh + cd /opt/postgres-exporter && + sudo docker-compose up -d +``` + +Проверяю запущен ли докер +```sh + sudo docker ps +``` + +Testing with: +```sh +curl "http://127.0.0.1:9187/metrics" +``` + +Посмотреть журнал за сегодня: +```sh +journalctl --since today +``` + +Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера + +```sh +sudo mcedit /etc/haproxy/haproxy.cfg +``` +Настраиваем: +```text + acl v_metrics_nd path_beg /metrics_nd + acl v_basic_auth http_auth(prometheus_list) + 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 + +backend b_metrics_nd + mode http + option http-keep-alive + http-request replace-path .* /metrics + server web1 127.0.0.1:9100 check +``` + +Проверяем +```sh + haproxy -f /etc/haproxy/haproxy.cfg -c +```` +Перезагружаем: +```sh + sudo systemctl restart haproxy +```` + + + +Подключаюсь к машине где Prometeus: + +```sh +ssh igor@192.168.200.84 -p 22 +``` + +Перезагружаем prometheus чтобы он начал собирать метрики +```sh + sudo systemctl restart prometheus +``` + + + + +Теперь можно настраивать графану, вот готовыдашбоард +Открыть Grafana +Перейти в Dashboards → Import +Вставить ID: 9628 +Выбрать источник данных Prometheus (с PostgreSQL Exporter) +Нажать Import + + +Теперь можно настраивать графану, вот готовыдашбоард +Открыть Grafana +Перейти в Dashboards → Import +Вставить ID: 12273 +Выбрать источник данных Prometheus (с PostgreSQL Exporter) Нажать Import \ No newline at end of file diff --git a/PostgreSQL_credcheck.md b/PostgreSQL_credcheck.md index b9edff9..62a0586 100644 --- a/PostgreSQL_credcheck.md +++ b/PostgreSQL_credcheck.md @@ -1,61 +1,61 @@ -**************************************************************************************************** -Установка и настройка проверяльщик паролей credcheck -PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/ - -Тестовая база -```sh - ssh administrator@10.201.3.36 -p 22 -``` - -Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём: -```sh - apt search credcheck -``` - -Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен): -```sh - sudo apt-get install postgresql-server-dev-16 && - sudo apt-get install build-essential && - git clone https://github.com/HexaCluster/credcheck.git && - cd credcheck && - make && - sudo make install -``` - -Подключаемся к базе данных для выполнения запросов -```sh - psql -h 127.0.0.1 -U postgres -d transit -``` -Проверяем что настройки имеются: -```sh - SELECT name, setting, unit, source, sourcefile, sourceline - FROM pg_settings - WHERE name LIKE 'credcheck%'; -``` - -Читаем текущие настройки -```sh -SHOW ALL; -``` - -Создаём расширение в базе postgres: -```sh - CREATE EXTENSION credcheck; -``` - -Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck: - -- 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.password_min_length = 8; - ALTER SYSTEM SET credcheck.password_min_special = 1; - SELECT pg_reload_conf(); - - -- Attempt to create a user for a new park ranger, which does not meet the credential policies - CREATE USER ranger_ WITH PASSWORD 'forest'; - ERROR: password length should match the configured credcheck.password_min_length - -Для пароля установить: - ALTER SYSTEM SET credcheck.password_expiration_days = 90; - SELECT pg_reload_conf(); - -Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора): +**************************************************************************************************** +Установка и настройка проверяльщик паролей credcheck +PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/ + +Тестовая база +```sh + ssh administrator@10.201.3.36 -p 22 +``` + +Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём: +```sh + apt search credcheck +``` + +Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен): +```sh + sudo apt-get install postgresql-server-dev-16 && + sudo apt-get install build-essential && + git clone https://github.com/HexaCluster/credcheck.git && + cd credcheck && + make && + sudo make install +``` + +Подключаемся к базе данных для выполнения запросов +```sh + psql -h 127.0.0.1 -U postgres -d transit +``` +Проверяем что настройки имеются: +```sh + SELECT name, setting, unit, source, sourcefile, sourceline + FROM pg_settings + WHERE name LIKE 'credcheck%'; +``` + +Читаем текущие настройки +```sh +SHOW ALL; +``` + +Создаём расширение в базе postgres: +```sh + CREATE EXTENSION credcheck; +``` + +Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck: + -- 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.password_min_length = 8; + ALTER SYSTEM SET credcheck.password_min_special = 1; + SELECT pg_reload_conf(); + + -- Attempt to create a user for a new park ranger, which does not meet the credential policies + CREATE USER ranger_ WITH PASSWORD 'forest'; + ERROR: password length should match the configured credcheck.password_min_length + +Для пароля установить: + ALTER SYSTEM SET credcheck.password_expiration_days = 90; + SELECT pg_reload_conf(); + +Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора): diff --git a/PostgreSQL_install.md b/PostgreSQL_install.md index c74c779..1709109 100644 --- a/PostgreSQL_install.md +++ b/PostgreSQL_install.md @@ -1,299 +1,342 @@ -# Install PostgreSQL database - -Coonect lto need server: -```sh -wsl -``` -Or coonect to need server: -```sh -ssh igor@ccalm.org -p 2200 -``` - -**************************************************************************************************** -Установка 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-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13 -Потом создать BAT файл с тем текстом что отобразится при создании каталога базы -База данных создаётся не под пользователем postgres а под локальным пользователем igor -**************************************************************************************************** -Установка PostgreSQL 14 ubuntu 22.04 или 24.04 -```sh - sudo apt-get update - sudo apt-get install postgresql postgresql-contrib -y -``` -Или так если нужно установить PostGIS -```sh - sudo apt-get install postgis -``` -Для удаления PostGIS в месте с зависимыми пакетами: -```sh - sudo apt-get remove --auto-remove postgis && - sudo apt-get purge postgis -``` -Добавить русскую локаль если её нет: -```sh - sudo locale-gen ru_RU && - sudo locale-gen ru_RU.UTF-8 && - sudo locale-gen kk_KZ && - sudo locale-gen kk_KZ.UTF-8 -``` -Проверить какая локаль по умолчанию: -```sh - localectl status -``` -И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры): -```sh - sudo dpkg-reconfigure locales -``` -Для задания пароля в PostgreSQL выполнить: -```sh - sudo -u postgres psql && - \password postgres -``` -Чтобы выйти нужно выпольнить команду: \q - -Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust -Задать пароль: - sudo -u postgres psql - postgres=> SELECT usename FROM pg_user; - postgres=> alter user postgres password 'PasSecrKey1'; - postgres=> \q - -Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/ -Создаём базу данных выполнив функцию: -CREATE DATABASE CCALM - WITH OWNER = postgres - TEMPLATE = template0 - ENCODING = 'UTF8' - TABLESPACE = pg_default - LC_COLLATE = 'ru_RU.UTF-8' - LC_CTYPE = 'ru_RU.UTF-8' - CONNECTION LIMIT = -1; - -Файл настроек postgresql: sudo mcedit /etc/postgresql/16/main/postgresql.conf - listen_addresses='*' #Разрешить подключение с внешки - #Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой - backslash_quote = on - escape_string_warning = off - standard_conforming_strings = off -Чтобы воводил двоичные данные по старому изменить на: - bytea_output = 'escape' - -Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду" - -Для создания нового пользователя выполнить: - sudo -u postgres psql - CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION; - -Для подключения к определённой базе данных выполнить команду: - sudo -u postgres psql - \list or \l: для отображения всех баз - \connect zholak zholak - \dt для отображения всех таблиц - -или написать со своим IP: host all all 2.133.238.240/24 trust -Для подключения с любых IP адресов в "sudo mcedit /etc/postgresql/16/main/pg_hba.conf" прописать: - host all all 0.0.0.0/0 md5 - Либо с одного конкретного то: host all all 92.46.48.37/24 md5 -А также поменять на listen_addresses = '*' в postgresql.conf -Потом перезагрузить postgres: - sudo service postgresql restart - sudo /etc/init.d/postgresql stop - sudo /etc/init.d/postgresql restart - sudo /etc/init.d/postgresql start -Проверить запущен или нет то: - sudo /etc/init.d/postgresql status -Посмотрель лог загрузки PostGreSQL: - dmesg |grep pg -Чтобы посмотреть чем занят порт выполнить команду: - sudo netstat -tap | grep 5432 - -Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): - pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root - pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres - pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres - 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 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 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 -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 - -Востановить Dump из текстового файла: - 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 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 bigfoot_shop < /home/igor/goods.sql - -Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл: - /mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.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_restore (версии баз должны совпадать а то может не восстановиться): - su - postgres - pg_restore -U -d -1 .dump - 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 transit_new -1 /home/administrator/temp/transit.backup - pg_restore -U postgres -d transit -1 /home/administrator/transit.backup - pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup - - sudo -u postgres psql -d transit -f /tmp/transit.backup - -Или из архива (первоначально задать trust на 127.0.0.1) так: - gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop - -**************************************************************************************************** -Настройка отображения статистики для PostgreSQL: - https://habr.com/ru/articles/488968/ - - SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC; - SELECT * FROM pg_stat_activity - SELECT * FROM pg_stat_replication - SELECT * FROM pg_stat_all_tables - -Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats - -Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL - По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/ - По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU -**************************************************************************************************** -Установка pgagent - sudo apt-get update - sudo apt-get install pgagent -Выполнить в консоли запрос: - psql -h localhost -U postgres - create extension pgagent; - \q -Для разрешения подключения откройте файл pg_hba.conf и замените строку на: - host all all 127.0.0.1/32 md5 - -Можно для теста запустить pgagent с повышенным уровнем логирования: - /usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk - -Если файла нет то пытаюсь его создать: - sudo mcedit /lib/systemd/system/pgagent.service - -[Unit] -Description=PostgreSQL PgAgent Service -After=network.target - -[Service] -Type=simple -User=postgres -ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1 - -[Install] -WantedBy=multi-user.target - -Проверяю что сервис был запущен: - sudo systemctl daemon-reload - sudo systemctl enable pgagent - sudo service pgagent start - sudo systemctl status pgagent - - -Для проверки пробуем подключиться к базе данных - sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres - \q - -Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться: - sudo -u postgres touch /var/lib/postgresql/.pgpass - sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass - sudo -u postgres mcedit /var/lib/postgresql/.pgpass -И прописать в него: - 127.0.0.1:5432:postgres:postgres:PasSecrKey1 -Где используется такой формат: hostname:port:database:username:password -Затем: - sudo systemctl enable pgagent - sudo service pgagent start - sudo service pgagent status -Посмотреть логи: - sudo journalctl -u pgagent - -**************************************************************************************************** -Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт: - - -**************************************************************************************************** -Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move - -**************************************************************************************************** -Установка PostGIS на PostgreSQL выше 9.0 версии: - sudo apt-get install postgis postgresql-9.3-postgis-2.1 -Для 10й версии: - sudo apt install postgresql-10-postgis-2.4 - sudo apt install postgresql-10-postgis-scripts -Для 12й версии: - sudo apt install postgresql-12-postgis-2.4 - -Создать базу данных и выполнть на ней следующие команды: - -- Enable PostGIS (includes raster) - CREATE EXTENSION postgis; - -- Enable Topology - CREATE EXTENSION postgis_topology; - -- fuzzy matching needed for Tiger - CREATE EXTENSION fuzzystrmatch; - -- rule based standardizer - CREATE EXTENSION address_standardizer; - -- example rule data set - CREATE EXTENSION address_standardizer_data_us; - -- Enable US Tiger Geocoder - CREATE EXTENSION postgis_tiger_geocoder; - -У меня начало выдавать 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 -**************************************************************************************************** -Для добавления TOTP авторизации в Postgresql выполнить: - CREATE EXTENSION otp; - - -**************************************************************************************************** - sudo apt-get install libpq-dev libpq-fe -Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен - То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev - apt update -**************************************************************************************************** -Установка phpPgAdmin через репозиторий: -sudo apt-get install phppgadmin -Можно открыть так: http://localhost/phppgadmin -Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all -Чтоб можно было залогинется под пользователем postgres меняем в: -/etc/phppgadmin/config.inc.php extra_login_security в false -Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost'; - -Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". -**************************************************************************************************** -Установка pgAdmin4 в Linux Mint 20.04 (inxi -S) Проверить версию линукса: cat /etc/os-release у меня выдало: NAME="Linux Mint" VERSION="20.3 (Una)" - -Проверить что не записан левый репозиторий для 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 - - +# Install PostgreSQL database + +Coonect lto need server: +```sh +wsl +``` +Or coonect to need server: +```sh +ssh igor@ccalm.org -p 2200 +``` + +**************************************************************************************************** +Установка 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-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13 +Потом создать BAT файл с тем текстом что отобразится при создании каталога базы +База данных создаётся не под пользователем postgres а под локальным пользователем igor +**************************************************************************************************** +Установка PostgreSQL 14 ubuntu 22.04 или 24.04 +```sh + sudo apt-get update + sudo apt-get install postgresql postgresql-contrib -y +``` +Или так если нужно установить PostGIS +```sh + sudo apt-get install postgis +``` +Для удаления PostGIS в месте с зависимыми пакетами: +```sh + sudo apt-get remove --auto-remove postgis && + sudo apt-get purge postgis +``` +Добавить русскую локаль если её нет: +```sh + sudo locale-gen ru_RU && + sudo locale-gen ru_RU.UTF-8 && + sudo locale-gen kk_KZ && + sudo locale-gen kk_KZ.UTF-8 +``` +Проверить какая локаль по умолчанию: +```sh + localectl status +``` +И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры): +```sh + sudo dpkg-reconfigure locales +``` +Для задания пароля в PostgreSQL выполнить: +```sh + sudo -u postgres psql && + \password postgres +``` +Чтобы выйти нужно выпольнить команду: \q + +Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust +Задать пароль: + sudo -u postgres psql + postgres=> SELECT usename FROM pg_user; + postgres=> alter user postgres password 'PasSecrKey1'; + postgres=> \q + +Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/ +Создаём базу данных выполнив функцию: +CREATE DATABASE CCALM + WITH OWNER = postgres + TEMPLATE = template0 + ENCODING = 'UTF8' + TABLESPACE = pg_default + LC_COLLATE = 'ru_RU.UTF-8' + LC_CTYPE = 'ru_RU.UTF-8' + CONNECTION LIMIT = -1; + +Файл настроек postgresql: sudo mcedit /etc/postgresql/16/main/postgresql.conf + listen_addresses='*' #Разрешить подключение с внешки + #Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой + backslash_quote = on + escape_string_warning = off + standard_conforming_strings = off +Чтобы воводил двоичные данные по старому изменить на: + bytea_output = 'escape' + +Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду" + +Для создания нового пользователя выполнить: + sudo -u postgres psql + CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION; + +Для подключения к определённой базе данных выполнить команду: + sudo -u postgres psql + \list or \l: для отображения всех баз + \connect zholak zholak + \dt для отображения всех таблиц + +или написать со своим IP: host all all 2.133.238.240/24 trust +Для подключения с любых IP адресов в "sudo mcedit /etc/postgresql/16/main/pg_hba.conf" прописать: + host all all 0.0.0.0/0 md5 + Либо с одного конкретного то: host all all 92.46.48.37/24 md5 +А также поменять на listen_addresses = '*' в postgresql.conf +Потом перезагрузить postgres: + sudo service postgresql restart + sudo /etc/init.d/postgresql stop + sudo /etc/init.d/postgresql restart + sudo /etc/init.d/postgresql start +Проверить запущен или нет то: + sudo /etc/init.d/postgresql status +Посмотрель лог загрузки PostGreSQL: + dmesg |grep pg +Чтобы посмотреть чем занят порт выполнить команду: + sudo netstat -tap | grep 5432 + +Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): + pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root + pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres + pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres + 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 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 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 -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 + +Востановить Dump из текстового файла: + 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 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 bigfoot_shop < /home/igor/goods.sql + +Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл: + /mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.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_restore (версии баз должны совпадать а то может не восстановиться): + su - postgres + pg_restore -U -d -1 .dump + 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 transit_new -1 /home/administrator/temp/transit.backup + pg_restore -U postgres -d transit -1 /home/administrator/transit.backup + pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup + + sudo -u postgres psql -d transit -f /tmp/transit.backup + +Или из архива (первоначально задать trust на 127.0.0.1) так: + gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop + +**************************************************************************************************** +Настройка отображения статистики для PostgreSQL: + https://habr.com/ru/articles/488968/ + + SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC; + SELECT * FROM pg_stat_activity + SELECT * FROM pg_stat_replication + SELECT * FROM pg_stat_all_tables + +Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats + +Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL + По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/ + По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU +**************************************************************************************************** +Установка pgagent + sudo apt-get update + sudo apt-get install pgagent +Выполнить в консоли запрос: + psql -h localhost -U postgres + create extension pgagent; + \q +Для разрешения подключения откройте файл pg_hba.conf и замените строку на: + host all all 127.0.0.1/32 md5 + +Можно для теста запустить pgagent с повышенным уровнем логирования: + /usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk + +Если файла нет то пытаюсь его создать: + sudo mcedit /lib/systemd/system/pgagent.service + +[Unit] +Description=PostgreSQL PgAgent Service +After=network.target + +[Service] +Type=simple +User=postgres +ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1 + +[Install] +WantedBy=multi-user.target + +Проверяю что сервис был запущен: + sudo systemctl daemon-reload + sudo systemctl enable pgagent + sudo service pgagent start + sudo systemctl status pgagent + + +Для проверки пробуем подключиться к базе данных + sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres + \q + +Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться: + sudo -u postgres touch /var/lib/postgresql/.pgpass + sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass + sudo -u postgres mcedit /var/lib/postgresql/.pgpass +И прописать в него: + 127.0.0.1:5432:postgres:postgres:PasSecrKey1 +Где используется такой формат: hostname:port:database:username:password +Затем: + sudo systemctl enable pgagent + sudo service pgagent start + sudo service pgagent status +Посмотреть логи: + sudo journalctl -u pgagent + +**************************************************************************************************** +Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт: + + +**************************************************************************************************** +Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move + +**************************************************************************************************** +Установка PostGIS на PostgreSQL выше 9.0 версии: + sudo apt-get install postgis postgresql-9.3-postgis-2.1 +Для 10й версии: + sudo apt install postgresql-10-postgis-2.4 + sudo apt install postgresql-10-postgis-scripts +Для 12й версии: + sudo apt install postgresql-12-postgis-2.4 + +Создать базу данных и выполнть на ней следующие команды: + -- Enable PostGIS (includes raster) + CREATE EXTENSION postgis; + -- Enable Topology + CREATE EXTENSION postgis_topology; + -- fuzzy matching needed for Tiger + CREATE EXTENSION fuzzystrmatch; + -- rule based standardizer + CREATE EXTENSION address_standardizer; + -- example rule data set + CREATE EXTENSION address_standardizer_data_us; + -- Enable US Tiger Geocoder + CREATE EXTENSION postgis_tiger_geocoder; + +У меня начало выдавать 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 +**************************************************************************************************** +Для добавления TOTP авторизации в Postgresql выполнить: + CREATE EXTENSION otp; + + +**************************************************************************************************** + sudo apt-get install libpq-dev libpq-fe +Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен + То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev + apt update +**************************************************************************************************** +Установка phpPgAdmin через репозиторий: +sudo apt-get install phppgadmin +Можно открыть так: http://localhost/phppgadmin +Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all +Чтоб можно было залогинется под пользователем postgres меняем в: +/etc/phppgadmin/config.inc.php extra_login_security в false +Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost'; + +Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". +**************************************************************************************************** +Установка pgAdmin4 через докер контейнер + +```sh + sudo mkdir -p /opt/pgAdmin4 && + sudo chmod -R 777 /opt/pgAdmin4 && + sudo chown -R $USER:$USER /opt/pgAdmin4 +``` + +```sh +cd /opt/pgAdmin4 && +cat > docker-compose.yml <<'EOF' +services: + pgadmin: + image: dpage/pgadmin4 + container_name: pgadmin4 + restart: unless-stopped + ports: + - "5050:80" + environment: + PGADMIN_DEFAULT_EMAIL: irigm@mail.ru + PGADMIN_DEFAULT_PASSWORD: 123456 + volumes: + - 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 + + diff --git a/PostgreSQL_replication.md b/PostgreSQL_replication.md index 437db24..08cb70a 100644 --- a/PostgreSQL_replication.md +++ b/PostgreSQL_replication.md @@ -1,12 +1,12 @@ - -Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication - -Подключаюсь к нужной машине -```sh -ssh igor@192.168.200.84 -p 22 -``` - - - - - + +Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication + +Подключаюсь к нужной машине +```sh +ssh igor@192.168.200.84 -p 22 +``` + + + + + diff --git a/PostgreSQL_replication_synchronous.md b/PostgreSQL_replication_synchronous.md index 7d0e3c0..7333d53 100644 --- a/PostgreSQL_replication_synchronous.md +++ b/PostgreSQL_replication_synchronous.md @@ -1,137 +1,137 @@ -# Настройка PostgreSQL в синхронном режиме репликации - -Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики. - ---- - -## **1. Подготовка серверов** -Допустим, у нас есть: -- **Основной сервер (Primary):** `192.168.1.1` -- **Реплика (Standby):** `192.168.1.2` - -Убедитесь, что PostgreSQL установлен на обоих серверах. - ---- - -## **2. Настройка основного сервера (Primary)** - -### **2.1 Разрешаем подключение реплики** -Редактируем `postgresql.conf`: -```sh -sudo nano /etc/postgresql/15/main/postgresql.conf -``` -Добавляем/изменяем параметры: -```conf -wal_level = replica -synchronous_commit = on -synchronous_standby_names = 'replica1' -max_wal_senders = 3 -wal_keep_size = 256MB -hot_standby = on -``` -Редактируем `pg_hba.conf`, добавляя доступ для реплики: -```sh -sudo nano /etc/postgresql/15/main/pg_hba.conf -``` -Добавляем строку: -```conf -host replication replicator 192.168.1.2/32 md5 -``` - -### **2.2 Создаем пользователя для репликации** -```sql -CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password'; -``` - -### **2.3 Перезапускаем PostgreSQL** -```sh -sudo systemctl restart postgresql -``` - ---- - -## **3. Настройка реплики (Standby)** - -### **3.1 Останавливаем PostgreSQL на реплике** -```sh -sudo systemctl stop postgresql -``` - -### **3.2 Копируем данные с основного сервера** -На реплике выполняем: -```sh -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` вручную** -Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную: -```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';\"" -``` -Затем перезапускаем PostgreSQL на реплике: -```sh -sudo systemctl restart postgresql -``` - -### **3.4 Проверяем `primary_conninfo`** -```sh -cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo -``` -Ожидаемый результат: -```ini -primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' -``` -Если строка отсутствует, редактируем файл вручную: -```sh -sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf -``` -Добавляем строку: -```ini -primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' -``` -Сохраняем и перезапускаем PostgreSQL: -```sh -sudo systemctl restart postgresql -``` - ---- - -## **4. Обновляем настройки Primary для работы с репликой** - -На основном сервере (Primary) выполняем: -```sh -sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\"" -``` -Перезапускаем PostgreSQL на Primary: -```sh -sudo systemctl restart postgresql -``` - ---- - -## **5. Проверка работы синхронной репликации** - -### **5.1 Проверяем статус репликации** -На **основном сервере (Primary)** выполняем: -```sql -SELECT application_name, sync_state FROM pg_stat_replication; -``` -Ожидаемый результат: -``` - application_name | sync_state ------------------+------------ - replica1 | sync -``` -Если `sync_state = 'sync'`, значит синхронная репликация работает. - ---- - -## **6. Итоговая проверка** -✅ **Задали `primary_conninfo` вручную на реплике** -✅ **Перезапустили PostgreSQL на реплике** -✅ **Обновили `synchronous_standby_names` на основном сервере** -✅ **Перезапустили PostgreSQL на основном сервере** -✅ **Проверили `pg_stat_replication` на Primary** - -Готово! 🎉 - +# Настройка PostgreSQL в синхронном режиме репликации + +Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики. + +--- + +## **1. Подготовка серверов** +Допустим, у нас есть: +- **Основной сервер (Primary):** `192.168.1.1` +- **Реплика (Standby):** `192.168.1.2` + +Убедитесь, что PostgreSQL установлен на обоих серверах. + +--- + +## **2. Настройка основного сервера (Primary)** + +### **2.1 Разрешаем подключение реплики** +Редактируем `postgresql.conf`: +```sh +sudo nano /etc/postgresql/15/main/postgresql.conf +``` +Добавляем/изменяем параметры: +```conf +wal_level = replica +synchronous_commit = on +synchronous_standby_names = 'replica1' +max_wal_senders = 3 +wal_keep_size = 256MB +hot_standby = on +``` +Редактируем `pg_hba.conf`, добавляя доступ для реплики: +```sh +sudo nano /etc/postgresql/15/main/pg_hba.conf +``` +Добавляем строку: +```conf +host replication replicator 192.168.1.2/32 md5 +``` + +### **2.2 Создаем пользователя для репликации** +```sql +CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password'; +``` + +### **2.3 Перезапускаем PostgreSQL** +```sh +sudo systemctl restart postgresql +``` + +--- + +## **3. Настройка реплики (Standby)** + +### **3.1 Останавливаем PostgreSQL на реплике** +```sh +sudo systemctl stop postgresql +``` + +### **3.2 Копируем данные с основного сервера** +На реплике выполняем: +```sh +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` вручную** +Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную: +```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';\"" +``` +Затем перезапускаем PostgreSQL на реплике: +```sh +sudo systemctl restart postgresql +``` + +### **3.4 Проверяем `primary_conninfo`** +```sh +cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo +``` +Ожидаемый результат: +```ini +primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' +``` +Если строка отсутствует, редактируем файл вручную: +```sh +sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf +``` +Добавляем строку: +```ini +primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1' +``` +Сохраняем и перезапускаем PostgreSQL: +```sh +sudo systemctl restart postgresql +``` + +--- + +## **4. Обновляем настройки Primary для работы с репликой** + +На основном сервере (Primary) выполняем: +```sh +sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\"" +``` +Перезапускаем PostgreSQL на Primary: +```sh +sudo systemctl restart postgresql +``` + +--- + +## **5. Проверка работы синхронной репликации** + +### **5.1 Проверяем статус репликации** +На **основном сервере (Primary)** выполняем: +```sql +SELECT application_name, sync_state FROM pg_stat_replication; +``` +Ожидаемый результат: +``` + application_name | sync_state +-----------------+------------ + replica1 | sync +``` +Если `sync_state = 'sync'`, значит синхронная репликация работает. + +--- + +## **6. Итоговая проверка** +✅ **Задали `primary_conninfo` вручную на реплике** +✅ **Перезапустили PostgreSQL на реплике** +✅ **Обновили `synchronous_standby_names` на основном сервере** +✅ **Перезапустили PostgreSQL на основном сервере** +✅ **Проверили `pg_stat_replication` на Primary** + +Готово! 🎉 + diff --git a/PowerDNS_install.md b/PowerDNS_install.md index d1ea662..17c884c 100644 --- a/PowerDNS_install.md +++ b/PowerDNS_install.md @@ -1,649 +1,566 @@ -Документация по PowerDNS: https://doc.powerdns.com/authoritative/installation.html -**************************************************************************************************** -## 2. Подключаемся к нужному серверу -```sh -ssh igor@192.168.200.85 -p 22 -``` -**************************************************************************************************** -DynDNS на PowerDNS авторитативный сервер тот кто отвечает на те домены которые в его базе (рекурсивный присылает авторитативному запросы) - -DNS на Ubuntu 24.04 согласно инстркции https://phoenixnap.com/kb/powerdns-ubuntu: -Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт) -Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html - -```sh - sudo apt-get update && - sudo apt-get upgrade -y -``` - -```sh - sudo apt-get install pdns-server -y && - sudo apt-get install pdns-backend-pgsql -y && - sudo apt-get install pdns-backend-sqlite -``` ----------------------------------------------------------------------------------------------------- -Для использования 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 < /dev/null < /dev/null < /dev/null <<'EOF' + +allow-axfr-ips=127.0.0.1 +also-notify=127.0.0.1 + +include-dir=/etc/powerdns/pdns.d +launch= + +local-address=156.244.31.209,127.0.0.1 +local-port=53 + +log-dns-details=on +log-dns-queries=yes +log-timestamp=yes +loglevel=4 + +webserver=yes +webserver-address=156.244.31.209 +webserver-allow-from=::/0, 0.0.0.0/0 +webserver-port=8081 + +master=yes +slave=no + +# Также активирую API +api=yes +api-key=40c89f2a-e2f3-4ff8-a245-3547111f6677 +EOF +``` +Проверяю соединение к базе перезапустив PowerDNS: +```sh + sudo systemctl stop pdns && + sudo pdns_server --daemon=no --guardian=no --loglevel=9 +``` +Пытаемся открыть WEB интерфейс +```sh +start http://192.168.200.85:8081 +``` + +Если всё норм выполняем: +```sh + sudo systemctl restart pdns && + sudo systemctl enable pdns && + sudo systemctl status pdns +``` +Проверяем что порт 5300 открыт для DNS: +```sh + sudo ss -alnp4 | grep pdns +``` +Если что-то не получается то проверяем кто слушает на порту 53 +```sh + sudo apt-get install net-tools -y && + sudo netstat -tulnp | grep :53 +``` + +Создаём зону и добавляем запись +```sh +sudo pdnsutil create-zone test ns1.test && +sudo pdnsutil add-record test ccalm A 192.168.200.184 +``` +Добавляем зону и две записи +```sh +sudo pdnsutil create-zone geovizor.top ns1.geovizor.top && +sudo pdnsutil replace-rrset geovizor.top @ SOA "ns1.geovizor.top admin.geovizor.top $(date +%Y%m%d)01 10800 3600 604800 3600" && +sudo pdnsutil add-record geovizor.top ns1 A 156.244.31.209 && +sudo pdnsutil add-record geovizor.top @ A 156.244.31.209 && +sudo pdnsutil add-record geovizor.top * A 156.244.31.209 +``` +Выше задал такие настройки как +```conf +Refresh = 10800 (3 часа) +Retry = 3600 (1 час) +Expire = 604800 (1 неделя) +Minimum = 3600 (1 час) +``` + + +Проверим список зон +```sh +sudo pdnsutil list-all-zones && +sudo pdnsutil list-zone geovizor.top +``` +Проверяем отвечалет ли: +```sh +dig @127.0.0.1 -p 5300 ccalm.test A +``` +```sh +dig @127.0.0.1 -p 53 geovizor.top A +``` +```sh +dig @156.244.31.209 -p 53 geovizor.top A +``` + +### Теперь можно настроить HTTPS для взаимодействия через API с сервером для динамического задания IP адресов + +```sh +API_KEY="40c89f2a-e2f3-4ff8-a245-3547111f6677" +SERVER="156.244.31.209" +ZONE="geovizor.top" + +curl -X PATCH \ + -H "X-API-Key: $API_KEY" \ + -H "Content-Type: application/json" \ + "http://$SERVER:8081/api/v1/servers/localhost/zones/$ZONE" \ + -d '{ + "rrsets": [ + { + "name": "*.geovizor.top.", + "type": "A", + "ttl": 3600, + "changetype": "REPLACE", + "records": [ + { + "content": "5.251.54.197", + "disabled": false + } + ] + } + ] + }' +``` + + + +## ********** Настройка рекурсивного DNS от PowerDNS Recursor 4.9.3 порту 53 будет обрабатывать запросы с локальной машины ********** +Документация: https://doc.powerdns.com/recursor/index.html +Документация: https://docs.powerdns.com/recursor/indexTOC.html +Чтобы работал резольвер от PowerDNS а не тот который от ubuntu на 53 порту нужно: + +```sh + sudo apt-get install pdns-recursor -y +``` + +Скачиваем список корневых серверов DNS (желательно обновлять раз в несколько месяцев) +```sh + sudo wget -O /usr/share/dns/root.hints https://www.internic.net/domain/named.cache && + sudo chown pdns:pdns /usr/share/dns/root.hints +``` + +```sh + sudo mkdir -p /var/run/pdns-recursor && + sudo chown pdns:pdns /var/run/pdns-recursor && + sudo chmod 755 /var/run/pdns-recursor +``` + +```sh + sudo mcedit /etc/powerdns/recursor.conf +``` + +Чтобы все запросы с . уходили на публичные DNS Google: +```conf +#dnssec=off #чтобы не проверял то что записано в forward-zones через корневые серверы +local-address=192.168.200.85,127.0.0.1 +#forward-zones=local=127.0.0.1:5300 # Отправлять .local в авторитативный +#forward-zones+=.=8.8.8.8;8.8.4.4 # Все остальное в интернет +forward-zones=test=127.0.0.1:5300 +#forward-zones-recurse=+test=127.0.0.1:5300 +``` + +Либо если оставить настройку "nssec=process" то нужно прописать в /etc/powerdns/recursor.lua добавить комкнду addNTA, если не добавить то forward-zones не будет отрабатывать. Также можно сделать чтобы dirt.kz не выходил с наружи и с резу перенаправлялся на нужный IP с временем жизни минута 30 секунд. +```lua +addNTA("test", "Local test zone") +``` + +Пробуем запустить без сервиса чтобы посмотреть что выведит в лог +```sh +sudo pdns_recursor --daemon=no --loglevel=9 +``` + +Чтобы запросы переходили на pdns-recursor +Затем перезагружаем: +```sh + sudo systemctl restart pdns-recursor && + sudo systemctl status pdns-recursor +``` + +Проверяем что порт 53 открыт для DNS: +```sh + sudo ss -alnp4 | grep pdns +``` +Если что-то не получается то проверяем кто слушает на порту 53 +```sh + sudo apt-get install net-tools -y && + sudo netstat -tulnp | grep :53 +``` + +Проверяем что преобразование DNS нормально работает: +```sh + dig @192.168.200.85 google.com +``` +если уже настроил PowerDNS сервер то можно попробовать отправить: +```sh + sudo rec_control wipe-cache test && + sudo rec_control wipe-cache ccalm.test && + dig @192.168.200.85 -p 53 ccalm.test +``` +```sh + dig @127.0.0.1 -p 53 ccalm.test A +``` +```sh + dig +trace @192.168.200.85 -p 53 ccalm.test +``` + +Проверяем логи +```sh + sudo journalctl -u pdns-recursor --since "10 min ago" +``` +Или так чтобы найти ошибки: +```sh +sudo journalctl -u pdns-recursor --no-pager | grep -i failed +``` + +```sh +journalctl -u pdns-recursor --no-pager | tail -n 50 +``` + +---------------------------------------------------------------------------------------------------- +## ********** По идее отключать не нужно так как systemd-resolved использует другой IP: 127.0.0.54:53 (Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS) ********** + +Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved) +```sh +sudo mcedit /etc/netplan/50-cloud-init.yaml +``` +И прописываю в него: +```conf + nameserver 127.0.0.1 +``` +After configuration modification update settings: +```sh + sudo netplan apply +``` +Смотрим что сгенерировалось автоматически в resolv.conf после модификации файла +```sh + cat /etc/resolv.conf +``` +Проверяем что интернет не перестал работать: +```sh + ping changelogs.ubuntu.com +``` +Может быть что команда выше пытается по IP6 работать тогда попробовать по +```sh + ping -4 changelogs.ubuntu.com +``` +Либо так: +```sh + ping6 changelogs.ubuntu.com +``` +Взглянем на текущие DNS сервера, у меня такое выдало: DNS Servers: 195.210.46.195 195.210.46.132 на команду ниже: +```sh + resolvectl status +``` +Отредактировал файл /etc/systemd/resolved.conf заменив nameservers на 8.8.8.8 и 8.8.4.4 +```sh +sudo mcedit /etc/systemd/resolved.conf +``` + +Проверяем структуру файла: +```sh +sudo yamllint /etc/netplan/50-cloud-init.yaml +``` +Применяем настройки: +```sh + sudo netplan apply +``` +Проверяем что настройки изменились: +```sh + resolvectl status +``` +Изменил /etc/systemd/resolved.conf настроив так: +```conf + [Resolve] + DNS=8.8.8.8 8.8.4.4 + FallbackDNS=1.1.1.1 1.0.0.1 +``` +Потом перезагрузил: +```sh + sudo systemctl restart systemd-resolved +``` +Проверяем что заняло порт 53 командой: +```sh + sudo lsof -i :53 +``` +Выдало: +```text + COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME + systemd-r 670 systemd-resolve 13u IPv4 20070 0t0 UDP localhost:domain + systemd-r 670 systemd-resolve 14u IPv4 20071 0t0 TCP localhost:domain (LISTEN) +``` + +Останавливаем systemd-resolved (поисковик IP по домену по умолчанию от Ubuntu) +```sh + sudo systemctl stop systemd-resolved && + sudo systemctl disable systemd-resolved +``` + +---------------------------------------------------------------------------------------------------- +## ********** Устанавливаю PowerAdmin (желательно в докере устанавливать) ********** +Устанавливаю PowerAdmin согласно: https://phoenixnap.com/kb/powerdns-ubuntu#ftoc-heading-6 +```sh + sudo apt install libpq-dev -y && + sudo apt install python3-dev -y && + sudo apt install python3-flask -y && + sudo apt install python3-pip -y +``` +```sh + sudo apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl && + sudo apt install -y nodejs && + sudo apt install -y yarn +``` +устанавливаем другие зависимости: +```sh + sudo apt install npm -y && + sudo apt remove yarn -y && + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && + echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && + sudo apt update && + sudo apt install yarn -y && + yarn --version && + sudo yarn install --pure-lockfile +``` + +Create user for run PowerDNS Admin +```sh + sudo useradd -m -s /bin/bash powerdns-admin +``` +Clone the PowerDNS Admin Git repository to /opt/web/powerdns-admin +```sh + cd ~ + sudo git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /opt/web/powerdns-admin && + sudo chown -R powerdns-admin:powerdns-admin /opt/web/powerdns-admin && + cd /opt/web/powerdns-admin +``` +Настраиваем переменные окружения: +```sh + sudo -u powerdns-admin -s && + cd /opt/web/powerdns-admin +``` +Устанавливаем перенеммые окружения и необходимые скрипты +```sh + python3 -mvenv ./venv && + source ./venv/bin/activate && + pip install --upgrade pip && + pip install -r requirements.txt +``` +Создаю базу данных +```sh + mkdir /opt/web/powerdns-admin/data && + sqlite3 /opt/web/powerdns-admin/data/pdnsa.sqlite3 ".databases" +``` +Cекретный ключ можно сгенерировать при помощи такой команды: +```sh + python3 -c "import secrets; print(secrets.token_hex(16))" +``` +Такой сгенерил для 192.168.200.85: 1c100fb414b8116725a04015fbaf907e + +Конфигугрируем PowerDNS Admin. +Для начала копирую пример конфигураци, потом открываю его в редакторе: +```sh + cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py +``` +```sh + mcedit /opt/web/powerdns-admin/configs/production.py +``` +И редактируем следующие строки: +```conf + #import urllib.parse + SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd0' + SQLA_DB_PASSWORD = 'changeme' +``` + +Также настраиваю подключение к базе данных (сам строку составил): +```conf + SQLALCHEMY_DATABASE_URI = 'postgresql://powerdns:y7HMHi0ATxx1VC3UU5WG@127.0.0.1/powerdnsadmin' +``` +Либо к новой базе данных: + +```conf + SQLALCHEMY_DATABASE_URI = 'sqlite:////opt/web/powerdns-admin/data/pdnsa.sqlite3' +``` + +Остальное коментирую: +```conf + #SQLA_DB_USER = 'powerdns' + #SQLA_DB_PASSWORD = 'y7HMHi0ATxx1VC3UU5WG' + #SQLA_DB_HOST = '127.0.0.1' + #SQLA_DB_NAME = 'powerdnsadmin' + #SQLALCHEMY_DATABASE_URI = 'postgres://{}:{}@{}/{}'.format( + # urllib.parse.quote_plus(SQLA_DB_USER), + # urllib.parse.quote_plus(SQLA_DB_PASSWORD), + # SQLA_DB_HOST, + # SQLA_DB_NAME + #) + #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db') +``` + + +Экспортируем переменную: +```sh + cd /opt/web/powerdns-admin && + export FLASK_CONF=../configs/production.py && + export FLASK_APP=powerdnsadmin/__init__.py +``` + +```sh +pip install --upgrade pip setuptools wheel && +pip install setuptools && +pip install flask-mail +``` + +Upgrade the database schema: +```sh + export PYTHONWARNINGS="ignore" && + flask db upgrade +``` + +Если выдаёт ошибки то правим исзодный код: +```sh + mcedit /opt/web/powerdns-admin/powerdnsadmin/lib/utils.py +``` +И заменяем экранирование +```python + # строку + from distutils.version import StrictVersion + # На строки + from packaging.version import Version as StrictVersion + from setuptools._distutils.util import strtobool +``` + + + +```sh + deactivate +``` + +```sh +sudo su - powerdns-admin +``` +```sh + cd /opt/web/powerdns-admin && + flask assets build +``` + +Можно запускать (нужно задать переменные окружения которые выше): +```sh + cd /opt/web/powerdns-admin && + source venv/bin/activate && + ./run.py +``` + + +Проще запустить с использованием SQLite по инструкции из: https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/master/docs/wiki/install/Running-PowerDNS-Admin-on-Ubuntu-or-Debian.md + + +Теперь можно открыть +```sh +open http://192.168.200.85:9191/login +``` +Для создания административного пользователя нажимаем "Create an account" пример https://orcacore.com/set-up-powerdns-ubuntu-22-04/ +Создал с именем igor и ппаролем !Ii123456 + + +!!! Проверь что PowerDNS API включён в /etc/powerdns/pdns.conf !!! + + + +---------------------------------------------------------------------------------------------------- +Настраиваем запус на постоянную работу через Gunicorn и systemd + +```sh + cd /opt/web/powerdns-admin && + source venv/bin/activate && + pip install gunicorn +``` + +```sh +exit +``` +Создаю файл службы: +```sh +sudo tee /etc/systemd/system/powerdns-admin.service > /dev/null <<'EOF' +[Unit] +Description=PowerDNS-Admin Service +After=network.target + +[Service] +User=powerdns-admin +Group=powerdns-admin +WorkingDirectory=/opt/web/powerdns-admin +Environment="FLASK_CONF=../configs/production.py" +Environment="FLASK_APP=powerdnsadmin/__init__.py" +ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --workers 2 --bind 192.168.200.85:9191 "powerdnsadmin:create_app()" +Restart=always +RestartSec=5s + +[Install] +WantedBy=multi-user.target +EOF +``` + +```sh + sudo systemctl enable powerdns-admin.service && + sudo systemctl start powerdns-admin.service +``` +```sh +sudo systemctl status powerdns-admin.service +``` +```sh +sudo journalctl -u powerdns-admin.service +``` + +```sh +start http://192.168.200.85:9191/login ``` \ No newline at end of file diff --git a/PowerDNS_install_MarinaDB.md b/PowerDNS_install_MarinaDB.md new file mode 100644 index 0000000..3502738 --- /dev/null +++ b/PowerDNS_install_MarinaDB.md @@ -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 +``` diff --git a/PowerDNS_install_PostgreSQL.md b/PowerDNS_install_PostgreSQL.md new file mode 100644 index 0000000..3436b50 --- /dev/null +++ b/PowerDNS_install_PostgreSQL.md @@ -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 +``` +---------------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/PowerDNS_install_SQIite3.md b/PowerDNS_install_SQIite3.md new file mode 100644 index 0000000..8d96199 --- /dev/null +++ b/PowerDNS_install_SQIite3.md @@ -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/ diff --git a/PowerDNS_doker_install.md b/PowerDNS_install_doker.md similarity index 74% rename from PowerDNS_doker_install.md rename to PowerDNS_install_doker.md index 75cd0b3..1c6bb4d 100644 --- a/PowerDNS_doker_install.md +++ b/PowerDNS_install_doker.md @@ -1,7 +1,14 @@ -Устанавливаем PowerDNS через Docker Compose в директорию /opt/powerdnsa +# Устанавливаем авторитативный PowerDNS через Docker Compose в директорию /opt/powerdnsa + Эту версию пробовал: https://hub.docker.com/r/powerdns/pdns-auth-48 PowerDNS Authoritative +Connect to CCALM Turkish infrastructure: +```sh +ssh igor@156.244.31.209 -p 2200 +``` + + ```sh ssh-keygen -R 192.168.200.85 ``` @@ -22,6 +29,94 @@ ssh igor@192.168.200.85 -p 22 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 sudo apt install sqlite3 -y @@ -34,7 +129,7 @@ sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 ".databases" Create database structure ```sql -sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 < /dev/null < /dev/null <<'EOF' services: powerdns: image: powerdns/pdns-auth-48 diff --git a/README.md b/README.md index fbe9e47..5608400 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# Ubuntu_docs - +# Ubuntu_docs + Установка различных программ в Ubuntu \ No newline at end of file diff --git a/Tomcat_install.md b/Tomcat_install.md index 4adac18..d3e070d 100644 --- a/Tomcat_install.md +++ b/Tomcat_install.md @@ -1,159 +1,159 @@ -**************************************************************************************************** -Установка TomCat на Ubuntu 23.04 по руководству из https://www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804 - -```sh -ssh administrator@10.101.1.3 -p 22 -``` - -Обновляем пакеты: -```sh - sudo apt-get update -``` -Устанавливаем Java Development Kit 8 (не ниже 8й версии) (так старая установиться: sudo apt-get install default-jdk) -```sh - sudo apt install openjdk-21-jdk openjdk-21-jre -y && - java -version -``` -Создаём группу для томкат пользователя: -```sh - sudo groupadd tomcat -``` -Создаём пользователя: -```sh - sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat -``` -Скачиваю tomcat: -```sh - cd /tmp && - curl -O https://archive.apache.org/dist/tomcat/tomcat-10/v10.1.30/bin/apache-tomcat-10.1.30.tar.gz -``` -Извлекаю tomcat: -```sh - sudo mkdir /opt/tomcat && - sudo tar xzvf apache-tomcat-10*.tar.gz -C /opt/tomcat --strip-components=1 -``` -Обновляю владельца папки: -```sh - cd /opt/tomcat && - sudo chown tomcat:tomcat -R /opt/tomcat && - sudo chgrp -R tomcat /opt/tomcat && - sudo chmod -R g+r conf && - sudo chmod g+x conf && - sudo chown -R tomcat webapps/ work/ temp/ logs/ -``` -Указываем где находится java: -```sh - sudo update-java-alternatives -l - Выдаст: /usr/lib/jvm/java-1.21.0-openjdk-amd64 - sudo mcedit /etc/environment - Записать: JAVA_HOME="/usr/lib/jvm/java-1.21.0-openjdk-amd64" - echo $JAVA_HOME -``` -Пропишу на всяк случай и $CATALINA_HOME (не обязательно) -```sh - sudo mcedit /etc/environment - Записать: CATALINA_HOME="/opt/tomcat" - echo $CATALINA_HOME -``` -Создаём сервис для автозапуска в Ubuntu 16: https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04): -```sh - sudo mcedit /etc/systemd/system/tomcat.service -``` -И записываем в него следующее содержимое: -```conf -[Unit] -Description=Apache Tomcat Web Application Container -After=network.target - -[Service] -Type=forking - -Environment=JAVA_HOME=/usr/lib/jvm/java-1.21.0-openjdk-amd64 -Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid -Environment=CATALINA_HOME=/opt/tomcat -Environment=CATALINA_BASE=/opt/tomcat -Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' -Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' - -ExecStart=/opt/tomcat/bin/startup.sh -ExecStop=/opt/tomcat/bin/shutdown.sh - -User=tomcat -Group=tomcat -UMask=0007 -RestartSec=10 -Restart=always - -[Install] -WantedBy=multi-user.target -``` - -Затем: -```sh - sudo systemctl daemon-reload && - sudo systemctl start tomcat && - sudo systemctl status tomcat -``` -Для автозапуска сервиса томката выполнить команду: -```sh - sudo systemctl enable tomcat -``` -Разрешаем порт в фаерволе: -```sh - sudo ufw allow 8080 -``` -Для использования менеджера веб. приложений томката настраиваем пользователя: -```sh - sudo mcedit /opt/tomcat/conf/tomcat-users.xml -``` -В этот файл добавить роли в раздел ... запихнуть: -```xml - - - - - - - -``` -Также закоментить содержимое тега 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 - - - -``` -Для того чтобы поменять порт на 80 нужно в: sudo mcedit /opt/tomcat/conf/server.xml -```xml - -``` -Также при помощи authbind разрешить не-root программе быть назначенными младшим портам: -```sh - sudo apt-get install authbind && - sudo touch /etc/authbind/byport/80 && - sudo chmod 500 /etc/authbind/byport/80 && - sudo chown tomcat /etc/authbind/byport/80 -``` - Создать файл $CATALINA_HOME/bin/setenv.sh и добавить строку: -```conf - CATALINA_OPTS="-Djava.net.preferIPv4Stack=true" - AUTHBIND=yes -``` - Также заменить в $CATALINA_HOME/bin/startup.sh заменить: exec "$PRGDIR"/"$EXECUTABLE" start "$@" на -```conf - exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@" -``` - -Так как размер WAR архива может быть большим чем 52428800 байт то в файле sudo mcedit /opt/tomcat/webapps/manager/WEB-INF/web.xml увеличиваем параметр "max-file-size" до 100000000 байт. - -Перезагружаю томкат: -```sh - sudo service tomcat restart -``` -Останавливаю томкат: -```sh - sudo service tomcat stop -``` -Теперь можно запускать WEB интерфейс и деплоить проект: -```sh -start http://91.215.138.115:8090 +**************************************************************************************************** +Установка TomCat на Ubuntu 23.04 по руководству из https://www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804 + +```sh +ssh administrator@10.101.1.3 -p 22 +``` + +Обновляем пакеты: +```sh + sudo apt-get update +``` +Устанавливаем Java Development Kit 8 (не ниже 8й версии) (так старая установиться: sudo apt-get install default-jdk) +```sh + sudo apt install openjdk-21-jdk openjdk-21-jre -y && + java -version +``` +Создаём группу для томкат пользователя: +```sh + sudo groupadd tomcat +``` +Создаём пользователя: +```sh + sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat +``` +Скачиваю tomcat: +```sh + cd /tmp && + curl -O https://archive.apache.org/dist/tomcat/tomcat-10/v10.1.30/bin/apache-tomcat-10.1.30.tar.gz +``` +Извлекаю tomcat: +```sh + sudo mkdir /opt/tomcat && + sudo tar xzvf apache-tomcat-10*.tar.gz -C /opt/tomcat --strip-components=1 +``` +Обновляю владельца папки: +```sh + cd /opt/tomcat && + sudo chown tomcat:tomcat -R /opt/tomcat && + sudo chgrp -R tomcat /opt/tomcat && + sudo chmod -R g+r conf && + sudo chmod g+x conf && + sudo chown -R tomcat webapps/ work/ temp/ logs/ +``` +Указываем где находится java: +```sh + sudo update-java-alternatives -l + Выдаст: /usr/lib/jvm/java-1.21.0-openjdk-amd64 + sudo mcedit /etc/environment + Записать: JAVA_HOME="/usr/lib/jvm/java-1.21.0-openjdk-amd64" + echo $JAVA_HOME +``` +Пропишу на всяк случай и $CATALINA_HOME (не обязательно) +```sh + sudo mcedit /etc/environment + Записать: CATALINA_HOME="/opt/tomcat" + echo $CATALINA_HOME +``` +Создаём сервис для автозапуска в Ubuntu 16: https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04): +```sh + sudo mcedit /etc/systemd/system/tomcat.service +``` +И записываем в него следующее содержимое: +```conf +[Unit] +Description=Apache Tomcat Web Application Container +After=network.target + +[Service] +Type=forking + +Environment=JAVA_HOME=/usr/lib/jvm/java-1.21.0-openjdk-amd64 +Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid +Environment=CATALINA_HOME=/opt/tomcat +Environment=CATALINA_BASE=/opt/tomcat +Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' +Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' + +ExecStart=/opt/tomcat/bin/startup.sh +ExecStop=/opt/tomcat/bin/shutdown.sh + +User=tomcat +Group=tomcat +UMask=0007 +RestartSec=10 +Restart=always + +[Install] +WantedBy=multi-user.target +``` + +Затем: +```sh + sudo systemctl daemon-reload && + sudo systemctl start tomcat && + sudo systemctl status tomcat +``` +Для автозапуска сервиса томката выполнить команду: +```sh + sudo systemctl enable tomcat +``` +Разрешаем порт в фаерволе: +```sh + sudo ufw allow 8080 +``` +Для использования менеджера веб. приложений томката настраиваем пользователя: +```sh + sudo mcedit /opt/tomcat/conf/tomcat-users.xml +``` +В этот файл добавить роли в раздел ... запихнуть: +```xml + + + + + + + +``` +Также закоментить содержимое тега 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 + + + +``` +Для того чтобы поменять порт на 80 нужно в: sudo mcedit /opt/tomcat/conf/server.xml +```xml + +``` +Также при помощи authbind разрешить не-root программе быть назначенными младшим портам: +```sh + sudo apt-get install authbind && + sudo touch /etc/authbind/byport/80 && + sudo chmod 500 /etc/authbind/byport/80 && + sudo chown tomcat /etc/authbind/byport/80 +``` + Создать файл $CATALINA_HOME/bin/setenv.sh и добавить строку: +```conf + CATALINA_OPTS="-Djava.net.preferIPv4Stack=true" + AUTHBIND=yes +``` + Также заменить в $CATALINA_HOME/bin/startup.sh заменить: exec "$PRGDIR"/"$EXECUTABLE" start "$@" на +```conf + exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@" +``` + +Так как размер WAR архива может быть большим чем 52428800 байт то в файле sudo mcedit /opt/tomcat/webapps/manager/WEB-INF/web.xml увеличиваем параметр "max-file-size" до 100000000 байт. + +Перезагружаю томкат: +```sh + sudo service tomcat restart +``` +Останавливаю томкат: +```sh + sudo service tomcat stop +``` +Теперь можно запускать WEB интерфейс и деплоить проект: +```sh +start http://91.215.138.115:8090 ``` \ No newline at end of file diff --git a/Traefik_install.md b/Traefik_install.md new file mode 100644 index 0000000..9bdbca3 --- /dev/null +++ b/Traefik_install.md @@ -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 +``` \ No newline at end of file diff --git a/Traefik_install_CCALM.md b/Traefik_install_CCALM.md new file mode 100644 index 0000000..3761c83 --- /dev/null +++ b/Traefik_install_CCALM.md @@ -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 +``` \ No newline at end of file diff --git a/Ubuntu.md b/Ubuntu.md index 9e4d429..6c75866 100644 --- a/Ubuntu.md +++ b/Ubuntu.md @@ -1,3666 +1,3309 @@ -**************************************************************************************************** -Настройка времени и NTP сервера -Устанавливаем зону -```sh - sudo timedatectl set-timezone Asia/Almaty -``` -```conf - sudo date --set="2025-01-07 21:05:00.000" - sudo timedatectl set-ntp on - sudo apt install ntp - ntpq -p -``` -**************************************************************************************************** -Добавляем нового пользователя -```sh - sudo adduser sabyrzhan -``` -```sh - sudo usermod -aG sudo имя_пользователя -``` -**************************************************************************************************** -Установка cinamon на Ubuntu 22.04 и 24/04: -```sh - sudo apt update && sudo apt upgrade -y - sudo apt install cinnamon -y - sudo reboot -``` -Настройка клавиатуры в cinamon удаляем: ibus -```sh - sudo apt-get remove ibus -``` -Добавить в конец файла: sudo mcedit /etc/fstab -/media/sf_O_DRIVE /mnt/O_DRIVE none bind 0 0 -/media/sf_D_DRIVE /mnt/D_DRIVE none bind 0 0 - -sudo chmod 777 /mnt/O_DRIVE -sudo usermod -aG vboxsf $USER - - -**************************************************************************************************** -Для монтирования O_DRIVE в VitrualBox прописывать точку монтирования: /mnt/O_DRIVE -**************************************************************************************************** -Авторизация на базе ключей SSH https://selectel.ru/blog/ssh-authentication/ - -**************************************************************************************************** -Для добавления ярлыка в меню пуск создав файл *.desktop -```sh -cd /usr/share/applications -sudo tee IDEA_JEE.desktop > /dev/null < /sys/module/snd_hda_intel/parameters/power_save -Фаил авто выполнения скрипта при загрузки: - sudo mcedit /etc/rc.local -В начале файла поставить: #!/bin/bash - sudo chmod +x /etc/rc.local - sudo mcedit /etc/systemd/system/rc-local.service - -[Unit] - Description=/etc/rc.local Compatibility - ConditionPathExists=/etc/rc.local - -[Service] - Type=forking - ExecStart=/etc/rc.local start - TimeoutSec=0 - StandardOutput=tty - RemainAfterExit=yes - SysVStartPriority=99 - -[Install] - WantedBy=multi-user.target - - sudo systemctl enable rc-local - sudo systemctl status rc-local -**************************************************************************************************** -Для того чтобы консоль бястро не отключалась добавить в конец файла: sudo mcedit /etc/sysctl.conf - net.ipv4.tcp_keepalive_time = 600 - net.ipv4.tcp_keepalive_intvl = 10 - net.ipv4.tcp_keepalive_probes = 6 -Перезагрузить: - sysctl -p -Проверить: - cat /proc/sys/net/ipv4/tcp_keepalive_time -**************************************************************************************************** -Обновить ядро Ubuntu на самое новое: - uname -r -Выдало: - 4.15.0-167-generic - 5.4.0-99-generic -Пытаюсь поменять на 5.13.0 или 5.16.10 ищем ядро: - sudo apt-cache search linux-image | more -Устанавливаем ядро: - sudo apt-get install linux-image-5.13.0-1029-oem - - sudo apt install gdebi -**************************************************************************************************** -Тест памяти Ubuntu: -Объем оперативной памяти: - free -h - sudo apt install memtester -Для примера запустим проверку блока ОЗУ, размером в 100 мегабайт состоящую из двух циклов: - sudo memtester 100M 2 -Для более тщательного тестирования памяти можно воспользоваться утилитой memtest86+ из меню загрузчика Grub. -**************************************************************************************************** -Если grub загрузчик установился на флешку то так можно установать на нужный диск - sudo fdisk -l - sudo grub-install --root-directory=/ /dev/sda -В Ubuntu server при неправильном выключениии высвечивается меню grub без времени чтобы его отключить: -Для поиска Windows если он исчез: - sudo os-prober - sudo update-grub -Или так: - sudo mcedit /etc/default/grub - GRUB_DISABLE_OS_PROBER=true -Или так: - sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt update - sudo apt install -y boot-repair && boot-repair -**************************************************************************************************** -Установка и добавление себя в sudo - su -c "apt-get update" - su -c "apt-get -y install sudo" - su -c "addgroup ваш_логин sudo" -**************************************************************************************************** -Установка сервиса времени и часовой пояс -apt-get -y install ntp -dpkg-reconfigure tzdata -**************************************************************************************************** -0) Для того чтобы архивировать и извлечь каталог: - tar -cvf istransit.tar /opt/www/istransit.kz - - tar -xvf /opt/www/istransit.tar -C /opt/www -0)Выключить комп: - shutdown -h now -1)Список процессов - top или лучше установить htop - -Монтирование образа CD - mount -o loop /some.iso /mnt/point - mount -o loop -t iso9660 - - umount DIRECTORY - umount DEVICE_NAME -Посмотреть точки монтирования дисков: - sudo fdisk -l - -3.1) Посмотреть мак адрес по адресу /etc/udev/rules.d/z25_persistent-net.rules - -4)DNS сервера в ubuntu прописываються в /etc/resolv.conf (теперь в другом месте см. инет) - nameserver 212.19.149.53 - nameserver 212.19.149.54 - -5)Список репозиториев в ubuntu расположен в nano /etc/apt/sources.list - apt-get update - apt-get install mc - apt-get remove mc - -Если mc не найден то добавить в репозитории nano /etc/apt/sources.list эту строку: - deb http://archive.ubuntu.com/ubuntu/ jaunty universe - -6)Переменные окружения - export PATH=$PATH:/usr/local/bin:/usr/local/sbin - alias mc='mc -c' - mc -7)Отобразить переменные окружения: export - -8)Настройка PPPoE соединения комманда: pppoeconf -Соединятся командой: sudo pon dsl-provider -Завершить соединение: sudo poff dsl-provider - -**************************************************************************************************** - -Выполнение скрипта - sh Check.sh -**************************************************************************************************** -Символическая ссылка Symbolic -ссылка на папку: - ln -s /mnt/data/ftp /var/www/html/upload -********** Настраиваю прокси сервер ********** - sudo mcedit /etc/environment -И в заголовок пишу: - http_proxy=http://192.168.1.89:8888 - https_proxy=http://192.168.1.89:8888 -или - http_proxy=http://192.168.0.170:7777 -**************************************************************************************************** -Для того чтобы посмотреть размер файлов: - ncdu -Для определения сколько свободного места выполнить: - df -h -**************************************************************************************************** -Чтобы вывести информацию по ОЗУ (ram) выполните команду: - sudo lshw -C memory -**************************************************************************************************** -Установка компилятора для разработки на c++ gcc - sudo apt-get update -y - sudo apt-get upgrade -y - sudo apt-get install perl -y - sudo apt-get install build-essential -Для компиляции по 32 битный Linux (В еклипсе прописать g++ -m32 а также gcc -m32 а также g++ -m32): - sudo apt-get install gcc-multilib - sudo apt-get install g++-multilib -Для eclipse установить: - sudo apt install default-jre -**************************************************************************************************** -Установка кросс-компилятора Cross Compilers для Raspberry Pi на Ubuntu: https://github.com/raspberrypi/tools - sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf - -Note: if building for Pi0/1 using --with-arch=armv6 --with-float=hard --with-fpu=vfp is recommended (and matches the default flags of the toolchains included here). - - - - /home/igor/toolchain/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf - -**************************************************************************************************** -записать информацию о расположении загрузчика системы в фаил -[root]# dd if=/dev/hda3 of=/mnt/floppy/bootsect.lnx bs=512 count=1 -**************************************************************************************************** -Компиляция WIFI драйвера -Для того чтобы узнать версию ядра "4.15.0-23-generic": - uname -r -Внмание: исходники ядра должны быть той же версии что и сейчас работают в системе! -Вывести информацию о USB устройствах: - lsusb -v -У меня выдало: -Для того чтобы посмотреть что подсоединено к pci: - lspci -v -Minipcie -Для того чтобы посмотреть всех устройств: - lsdev -v - -И так у меня RTL8821AE пробую скачать драйвер отсюда: - - -Загрузка и проверка модулей: - lsmod -**************************************************************************************************** -Подключение к wifi -Настраиваемрегион командой: iw reg set CN - - -То что мы живём в китае а то 5G WIFI не работает -sudo -i -echo "options cfg80211 ieee80211_regdom=CN" > /etc/modprobe.d/cfg80211.conf -exit - -sudo ifconfig wlan0 up -$ sudo iwconfig wlan0 essid Node5 -$ sudo dhclient -v wlan0 -http://help.ubuntu.ru/wiki/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E#%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_wifi -**************************************************************************************************** -Активация DHCP клиента: -**************************************************************************************************** -Создание нового пользователя с домашней дерикторией: - sudo useradd igor -g www-data -Задаём пароль: - sudo passwd igor -Добавляем пользователя в дополнительную группу (группы через запятую): - sudo usermod -a -G www-data administrator - sudo usermod -a -G tomcat administrator - sudo usermod -a -G sudo igor -Разрешить доступ к последовательному порту Для этого помещаем себя в группу dialout - sudo usermod -a -G dialout igor -Для проверки настроек: - id igor - groups igor -Назначить sudo привилегии пользователю: - mcedit /etc/sudoers - igor ALL=(ALL:ALL) ALL -Рекурсивно назначить вледельца папки: - - - sudo chown tomcat:tomcat -R /opt/tomcat/geoserver/ROOT/data - sudo chown tomcat:tomcat ~/CCALM.war - sudo chown tomcat:tomcat ~/SoilScience.war - sudo chown : -R /.blabla -Выставляем права на папку: - sudo chmod -R 774 /var/www/ -Для удаления пользователя c домашней и mail директорией выполнить: - userdel -r igor -**************************************************************************************************** -Монтирование USB Flash -mount -t vfat /dev/sda1 /flash -umount /flash -Автомонтирование USB при запуске системы http://www.fight.org.ua/hdddrives/linux_disk_mount_fstab.html http://help.ubuntu.ru/wiki/fstab: -Выполнить команду: sudo blkid -Найти строку: - /dev/sdb1: LABEL="IGOR_8GB" UUID="94D2-1374" TYPE="vfat" - /dev/sdb1: LABEL="SSD_2_5" UUID="14A3BBD52CB2F1C3" TYPE="ntfs" PARTUUID="56c83443-01" - /dev/sdb5: UUID="17C59CBD70BFFBA5" TYPE="ntfs" PARTUUID="f9aec734-05" - -Добавить в sudo mcedit /etc/fstab следующее: - UUID=94D2-1374 /media/usb vfat rw,auto,user,exec,async 0 0 - UUID=7086E7317C4E478E /mnt/O_DRIVE ntfs-3g defaults 0 0 - /dev/sda3 /mnt/ssd ntfs-3g rw,auto,user,exec,async 0 0 - /dev/sda3 /mnt/windows ntfs-3g defaults 0 0 - -Монтирование сетевой файловой системы: - mount -t cifs //192.168.0.11/o /mnt/smb -o username=igor,password=1245,iocharset=utf8,codepage=cp866 -Для автоматического монтирования в /etc/fstab записать: //192.168.0.11/o /mnt/smb cifs username=igor,password=1245,rw,auto,noexec,iocharset=utf8,codepage=cp866,uid=1000,gid=100 0 0 -**************************************************************************************************** -Перенос системы на другой жеский диск (также можно делать недельные бакапы системы, на атоме установленна) -Создаём копию системы на флешку: -sudo tar cvpzf /media/usb/backup.tgz --exclude=/var/www --exclude=/etc/fstab --exclude=/boot/grub/grub.cfg --exclude=/mnt --exclude=/media --exclude=/proc --exclude=/lost+found --exclude=/sys / -Потом извлекаем на новую установленную систему командой: sudo tar xvpfz /backup.tgz -C / -Можно также скопировав с диска на диск без синхронизации: -**************************************************************************************************** -Измененние раздела без перезагрузки сервера после увеличения размера жеского диска (на основе: https://serverspace.ru/support/help/uvelichenie-diskovogo-prostranstva-ubuntu-18/) -ТОЛЬКО ДЛЯ РАЗДЕЛОВ LVM -Посмотреть список дисков: - df -h - lsblk -Выполняем сканирование конфигурации и передачу данных ядру ОС: - echo 1 > /sys/block/sda/device/rescan -Запускаем утилиту: - parted -Выводим таблицу разделов: - p -Результат такой (для запоминания): - Model: VMware Virtual disk (scsi) - Disk /dev/sda: 537GB - Sector size (logical/physical): 512B/512B - Partition Table: gpt - Disk Flags: - - Number Start End Size File system Name Flags - 1 1049kB 2097kB 1049kB bios_grub - 2 2097kB 215GB 215GB ext4 - -Запускаем процедуру слияния: - (parted) resizepart 2 -Где «2» означает номер тома, на котором происходит изменение дискового пространства, вбиваю нужный размер: - 537GB -Потом: - quit -Информируем OC об изменениях: - pvresize /dev/sda2 -Меняем значение тома командой: - lvextend -r -l +100%FREE /dev/mapper/vgroup1-root -Проверяем результат: - df –h - ----------------------------------------- -Вариант для не виртуальной файловой системы (https://habr.com/ru/post/450444/): -Проверяем размер: - sudo fdisk -l -Выдало: - Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors - Units: sectors of 1 * 512 = 512 bytes - Sector size (logical/physical): 512 bytes / 512 bytes - I/O size (minimum/optimal): 512 bytes / 512 bytes - Disklabel type: gpt - Disk identifier: 955FD603-437A-4A80-B5F6-90F1C2CCD1D0 - - Device Start End Sectors Size Type - /dev/sda1 2048 4095 2048 1M BIOS boot - /dev/sda2 4096 419921875 419917780 200,2G Linux filesystem -Удаляем раздел и создаём новый командами: - sudo fdisk /dev/sda - p - d - n (Метку файловой системы не удаляем) -Обновляем: - sudo partprobe /dev/sda -Перезаписываем метаданные файловой системы: - sudo resize2fs /dev/sda2 -Проверяем: - sudo fdisk -l -**************************************************************************************************** -Добавление нового пользователя см. cat /etc/passwd и cat /etc/group - sudo useradd tester -d /var/www/www.dirt.kz -g 33 -s /usr/sbin/nologin - sudo passwd tester - sudo userdel tester -**************************************************************************************************** -Настройка rsync для резервного копирования файлов в отдельную папку http://ashep.org/2010/backup-v-linux-nastraivaem-rsync-server/#.VPrB0_mQCNY -1 й командой на флешку: rsync -rlvt --modify-window=1 --delete /var/www /media/usb -Меняем редактор по умолчанию на тот который от MC: - export EDITOR=mcedit -Для добавления в cron для дневной синхронизации: - crontab -e -И добавляем строчку чтоб это происходило в 3 часа ночи: - 0 3 * * * rsync -rlvt --modify-window=1 --delete /var/www /media/usb -**************************************************************************************************** -Настройка cron: - sudo update-alternatives --config editor - update-alternatives --config editor - export EDITOR=mcedit -Или записать в "sudo mcedit /etc/environment" строку "EDITOR=mcedit" - sudo crontab -e - sudo crontab -e -u www-data - sudo crontab -e -u tomcat -В файле прописать: - */5 * * * * wget -O /dev/null -q 'http://www.bigfoottrade.kz/cashier/work.php' - */2 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/globalstar.php' - 10 0 * * * wget -O /dev/null -q 'http://www.bigfoottrade.kz/sitemap.php' - 0 * * * * wget -O /dev/null -q 'http://www.bigfoottrade.kz/shop/tree.php?fn=0&name=test_tree.js' - */30 * * * * /usr/bin/php5 /var/www/update_ip.php - - */1 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/work.php' - 0 3 * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/get/list.php' - */1 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/mail.php' - */1 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/iridium.php' - */2 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/globalstar.php' - - 0 6 * * * wget -O /dev/null -q 'http://locust.kz/DownloadWeather?forecast=000' - 0 7 * * * wget -O /dev/null -q 'http://locust.kz/DownloadWeather?forecast=048' - 1 1 1 * * wget -O /dev/null -q 'http://locust.kz/SendMail' - - 0 1 * * * wget -O /dev/null -q 'http://locust.kz/get/list.php' - 0 1 * * * /opt/backups/backup.sh - -Проверяю таблицу: - sudo crontab -l -u www-data -**************************************************************************************************** -Установка MongoDB на Ubuntu https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-18-04-ru - - sudo apt update - sudo apt install mongodb-server - sudo systemctl status mongodb - -**************************************************************************************************** -Установка MySQL на Ubuntu 22.04 - apt-get update - sudo apt-get install mysql-server -Удаление MySQL - sudo systemctl stop mysql - sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* - sudo rm -rf /etc/mysql /var/lib/mysql - sudo apt autoremove - sudo apt autoclean -Меняем пароль через SQL: - sudo mysql - ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newIg@rR0'; - SELECT user,authentication_string,plugin,host FROM mysql.user; - SHOW GRANTS FOR 'root'@'localhost'; - -Также настроить чтобы он был не регистрозависемым в файле /etc/mysql/mysql.conf.d/mysqld.cnf в секции [mysqld] добавить строку: - lower_case_table_names = 1 -Для возможность удаленого подключения через внешку создаём спец пользователя, это я сделал через dbForge создав там пользователя root@192.168.0.%. - sudo mysql -u root -pnewIg@rR0 - CREATE USER 'root'@'192.168.0.%' IDENTIFIED WITH mysql_native_password BY 'newIg@rR0'; - ALTER USER 'begaikin'@'192.168.0.%' IDENTIFIED BY 'Begaikin@2'; - Проверить: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.%'; - GRANT ALL PRIVILEGES ON `%`.* TO 'root'@'192.168.0.%'; - SHOW GRANTS FOR 'root'@'192.168.0.%'; - -А также для удалёного подключения закоментить параметр "bind-address = 127.0.0.1" в файле настроек mcedit /etc/mysql/mysql.conf.d/mysqld.cnf - -Перезагружаем MySQL: - sudo service mysql restart - - -База MySQL: db1109882_locust -Логин: u1109882_root -Пароль: root123456 - -mysqldump -uu1109882_root -proot123456 -h127.0.0.1 db1109882_locust > /root/db1109882_locust2.sql -**************************************************************************************************** -Установка MySQL для разработчика: - sudo apt-get update - sudo apt-get install libmysqld-dev -**************************************************************************************************** -Установка Apache и PHP (на посл версии Ubuntu php7): - -Подключаемся к серверу: -```sh - ssh administrator@10.101.1.3 -``` - -Устанавливаем: -```sh - sudo apt-get update && - sudo apt-get install apache2 php -y && - sudo apt-get install php libapache2-mod-php -y && - sudo apt-get install php gettext -y && - sudo apt-get install php php-gd -y && - sudo apt-get install php php-pgsql -y && - sudo apt-get install php php-mysql -y && - sudo apt-get install php php-mysqli -y && - sudo apt-get install php-imap -y && - sudo apt-get install php-mbstring -y && - sudo apt-get install php-curl -y && - sudo apt-get install php-xml -y && - sudo apt-get install php-soap -y -``` -Включаем модули: -```sh - sudo phpenmod imap - sudo phpenmod mbstring - sudo a2enmod rewrite -``` - -В /etc/apache2/apache2.conf ставим AllowOverride All командой -```sh -sudo sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf -``` -Проверяем файл: -```sh - sudo mcedit /etc/apache2/apache2.conf -``` - -```sh - sudo a2enmod php8.0 - sudo a2enmod ssl #Так как в последнее время делаю через haproxy то SSL в апачи не использую - sudo a2enmod headers - sudo a2enmod expires - sudo a2enmod passenger #Для redmine - sudo a2enmod fastcgi #Для redmine - sudo a2dismod info #Чтобы не светить статистикой в сеть - sudo a2dismod status #Чтобы не светить статистикой в сеть -``` -Также добавляем обработку раширения .xyz как .php файл. - - -Настраиваем PHP /etc/php/8.3/apache2/php.ini: - max_execution_time = 60 - max_input_time = 120 - short_open_tag = On - display_errors = On - post_max_size = 20M - upload_max_filesize = 20M - - session.gc_maxlifetime = 14400 #Увеличиваем время жизнисесии до 4 часов - -Если выдаёт такое: - AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message - - -Настройка Apache: - httpd - запустить Apache -Перезапустить Apache -```sh - sudo systemctl restart apache2 -``` - -********** Установка Composer для php ********** -Скачиваю в домашнюю папку пользователя - curl -sS https://getcomposer.org/installer -o composer-setup.php -Выполняем загрузку и установку: - sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer -Потом можно будет переходить в папку с сайтом и выполнять - composer require mpdf/mpdf - -********** Настройка laravel под Windows php фреймворк ********** -https://www.tutorialspoint.com/laravel/laravel_installation.htm -После установки композера раскоментить расширение ;extension=fileinfo и выполнить команду: - composer create-project laravel/laravel rigor --prefer-dist -Потом можно запустить сервер зайдя в созданную папку: - php artisan serve - -********** Настройка https ssl для apache под Windows ********** -https://apache-windows.ru/apache-ssl-переход-apache-на-https/ - -********** Настройка https ssl для apache под Linux ********** -Создаём ключ командой: - sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt -На вопрос пароля написал "test!irigm" -Снимаем пароль с ключа: - cp server.key{,.orig} - openssl rsa -in server.key.orig -out server.key - rm server.key.orig -Скопируем их в /etc/ssl и назначим файлу ключа права чтения только администратору: - sudo cp server.crt /etc/ssl/certs/ - sudo cp server.key /etc/ssl/private/ - sudo chmod 0600 /etc/ssl/private/geovizor_com.key -Для начала необходимо активировать mod_ssl: - sudo a2enmod ssl -Содержание файла виртуального хоста: - - ServerAdmin info@geovizor.com - ServerName geovizor.com - ServerAlias www.geovizor.com - DocumentRoot /var/www/geovizor.com - - DirectoryIndex index.html index.php index.xyz - AddType application/x-httpd-php .php .xyz - - SSLEngine on - SSLCertificateFile /etc/ssl/certs/geovizor_com.crt - SSLCertificateChainFile /etc/ssl/certs/geovizor_com.ca-bundle - SSLCertificateKeyFile /etc/ssl/private/geovizor_com.key - - - sudo a2ensite bigfoottrade.kz.ssl.conf - sudo a2ensite bigfoottrade.kz.conf - sudo a2ensite zatochnik.pro.conf - sudo a2ensite zatochnik.pro.ssl.conf - sudo a2ensite elektronnaya-ochered.kz.conf - sudo a2ensite elektronnaya-ochered.kz.conf - sudo a2ensite transit.istt.kz.conf - sudo a2ensite geovizor.com.ssl.conf - sudo a2ensite mqtt.kz.ssl.conf - sudo a2ensite stations.istt.kz.ssl.conf - sudo a2ensite stations.istt.kz.conf - sudo a2ensite uspdmanager.istt.kz.conf - sudo a2ensite msp.istt.kz.conf - sudo a2ensite mog.istt.kz.conf - sudo a2ensite mqtt.kz.conf - sudo a2ensite data.ccalm.org - sudo a2ensite rigor.kz.conf - sudo a2ensite 000-default.conf - sudo a2ensite transit.istt.kz.conf - sudo a2ensite aistransit.kz.conf - sudo a2ensite jwt.local.conf - sudo a2ensite jwt2.local.conf - sudo a2ensite transit_gpti_kg.conf - -Посмотреть все разрешонные сайты: - a2query -s - - sudo a2dissite bigfoottrade.kz.conf - sudo a2dissite zatochnik.pro.ssl.conf - sudo a2dissite zatochnik.pro.conf - sudo a2dissite geovizor.com.ssl.conf - sudo a2dissite transit.istt.kz.conf - sudo a2dissite 000-default.conf - sudo a2dissite default-ssl.conf - sudo a2dissite msp.istt.kz.ssl.conf - sudo a2dissite mqtt.kz.ssl.conf - sudo a2dissite transit.istt.kz.conf - sudo a2dissite istransit.kz.conf - - sudo a2dissite jwt2.local.conf - sudo a2dissite jwt.local.conf - - - -http://aistransit.kz/ - -Для проверки файла ключа: - openssl x509 -noout -modulus -in /etc/ssl/certs/geovizor_com.crt - openssl x509 -noout -modulus -in /etc/ssl/private/server.key - openssl pkcs7 -print_certs -in /etc/ssl/certs/geovizor_com.crt -out /etc/ssl/certs/geovizor_com.pem - -Проверяем настройки командой: - /usr/sbin/apache2 -S - -***** Настраивем виртуальный хост ***** -Копируем файлик примера: -sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/test.istt.kz.conf -sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/msp.istt.kz.ssl.conf -В файлике настраиваю ServerAdmin и DocumentRoot : - - ServerAdmin ivanov.i@istt.kz - ServerName transit.istt.kz - ServerAlias transit2.istt.kz - DocumentRoot /var/www/transit.istt.kz - ErrorLog ${APACHE_LOG_DIR}/error.log - CustomLog ${APACHE_LOG_DIR}/access.log combined - - -Активируем: - sudo a2ensite bigfoottrade.kz.conf - sudo a2ensite bigfoottrade.kz.ssl.conf - sudo a2ensite uspdmanager.istt.kz.conf - sudo a2ensite uspdmanager.istt.kz.ssl.conf - sudo a2ensite msp.istt.kz.ssl.conf - sudo a2ensite daloradius.istt.kz.conf - sudo a2ensite stations.istt.kz - sudo a2ensite zatochnik.pro - sudo a2ensite elektronnaya-ochered.kz.conf - sudo a2ensite integration-gateway.org.conf - sudo a2ensite integration-gateway.org.ssl.conf - - sudo a2ensite motion-engine.ru.conf - sudo a2ensite motion-engine.kz.conf - sudo a2ensite motion-engine.com.conf - sudo a2ensite observer.kz.conf - - sudo a2ensite transit.istt.kz.ssl.conf - sudo a2ensite transit.istt.kz.conf - sudo a2ensite geovizor_local.conf -Или деактивируем - sudo a2dissite 000-default.conf - sudo a2dissite msp.istt.kz.ssl.conf - sudo a2dissite bigfoottrade.kz.conf - sudo a2dissite uspdmanager.istt.kz.conf - sudo a2dissite earth.kz.conf - sudo a2dissite integration-gateway.org.conf - sudo a2dissite observer.kz.conf -Перезагружаем - sudo service apache2 restart -**************************************************************************************************** -Настройка SSH: - sudo apt-get install openssh-server -Поменять порт можно в настройках: - sudo mcedit /etc/ssh/sshd_config - Port 2222 -Для рестарта: sudo /etc/init.d/ssh stop/start/restart -Для подключения через Linux: ssh administrator@192.168.0.83 -p 2222 -Для винды есть PUTTY.EXE настроить кодировку на utf-8 -**************************************************************************************************** -Подключение к последовательному порту ttyUSB через Minicom - sudo apt-get install minicom - sudo minicom -s -После настройки зайти так - sudo minicom - -**************************************************************************************************** -********** Устанавливаю и настраиваю FreeRadius ********** -Настройка rlm_perl для FreeRadius: http://abills.net.ua/wiki/doku.php/abills:docs:rlm_perl:ru подсказки в http://www.m-200.com/base/index.php/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA_FREERADIUS._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_3 - -Для того, чтобы использовать встроенный perl необходимо: -1. В файле modules/perl раскомментировать строку 'func_authorize = authorize'. -2. В файле radiusd.conf добавить: - authorize { - preprocess - files - perl - } - - -По инсткукции из http://ittraveler.org/ustanovka-i-nastrojka-radius-servera-na-ubuntu-s-veb-interfejsom/ -Устанавливаем FreeRadius и пакеты - sudo apt-get install freeradius - sudo apt-get install freeradius-mysql - sudo apt-get install freeradius-utils - sudo apt-get install freeradius-perl - sudo apt-get install freeradius-python -Подключаемся к серверу Mysql - mysql -u root -p -Далее создаем базу данных radius - create database radius; -Назначим полные права пользователю radius - grant all on radius.* to radius@localhost identified by "WP@$$w0rd"; -Отключаемся от Mysql - exit -Импортируем таблицы в базу данных radius - #mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql - #mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql -Для проверки добавим тестовые значения в таблицу radcheck - #mysql -u root -p - #mysql> use radius; - #mysql> INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('sqltest', 'Password', 'testpwd'); - #mysql> exit -Открываем файл настроек Freeradius для MySQL расположение файла — /etc/freeradius/sql.conf -Редактируем строки до такого вида: - database = mysql - server = "localhost" - port = 3306 - login = radius - password = "WP@$$w0rd" - radius_db = "radius" - - readclients = yes - -Далее открываем файл сайта Freeradius -Расположение файла — /etc/freeradius/sites-enabled/default -Приводим следующие строки к виду: - Uncomment sql on authorize{} - # See “Authorization Queries” in sql.conf - sql - ... - Uncomment sql on accounting{} - # See “Accounting queries” in sql.conf - sql - ... - Uncomment sql on session{} - # See “Simultaneous Use Checking Queries” in sql.conf - sql - ... - Uncomment sql on post-auth{} - # See “Authentication Logging Queries” in sql.conf - sql - -Далее правим основной конфигурационный файл Freeradius и включаем поддержку Mysql расскоментировав строку. -Расположение файла — /etc/freeradius/radiusd.conf - $INCLUDE sql.conf - -Теперь протестируем настройки сервера. -Откройте 2 ssh окна терминала. -В первом окне остановим сервис Freeradius - sudo service freeradius stop -И запустим сервис в режиме debug - sudo freeradius -X - debug mode -Теперь открываем второе окно терминала и вводим запрос - radtest sqltest testpwd localhost 18128 testing123 -Если вывод команды такой: - Sending Access-Request of id 68 to 127.0.0.1 port 1812 - User-Name = "sqltest" - User-Password = "testpwd" - NAS-IP-Address = 127.0.1.1 - NAS-Port = 18128 - rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=68, length=20 -То все впорядке. - -Теперь нужно добавить Radius клиентов в файл /etc/freeradius/clients.conf -Пример добавления: - -client 192.168.1.0/16 { - -secret = secretpass -shortname = testclient -nastype= testdevice -} - -**************************************************************************************************** -Проверить версию OpenSSL: openssl version -v -Устанавливаю из исходников: - wget https://www.openssl.org/source/openssl-3.0.1.tar.gz - tar xzvf openssl-3.0.1.tar.gz - cd openssl-3.0.1 - ./config - make - sudo make install - ln -s libssl.so.3 libssl.so - sudo ldconfig - openssl version -a -Если выдало что не можжет найти: openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or director -Для этого добавить путь к каталогу библиотек: sudo mcedit /etc/ld.so.conf.d/libc.conf и вставить: /usr/local/lib64 и запустить sudo ldconfig -Также нужно добавить путь при компиляции: sudo export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig -Проверить путь: - pkg-config --cflags openssl - pkg-config --variable pc_path pkg-config -Не знал как указать путь на /usr/local/lib64/pkgconfig поэтому скопировал в /usr/local/lib/pkgconfig - -Если нужно установить OpenSSL для разработчика из репозитория (но там старая нужна > 3.0): - apt-get update - sudo apt-get install libssl-dev - -**************************************************************************************************** -Установить ProFTPD для доступа через FTPS с сохранением пользователей в PostgreSQL по подсказки нейросети - sudo apt-get update - sudo apt-get install proftpd-basic proftpd-mod-pgsql proftpd-mod-crypto postgresql postgresql-contrib openssl - -Создание сертификата TLS: - sudo mkdir /etc/proftpd/ssl - sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/proftpd/ssl/proftpd.key -out /etc/proftpd/ssl/proftpd.crt - -Включаем модуль в: - sudo nano /etc/proftpd/modules.conf -Раскоментив строку: - LoadModule mod_tls.c - -Настройка ProFTPD для использования TLS: - sudo mcedit /etc/proftpd/tls.conf - -Добавьте или измените следующие строки: - - - TLSEngine on - TLSLog /var/log/proftpd/tls.log - TLSProtocol TLSv1.2 - - TLSRSACertificateFile /etc/proftpd/ssl/proftpd.crt - TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key - TLSOptions NoCertRequest - - TLSVerifyClient off - TLSRequired on - - TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3 - - -Включение TLS в основной конфигурации ProFTPD: - - sudo mcedit /etc/proftpd/proftpd.conf - -Добавьте или измените следующие строки: - -Include /etc/proftpd/tls.conf - -Создаём и меняем базу данных - - CREATE DATABASE ftpusers; - - CREATE TABLE users ( - id SERIAL PRIMARY KEY, - name VARCHAR(30) NOT NULL UNIQUE, - password VARCHAR(128) NOT NULL, - uid INT NOT NULL, - gid INT NOT NULL, - homedir VARCHAR(255) NOT NULL, - shell VARCHAR(255) NOT NULL - ); - - INSERT INTO users (name, password, uid, gid, homedir, shell) VALUES ('', MD5(''), 1001, 1001, '/home/', '/bin/false'); - INSERT INTO users (name, password, uid, gid, homedir, shell) VALUES ('administrator', MD5('administrator'), 1001, 1001, '/home/administrator', '/bin/false'); - - CREATE USER proftpd WITH PASSWORD 'ReULkD8M'; - GRANT ALL PRIVILEGES ON DATABASE ftpusers TO proftpd; - -Включаем модуль в: - sudo nano /etc/proftpd/modules.conf -Раскоментив строку: - LoadModule mod_sql.c - LoadModule mod_sql_postgres.c - LoadModule mod_sql_passwd.c - -Редактируем: - sudo nano /etc/proftpd/pgsql.conf - -Настройка ProFTPD для использования PostgreSQL: - - sudo mcedit /etc/proftpd/pgsql.conf - -Вставить следующий код: - - - SQLEngine on - SQLBackend pgsql - SQLAuthenticate users - - SQLConnectInfo ftpusers@10.101.1.6:5432 proftpd ReULkD8M - - SQLUserInfo users name password uid gid homedir shell - - # Логирование SQL-запросов - SQLLogFile /var/log/proftpd/sql.log - SQLLog ALL - - # Указание на использование открытых паролей - SQLAuthTypes OpenPlaintext - - - - -Добавляем ссылку на созданную настройку: - sudo nano /etc/proftpd/proftpd.conf - -Добавилв следующее содержимое: - -Include /etc/proftpd/pgsql.conf - -Теперь можно перезапустить proftpd: - sudo systemctl restart proftpd - -Проверяем что пользователи успешно считались из базы даныз командой: - sudo mcedit -f /var/log/proftpd/sql.log - -**************************************************************************************************** -Установить ProFTPD http://sys-admin.kz/os/nix/539-centod-install-proftpd.html для доступа через FTPS - -Настраиваем для пользователя www-data - - sudo apt-get install proftpd-basic openssl -Проверить какие модули установленны: - proftpd -vv -sudo apt-get remove --purge proftpd-basic - -В настройках mcedit /etc/proftpd/proftpd.conf изменить: -UseIPv6 off -DefaultRoot ~ -ServerIdent on "FTP Server ready." -RequireValidShell off -AuthUserFile /etc/proftpd/ftpd.passwd - -Для создания нового виртуального пользователя "tester" "firsttester" в файле выполнить комманду (uid и gid должны быть как у пользователя www-data смотри: cat /etc/passwd и cat /etc/group) - - sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=tester --uid=33 --gid=33 --home=/var/www/www.dirt.kz --shell=/bin/false - sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpzhol --uid=33 --gid=33 --home=/mnt/ssd/ftp --shell=/bin/false - sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=zatochnik --uid=33 --gid=33 --home=/var/www/www.zatochnik.pro --shell=/bin/false - sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=evak --uid=33 --gid=33 --home=/var/www/evak --shell=/bin/false - sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=apk --uid=33 --gid=33 --home=/var/www/istransit.kz/apk --shell=/bin/false - sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=rebezov.a --uid=33 --gid=33 --home=/var/www/test2.istransit.kz --shell=/bin/false - sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=rebezov.a --uid=33 --gid=33 --home=/opt/www/istransit.kz --shell=/bin/false -Задал пароль для apk пользователя: vooOtKBb7bckcNh -Задал пароль для rebezov.a : BU39kb2 - -задал пароль: - zoto!23+ - -Назначить права на файл: - sudo chown proftpd:nogroup /etc/proftpd/ftpd.passwd -Сменить пароль: ftpasswd --passwd --name=tester --change-password - -Перезапустить: /etc/init.d/proftpd restart - -Задать права на папку: sudo chown -R 33:33 /var/www -Задать права на папку: sudo chown -R 33:33 /opt/www - -****************************************************** -Для настройки SSL для proftpd Выполнить в консоли: - -Включаем модуль в: - sudo mcedit /etc/proftpd/modules.conf -Раскоментив строку: - LoadModule mod_tls.c - -Проверить какие модули установленны, если нет tls то дальше не выполнять: - proftpd -vv - -sudo mkdir /etc/proftpd/ssl -sudo openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem -sudo chown -R proftpd:nogroup /etc/proftpd/ssl -Потом в /etc/proftpd/proftpd.conf раскоментируем строку Include /etc/proftpd/tls.conf -И откоректируем этот файл так: - -TLSEngine on -TLSLog /var/log/proftpd/tls.log -TLSProtocol SSLv23 TLSv1 -TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem -TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem -TLSOptions NoCertRequest -TLSVerifyClient off -TLSRequired on - -Перезапустить: /etc/init.d/proftpd restart -**************************************************************************************************** -На Ubuntu включить файрвол брандмауэр firewall: -http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/firewall -Желательно сменить порт для ssh допустим на 2222 - - sudo ufw allow ssh - sudo ufw enable - sudo ufw allow 80/tcp - sudo ufw allow 8080/tcp - sudo ufw allow 443/tcp - sudo ufw allow 10050/tcp - sudo ufw allow 50000:50010/tcp - sudo ufw allow 5432/tcp - sudo ufw allow 3219/tcp - sudo ufw allow 3221/tcp - -Эти настройки были до переустановки сервера - 443/tcp ALLOW Anywhere - 80/tcp ALLOW Anywhere - 10000/tcp ALLOW 192.168.0.0/24 - 3306/tcp ALLOW 192.168.0.0/24 - 10050/tcp ALLOW 192.168.0.0/24 - 10051/tcp ALLOW 192.168.0.0/24 - 2222/tcp ALLOW Anywhere - 8080/tcp ALLOW Anywhere - 5432/tcp ALLOW Anywhere - 1812/udp ALLOW Anywhere - 1813/udp ALLOW Anywhere - 3799/udp ALLOW Anywhere -Эти порты для терминалов: - 3211/tcp ALLOW Anywhere - 3212/tcp ALLOW Anywhere - 3213/tcp ALLOW Anywhere - 3214/tcp ALLOW Anywhere - 3215/tcp ALLOW Anywhere - 3216/tcp ALLOW Anywhere - 3217/tcp ALLOW Anywhere - 3218/tcp ALLOW Anywhere - 3219/tcp ALLOW Anywhere - 3220/tcp ALLOW Anywhere - 3221/tcp ALLOW Anywhere - - -Для freeredius: - sudo ufw allow 1812/udp - sudo ufw allow 1813/udp - sudo ufw allow 3799/udp - - sudo ufw deny ftps - sudo ufw delete -deny 80/tcp - sudo ufw allow from 192.168.0.89 to any port 3306 - sudo ufw allow from 192.168.0.0/24 to any port 2222 proto tcp - sudo ufw delete from 192.168.0.0/24 to any port 5432 proto tcp -Для отключения: - sudo ufw disable -Для получения списка включнных - sudo ufw status -**************************************************************************************************** -https://pro-gram.ru/bridge-utils-ubuntu-server-18-04.html -Устанавливаю ПО для сетевого моста: - sudo apt install bridge-utils -Смотрим интерфейсы: - ifconfig -a -Открываю: sudo nano /etc/netplan/50-cloud-init.yaml -Файлик для жолака есть в папке "Заливка" -**************************************************************************************************** -Отключить IP v6: http://www.linuxrussia.com/2013/05/disable-ipv6-ubuntu.html -**************************************************************************************************** -Настройка почты на 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 - 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 -правлю способ подключения к базе: - sudo mcedit /srv/http/PostfixAdmin/config.inc.php -На это: - $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 ниже того что указывает на - Alias /PostfixAdmin/ "/var/www/html/PostfixAdmin/public/" - - Options FollowSymLinks - AllowOverride None - Allow from all - Order allow,deny - -Перезагружаю: - systemctl restart apache2.service -На последок: - sudo chown www-data:www-data -R /var/www/ - sudo chown www-data:www-data -R /opt/app_api_mobile_v2/mobile_v2 -Теперь можно открывать сайт по IP: http://77.240.38.108/PostfixAdmin/setup.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 ********** - sudo apt-get update - sudo apt install postfix postfix-pgsql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql mailutils postgresql -Ссохраняю оригинальный конфигурационный файл: - cp /etc/postfix/main.cf /etc/postfix/main.cf.orig -Конфигурирую: - sudo dpkg-reconfigure postfix -Настраиваю так: - 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/ - 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 - 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 - 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 добавив строчки: - 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 - -Настройки безопасного соединения (также просто вставил в конец файла): - - 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 -Похоже опции что ниже устарели: - 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 (просто добавил в конец файла) - -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} - -Проверяю на наличие ошибок: - sudo postfix check - -В конфигурационном файле прописывается список дорменов которых обслуживает данный агент доставки. - sudo mcedit /etc/postfix/main.cf -Примерно таокое: - mydestination = $myhostname, your_domain, localhost.com, , localhost - -Перезапускаем: - 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 = Способы оповещений -> Создать способ оповещения -После того как создали в настройках пользователя присваиваем оповещение. -Потом активируем действия в "Настройка -> действия" -Перезапускаем - sudo service zabbix-server restart - -**************************************************************************************************** -Для копирования библиотек запустить: - mvn dependency:copy-dependencies -DoutputDirectory=${project.build.directory}/libs -Потом эти библиотеки хранить рядом с jar - -Скомпилировать в "IntelliJ IDEA -> Maven -> package" создастца TransitToRabbitMQ-1.0-SNAPSHOT.jar -Используем команду "-cp" а не "-jar" так как в манифесте нет описания главного класса: - /usr/bin/java -jar /opt/TransitToRabbitMQ.jar - /usr/bin/java -cp /opt/TransitToRabbitMQ.jar kz.istt.app.Forwarding -Для создания сервиса для запуска .jar необходимо создать файл Transit_RabbitMQ_Forwarding.service: - - - -[Unit] -Description=Forwarding RabbitMQ DATA -After=syslog.target - -[Service] -WorkingDirectory=/opt/ -ExecStart=/usr/bin/java -cp /opt/TransitToRabbitMQ.jar kz.istt.app.Forwarding -User=tomcat -Group=tomcat -UMask=0007 -RestartSec=120 -Restart=always -SuccessExitStatus=143 - -[Install] -WantedBy=multi-user.target - -[Journal] -SystemMaxUse=64M - - -Устанавливаем владельца: - sudo chown tomcat:tomcat -R /opt/ -Смотрим что выдаёт: - sudo journalctl -e -u Transit_RabbitMQ_Forwarding - -**************************************************************************************************** -Установка GeoServer на Tomcat -Скачиваем WAR с сайта http://geoserver.org/release/stable/ - cd /tmp - curl -O https://nav.dl.sourceforge.net/project/geoserver/GeoServer/2.23.2/geoserver-2.23.2-war.zip -Извлекаю tomcat: - sudo mkdir /opt/tomcat/geoserver - sudo apt-get install unzip - sudo unzip geoserver-2*war.zip - mv geoserver.war ROOT.war - cp ROOT.war /opt/tomcat/geoserver - sudo chown tomcat:tomcat -R /opt/tomcat/geoserver -Добавляем в sudo mcedit /opt/tomcat/conf/server.xml перед - geoserver2.ccalm.org - - -Стандартные логин и пароль администратора admin и geoserver (поменял на geoserver1) -Мастер пароль поменял с geoserver на geoserver1 http://uspdmanager.istt.kz:8080/geoserver - -Разрешаем запись для генерации тайлов: - - -При переносе на другой сервер скопировать папку /opt/tomcat/webapps/geoserver/data - -Расширения такие как gs-web-wps-2.11.0.jar закинуть в папку: /opt/tomcat/webapps/geoserver/WEB-INF/lib - -Если перенаправлять через HAProxy с HTTPS на HTTTP то GeoServer будет глючить так как на строне клиента пытается подстраиваться под протокол, поэтому нужно включать HTTPS и на Tomcat! - -**************************************************************************************************** -***** Настройка https ssl для tomcat ***** -Купил SSL сертификат в www.gogetssl.com сгенерировав на сайте SHA-256 CSR and Private Key. -Подтвердил владение, выслали 2 файла в архиве: integration-gateway_org.ca-bundle, integration-gateway_org.crt -Переписал Private ключ в текстовый файл locust_kz.key -Также прислали сертификаты на почту: "Sectigo RSA Domain Validation Secure Server CA", "USERTrust RSA Certification Authority", "AAA Certificate Services" и использую CA сертификат. - -Либо при помощи самоподписанного сертификата, генерим с алиасом geoserver и паролем qw0qw1qw2: - keytool -genkey -keyalg RSA -alias geoserver -keystore /opt/tomcat/conf/ssl/keystore.jks -storepass qw0qw1qw2 -validity 3650 -keysize 2048 -Проверяем что ключь создан корректно: - keytool -list -keystore /opt/tomcat/conf/ssl/keystore.jks -storepass qw0qw1qw2 - -Преобразую в хранилище pkcs12: - openssl pkcs12 -export -in [my_certificate.crt] -inkey [my_key.key] -out [keystore.p12] -name [new_alias] -CAfile [my_ca_bundle.crt] -caname root - openssl pkcs12 -export -in integration-gateway_org.crt -inkey integration-gateway_org.key -out keystore.p12 -name new_alias -CAfile integration-gateway_org.ca-bundle -caname root - openssl pkcs12 -export -in locust_kz.crt -inkey locust_kz.key -out keystore.p12 -name new_alias -CAfile locust_kz.ca-bundle -caname root - openssl pkcs12 -export -in ccalm_org.crt -inkey ccalm_org.key -out ccalm_org.p12 -name ccalm_org -CAfile ccalm_org.ca-bundle -caname root -Задал пароль: qw0qw1qw2 для хранилища ключей - -Преобразую в хранилище java: - keytool -importkeystore -deststorepass [new_keystore_pass] -destkeypass [new_key_pass] -destkeystore [keystore.jks] -srckeystore [keystore.p12] -srcstoretype PKCS12 -srcstorepass [pass_used_in_p12_keystore] -alias [alias_used_in_p12_keystore] - keytool -importkeystore -deststorepass qw0qw1qw2 -destkeypass qw0qw1qw2 -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass qw0qw1qw2 -alias new_alias - keytool -importkeystore -deststorepass qw0qw1qw2 -destkeypass qw0qw1qw2 -destkeystore ccalm_org.jks -srckeystore ccalm_org.p12 -srcstoretype PKCS12 -srcstorepass qw0qw1qw2 -alias ccalm_org -Импорт ключа в хранилище (теперь в нём 2 ключа для locust.kz и для ccalm.org): - keytool -importkeystore -srckeystore ccalm_org.p12 -destkeystore keystore.jks -srcstoretype pkcs12 -alias ccalm_org - -keytool -list -v -keystore keystore.jks - -Настроить томкат, добавив текст который ниже в: sudo mcedit /opt/tomcat/conf/server.xml - - - - - - - - - - -Также при помощи authbind разрешить не-root программе быть назначенными младшим портам: - sudo apt-get install authbind - sudo touch /etc/authbind/byport/443 - sudo chmod 500 /etc/authbind/byport/443 - sudo chown tomcat /etc/authbind/byport/443 - -**************************************************************************************************** -Для создания сервиса создайте service-файл /etc/systemd/system/zholak_gps.service (замените poc-smsc на имя вашего сервиса): - - sudo touch /etc/systemd/system/PServerARNAVI.service - sudo chmod 664 /etc/systemd/system/PServerARNAVI.service - sudo mcedit /etc/systemd/system/PServerARNAVI.service - -И пишем в этот файл следующий текст: - - - -[Unit] -Description=zholak_ftp - -[Service] -WorkingDirectory=/var/opt/servers/arnavi/ -ExecStart=/var/opt/servers/arnavi/PServerARNAVI PServerARNAVI.ini - -RestartSec=10 -Restart=always - -[Install] -WantedBy=multi-user.target - -Для перепрочтения настроек выполнить: - sudo systemctl daemon-reload -Затем можно выполнять команды: - sudo systemctl start geoserver2 - sudo systemctl start SServerWialonIPS_transit - sudo systemctl start PServerWialonIPS_transit_u - sudo systemctl start PServerWialonIPS - sudo systemctl start SServerARNAVI - sudo systemctl start SServerWialonIPS - sudo systemctl start PServerARNAVI - sudo systemctl start PServerEGTS_transit - sudo systemctl start PServerARNAVI_STATIONS_TEST - sudo systemctl start SServerTKSTAR_STATIONS - sudo systemctl start PServerTKSTAR_STATIONS - sudo systemctl start SServerMQTT - sudo systemctl start PServerMQTT - sudo systemctl start SServerEGTS_transit - sudo systemctl start SServerEGTS_transit_3241 - sudo systemctl start Transit_RabbitMQ_Forwarding - sudo systemctl start Transit_RabbitMQ_Forwarding_RUS - sudo systemctl start Transit_RabbitMQ_Read - sudo systemctl start SServerMT300_msp - sudo systemctl start PServerMT300_msp - sudo systemctl start SServerTeltonika - sudo systemctl start PServerTeltonika - sudo systemctl start SServerJointech - sudo systemctl start PServerJointech - - sudo systemctl stop SServerEGTS_transit - sudo systemctl stop SServerARNAVI_STATIONS_TEST - sudo systemctl stop zholak_ftp - sudo systemctl stop geoserver2 - sudo systemctl stop Transit_RabbitMQ_Forwarding_RUS - sudo systemctl stop SServerJointech - sudo systemctl stop PServerJointech - sudo systemctl stop PServerWialonIPS_transit - - sudo systemctl restart SServerWialonIPS_transit - sudo systemctl restart zholak_ftp - sudo systemctl restart PServerARNAVI - sudo systemctl restart PServerARNAVI_TEST - sudo systemctl restart PServerMT300_msp - sudo systemctl restart SServerTeltonika - sudo systemctl restart PServerTeltonika - sudo systemctl restart Transit_RabbitMQ_Forwarding - sudo systemctl restart Transit_RabbitMQ_Forwarding_RUS - sudo systemctl restart Transit_RabbitMQ_Read - sudo systemctl restart SServerJointech - - systemctl status geoserver2 - systemctl status PServerARNAVI - systemctl status SServerARNAVI_STATIONS - systemctl status Virtuasudo systemctl start PServerWialonIPS_transitlTerminal - systemctl status SServerARNAVI_STATIONS_TEST - systemctl status SServerTKSTAR_STATIONS - systemctl status PServerTKSTAR_STATIONS - systemctl status SServerARNAVI - systemctl status SServerWialonIPS - systemctl status PServerEGTS_transit - systemctl status PServerARNAVI - systemctl status PServerWialonIPS - systemctl status SServerMQTT - systemctl status PServerMQTT - systemctl status SServerEGTS_transit - systemctl status SServerEGTS_transit_3241 - systemctl status SServerWialonIPS_transit - systemctl status PServerWialonIPS_transit - systemctl status PServerWialonIPS_transit_u - systemctl status Transit_RabbitMQ_Forwarding - systemctl status Transit_RabbitMQ_Forwarding_RUS - systemctl status Transit_RabbitMQ_Read - systemctl status SServerMT300_msp - systemctl status PServerMT300_msp - systemctl status SServerTeltonika - systemctl status PServerTeltonika - systemctl status SServerJointech - systemctl status PServerJointech - -Чтобы добавить сервис в автозагрузку, необходимо активировать его: - sudo systemctl enable geoserver2 - sudo systemctl enable SServerEGTS_transit - sudo systemctl enable SServerEGTS_transit_3241 - sudo systemctl enable PServerEGTS_transit - sudo systemctl enable SServerWialonIPS_transit - sudo systemctl enable PServerWialonIPS_transit_u - sudo systemctl enable VirtualTerminal - sudo systemctl enable SServerARNAVI_STATIONS - sudo systemctl enable PServerARNAVI_STATIONS - sudo systemctl enable PServerARNAVI_STATIONS_TEST - sudo systemctl enable SServerTKSTAR_STATIONS - sudo systemctl enable PServerTKSTAR_STATIONS - sudo systemctl enable SServerMQTT - sudo systemctl enable PServerMQTT - sudo systemctl enable SServerMT300_msp - sudo systemctl enable PServerMT300_msp - sudo systemctl enable Transit_RabbitMQ_Forwarding - sudo systemctl enable Transit_RabbitMQ_Forwarding_RUS - sudo systemctl enable Transit_RabbitMQ_Read - sudo systemctl enable SServerJointech - sudo systemctl enable PServerJointech - - systemctl enable SServerARNAVI - systemctl enable SServerWialonIPS - systemctl enable PServerARNAVI - systemctl enable PServerWialonIPS - -Чтобы проверить логи сервиса, выполните: - journalctl -u zholak_gps - journalctl -u SServerWialonIPS_transit - journalctl -u PServerWialonIPS_transit - journalctl -u geoserver2 -**************************************************************************************************** -Команды Linux -pwd - получить имя текущей директории -cd - изменить текущую директорию -ls - распечатать информацию о файлах или директориях -cat - слить или вывести файлы-аргументы на стандартный вывод -cp - копировать файлы -mv - переместить (переименовать) файлы -ln - создать ссылку на файл -rm - удалить файлы -rmdir - удалить директорию -mkdir - создать директорию -echo - вывести аргументы командной строки на стандартный вывод -ps - узнать номера выполняемых процессов -kill - "убить" выполняемый процес по его номеру -man - выдать справку об использовании и ключах команды -**************************************************************************************************** -Удалённая отладка c++ приложения на Ubuntu при помощи GDB-gdbserver debug -Устанавливаем на удалённой машине: - sudo apt install gdbserver - -Для того чтобы не писать каждый раз пароль авторизуемся по ключю -Для этого генерим ключик локально: - ssh-keygen -t rsa -b 2048 -Значения по умолчанию оставил пустыми, сгенерился в /home/username/.ssh/id_rsa -Копируем ключик на нужную машину командай: - ssh-copy-id -p 22 administrator@10.101.1.3 - -Для копирования и запуска программы на целевую машину создаём скрипт копирования и запуска: - -#!/bin/bash -echo "*** copy file to server ***" -#scp -P 2222 /mnt/O_DRIVE/projects/Workspace_C++/GServer/Debug/GServer administrator@192.168.0.83:/var/www/server -scp -P 2222 /mnt/O_DRIVE/projects/Workspace_C++/MServer/Debug/MServer administrator@192.168.0.83:/var/www/server -#scp /mnt/O_DRIVE/projects/Workspace_C++/VTerminal/Debug/VTerminal administrator@192.168.0.83:/var/www/uspdmanager.istt.kz - -echo "*** exec program on server ***" - -#ssh -p 2222 administrator@192.168.0.83 gdbserver 192.168.0.83:10000 /var/www/server/GServer -ssh -p 2222 administrator@192.168.0.83 gdbserver 192.168.0.83:10000 /var/www/server/MServer -#ssh administrator@192.168.0.83 gdbserver 192.168.0.83:10000 /var/www/uspdmanager.istt.kz/VTerminal e101 - -Скрипт можно не делать так как в Eclipse это можно автоматизировать при помощи "C/C++ Remote Application". - - -**************************************************************************************************** -Настройка kannel для отправки SMS через SMPP (http://alexkorvin.blogspot.com/2011/05/sms-kannel-centos-55.html) -Устанавливаю kannel - sudo apt-get install kannel - -bearerbox – главный демон, который держит связь по SMPP в качестве клиента, работает с 3g-донглами, слушает порт для подключения других демонов. -opensmppbox – демон, который работает как SMPP сервер для подключения других клиентов. Тоже подключается к bearerbox и работает через него. - - sudo mcedit /etc/kannel/kannel.conf - - -Скрипт автостарта в ubuntu -Автор: Zeboton -Иногда нужно чтобы при загрузке Ubuntu выполнила какие-либо действия (к примеру, запустила какую-нибудь программу). Как же это сделать? -Всё просто как 3 копейки! -1. Нужно создать файл с командами, которые нужно выполнить при старте системе: -view source -print -? -1. -sudo nano /etc/init.d/autostart.script - -Как понятно, autostart.script это название файла в котором будут записаны команды и оно может быть любым, но не должно совпадать с именами уже существующих файлов в папке /etc/init.d/. -В первой строке файла должно быть указано какая оболочка или интерпретатор будет выполнять команды в файле. Если вы хотите использовать те же команды, что и в терминале, то файл должен начинаться со строки: -view source -print -? -1. -#!/bin/bash - -2. Нужно разрешить файлу выполняться: -view source -print -? -1. -sudo chmod +x /etc/init.d/autostart.script - -3. Рассказываем системе что этот файл нужно исполнять при старте системы: -view source -print -? -1. -sudo update-rc.d autostart.script defaults 95 - -Где 95 это порядок в очереди исполнения. Подробнее можно узнать из -view source -print -? -1. -man update-rc.d - -Перезапускаем систему и радуемся результату - -P.S. -Для удаления из автостарта нужно выполнить: -view source -print -? -1. -sudo update-rc.d autostart.script remove -**************************************************************************************************** -Подключение стронних SSL сертификатов, допустим с gogetssl.com -После покупки сертификата в .pem файл нужно переписать такие ключи и сертификаты как: - 1) PrivateKey - 2) Сертификат (Certificate) Использую только bigfoottrade_kz.crt - 3) Цепочка сертификатов (Chain of Trust) -Сертификат для подписи приватного ключа (Certificate Signing Request(CSR)) использовать не надо, он больше не нужен. - -Пробую собрать pem файл из того что скачал с сайта gogetssl.com (зайдя в раздел подробннее о сертификате) - cat istransit_kz.key istransit_kz.crt istransit_kz.ca> istransit_kz.pem -Потом зайти проверить через mcedit что символы перехода не из вины - -**************************************************************************************************** -Устанавливаю python на Ubuntu 18.04 - - sudo apt update - sudo apt-get install build-essential python3-all-dev - sudo apt-get install libhdf5-dev - sudo apt-get install gdal-bin - sudo apt-get install python3-gdal - sudo apt-get install python3-h5py - sudo apt-get install python3-requests - sudo apt-get install python3-pip - - - - sudo pip3 install --upgrade pip - sudo pip3 install requests - pip install --upgrade requests - sudo pip3 install ease_grid - -**************************************************************************************************** - Настраиваю статический сетевой IP адрес в Ubuntu 22.04: -Для этого открываем: sudo mcedit /etc/netplan/00-installer-config.yaml -И меняем: - network: - ethernets: - enp0s3: - dhcp4: true - version: 2 -На: -network: - ethernets: - enp0s3: - dhcp4: no - addresses: - - 192.168.0.138/24 - gateway4: 192.168.0.253 - nameservers: - addresses: - - 8.8.8.8 - - 8.8.4.4 - version: 2 -**************************************************************************************************** -В старой ubuntu 16.04 IP настраивались так: sudo nano /etc/network/interfaces - iface eth0 inet static - address 192.168.200.57 - netmask 255.255.255.0 - gateway 192.168.200.1 - auto eth0 - -Или так для DHCP - iface eth0 inet dhcp - auto eth0 - -Обновляю интерфейс не перезагружая: - sudo systemctl restart networking - -Для ubuntu 18.04 20.04 и далее настройки в etc\netplan -Для ЖОЛАК настраивал мост так: - network: - ethernets: - enp1s0: - addresses: [] - dhcp4: true - dhcp6: false - optional: true - enp2s0: - addresses: [] - dhcp4: false - dhcp6: false - optional: true - enp3s0: - addresses: [] - dhcp4: false - dhcp6: false - optional: true - enp4s0: - addresses: [] - dhcp4: false - dhcp6: false - optional: true - bridges: - br0: - interfaces: [enp2s0,enp3s0,enp4s0] - addresses: [192.168.1.10/24] - dhcp4: false - dhcp6: false - optional: true - version: 2 - -Применение конфигурации: - sudo netplan apply -**************************************************************************************************** ---sudo apt update ---sudo apt install libosmocore -Устанавливаю библиотеку OpenBSC: - sudo apt update - sudo apt install libosmocore-dev - sudo apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc libpcsclite-dev ----------------------------------------- -https://security-bits.de/research/cellular/lab_setup -Установка SimpleHLR согласно: https://osmocom.org/projects/osmonitb/wiki/Simplehlr - sudo apt install php php-sqlite3 -https://osmocom.org/projects/osmo-hlr/wiki/OsmoHLR - - -Пробую скомпилить: https://github.com/moiji-mobile/hlr эти исходники по 32 битную версию Линукса (На форумах говорят проблемы были по 64 битную версию поэтому автор и сделал по 32 бита) -Снадеждой что тут поддерживает TCAP/MAP так как: OsmoHLR does not support the classic TCAP/MAP protocol but rather implements the more light-weight GSUP protocol. - sudo apt-get install git-all - sudo apt-get install libtalloc-dev - sudo apt-get install libusb-dev - sudo apt-get install libusb-1.0-0-dev - sudo apt-get install libmnl-dev - sudo apt-get install libsctp-dev - git clone https://github.com/moiji-mobile/hlr -Потом запустил SH файл, скомпилилась libosmocore и что? Она типа с TCAP/MAP? - Узнаём версию библиотеки: ----------------------------------------- -Установка libosmoabis https://osmocom.org/projects/libosmo-abis/wiki/Libosmo-abis -Это библиотека, содержащая общий / разделяемый код, относящийся к интерфейсу A-bis между BTS и BSC. Он реализует драйверы для карт E1 на основе mISDN и DAHDI, а также для некоторых диалектов A-bis / IP. - sudo apt-get install libortp-dev - git clone git://git.osmocom.org/libosmo-abis.git - cd libosmo-abis/ - autoreconf -i - ./configure - make - sudo make install - sudo ldconfig -i - cd .. ----------------------------------------- -Установка libosmo-abis (libosmoabis) - sudo apt-get install libortp-dev - sudo apt-get install -y dahdi-linux - sudo apt-get install dahdi - git clone git://git.osmocom.org/libosmo-abis.git - cd libosmo-abis/ - autoreconf -i - ./configure - make - sudo make install - sudo ldconfig -i - cd .. ----------------------------------------- -Пробую установить: git://git.osmocom.org/osmo-hlr это тот который не работает через TCAP/MAP а только через GSUP - sudo apt-get install libpcsclite-dev - sudo apt-get install build-essential libtool libtalloc-dev libsctp-dev shtool autoconf automake git-core pkg-config make gcc python-minimal - sudo apt-get install libpcsclite-dev - - git clone git://git.osmocom.org/osmo-hlr - autoreconf -i - ./configure - make - make install ----------------------------------------- -Настройка osmo-hlr согласно: https://nickvsnetworking.com/gsm-with-osmocom-part-7-the-hlr-home-location-register-and-friends/ -Как установили то запускаем сервис: - systemctl start osmo-hlr -Подключается через telnet и продолжаем настройку - telnet localhost 4258 ----------------------------------------- -Установка libtasn1 версии 4.9 - wget https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.9.tar.gz - tar xvf libtasn1-4.9.tar.gz - cd libtasn1-4.9 - ./configure --prefix=/usr/local/libtasn1/4_9 - make - make check - make install ----------------------------------------- -Устанавливаю gnutls по инструкции https://noknow.info/it/os/install_gnutls_from_source: - sudo apt-get install -y libtasn1-bin (У меня показало 4.13-2 а затребовало 4.9) - sudo apt-get install -y nettle-dev (У меня показало что установленна версия: 3.4-1 поэтому ставлю версию gnutls-3.5.19.tar.xz) - wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.4/gnutls-3.4.17.tar.xz - wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5/gnutls-3.5.19.tar.xz - wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5/gnutls-3.5.19.tar.xz - wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.9.tar.xz - wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.0.tar.xz - tar xvf gnutls-3.6.9.tar.xz - cd gnutls-3.6.9 - ./configure --prefix=/usr/local/gnutls/3_6_9 - make - make check - make install ----------------------------------------------------------------- -Проверяем установлен ли libosmocore - dpkg -L libosmocore -Для установки версии разработчика libosmocore из репозитория: - sudo apt-get install libosmocore-dev -Для удаления libosmocore - sudo apt-get remove libosmocore - Либо с удалением зависимостей: sudo apt-get remove --auto-remove libosmocore - Либо для полного удаления включая зависемости и конфигурационные файлы: sudo apt-get purge libosmocore -Пробую откомпилить и установить: libosmocore из исходников (версия: 1.4.0.326-8c33d) - sudo apt-get install git build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls28-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev libpam0g-dev ntp - sudo apt-get install synaptic - sudo apt install libgnutls-dev - sudo apt-get install -y doxygen - sudo apt-get install -y libmnl-dev - git clone git://git.osmocom.org/libosmocore.git - cd libosmocore/ - autoreconf -i - ./configure - make - sudo make install - sudo ldconfig -i - -**************************************************************************************************** -Настройка IPSEC VPN тунель IKEv2 PSK на Ubuntu с использование StrongSwan: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04 - -Генерим секретный ключь - openssl rand -hex 32 -Выдаст примерно такое: - 23fa1e30aa1623371253e84e7d0dad9d33b1e8fc69253c247cf0297c009e5a9e - - - -Подключиться можно так: - https://thesafety.us/vpn-setup-ikev2-ubuntu21 - - - -**************************************************************************************************** -Установка и настройка openvpn на Ubuntu 16.04 согласно документу: https://timeweb.com/ru/community/articles/openvpn-na-ubuntu-16-04-ustanovka-1 https://www.digitalocean.com/community/tutorials/openvpn-ubuntu-16-04-ru - -Устанавливаем утилиту для синхронизации времени: - apt-get install chrony - systemctl enable chrony --now - cp /usr/share/zoneinfo/Asia/Almaty /etc/localtime - -Установка OpenVPN: - sudo apt-get install openvpn easy-rsa unzip - -Настройка центра сертификации easy-rsa -Копируем шаблонную директорию в нужное нам место - make-cadir ~/openvpn-ca -Дальше заходим в созданную папку и редактируем файл vars - mcedit vars -И в нем поменять значения в конце файла на свои, пример: - export KEY_COUNTRY="US" - export KEY_PROVINCE="NY" - export KEY_CITY="New York City" - export KEY_ORG="DigitalOcean" - export KEY_EMAIL="admin@example.com" - export KEY_OU="Community" - export KEY_NAME="server" - -Создание центра сертификации: -Убедитесь что вы в папке openvpn-ca и выполните команду: - source vars -Теперь нужно удалить все ненужные данные для того, чтобы почистить рабочую среду: - ./clean-all -Переходим к построению корня центра сертификации: - ./build-ca - -Создаём сертификаты: - ./build-key-server server - ./build-dh - openvpn --genkey --secret keys/ta.key - - -Создание сертификата клиента и пары ключей (для каждого подключаемого клиента нужно повторить генерацию) -Для того чтобы создался файл без пароля: - source vars - ./build-key client1 -**************************************************************************************************** -BananaPI SSH создать директорию в: /var/run/sshd и перезагрузить SSH или ОС также нужно подправить файл /usr/lib/tmpfiles.d/sshd.confи удалив /var из строки: d /var/run/sshd 0755 - service ssh start - /usr/lib/tmpfiles.d/sshd.conf - d /var/run/sshd 0755 root root -BananaPI WIFI: sudo nmtui и выбрать подходящую точку доступа для подключения -**************************************************************************************************** -Компиляция DAHDI Asterisk http://linux.mixed-spb.ru/asterisk/install_dahdi.php - git clone -b next git://git.asterisk.org/dahdi/linux dahdi-linux - cd dahdi-linux - make - make install -**************************************************************************************************** -Настройка TLS для Mosquitto MQTT брокера на windows (команды ниже выполнять в LINUX) https://mcuoneclipse.com/2017/04/14/enable-secure-communication-with-tls-and-the-mosquitto-broker/ -1) Создаю CA пару ключей - openssl genrsa -des3 -out m2mqtt_ca.key 2048 -Задал пароль: q123456 -2) Создаю сертификат для ключа m2mqtt_ca.key - openssl req -new -x509 -days 3650 -key m2mqtt_ca.key -out m2mqtt_ca.crt -Если выдаст: Unable to load config info from /usr/local/ssl/openssl.cnf то добавить переменную окружения OPENSSL_CONF со значением C:\Program Files\OpenSSL\openssl.cnf - set OPENSSL_CONF=o:\projects\Workspace_PHP\Apache24\conf\openssl.cnf -3) Create Mosquitto Broker Key Pair - openssl genrsa -out m2mqtt_srv.key 2048 - -4) Create Certificate Request from CA - openssl req -new -out m2mqtt_srv.csr -key m2mqtt_srv.key -5) Verify and Sign the Certificate Request - openssl x509 -req -in m2mqtt_srv.csr -CA m2mqtt_ca.crt -CAkey m2mqtt_ca.key -CAcreateserial -out m2mqtt_srv.crt -days 3650 -Дальше копируем файлы в папку mosquitto - /certs/m2mqtt_ca.crt - /certs/m2mqtt_srv.crt - /certs/m2mqtt_srv.key -Далее открываем /mosquitto.conf и - listener 1883 0.0.0.0 - listener 8883 0.0.0.0 - cafile C:\Program Files\mosquitto\certs\m2mqtt_ca.crt - certfile C:\Program Files\mosquitto\certs\m2mqtt_srv.crt - keyfile C:\Program Files\mosquitto\certs\m2mqtt_srv.key -Дальше перезапускаем mosquitto -Проверить кто занял порт: - netstat -ab - -Для получения отпечастка сертификата выполнить: - openssl x509 -in m2mqtt_srv.crt -noout -fingerprint -sha1 -inform pem - -Для преобразования в pem файл выполнить: - openssl rsa -in m2mqtt_srv.key -text > m2mqtt_srv.key.pem - openssl x509 -inform PEM -in m2mqtt_srv.crt > m2mqtt_srv.crt.pem -**************************************************************************************************** -Установка home-assistanto c Supervisor на Ubuntu Server 20.04, Linux Mint(и малинки) по мативам https://pikabu.ru/story/ustanovka_home_assistant_supervised_v_docker_na_ubuntu_2004_na_besplatnom_vps_servere_ot_oracle_testovaya_sistema_umnogo_doma_7980354 - sudo apt-get update - sudo apt-get upgrade -y - sudo apt autoremove -y - sudo apt-get install -y software-properties-common apparmor-utils apt-transport-https avahi-daemon ca-certificates curl dbus jq network-manager socat -Деактивируем и отключаем ModemManager: - sudo systemctl disable ModemManager - sudo systemctl stop ModemManager -На всякий случай перезагружаем систему - reboot -Устанавливаем Docker: - curl -fsSL get.docker.com | sudo sh -Загружаем скрипт "supervised-installer": - curl -Lo installer.sh https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh -И запускаем установку одним из способов: - - установщик сам выбирает директории (папки установки): sudo bash installer.sh - - мы выбираем директории (папки установки - нужно сначала создать)***: sudo bash installer.sh -p /home -d $PREFIX/hassio (это пример, подробнее на фото) -Разварачивание HA может занять 5 минут -**************************************************************************************************** -Установка Docker на Ubuntu 22.04 по мотивам: https://infoit.com.ua/linux/kak-ustanovit-docker-na-linux-mint-20/ -Обновляем и устанавливаем зависимости: - sudo apt update - sudo apt install curl software-properties-common ca-certificates apt-transport-https -y - wget -O- https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor | sudo tee /etc/apt/keyrings/docker.gpg > /dev/null - echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable"| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - sudo apt update - sudo apt install docker-ce -y - sudo systemctl status docker -Устанавливаем Docker Compose с сервера: - Так старая версия установится: sudo apt-get install docker-compose - curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - chmod +x /usr/local/bin/docker-compose - docker-compose --version -После установки будет создана группа докеров. Добавьте своего пользователя в группу, которая будет запускать команды докеров: - sudo usermod -aG docker $USER -После этого проверьте установку Docker, используя следующую команд - sudo docker --version - docker compose version - - -**********PORTAINER********** -Также можно установить удобный интерфейс для управления докер контейнерами PORTAINER по документации из: https://timeweb.cloud/tutorials/docker/ustanovka-i-ispolzovanie-portainer и видео: https://www.youtube.com/watch?v=EmtNCo7SGbQ - cd /opt - sudo mkdir portainer - cd ./portainer - sudo mcedit docker-compose.yml -И прописываем в файл: - -version: "3.3" -services: - twportainer: - image: portainer/portainer-ce:latest - container_name: portainer - environment: - - TZ=Europe/Moscow - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - /opt/portainer/portainer_data:/data - ports: - - "8000:8000" - - "9443:9443" - restart: always - -version: "3.3": Указывает версию Docker-compose, которую вы используете. Версия 3.3 подходит для большинства современных приложений. -services: В этой секции описываются запускаемые сервисы. -twportainer: Имя сервиса. Используется в качестве идентификатора. -image: portainer/portainer-ce:latest: Определяет образ, который будет использоваться. Здесь используется последняя версия Community Edition. -container_name: twportainer: Назначает имя контейнера, чтобы было легче его идентифицировать. -environment: Позволяет задать переменные окружения. Например, - TZ=Europe/Moscow устанавливает временную зону контейнера. -volumes: - /var/run/docker.sock:/var/run/docker.sock позволяет Portainer взаимодействовать с Docker на вашем хосте; - /opt/twportainer/portainer_data:/data создает постоянное хранилище данных. -ports: - "8000:8000" и "9443:9443" открывают соответствующие порты для доступа к Portainer. 9443 используется для HTTPS подключения. -restart: always: Гарантирует, что контейнер будет автоматически перезапускаться при необходимости, например, после перезагрузки сервера. - -Разрешаем пользователю запускать докер: - sudo usermod -aG docker $USER -Теперь можно запустить конфигурацию командой: - sudo docker-compose up -d - -Открываем: https://127.0.0.1:9443 -После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM] -**************************************************************************************************** -Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26 - sudo apt-get update - sudo apt-get install bind9 dnsutils - sudo apt-get install bind9utils -Добавляем сервис в автозапуск - systemctl enable bind9 -Проверяем что сервис работает - nslookup dmosk.ru 127.0.0.1 -Открываем настройки: - mcedit /etc/bind/named.conf.options -Для глобальных запросов добавляем строку: allow-query { any; }; -Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных - //forwarders { - // 8.8.8.8; - // 8.8.4.4; - //}; -Проверяем настройки командой (ответ должен быть пустым): - sudo named-checkconf -Перезагружаем: - sudo systemctl restart bind9 -Проверяю версию BIND: - named -v -Выдало: BIND 9.16.1-Ubuntu (Stable Release) -Можно проверить какой IP выдаст на DNS запрос - dig locust.kz A - -На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns. - - - - -Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками - -Перейдем в него. - cd /etc/bind/ -Генерируем пару ключь для обмена информацией между клиентом и сервером: - sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key - sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key -Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ. - include "/etc/bind/dirt.kz.key"; - include "/etc/bind/locust.kz.key"; -Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем. -zone "dirt.kz" { - type master; - allow-update {key dirt.kz;}; - file "/var/cache/bind/dirt.kz"; -}; - -zone "locust.kz" { - type master; - allow-update {key locust.kz;}; - file "/var/cache/bind/locust.kz"; -}; - - -В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где: -В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где: - -Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте -Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/ -SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA -NS — Сервер имён -A — рекорд -MX — Почта для обмена -CN — Каноническое имя -PTR — указатель -И таким содержимым: - -$ORIGIN dirt.kz -$TTL 604800 -@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. ( - 8 ; Serial - 604800 ; Refresh - 86400 ; Retry - 2419200 ; Expire - 604800 ) ; Negative Cache TTL -; -@ IN NS bigfoottrade.kz. - -Второй файл для locust.kz: - -$ORIGIN . -$TTL 604800 ; 1 week -locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. ( - 134 ; serial - 604800 ; refresh (1 week) - 86400 ; retry (1 day) - 1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds) - 604800 ; minimum (1 week) - ) - NS bigfoottrade.kz. -$TTL 3600 ; 1 hour - A 5.76.254.182 -$ORIGIN locust.kz. -* A 127.0.0.1 - - -Правлю права доступа: - sudo chown -R bind:bind /etc/bind - -Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой: - sudo rndc reconfig -Потом следует вызвать: - sudo systemctl restart bind9 -Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду -После настроек сервера перезагружаем его: - sudo named-checkconf - sudo rndc reload - sudo systemctl restart bind9 - sudo rndc status - journalctl | grep bind - sudo journalctl -u bind9 -n 50 - - -Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу: - -Файл из примера: - #!/bin/bash - TTL=3600 - SERVER=ns.dyndns.my - HOSTNAME=dhost.dyndns.my - ZONE=dyndns.my - KEYFILE=Kdyndns.my.+157+48025.private - new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! - cd /etc/ddns - nsupdate -v -k $KEYFILE << EOF - server $SERVER - zone $ZONE - update delete $HOSTNAME A - update add $HOSTNAME $TTL A $new_ip_address - send - EOF - -Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже: - #!/bin/bash - TTL=3600 - SERVER=127.0.0.1 - HOSTNAME=*.dirt.kz - ZONE=dirt.kz - KEYFILE=/etc/bind/dirt.kz.key - - new_ip_address= - FILE=/etc/ddns/ip.txt - if test -f "$FILE"; then - new_ip_address=`cat $FILE` - rm $FILE - fi - - len=${#new_ip_address} - if [ $len -gt 3 ] - then - echo "New IP address = $new_ip_address" - else - echo "Not find IP address" - exit - fi - - cd /etc/ddns - sudo nsupdate -v -k $KEYFILE << EOF - server $SERVER - zone $ZONE - update delete $HOSTNAME A - update add $HOSTNAME $TTL A $new_ip_address - update delete dirt.kz A - update add dirt.kz $TTL A $new_ip_address - send - EOF - echo "OK" - -Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента: -'; print_r(getallheaders()); echo ''; - -// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x" -foreach ( getallheaders() as $k => $v) { - if ( strtolower($k) == 'x-forwarded-for' ) { - $tmp = explode(', ', $v); - if ( $tmp[count($tmp)-1] != '' ) - $_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1]; - } -} - -if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){ - $myfile = fopen("/etc/ddns/ip.txt", "w"); - fwrite($myfile, $_SERVER['REMOTE_ADDR']); - fclose($myfile); -} - -echo $_SERVER['REMOTE_ADDR']; - -?> - -Проверяем что находит IP по доменному имени - nslookup dirt.kz 127.0.0.1 - - -**************************************************************************************************** -Установка сервиса обмена сообщениями RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/ - sudo apt-get update - sudo apt-get dist-upgrade - sudo apt install rabbitmq-server -Посмотреть список используемых плагинов: - sudo rabbitmq-plugins list -Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную. - sudo rabbitmq-plugins enable rabbitmq_management - -rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672 -Но для активации нужно добавить пользователя, смотрим пользователей: - sudo rabbitmqctl list_users - sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера - sudo rabbitmqctl set_user_tags admin administrator - sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" -Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43 - -Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed. -Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password - producer: клиент, выполняющий отправку сообщения - queue: собственно очередь сообщений - consumer: клиент, получающий сообщения из очереди - exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html) - -Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y - https://www.rabbitmq.com/devtools.html : -Создаю Maven проект в консоли: - cd O:\projects\Workspace_Java\ - mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false -Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client: - - - com.rabbitmq - amqp-client - 5.14.2 - -Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA. - - Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/ - или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/ -Добавил в POM файл: - - - RabbitMQ - https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0 - com.rabbitmq - - false - - - true - - - - - - - com.rabbitmq - amqp-client - 5.16.0 - - - - - -Перезагружаем: - sudo service rabbitmq-server restart - -**************************************************************************************************** -Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel - -Активирую плагин командой: - sudo rabbitmq-plugins enable rabbitmq_shovel - sudo rabbitmq-plugins enable rabbitmq_shovel_management - -Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку: - -sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation", - "src-queue": "TO_KAZ", - "dest-protocol": "amqp091", - "dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground", - "dest-exchange": "swap", - "dest-exchange-key": ".KAZ.", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Росии такие настройки: - -sudo rabbitmqctl set_parameter shovel kaz_to_rus '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus", - "src-queue": "TO_RUS", - "dest-protocol": "amqp091", - "dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground", - "dest-exchange": "swap", - "dest-exchange-key": "KZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Беларусии такие настройки: - -sudo rabbitmqctl set_parameter shovel kaz_to_blr '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr", - "src-queue": "TO_BLR", - "dest-protocol": "amqp091", - "dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber", - "dest-exchange": "eec.swap", - "dest-exchange-key": "KZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Армении такие настройки: - -sudo rabbitmqctl set_parameter shovel kaz_to_arm '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm", - "src-queue": "TO_ARM", - "dest-protocol": "amqp091", - "dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation", - "dest-exchange": "swap_kz", - "dest-exchange-key": "KZ_ISTT", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Для Кыргызстана (таможенная инфраструктура) - -sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz", - "src-queue": "TO_KGZ", - "dest-protocol": "amqp091", - "dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz", - "dest-exchange": "swap", - "dest-exchange-key": "KAZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Удалять так: - sudo rabbitmqctl clear_parameter shovel kaz_to_kgz - -Для отправки из Киргизии нам то такие настройки: - -sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{ - "src-protocol": "amqp091", - "src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz", - "src-queue": "TO_KAZ", - "dest-protocol": "amqp091", - "dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz", - "dest-exchange": "swap", - "dest-exchange-key": "KGZ", - "ack-mode": "on-confirm", - "publish-properties": { - "delivery_mode": 2 - } -}' - -Удалять так: - sudo rabbitmqctl clear_parameter shovel kgz_to_kaz - - -Чтобы проверить текущие параметры Shovel: - sudo rabbitmqctl list_parameters -А также можно взглянуть что создалось через WEB интерфейс - -Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает. - -**************************************************************************************************** -Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/ - sudo apt-get install libgtk-3-dev build-essential checkinstall - mkdir gtk-build - cd gtk-build - ../configure --disable-shared --enable-unicode - make - sudo make install - sudo ldconfig - sudo checkinstall -**************************************************************************************************** -Wildfly (JBoss) https://helpingbox.net/ru/установите-и-настройте-wildfly-jboss-в-ubuntu-18-04-lts -**************************************************************************************************** -Установка Redmine на Ubuntu 22.04 по https://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_50x_on_Ubuntu_2004_with_Apache2 - -Потом скопировать и подправить на PostgreSQL -admin admin поменял на admin deSert!123 - -Готово теперь можно авторизоваться через WEB интерфейс - Username: admin - Password: admin -**************************************************************************************************** -Установка расширения https://github.com/michelp/pgjwt на ubuntu сервер -Для компиляции устанавливаю (На тестовую машину, не боевую): - sudo apt-get update - sudo apt-get install postgresql-server-dev-14 - apt install ca-certificates curl gnupg lsb-release -Остановился на том что потребовало установить докер при компиляции: https://www.cherryservers.com/blog/how-to-install-and-use-docker-compose-on-ubuntu-20-04 - sudo apt-get install docker-compose-plugin - sudo apt-get install docker-compose-plugin -Клонирую репозиторий: - sudo apt install git - git clone https://github.com/michelp/pgjwt.git -Потом - make -Ошибка на мейке... - install -**************************************************************************************************** -Install Redis по мативам: https://timeweb.cloud/tutorials/redis/ustanovka-i-nastrojka-redis-dlya-raznyh-os - sudo apt-get update - sudo apt install redis - redis-cli --version - sudo systemctl status redis -Config: - sudo mcedit /etc/redis/redis.conf -И меняем в конфигурации на: supervised systemd -Также желательно проверить настройку чтобы слушался только IP: 127.0.0.1 - bind 0.0.0.0 - -Также в поле SECURITY нужно установить пароль, сгенерированный при помощи: - openssl rand 25 | openssl base64 -A -Примерно такой должен быть получиться: - requirepass 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== - -Перезагружаем: - sudo systemctl restart redis-server -Проверяем Redis: - redis-cli -Или так проверяем: - redis-cli -h 127.0.0.1 -p 6379 -a 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== -И пишем: ping - -Проверяем какие порты прослушиваются на компе: - sudo netstat -lnp | grep redis - -**************************************************************************************************** -Для настройки локального сервера имен DNS сервер в место Bind9 теперь Dnsmasq так как он проще, понадобилось для haproxy - sudo apt-get install dnsmasq - sudo apt-get install resolvconf - sudo apt-get install net-tools - sudo apt-get install net-tools -На ошибку "failed to create listening socket for port 53: Address already in use" не обрашаем внимания это норма. -Настраиваем пакеты: - sudo mcedit /etc/dnsmasq.conf -Там будет всё закоментированно, добавляем это: - no-resolv - server=8.8.8.8 - listen-address=127.0.0.1 - bind-interfaces -Далее добавляем пути в /etc/hosts пример - 127.0.0.1 jwt.local -Перезагружаеи - sudo /etc/init.d/dnsmasq restart -Проверяем: - telnet 127.0.0.1 53 - dig @127.0.0.1 -p 53 jwt.local -**************************************************************************************************** -Установка GitLab на Ubuntu сервер по https://itslinuxfoss.com/install-gitlab-ubuntu-22-04/ - sudo apt update && sudo apt upgrade -y - sudo apt install tzdata curl ca-certificates openssh-server - sudo apt install curl debian-archive-keyring lsb-release ca-certificates apt-transport-https software-properties-common -y - curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash - sudo apt install gitlab-ce -Также для CI/CD устанавливаем runner, выполняет команды из .gitlab-ci.yml описание: https://habr.com/ru/companies/slurm/articles/306596/ - curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash - sudo apt-get install gitlab-runner -Редактируем имя хоста: - sudo mcedit /etc/gitlab/gitlab.rb -И прописываем туда - external_url 'http://gitlab.local:8081' -Затем: - sudo gitlab-ctl reconfigure -Как завершиться, проверяем: - sudo gitlab-ctl status -Должно выдать быть что-то в роде: - run: alertmanager: (pid 92581) 18s; run: log: (pid 92343) 80s - run: gitaly: (pid 92590) 18s; run: log: (pid 91561) 189s - run: gitlab-exporter: (pid 92551) 20s; run: log: (pid 92078) 98s - run: gitlab-kas: (pid 92520) 22s; run: log: (pid 91845) 175s - run: gitlab-workhorse: (pid 92531) 21s; run: log: (pid 91985) 117s - run: grafana: (pid 92610) 17s; run: log: (pid 92471) 38s - run: logrotate: (pid 91486) 202s; run: log: (pid 91494) 201s - run: nginx: (pid 91993) 114s; run: log: (pid 92013) 110s - run: node-exporter: (pid 92540) 21s; run: log: (pid 92049) 104s - run: postgres-exporter: (pid 92601) 18s; run: log: (pid 92367) 76s - run: postgresql: (pid 91693) 184s; run: log: (pid 91704) 183s - run: prometheus: (pid 92560) 20s; run: log: (pid 92297) 88s - run: puma: (pid 91904) 132s; run: log: (pid 91917) 129s - run: redis: (pid 91521) 196s; run: log: (pid 91538) 193s - run: redis-exporter: (pid 92553) 20s; run: log: (pid 92217) 94s - run: sidekiq: (pid 91922) 126s; run: log: (pid 91934) 122s -Теперь можно задать логин пользователя (команда долго инициализируется) - sudo gitlab-rake "gitlab:password:reset" -Пользователь: root пароль: q12!qwW@ww -Пробуем зайти по http://gitlab.local:8081 прописав домен в hosts - -Для настройки непрерывного развёртывания испотльзовать инструкцию: https://serverspace.ru/support/help/nastrojka-konvejera-nepreryvnogo-razvertyvaniya--gitlab-ubuntu-20-22/?utm_source=google.com&utm_medium=organic&utm_campaign=google.com&utm_referrer=google.com - -Клонирование через токен так: - https://oauth2:PERSONAL_ACCESS_TOKEN@git.istt.kz/locust/org.ccalm.jwt.git - https://oauth2:glpat-MCMi4iPS8GQzUusT3XUC@git.istt.kz/locust/org.ccalm.jwt.git - - https://oauth2:glpat-fseNuqu3Ftb7zwjv-kbT@git.istt.kz/locust/org.ccalm.dbms.git - https://oauth2:glpat-5fJzjVymFqVumq6FC1yq@git.istt.kz/locust/org.ccalm.main - https://oauth2:glpat-sKQh2x88gsmZbBCz4SfJ@git.istt.kz/transit/dispatcher/kz.istransit.dispatcher - - - - -**************************************************************************************************** -Установка nginx по инсткукции с сайта: https://www.8host.com/blog/sozdanie-samopodpisannogo-ssl-sertifikata-dlya-nginx-v-ubuntu-18-04/ - sudo apt-get update - sudo apt-get install nginx -Настройка самоподписанного сертификата для SSL nginx - sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера. - sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096 -Создаём файл: - sudo mcedit /etc/nginx/conf.d/ssl.conf -И вписываем в него: - -server { - listen 8091 ssl http2; - listen [::]:8091 ssl http2; - - server_name istransit.kg; - - ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; - ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; - ssl_dhparam /etc/nginx/dhparam.pem; - - root /opt/www/istransit.kg; - index index.html index.htm; - - location / { - try_files $uri $uri/ =404; # Попытка найти файл или возвращение 404 - } -} - - - sudo systemctl restart nginx - -Также есть такие команды: - nginx -s stop — быстрое завершение - nginx -s quit — плавное завершение - nginx -s reload — перезагрузка конфигурационного файла - nginx -s reopen — переоткрытие лог-файлов - -Создаю виртуальный хост: - sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/istransit.kz - sudo mcedit /etc/nginx/sites-available/aistransit.kz - -Модифицируем текст настройки: -server { - listen 8081; - listen [::]:8081; - - root /opt/www/istransit.kz; - index index.html; - - server_name istransit.kz www.istransit.kz; - - location / { - try_files $uri $uri/ =404; - } -} - -Теперь можно включить виртуальный хост: - sudo ln -s /etc/nginx/sites-available/istransit.kz /etc/nginx/sites-enabled/ -Проверяем правильность конфигурации: - sudo nginx -t -Перезапускаем: - sudo systemctl restart nginx - -**************************************************************************************************** -Как установить и настроить Elasticsearch, Logstash, Kibana (ELK Stack) на Ubuntu, Debian, Centos: https://portforwarded.com/install-elastic-elk-stack-8-x-on-ubuntu-22-04-lts/ или https://serveradmin.ru/ustanovka-i-nastroyka-elasticsearch-logstash-kibana-elk-stack/ - - sudo apt update && sudo apt upgrade -y -Установи java как это делается смотри выше - sudo apt-get install nginx curl gnupg2 wget -y - sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg - sudo apt-get install apt-transport-httpssudo - echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list - sudo apt update - sudo apt-get install elasticsearch -Если не удалось подключить ключи к репозиторию то скачиваем deb пакет в ручную: - wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.2-amd64.deb - - sudo systemctl enable elasticsearch - sudo systemctl start elasticsearch - - sudo mcedit /etc/elasticsearch/elasticsearch.yml -И там раскоментить и прописать строку: network.host: 0.0.0.0 -Также там поправить на: xpack.security.enabled: false - - sudo systemctl restart elasticsearch - -Проверяю версию Elasticsearch - sudo ufw allow 9200/tcp - curl -X GET "http://localhost:9200/" - -У меня выдало: -{ - "name" : "igor-System-Version", - "cluster_name" : "elasticsearch", - "cluster_uuid" : "Li0_4xz2QTuy8ET7qRLTgg", - "version" : { - "number" : "8.13.2", - "build_flavor" : "default", - "build_type" : "deb", - "build_hash" : "16cc90cd2d08a3147ce02b07e50894bc060a4cbf", - "build_date" : "2024-04-05T14:45:26.420424304Z", - "build_snapshot" : false, - "lucene_version" : "9.10.0", - "minimum_wire_compatibility_version" : "7.17.0", - "minimum_index_compatibility_version" : "7.0.0" - }, - "tagline" : "You Know, for Search" -} - -**********Теперь устанавливаем Kibana********** - sudo apt-get install kibana -y - sudo systemctl start kibana - sudo systemctl enable kibana -Создаём административного пользователя: - sudo su - echo "admin:`openssl passwd -apr1`" | tee -a /etc/nginx/htpasswd.users -Выдало: - Дома: admin:$apr1$sFyWSvZH$E8tL1Zbo.i8q2vSsVy1HK/ - На в виртуалке работа пароль 123456 выдало: admin:$apr1$/n5ACpeE$WZBtYrZOgZ10GfdT4YFD31 -Далее создаём в Nginx виртуальный хост, создав конфигурационный файл для сервиса кибаны: - sudo mcedit /etc/nginx/sites-available/kibana - -server { - listen 80; - - server_name kibana.example.com; - - auth_basic "Restricted Access"; - auth_basic_user_file /etc/nginx/htpasswd.users; - - location / { - proxy_pass http://localhost:5601; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_set_header Host $host; - proxy_cache_bypass $http_upgrade; - } -} - -Разрешаем виртуальный хост для проксирования: - sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/ - sudo systemctl restart nginx - sudo systemctl status nginx - -Теперь кибана должна открыться по адресу: kibana.example.com если не открылась перезагружаем комп - -*********Устанавливаю logstash********** - sudo apt install logstash - - sudo systemctl restart logstash.service - sudo systemctl enable logstash.service - sudo systemctl status logstash.service - - - -По документу из: https://habr.com/ru/articles/236341/ и из https://coderlessons.com/tutorials/devops/uznaite-logstash/logstash-kratkoe-rukovodstvo -Настраиваю logstash открываю потр для отправки логов из Java приложения log4j: - -Так как установили через репозиторий то для включения плагина Log4j он включается командой: - sudo su - /usr/share/logstash/bin/logstash-plugin install logstash-input-log4j - -Так как logstash загрузает все конфигурации из деректории то создаю новый файл для log4j - mcedit /etc/logstash/conf.d/log4j.conf -И теперь можно настроить для приёма log4j логов: - -input { - log4j { - mode => server - host => "0.0.0.0" - port => 5044 - type => "log4j" - } -} -output { - elasticsearch { - hosts => ["http://localhost:9200"] - index => "igor-%{+YYYY.MM.dd}" - #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" - #user => "elastic" - #password => "changeme" - } -} - -Затем нужно перезагрузить: - sudo systemctl restart logstash.service - -*********Устанавливаю filebeat********** - apt install filebeat - - - -**************************************************************************************************** -**********Устанавливаю Loki в месте с Grafana и другими компонентами (Promtail)********** -Согласно документации из: https://grafana.com/docs/loki/latest/get-started/quick-start/ Для Лва: https://www.youtube.com/watch?v=PBfKDyNPBug - -Создаём директорию в: - cd /opt - mkdir loki - cd loki - wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/loki-config.yaml -O loki-config.yaml - wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/promtail-local-config.yaml -O promtail-local-config.yaml - wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/docker-compose.yaml -O docker-compose.yaml - -Меням настройки, прописав в самый конец файла: loki-config.yaml следующее: -auth_enabled: false - - -Запускаем: - sudo docker compose up -d -Если нужно то для остановки можно выполнить следующую команду: - sudo docker compose down - -Пробуем открыть графану: - http://127.0.0.1:3000/ Логин: admin и пароль admin потом сгенерил пароль: gL%$FXVUrjP7zFf - - -Теперь можно отправить тестовую строку в логи label “foo=bar2” and a single log line “fizzbuzz”: - -curl -H "Content-Type: application/json" \ - -s -X POST "http://127.0.0.1:3100/loki/api/v1/push" \ - --data-raw '{"streams": [{ "stream": { "foo": "bar2" }, "values": [ [ "1717279123945000000", "fizzbuzz" ] ] }]}' - - - - -**********Устанавливаю Promtail********** -По мотивам: https://tech.pansolusi.com/2023/08/04/installing-promtail-on-ubuntu/ - - cd /opt - mkdir promtail - cd promtail - curl -O -L "https://github.com/grafana/loki/releases/download/v2.9.7/promtail-linux-amd64.zip" - unzip "promtail-linux-amd64.zip" - promtail -version - sudo mcedit /opt/promtail/promtail-local-config.yaml - -И записываем в файл: - -server: - http_listen_port: 9080 - grpc_listen_port: 0 - -positions: - filename: /tmp/positions.yaml - -clients: - - url: 'http://localhost:3100/loki/api/v1/push' - basic_auth: - username: alexander - password: eakrdutpnhjaE2EFrAoi - -scrape_configs: - - job_name: system - static_configs: - - targets: - - localhost - labels: - job: varlogs - __path__: /var/log/*log - - targets: - - localhost - labels: - job: nginx - __path__: /var/log/nginx/*log - - -Создаём сервис для запуска Promtail - sudo mcedit /etc/systemd/system/promtail.service -И записываем: - -[Unit] -Description=Promtail client for sending logs to Loki -After=network.target -[Service] -ExecStart=/opt/promtail/promtail -config.file=/opt/promtail/promtail-local-config.yaml -Restart=always -TimeoutStopSec=3 -[Install] -WantedBy=multi-user.target - -Запускаем: - sudo service promtail start - sudo service promtail stop - sudo service promtail restart - sudo service promtail status - sudo systemctl enable promtail - -Смотрим логи: - sudo journalctl -u promtail.service - -Теперь можно смотреть в графане логи: http://127.0.0.1:3000/ с label = file -Также можно взглянуть на простой WEB интерфейс promtail: http://127.0.0.1:9080 - -**********Устанавливаю Prometheus согласно инструкции из https://ruvds.com/ru/helpcenter/kak-ustanovit-prometheus-na-ubuntu/ ********** -Установка Prometheus - sudo apt update && - sudo apt upgrade -y && - sudo useradd --no-create-home --shell /bin/false prometheus && - sudo mkdir /etc/prometheus && - sudo mkdir /var/lib/prometheus && - sudo chown prometheus:prometheus /etc/prometheus && - sudo chown prometheus:prometheus /var/lib/prometheus && - cd /tmp && - wget https://github.com/prometheus/prometheus/releases/download/v3.1.0/prometheus-3.1.0.linux-amd64.tar.gz && - tar xvf prometheus-3.1.0.linux-amd64.tar.gz && - sudo cp prometheus-3.1.0.linux-amd64/prometheus /usr/local/bin/ && - sudo cp prometheus-3.1.0.linux-amd64/promtool /usr/local/bin/ && - sudo chown prometheus:prometheus /usr/local/bin/prometheus && - sudo chown prometheus:prometheus /usr/local/bin/promtool && - rm -rf prometheus-3.1.0.linux-amd64.tar.gz prometheus-3.1.0.linux-amd64 -Настройка Prometheus -Создайте файл конфигурации prometheus.yml: - sudo mcedit /etc/prometheus/prometheus.yml -Прописал туда настройки: - -global: - scrape_interval: 15s - -scrape_configs: - - job_name: 'prometheus' - static_configs: - - targets: ['localhost:9090'] - -Созданём systemd-сервис: - sudo mcedit /etc/systemd/system/prometheus.service - - -[Unit] -Description=Prometheus -Wants=network-online.target -After=network-online.target - -[Service] -User=prometheus -Group=prometheus -Type=simple -ExecStart=/usr/local/bin/prometheus \ - --config.file /etc/prometheus/prometheus.yml \ - --storage.tsdb.path /var/lib/prometheus/ - -[Install] -WantedBy=multi-user.target - - -Запускаю сервис: - sudo systemctl daemon-reload - sudo systemctl start prometheus - sudo systemctl enable prometheus - sudo systemctl status prometheus -```sh -sudo systemctl restart prometheus -``` - -Пробуем открыть по адресу: - http://192.168.200.84:9090 - -Теперь настраиваем сбор логов при помощи node exporter (по мотивам из https://it-dev-journal.ru/articles/monitoring-linux-servera-s-prometheus-node-exporter): -Последний билд: https://github.com/prometheus/node_exporter/releases - - wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz - tar xf node_exporter-*.tar.gz - cd node_exporter-1.8.2.linux-amd64 - sudo cp node_exporter /usr/local/bin - sudo useradd --no-create-home --home-dir / --shell /bin/false node_exporter - -Создаём сервис: - sudo mcedit /etc/systemd/system/node_exporter.service - -[Unit] -Description=Prometheus Node Exporter -After=network.target - -[Service] -Type=simple -User=node_exporter -Group=node_exporter -ExecStart=/usr/local/bin/node_exporter - -SyslogIdentifier=node_exporter -Restart=always - -PrivateTmp=yes -ProtectHome=yes -NoNewPrivileges=yes - -ProtectSystem=strict -ProtectControlGroups=true -ProtectKernelModules=true -ProtectKernelTunables=yes - -[Install] -WantedBy=multi-user.target - - sudo systemctl daemon-reload - sudo systemctl start node_exporter - sudo systemctl enable node_exporter - sudo systemctl status node_exporter - -Теперь Node exporter будет выдавать метрики по адресу - wget http://localhost:9100/metrics -O - - wget --user=prometheus --password=PUaAMOhUEOmDmcsJDFWA https://geoserver2.ccalm.org/metrics -O - - - -Настраиваем HAProxy и basic авторизацию (если писать: insecure-password то пароль не захеширован если написать password то должен быть в md5 лил SHA-*): - userlist prometheus_list - user prometheus insecure-password PUaAMOhUEOmDmcsJDFWA - - acl v_metrics path_beg /metrics - acl v_basic_auth http_auth(prometheus) - http-request auth realm Metrics if v_metrics !v_basic_auth - use_backend metrics if v_metrics - - backend metrics - balance roundrobin - server web1 127.0.0.1:9100 check - option httpchk - - -Теперь нужно отредактировать файл sudo mcedit /etc/prometheus/prometheus.yml, добавив новый job_name в scrape_configs с этим адресом. - -- job_name: 'node_exporter_metrics' - scrape_interval: 10s - static_configs: - - targets: ['localhost:9100'] - -Перезагружаем prometheus чтобы он начал собирать метрики -```sh - sudo systemctl restart prometheus -``` - -Смотрим: - http://192.168.200.84:9090/targets - - -Далее устанавливаем графану и добавляем графики для мониторинга - sudo apt-get install -y software-properties-common - sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" - sudo apt-get install -y gnupg - sudo apt-get install -y apt-transport-https - sudo wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - - sudo apt-get update - sudo apt-get install grafana -Запустите и включите сервис Grafana: - sudo systemctl start grafana-server - sudo systemctl enable grafana-server -Проверьте статус: - sudo systemctl status grafana-server -Открываем: - http://192.168.200.84:3000 Логин: admin Пароль: admin - -Заходим в: Home->Connections->Data sources->Add data source - -Для Node Exporter есть шаблоны: - Node Exporter Full (ID: 1860) — Полный дашборд для мониторинга серверов с использованием Node Exporter. - Prometheus (ID: 10991) — Дашборд для мониторинга самого Prometheus. - Linux Server Monitoring (ID: 10244) — Дополнительный дашборд для мониторинга серверов на Linux. - -Если вам нужно больше вариантов, вы всегда можете найти готовые дашборды на официальном сайте https://grafana.com/grafana/dashboards/ - -Заходим в графану и в правом верхенем углу жмём + потом Import Dashboard - - -**********Если нужно то Grafana может быть установленна отдельно ********** -Установка GrafanaLoki через Docker Engine и Docker Compose на Ubuntu 24.04 - -Для установки графаны через докер: - cd /opt - sudo mkdir grafana - cd ./grafana - sudo mcedit docker-compose.yml -И прописываем в файл: - -version: "3.3" -services: - grafana: - image: grafana/grafana-enterprise - container_name: grafana - restart: unless-stopped - ports: - - '3000:3000' - loki: - image: grafana/loki:latest - container_name: loki - restart: unless-stopped - ports: - - "3100:3100" - -Затем для запуска контейнера выполняем: - sudo docker-compose up -d -Если нужно то для остановки можно выполнить следующую команду: - sudo docker-compose down - -Пробуем открыть графану: - http://127.0.0.1:3000/ Логин: admin и пароль admin потом сгенерил пароль: gL%$FXVUrjP7zFf -**************************************************************************************************** -Настраиваю Promtail agent для винды для сбора логов c Windows: -Скачал: https://github.com/grafana/loki/releases в разделе Assets файл promtail-windows-386.exe.zip -Переместите файл promtail.exe в каталог, например, C:\Program Files\promtail -Добавьте этот каталог в PATH, чтобы можно было запускать Promtail из командной строки. -Создаём файл конфигурации в C:\Program Files\promtail promtail-config.yaml со следующим содержимым: - -server: - http_listen_port: 9080 - grpc_listen_port: 0 - -positions: - filename: C:\Program Files\promtail\positions.yaml - -clients: - - url: http://192.168.200.106:3100/loki/api/v1/push - -scrape_configs: - - job_name: dbms_logs - static_configs: - - targets: - - localhost - labels: - job: dbms_logs - __path__: O:\MyDocuments\projects\Workspace_JavaWin\com.geovizor.dbms\logs\kz_mcp_dbms.log - - - job_name: jwt_logs - static_configs: - - targets: - - localhost - labels: - job: jwt_logs - __path__: O:\MyDocuments\projects\Workspace_JavaWin\com.geovizor.jwt\logs\kz_mcp_jwt.log - - -Замените C:\path\to\positions.yaml и C:\path\to\log\files\*.log на соответствующие вашему окружению пути. -promtail.exe --config.file=promtail-config.yaml - -**************************************************************************************************** -Установка графаны через докер Grafana в Docker, по мотивам нейросети DeepSeek: -Установка Docker: - sudo apt update - sudo apt install -y apt-transport-https ca-certificates curl software-properties-common - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - sudo apt update - sudo apt install -y docker-ce docker-ce-cli containerd.io -Установка Docker Compose: - sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - sudo chmod +x /usr/local/bin/docker-compose -Добавляем текущему пользователю группу чтобы он мог работать с докером: - sudo usermod -aG docker $USER - -Проверка установки: - docker --version - docker-compose --version - -Создайте директорию, где будут храниться данные Grafana: - sudo mkdir /opt/grafana - sudo mkdir /opt/grafana/data - sudo mkdir /opt/grafana/data/grafana-storage - sudo mkdir /opt/grafana/config - sudo chown -R 472:472 /opt/grafana/data/grafana-storage - sudo chmod -R 775 /opt/grafana/data/grafana-storage - cd /opt/grafana - mcedit docker-compose.yml -И записываем в него такие настройки: - -services: - grafana: - image: grafana/grafana:latest - container_name: grafana - restart: unless-stopped - ports: - - "3000:3000" - volumes: - - /opt/grafana/data/grafana-storage:/var/lib/grafana # Монтируем директорию хоста в контейнер - environment: - - GF_SECURITY_ADMIN_USER=admin - - GF_SECURITY_ADMIN_PASSWORD=admin - -Запускаем графану с логами для тестов: - docker-compose -f /opt/grafana/docker-compose.yml up -Теперь запускае в фоновом режиме: - docker-compose -f /opt/grafana/docker-compose.yml up -d - docker-compose -f /opt/grafana/docker-compose.yml down -Проверяем работу: - docker-compose -f /opt/grafana/docker-compose.yml ps - - -**************************************************************************************************** -Устанавливаю Gitea по мативам: https://linuxize.com/post/how-to-install-gitea-on-ubuntu-20-04/ - sudo apt update - sudo apt install sqlite3 - sudo apt install git - git --version - sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git - VERSION=1.22 - sudo wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64 - sudo mv /tmp/gitea /usr/local/bin - sudo chmod +x /usr/local/bin/gitea -Создаём директории для хранения данных: - sudo mkdir -p /var/lib/gitea/{custom,data,log} - sudo chown -R git:git /var/lib/gitea/ - sudo chmod -R 750 /var/lib/gitea/ - sudo mkdir /etc/gitea - sudo chown root:git /etc/gitea - sudo chmod 770 /etc/gitea - - sudo wget https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/systemd/gitea.service -P /etc/systemd/system/ - sudo systemctl daemon-reload - sudo systemctl enable --now gitea - sudo systemctl status gitea -Отобразило что можно зайти по: http://localhost:3000/ -Выбираем Database Type: SQLite3 остальные настройки можно оставить по умолчанию -Установил и задал логин: irigm@mail.ru пароль: PF"Ey7#7]mUZ49s - -Устанавливаем параметры только чтение: - sudo chmod 750 /etc/gitea - sudo chmod 640 /etc/gitea/app.ini - -По мотивам на сайте ещё описывается как сделать проксирование через nginx -А также как сделать отправку почты -А также как обновит если что - -**********CI/CD********** -Устанавливаю по инструкции из: https://gitea.com/gitea/act_runner -Скачиваю act_runner с https://about.gitea.com/products/runner/ в директорию: /usr/local/bin -Задаём права: - sudo chown root:root /usr/local/bin/act_runner -Проверяю версию: - act_runner --version -Выдало: v0.2.6 -Записываем в конец файла /etc/gitea/app.ini следующие настройки: -[actions] -ENABLED=true - -Потом: - sudo systemctl restart gitea -Далее переходим в настройки проекта в пункт "Действия": "Создать новый раннер" - Там был токен: CIaWAmzI4jYUCRnQcUCdBFPkg4FPGspnjdpqiqXl - -Создаю каталог: - /etc/act_runner - -Генерю конфиг по умолчанию: - act_runner generate-config > config.yaml - -Регистрирую новый runner - act_runner register - -В WEB интерфейсе gitea появится но похоже от туда можно только удалить. - -Можно попробовать запустить runner: - act_runner daemon - -Регистрация с конфигурационным файлом: - act_runner -c config.yaml register - -Запуск с конфигурационным файлом - act_runner -c config.yaml daemon - -Можно запустить act_runner как сервис, создав файл: sudo mcedit /etc/systemd/system/act_runner.service но нужно создать ползоветеля без привилений, такого: act_runner -Но у меня почему то не запустилось... -Так: - sudo adduser --disabled-password act_runner - sudo passwd act_runner - su act_runner - -Давать права не обязательно: sudo chown root:root /usr/local/bin/act_runner - -[Unit] -Description=Gitea Actions runner -Documentation=https://gitea.com/gitea/act_runner -After=docker.service - -[Service] -ExecStart=/usr/local/bin/act_runner daemon --config /etc/act_runner/config.yaml -ExecReload=/bin/kill -s HUP $MAINPID -WorkingDirectory=/var/lib/act_runner -TimeoutSec=0 -RestartSec=10 -Restart=always -User=act_runner - -[Install] -WantedBy=multi-user.target - - -Запускаем как сервис: - sudo systemctl daemon-reload - sudo systemctl enable act_runner - sudo systemctl restart act_runner - sudo systemctl stop act_runner - sudo systemctl start act_runner - sudo systemctl status act_runner - -Посмотреть на лог: - grep "act_runner" /var/log/syslog - - - - -# .gitea/workflows/publish.yml -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - run_pull: - name: run pull - runs-on: igor - steps: - - name: CreateDate - run: touch /home/igor/runner/$(date +"%Y-%m-%d_%H-%M-%S").txt - -**************************************************************************************************** -Устанавливаю из Node.js из не стандартного репозитория так как там v12.22.9 а нужно >= 18 версия -Удаляем старое: - sudo apt-get remove nodejs npm -Устанавливаем новое: - curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - - sudo apt-get install -y nodejs - node -v - npm -v -**************************************************************************************************** -LDAP — легковесный протокол доступа к каталогам (Для адрестной книги) - sudo apt install slapd ldap-utils - sudo dpkg-reconfigure slapd - -Настраиваем в файле: /etc/ldap/ldap.conf - BASE dc=domain,dc=com - URI ldap://ldap01.domain.com - -**************************************************************************************************** -Простой инструмент для мониторинга ресурсов сервера: - sudo apt install netdata - systemctl restart netdata - sudo mcedit /etc/netdata/netdata.conf - # bind socket to IP = 127.0.0.1 - bind socket to IP = 0.0.0.0 - systemctl restart netdata -Можно открывать по адресу: - http://10.101.1.3:19999/ - http://10.101.1.6:19999/ -**************************************************************************************************** -Install .NET SDK or .NET Runtime on Ubuntu - sudo apt-get update - sudo apt-get install -y dotnet-sdk-8.0 - sudo apt-get install -y aspnetcore-runtime-8.0 - sudo apt-get install -y dotnet-runtime-8.0 - sudo apt install zlib1g -Теперь можно запустить C# ASP.NET Core -**************************************************************************************************** -ssl genkeypair spring boot java -Генерим самоподписанный SSL сертификат: - keytool -genkeypair -alias weather -keyalg RSA -keystore keystore.jks -keysize 2048 -validity 3650 -Потом прописать настройки: - -server: - port: 8081 - ssl: - key-store: classpath:keystore.jks - key-store-password: QyKtWPZB - key-store-type: JKS - key-alias: weather - -**************************************************************************************************** -Для разрешения поиска через Samba и NetBIOS: - sudo apt update - sudo apt install samba - sudo systemctl restart smbd - sudo systemctl enable smbd - +**************************************************************************************************** +Настройка времени и NTP сервера +Устанавливаем зону +```sh + sudo timedatectl set-timezone Asia/Almaty +``` +```conf + sudo date --set="2025-01-07 21:05:00.000" + sudo timedatectl set-ntp on + sudo apt install ntp + ntpq -p +``` +**************************************************************************************************** +Добавляем нового пользователя +```sh + sudo adduser sabyrzhan +``` +```sh + sudo usermod -aG sudo имя_пользователя +``` +**************************************************************************************************** +Установка cinamon на Ubuntu 22.04 и 24/04: +```sh + sudo apt update && sudo apt upgrade -y + sudo apt install cinnamon -y + sudo reboot +``` +Настройка клавиатуры в cinamon удаляем: ibus +```sh + sudo apt-get remove ibus +``` +Добавить в конец файла: sudo mcedit /etc/fstab +/media/sf_O_DRIVE /mnt/O_DRIVE none bind 0 0 +/media/sf_D_DRIVE /mnt/D_DRIVE none bind 0 0 + +sudo chmod 777 /mnt/O_DRIVE +sudo usermod -aG vboxsf $USER + + +**************************************************************************************************** +Для монтирования O_DRIVE в VitrualBox прописывать точку монтирования: /mnt/O_DRIVE +**************************************************************************************************** +Авторизация на базе ключей SSH https://selectel.ru/blog/ssh-authentication/ + +**************************************************************************************************** +Для добавления ярлыка в меню пуск создав файл *.desktop +```sh +cd /usr/share/applications +sudo tee IDEA_JEE.desktop > /dev/null <<'EOF' +[Desktop Entry] +Encoding=UTF-8 +Name=IDEA_JEE +Exec=/opt/idea-IU-221.5787.30/bin/idea.sh +Icon=/opt/idea-IU-221.5787.30/bin/idea.svg +Type=Application +Categories=TextEditor;Development;IDE; +MimeType=text/html +Comment=Java development +Keywords=java;development; +EOF +``` +**************************************************************************************************** + +Linux в Windows https://winitpro.ru/index.php/2020/07/13/zapusk-linux-v-windows-wsl-2/ + wsl --list --online + wsl --install -d Ubuntu +После чего установится Ubuntu, перезагрузил, создал пользователя igor и задал простой пароль + sudo apt-get update && sudo apt-get upgrade -y + sudo apt-get install mc +**************************************************************************************************** +Меняем временую зону Ubuntu + sudo timedatectl set-timezone UTC +**************************************************************************************************** +Убрать звуковые щелчки при работе в Ubuntu которые появляются из-за режима энергосбережения: +Отключить режим низкого энергопотребления для зуковой карты sound + sudo su + echo '0' > /sys/module/snd_hda_intel/parameters/power_save +Фаил авто выполнения скрипта при загрузки: + sudo mcedit /etc/rc.local +В начале файла поставить: #!/bin/bash + sudo chmod +x /etc/rc.local + sudo mcedit /etc/systemd/system/rc-local.service + +[Unit] + Description=/etc/rc.local Compatibility + ConditionPathExists=/etc/rc.local + +[Service] + Type=forking + ExecStart=/etc/rc.local start + TimeoutSec=0 + StandardOutput=tty + RemainAfterExit=yes + SysVStartPriority=99 + +[Install] + WantedBy=multi-user.target + + sudo systemctl enable rc-local + sudo systemctl status rc-local +**************************************************************************************************** +Для того чтобы консоль бястро не отключалась добавить в конец файла: sudo mcedit /etc/sysctl.conf + net.ipv4.tcp_keepalive_time = 600 + net.ipv4.tcp_keepalive_intvl = 10 + net.ipv4.tcp_keepalive_probes = 6 +Перезагрузить: + sysctl -p +Проверить: + cat /proc/sys/net/ipv4/tcp_keepalive_time +**************************************************************************************************** +Обновить ядро Ubuntu на самое новое: + uname -r +Выдало: + 4.15.0-167-generic + 5.4.0-99-generic +Пытаюсь поменять на 5.13.0 или 5.16.10 ищем ядро: + sudo apt-cache search linux-image | more +Устанавливаем ядро: + sudo apt-get install linux-image-5.13.0-1029-oem + + sudo apt install gdebi +**************************************************************************************************** +Тест памяти Ubuntu: +Объем оперативной памяти: + free -h + sudo apt install memtester +Для примера запустим проверку блока ОЗУ, размером в 100 мегабайт состоящую из двух циклов: + sudo memtester 100M 2 +Для более тщательного тестирования памяти можно воспользоваться утилитой memtest86+ из меню загрузчика Grub. +**************************************************************************************************** +Если grub загрузчик установился на флешку то так можно установать на нужный диск + sudo fdisk -l + sudo grub-install --root-directory=/ /dev/sda +В Ubuntu server при неправильном выключениии высвечивается меню grub без времени чтобы его отключить: +Для поиска Windows если он исчез: + sudo os-prober + sudo update-grub +Или так: + sudo mcedit /etc/default/grub + GRUB_DISABLE_OS_PROBER=true +Или так: + sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt update + sudo apt install -y boot-repair && boot-repair +**************************************************************************************************** +Установка и добавление себя в sudo + su -c "apt-get update" + su -c "apt-get -y install sudo" + su -c "addgroup ваш_логин sudo" +**************************************************************************************************** +Установка сервиса времени и часовой пояс +apt-get -y install ntp +dpkg-reconfigure tzdata +**************************************************************************************************** +0) Для того чтобы архивировать и извлечь каталог: + tar -cvf istransit.tar /opt/www/istransit.kz + + tar -xvf /opt/www/istransit.tar -C /opt/www +0)Выключить комп: + shutdown -h now +1)Список процессов + top или лучше установить htop + +Монтирование образа CD + mount -o loop /some.iso /mnt/point + mount -o loop -t iso9660 + + umount DIRECTORY + umount DEVICE_NAME +Посмотреть точки монтирования дисков: + sudo fdisk -l + +3.1) Посмотреть мак адрес по адресу /etc/udev/rules.d/z25_persistent-net.rules + +4)DNS сервера в ubuntu прописываються в /etc/resolv.conf (теперь в другом месте см. инет) + nameserver 212.19.149.53 + nameserver 212.19.149.54 + +5)Список репозиториев в ubuntu расположен в nano /etc/apt/sources.list + apt-get update + apt-get install mc + apt-get remove mc + +Если mc не найден то добавить в репозитории nano /etc/apt/sources.list эту строку: + deb http://archive.ubuntu.com/ubuntu/ jaunty universe + +6)Переменные окружения + export PATH=$PATH:/usr/local/bin:/usr/local/sbin + alias mc='mc -c' + mc +7)Отобразить переменные окружения: export + +8)Настройка PPPoE соединения комманда: pppoeconf +Соединятся командой: sudo pon dsl-provider +Завершить соединение: sudo poff dsl-provider + +**************************************************************************************************** + +Выполнение скрипта + sh Check.sh +**************************************************************************************************** +Символическая ссылка Symbolic +ссылка на папку: + ln -s /mnt/data/ftp /var/www/html/upload +********** Настраиваю прокси сервер ********** + sudo mcedit /etc/environment +И в заголовок пишу: + http_proxy=http://192.168.1.89:8888 + https_proxy=http://192.168.1.89:8888 +или + http_proxy=http://192.168.0.170:7777 +**************************************************************************************************** +Для того чтобы посмотреть размер файлов: + ncdu +Для определения сколько свободного места выполнить: + df -h +**************************************************************************************************** +Чтобы вывести информацию по ОЗУ (ram) выполните команду: + sudo lshw -C memory +**************************************************************************************************** +Установка компилятора для разработки на c++ gcc + sudo apt-get update -y + sudo apt-get upgrade -y + sudo apt-get install perl -y + sudo apt-get install build-essential +Для компиляции по 32 битный Linux (В еклипсе прописать g++ -m32 а также gcc -m32 а также g++ -m32): + sudo apt-get install gcc-multilib + sudo apt-get install g++-multilib +Для eclipse установить: + sudo apt install default-jre +**************************************************************************************************** +Установка кросс-компилятора Cross Compilers для Raspberry Pi на Ubuntu: https://github.com/raspberrypi/tools + sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf + +Note: if building for Pi0/1 using --with-arch=armv6 --with-float=hard --with-fpu=vfp is recommended (and matches the default flags of the toolchains included here). + + + + /home/igor/toolchain/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf + +**************************************************************************************************** +записать информацию о расположении загрузчика системы в фаил +[root]# dd if=/dev/hda3 of=/mnt/floppy/bootsect.lnx bs=512 count=1 +**************************************************************************************************** +Компиляция WIFI драйвера +Для того чтобы узнать версию ядра "4.15.0-23-generic": + uname -r +Внмание: исходники ядра должны быть той же версии что и сейчас работают в системе! +Вывести информацию о USB устройствах: + lsusb -v +У меня выдало: +Для того чтобы посмотреть что подсоединено к pci: + lspci -v +Minipcie +Для того чтобы посмотреть всех устройств: + lsdev -v + +И так у меня RTL8821AE пробую скачать драйвер отсюда: + + +Загрузка и проверка модулей: + lsmod +**************************************************************************************************** +Подключение к wifi +Настраиваемрегион командой: iw reg set CN + + +То что мы живём в китае а то 5G WIFI не работает +sudo -i +echo "options cfg80211 ieee80211_regdom=CN" > /etc/modprobe.d/cfg80211.conf +exit + +sudo ifconfig wlan0 up +$ sudo iwconfig wlan0 essid Node5 +$ sudo dhclient -v wlan0 +http://help.ubuntu.ru/wiki/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E#%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_wifi +**************************************************************************************************** +Активация DHCP клиента: +**************************************************************************************************** +Создание нового пользователя с домашней дерикторией: + sudo useradd igor -g www-data +Задаём пароль: + sudo passwd igor +Добавляем пользователя в дополнительную группу (группы через запятую): + sudo usermod -a -G www-data administrator + sudo usermod -a -G tomcat administrator + sudo usermod -a -G sudo igor +Разрешить доступ к последовательному порту Для этого помещаем себя в группу dialout + sudo usermod -a -G dialout igor +Для проверки настроек: + id igor + groups igor +Назначить sudo привилегии пользователю: + mcedit /etc/sudoers + igor ALL=(ALL:ALL) ALL +Рекурсивно назначить вледельца папки: + + + sudo chown tomcat:tomcat -R /opt/tomcat/geoserver/ROOT/data + sudo chown tomcat:tomcat ~/CCALM.war + sudo chown tomcat:tomcat ~/SoilScience.war + sudo chown : -R /.blabla +Выставляем права на папку: + sudo chmod -R 774 /var/www/ +Для удаления пользователя c домашней и mail директорией выполнить: + userdel -r igor +**************************************************************************************************** +Монтирование USB Flash +mount -t vfat /dev/sda1 /flash +umount /flash +Автомонтирование USB при запуске системы http://www.fight.org.ua/hdddrives/linux_disk_mount_fstab.html http://help.ubuntu.ru/wiki/fstab: +Выполнить команду: sudo blkid +Найти строку: + /dev/sdb1: LABEL="IGOR_8GB" UUID="94D2-1374" TYPE="vfat" + /dev/sdb1: LABEL="SSD_2_5" UUID="14A3BBD52CB2F1C3" TYPE="ntfs" PARTUUID="56c83443-01" + /dev/sdb5: UUID="17C59CBD70BFFBA5" TYPE="ntfs" PARTUUID="f9aec734-05" + +Добавить в sudo mcedit /etc/fstab следующее: + UUID=94D2-1374 /media/usb vfat rw,auto,user,exec,async 0 0 + UUID=7086E7317C4E478E /mnt/O_DRIVE ntfs-3g defaults 0 0 + /dev/sda3 /mnt/ssd ntfs-3g rw,auto,user,exec,async 0 0 + /dev/sda3 /mnt/windows ntfs-3g defaults 0 0 + +Монтирование сетевой файловой системы: + mount -t cifs //192.168.0.11/o /mnt/smb -o username=igor,password=1245,iocharset=utf8,codepage=cp866 +Для автоматического монтирования в /etc/fstab записать: //192.168.0.11/o /mnt/smb cifs username=igor,password=1245,rw,auto,noexec,iocharset=utf8,codepage=cp866,uid=1000,gid=100 0 0 +**************************************************************************************************** +Перенос системы на другой жеский диск (также можно делать недельные бакапы системы, на атоме установленна) +Создаём копию системы на флешку: +sudo tar cvpzf /media/usb/backup.tgz --exclude=/var/www --exclude=/etc/fstab --exclude=/boot/grub/grub.cfg --exclude=/mnt --exclude=/media --exclude=/proc --exclude=/lost+found --exclude=/sys / +Потом извлекаем на новую установленную систему командой: sudo tar xvpfz /backup.tgz -C / +Можно также скопировав с диска на диск без синхронизации: +**************************************************************************************************** +Измененние раздела без перезагрузки сервера после увеличения размера жеского диска (на основе: https://serverspace.ru/support/help/uvelichenie-diskovogo-prostranstva-ubuntu-18/) +ТОЛЬКО ДЛЯ РАЗДЕЛОВ LVM +Посмотреть список дисков: + df -h + lsblk +Выполняем сканирование конфигурации и передачу данных ядру ОС: + echo 1 > /sys/block/sda/device/rescan +Запускаем утилиту: + parted +Выводим таблицу разделов: + p +Результат такой (для запоминания): + Model: VMware Virtual disk (scsi) + Disk /dev/sda: 537GB + Sector size (logical/physical): 512B/512B + Partition Table: gpt + Disk Flags: + + Number Start End Size File system Name Flags + 1 1049kB 2097kB 1049kB bios_grub + 2 2097kB 215GB 215GB ext4 + +Запускаем процедуру слияния: + (parted) resizepart 2 +Где «2» означает номер тома, на котором происходит изменение дискового пространства, вбиваю нужный размер: + 537GB +Потом: + quit +Информируем OC об изменениях: + pvresize /dev/sda2 +Меняем значение тома командой: + lvextend -r -l +100%FREE /dev/mapper/vgroup1-root +Проверяем результат: + df –h + +---------------------------------------- +Вариант для не виртуальной файловой системы (https://habr.com/ru/post/450444/): +Проверяем размер: + sudo fdisk -l +Выдало: + Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: gpt + Disk identifier: 955FD603-437A-4A80-B5F6-90F1C2CCD1D0 + + Device Start End Sectors Size Type + /dev/sda1 2048 4095 2048 1M BIOS boot + /dev/sda2 4096 419921875 419917780 200,2G Linux filesystem +Удаляем раздел и создаём новый командами: + sudo fdisk /dev/sda + p + d + n (Метку файловой системы не удаляем) +Обновляем: + sudo partprobe /dev/sda +Перезаписываем метаданные файловой системы: + sudo resize2fs /dev/sda2 +Проверяем: + sudo fdisk -l +**************************************************************************************************** +Добавление нового пользователя см. cat /etc/passwd и cat /etc/group + sudo useradd tester -d /var/www/www.dirt.kz -g 33 -s /usr/sbin/nologin + sudo passwd tester + sudo userdel tester +**************************************************************************************************** +Настройка rsync для резервного копирования файлов в отдельную папку http://ashep.org/2010/backup-v-linux-nastraivaem-rsync-server/#.VPrB0_mQCNY +1 й командой на флешку: rsync -rlvt --modify-window=1 --delete /var/www /media/usb +Меняем редактор по умолчанию на тот который от MC: + export EDITOR=mcedit +Для добавления в cron для дневной синхронизации: + crontab -e +И добавляем строчку чтоб это происходило в 3 часа ночи: + 0 3 * * * rsync -rlvt --modify-window=1 --delete /var/www /media/usb +**************************************************************************************************** +Настройка cron: + sudo update-alternatives --config editor + update-alternatives --config editor + export EDITOR=mcedit +Или записать в "sudo mcedit /etc/environment" строку "EDITOR=mcedit" + sudo crontab -e + sudo crontab -e -u www-data + sudo crontab -e -u tomcat +В файле прописать: + */5 * * * * wget -O /dev/null -q 'http://www.bigfoottrade.kz/cashier/work.php' + */2 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/globalstar.php' + 10 0 * * * wget -O /dev/null -q 'http://www.bigfoottrade.kz/sitemap.php' + 0 * * * * wget -O /dev/null -q 'http://www.bigfoottrade.kz/shop/tree.php?fn=0&name=test_tree.js' + */30 * * * * /usr/bin/php5 /var/www/update_ip.php + + */1 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/work.php' + 0 3 * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/get/list.php' + */1 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/mail.php' + */1 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/iridium.php' + */2 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/globalstar.php' + + 0 6 * * * wget -O /dev/null -q 'http://locust.kz/DownloadWeather?forecast=000' + 0 7 * * * wget -O /dev/null -q 'http://locust.kz/DownloadWeather?forecast=048' + 1 1 1 * * wget -O /dev/null -q 'http://locust.kz/SendMail' + + 0 1 * * * wget -O /dev/null -q 'http://locust.kz/get/list.php' + 0 1 * * * /opt/backups/backup.sh + +Проверяю таблицу: + sudo crontab -l -u www-data +**************************************************************************************************** +Установка MongoDB на Ubuntu https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-18-04-ru + + sudo apt update + sudo apt install mongodb-server + sudo systemctl status mongodb + +**************************************************************************************************** +Установка MySQL на Ubuntu 22.04 + apt-get update + sudo apt-get install mysql-server +Удаление MySQL + sudo systemctl stop mysql + sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* + sudo rm -rf /etc/mysql /var/lib/mysql + sudo apt autoremove + sudo apt autoclean +Меняем пароль через SQL: + sudo mysql + ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newIg@rR0'; + SELECT user,authentication_string,plugin,host FROM mysql.user; + SHOW GRANTS FOR 'root'@'localhost'; + +Также настроить чтобы он был не регистрозависемым в файле /etc/mysql/mysql.conf.d/mysqld.cnf в секции [mysqld] добавить строку: + lower_case_table_names = 1 +Для возможность удаленого подключения через внешку создаём спец пользователя, это я сделал через dbForge создав там пользователя root@192.168.0.%. + sudo mysql -u root -pnewIg@rR0 + CREATE USER 'root'@'192.168.0.%' IDENTIFIED WITH mysql_native_password BY 'newIg@rR0'; + ALTER USER 'begaikin'@'192.168.0.%' IDENTIFIED BY 'Begaikin@2'; + Проверить: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.%'; + GRANT ALL PRIVILEGES ON `%`.* TO 'root'@'192.168.0.%'; + SHOW GRANTS FOR 'root'@'192.168.0.%'; + +А также для удалёного подключения закоментить параметр "bind-address = 127.0.0.1" в файле настроек mcedit /etc/mysql/mysql.conf.d/mysqld.cnf + +Перезагружаем MySQL: + sudo service mysql restart + + +База MySQL: db1109882_locust +Логин: u1109882_root +Пароль: root123456 + +mysqldump -uu1109882_root -proot123456 -h127.0.0.1 db1109882_locust > /root/db1109882_locust2.sql +**************************************************************************************************** +Установка MySQL для разработчика: + sudo apt-get update + sudo apt-get install libmysqld-dev +**************************************************************************************************** +Установка Apache и PHP (на посл версии Ubuntu php7): + +Подключаемся к серверу: +```sh + ssh administrator@10.101.1.3 +``` + +Устанавливаем: +```sh + sudo apt-get update && + sudo apt-get install apache2 php -y && + sudo apt-get install php libapache2-mod-php -y && + sudo apt-get install php gettext -y && + sudo apt-get install php php-gd -y && + sudo apt-get install php php-pgsql -y && + sudo apt-get install php php-mysql -y && + sudo apt-get install php php-mysqli -y && + sudo apt-get install php-imap -y && + sudo apt-get install php-mbstring -y && + sudo apt-get install php-curl -y && + sudo apt-get install php-xml -y && + sudo apt-get install php-soap -y +``` +Включаем модули: +```sh + sudo phpenmod imap + sudo phpenmod mbstring + sudo a2enmod rewrite +``` + +В /etc/apache2/apache2.conf ставим AllowOverride All командой +```sh +sudo sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf +``` +Проверяем файл: +```sh + sudo mcedit /etc/apache2/apache2.conf +``` + +```sh + sudo a2enmod php8.0 + sudo a2enmod ssl #Так как в последнее время делаю через haproxy то SSL в апачи не использую + sudo a2enmod headers + sudo a2enmod expires + sudo a2enmod passenger #Для redmine + sudo a2enmod fastcgi #Для redmine + sudo a2dismod info #Чтобы не светить статистикой в сеть + sudo a2dismod status #Чтобы не светить статистикой в сеть +``` +Также добавляем обработку раширения .xyz как .php файл. + + +Настраиваем PHP /etc/php/8.3/apache2/php.ini: + max_execution_time = 60 + max_input_time = 120 + short_open_tag = On + display_errors = On + post_max_size = 20M + upload_max_filesize = 20M + + session.gc_maxlifetime = 14400 #Увеличиваем время жизнисесии до 4 часов + +Если выдаёт такое: + AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message + + +Настройка Apache: + httpd - запустить Apache +Перезапустить Apache +```sh + sudo systemctl restart apache2 +``` + +********** Установка Composer для php ********** +Скачиваю в домашнюю папку пользователя + curl -sS https://getcomposer.org/installer -o composer-setup.php +Выполняем загрузку и установку: + sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer +Потом можно будет переходить в папку с сайтом и выполнять + composer require mpdf/mpdf + +********** Настройка laravel под Windows php фреймворк ********** +https://www.tutorialspoint.com/laravel/laravel_installation.htm +После установки композера раскоментить расширение ;extension=fileinfo и выполнить команду: + composer create-project laravel/laravel rigor --prefer-dist +Потом можно запустить сервер зайдя в созданную папку: + php artisan serve + +********** Настройка https ssl для apache под Windows ********** +https://apache-windows.ru/apache-ssl-переход-apache-на-https/ + +********** Настройка https ssl для apache под Linux ********** +Создаём ключ командой: + sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt +На вопрос пароля написал "test!irigm" +Снимаем пароль с ключа: + cp server.key{,.orig} + openssl rsa -in server.key.orig -out server.key + rm server.key.orig +Скопируем их в /etc/ssl и назначим файлу ключа права чтения только администратору: + sudo cp server.crt /etc/ssl/certs/ + sudo cp server.key /etc/ssl/private/ + sudo chmod 0600 /etc/ssl/private/geovizor_com.key +Для начала необходимо активировать mod_ssl: + sudo a2enmod ssl +Содержание файла виртуального хоста: + + ServerAdmin info@geovizor.com + ServerName geovizor.com + ServerAlias www.geovizor.com + DocumentRoot /var/www/geovizor.com + + DirectoryIndex index.html index.php index.xyz + AddType application/x-httpd-php .php .xyz + + SSLEngine on + SSLCertificateFile /etc/ssl/certs/geovizor_com.crt + SSLCertificateChainFile /etc/ssl/certs/geovizor_com.ca-bundle + SSLCertificateKeyFile /etc/ssl/private/geovizor_com.key + + + sudo a2ensite bigfoottrade.kz.ssl.conf + sudo a2ensite bigfoottrade.kz.conf + sudo a2ensite zatochnik.pro.conf + sudo a2ensite zatochnik.pro.ssl.conf + sudo a2ensite elektronnaya-ochered.kz.conf + sudo a2ensite elektronnaya-ochered.kz.conf + sudo a2ensite transit.istt.kz.conf + sudo a2ensite geovizor.com.ssl.conf + sudo a2ensite mqtt.kz.ssl.conf + sudo a2ensite stations.istt.kz.ssl.conf + sudo a2ensite stations.istt.kz.conf + sudo a2ensite uspdmanager.istt.kz.conf + sudo a2ensite msp.istt.kz.conf + sudo a2ensite mog.istt.kz.conf + sudo a2ensite mqtt.kz.conf + sudo a2ensite data.ccalm.org + sudo a2ensite rigor.kz.conf + sudo a2ensite 000-default.conf + sudo a2ensite transit.istt.kz.conf + sudo a2ensite aistransit.kz.conf + sudo a2ensite jwt.local.conf + sudo a2ensite jwt2.local.conf + sudo a2ensite transit_gpti_kg.conf + +Посмотреть все разрешонные сайты: + a2query -s + + sudo a2dissite bigfoottrade.kz.conf + sudo a2dissite zatochnik.pro.ssl.conf + sudo a2dissite zatochnik.pro.conf + sudo a2dissite geovizor.com.ssl.conf + sudo a2dissite transit.istt.kz.conf + sudo a2dissite 000-default.conf + sudo a2dissite default-ssl.conf + sudo a2dissite msp.istt.kz.ssl.conf + sudo a2dissite mqtt.kz.ssl.conf + sudo a2dissite transit.istt.kz.conf + sudo a2dissite istransit.kz.conf + + sudo a2dissite jwt2.local.conf + sudo a2dissite jwt.local.conf + + + +http://aistransit.kz/ + +Для проверки файла ключа: + openssl x509 -noout -modulus -in /etc/ssl/certs/geovizor_com.crt + openssl x509 -noout -modulus -in /etc/ssl/private/server.key + openssl pkcs7 -print_certs -in /etc/ssl/certs/geovizor_com.crt -out /etc/ssl/certs/geovizor_com.pem + +Проверяем настройки командой: + /usr/sbin/apache2 -S + +***** Настраивем виртуальный хост ***** +Копируем файлик примера: +sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/test.istt.kz.conf +sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/msp.istt.kz.ssl.conf +В файлике настраиваю ServerAdmin и DocumentRoot : + + ServerAdmin ivanov.i@istt.kz + ServerName transit.istt.kz + ServerAlias transit2.istt.kz + DocumentRoot /var/www/transit.istt.kz + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + +Активируем: + sudo a2ensite bigfoottrade.kz.conf + sudo a2ensite bigfoottrade.kz.ssl.conf + sudo a2ensite uspdmanager.istt.kz.conf + sudo a2ensite uspdmanager.istt.kz.ssl.conf + sudo a2ensite msp.istt.kz.ssl.conf + sudo a2ensite daloradius.istt.kz.conf + sudo a2ensite stations.istt.kz + sudo a2ensite zatochnik.pro + sudo a2ensite elektronnaya-ochered.kz.conf + sudo a2ensite integration-gateway.org.conf + sudo a2ensite integration-gateway.org.ssl.conf + + sudo a2ensite motion-engine.ru.conf + sudo a2ensite motion-engine.kz.conf + sudo a2ensite motion-engine.com.conf + sudo a2ensite observer.kz.conf + + sudo a2ensite transit.istt.kz.ssl.conf + sudo a2ensite transit.istt.kz.conf + sudo a2ensite geovizor_local.conf +Или деактивируем + sudo a2dissite 000-default.conf + sudo a2dissite msp.istt.kz.ssl.conf + sudo a2dissite bigfoottrade.kz.conf + sudo a2dissite uspdmanager.istt.kz.conf + sudo a2dissite earth.kz.conf + sudo a2dissite integration-gateway.org.conf + sudo a2dissite observer.kz.conf +Перезагружаем + sudo service apache2 restart +**************************************************************************************************** +Настройка SSH: + sudo apt-get install openssh-server +Поменять порт можно в настройках: + sudo mcedit /etc/ssh/sshd_config + Port 2222 +Для рестарта: sudo /etc/init.d/ssh stop/start/restart +Для подключения через Linux: ssh administrator@192.168.0.83 -p 2222 +Для винды есть PUTTY.EXE настроить кодировку на utf-8 +**************************************************************************************************** +Подключение к последовательному порту ttyUSB через Minicom + sudo apt-get install minicom + sudo minicom -s +После настройки зайти так + sudo minicom + +**************************************************************************************************** +********** Устанавливаю и настраиваю FreeRadius ********** +Настройка rlm_perl для FreeRadius: http://abills.net.ua/wiki/doku.php/abills:docs:rlm_perl:ru подсказки в http://www.m-200.com/base/index.php/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA_FREERADIUS._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_3 + +Для того, чтобы использовать встроенный perl необходимо: +1. В файле modules/perl раскомментировать строку 'func_authorize = authorize'. +2. В файле radiusd.conf добавить: + authorize { + preprocess + files + perl + } + + +По инсткукции из http://ittraveler.org/ustanovka-i-nastrojka-radius-servera-na-ubuntu-s-veb-interfejsom/ +Устанавливаем FreeRadius и пакеты + sudo apt-get install freeradius + sudo apt-get install freeradius-mysql + sudo apt-get install freeradius-utils + sudo apt-get install freeradius-perl + sudo apt-get install freeradius-python +Подключаемся к серверу Mysql + mysql -u root -p +Далее создаем базу данных radius + create database radius; +Назначим полные права пользователю radius + grant all on radius.* to radius@localhost identified by "WP@$$w0rd"; +Отключаемся от Mysql + exit +Импортируем таблицы в базу данных radius + #mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql + #mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql +Для проверки добавим тестовые значения в таблицу radcheck + #mysql -u root -p + #mysql> use radius; + #mysql> INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('sqltest', 'Password', 'testpwd'); + #mysql> exit +Открываем файл настроек Freeradius для MySQL расположение файла — /etc/freeradius/sql.conf +Редактируем строки до такого вида: + database = mysql + server = "localhost" + port = 3306 + login = radius + password = "WP@$$w0rd" + radius_db = "radius" + + readclients = yes + +Далее открываем файл сайта Freeradius +Расположение файла — /etc/freeradius/sites-enabled/default +Приводим следующие строки к виду: + Uncomment sql on authorize{} + # See “Authorization Queries” in sql.conf + sql + ... + Uncomment sql on accounting{} + # See “Accounting queries” in sql.conf + sql + ... + Uncomment sql on session{} + # See “Simultaneous Use Checking Queries” in sql.conf + sql + ... + Uncomment sql on post-auth{} + # See “Authentication Logging Queries” in sql.conf + sql + +Далее правим основной конфигурационный файл Freeradius и включаем поддержку Mysql расскоментировав строку. +Расположение файла — /etc/freeradius/radiusd.conf + $INCLUDE sql.conf + +Теперь протестируем настройки сервера. +Откройте 2 ssh окна терминала. +В первом окне остановим сервис Freeradius + sudo service freeradius stop +И запустим сервис в режиме debug + sudo freeradius -X - debug mode +Теперь открываем второе окно терминала и вводим запрос + radtest sqltest testpwd localhost 18128 testing123 +Если вывод команды такой: + Sending Access-Request of id 68 to 127.0.0.1 port 1812 + User-Name = "sqltest" + User-Password = "testpwd" + NAS-IP-Address = 127.0.1.1 + NAS-Port = 18128 + rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=68, length=20 +То все впорядке. + +Теперь нужно добавить Radius клиентов в файл /etc/freeradius/clients.conf +Пример добавления: + +client 192.168.1.0/16 { + +secret = secretpass +shortname = testclient +nastype= testdevice +} + +**************************************************************************************************** +Проверить версию OpenSSL: openssl version -v +Устанавливаю из исходников: + wget https://www.openssl.org/source/openssl-3.0.1.tar.gz + tar xzvf openssl-3.0.1.tar.gz + cd openssl-3.0.1 + ./config + make + sudo make install + ln -s libssl.so.3 libssl.so + sudo ldconfig + openssl version -a +Если выдало что не можжет найти: openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or director +Для этого добавить путь к каталогу библиотек: sudo mcedit /etc/ld.so.conf.d/libc.conf и вставить: /usr/local/lib64 и запустить sudo ldconfig +Также нужно добавить путь при компиляции: sudo export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig +Проверить путь: + pkg-config --cflags openssl + pkg-config --variable pc_path pkg-config +Не знал как указать путь на /usr/local/lib64/pkgconfig поэтому скопировал в /usr/local/lib/pkgconfig + +Если нужно установить OpenSSL для разработчика из репозитория (но там старая нужна > 3.0): + apt-get update + sudo apt-get install libssl-dev + +**************************************************************************************************** +Установить ProFTPD для доступа через FTPS с сохранением пользователей в PostgreSQL по подсказки нейросети + sudo apt-get update + sudo apt-get install proftpd-basic proftpd-mod-pgsql proftpd-mod-crypto postgresql postgresql-contrib openssl + +Создание сертификата TLS: + sudo mkdir /etc/proftpd/ssl + sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/proftpd/ssl/proftpd.key -out /etc/proftpd/ssl/proftpd.crt + +Включаем модуль в: + sudo nano /etc/proftpd/modules.conf +Раскоментив строку: + LoadModule mod_tls.c + +Настройка ProFTPD для использования TLS: + sudo mcedit /etc/proftpd/tls.conf + +Добавьте или измените следующие строки: + + + TLSEngine on + TLSLog /var/log/proftpd/tls.log + TLSProtocol TLSv1.2 + + TLSRSACertificateFile /etc/proftpd/ssl/proftpd.crt + TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key + TLSOptions NoCertRequest + + TLSVerifyClient off + TLSRequired on + + TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3 + + +Включение TLS в основной конфигурации ProFTPD: + + sudo mcedit /etc/proftpd/proftpd.conf + +Добавьте или измените следующие строки: + +Include /etc/proftpd/tls.conf + +Создаём и меняем базу данных + + CREATE DATABASE ftpusers; + + CREATE TABLE users ( + id SERIAL PRIMARY KEY, + name VARCHAR(30) NOT NULL UNIQUE, + password VARCHAR(128) NOT NULL, + uid INT NOT NULL, + gid INT NOT NULL, + homedir VARCHAR(255) NOT NULL, + shell VARCHAR(255) NOT NULL + ); + + INSERT INTO users (name, password, uid, gid, homedir, shell) VALUES ('', MD5(''), 1001, 1001, '/home/', '/bin/false'); + INSERT INTO users (name, password, uid, gid, homedir, shell) VALUES ('administrator', MD5('administrator'), 1001, 1001, '/home/administrator', '/bin/false'); + + CREATE USER proftpd WITH PASSWORD 'ReULkD8M'; + GRANT ALL PRIVILEGES ON DATABASE ftpusers TO proftpd; + +Включаем модуль в: + sudo nano /etc/proftpd/modules.conf +Раскоментив строку: + LoadModule mod_sql.c + LoadModule mod_sql_postgres.c + LoadModule mod_sql_passwd.c + +Редактируем: + sudo nano /etc/proftpd/pgsql.conf + +Настройка ProFTPD для использования PostgreSQL: + + sudo mcedit /etc/proftpd/pgsql.conf + +Вставить следующий код: + + + SQLEngine on + SQLBackend pgsql + SQLAuthenticate users + + SQLConnectInfo ftpusers@10.101.1.6:5432 proftpd ReULkD8M + + SQLUserInfo users name password uid gid homedir shell + + # Логирование SQL-запросов + SQLLogFile /var/log/proftpd/sql.log + SQLLog ALL + + # Указание на использование открытых паролей + SQLAuthTypes OpenPlaintext + + + + +Добавляем ссылку на созданную настройку: + sudo nano /etc/proftpd/proftpd.conf + +Добавилв следующее содержимое: + +Include /etc/proftpd/pgsql.conf + +Теперь можно перезапустить proftpd: + sudo systemctl restart proftpd + +Проверяем что пользователи успешно считались из базы даныз командой: + sudo mcedit -f /var/log/proftpd/sql.log + +**************************************************************************************************** +Установить ProFTPD http://sys-admin.kz/os/nix/539-centod-install-proftpd.html для доступа через FTPS + +Настраиваем для пользователя www-data + + sudo apt-get install proftpd-basic openssl +Проверить какие модули установленны: + proftpd -vv +sudo apt-get remove --purge proftpd-basic + +В настройках mcedit /etc/proftpd/proftpd.conf изменить: +UseIPv6 off +DefaultRoot ~ +ServerIdent on "FTP Server ready." +RequireValidShell off +AuthUserFile /etc/proftpd/ftpd.passwd + +Для создания нового виртуального пользователя "tester" "firsttester" в файле выполнить комманду (uid и gid должны быть как у пользователя www-data смотри: cat /etc/passwd и cat /etc/group) + + sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=tester --uid=33 --gid=33 --home=/var/www/www.dirt.kz --shell=/bin/false + sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpzhol --uid=33 --gid=33 --home=/mnt/ssd/ftp --shell=/bin/false + sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=zatochnik --uid=33 --gid=33 --home=/var/www/www.zatochnik.pro --shell=/bin/false + sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=evak --uid=33 --gid=33 --home=/var/www/evak --shell=/bin/false + sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=apk --uid=33 --gid=33 --home=/var/www/istransit.kz/apk --shell=/bin/false + sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=rebezov.a --uid=33 --gid=33 --home=/var/www/test2.istransit.kz --shell=/bin/false + sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=rebezov.a --uid=33 --gid=33 --home=/opt/www/istransit.kz --shell=/bin/false +Задал пароль для apk пользователя: vooOtKBb7bckcNh +Задал пароль для rebezov.a : BU39kb2 + +задал пароль: + zoto!23+ + +Назначить права на файл: + sudo chown proftpd:nogroup /etc/proftpd/ftpd.passwd +Сменить пароль: ftpasswd --passwd --name=tester --change-password + +Перезапустить: /etc/init.d/proftpd restart + +Задать права на папку: sudo chown -R 33:33 /var/www +Задать права на папку: sudo chown -R 33:33 /opt/www + +****************************************************** +Для настройки SSL для proftpd Выполнить в консоли: + +Включаем модуль в: + sudo mcedit /etc/proftpd/modules.conf +Раскоментив строку: + LoadModule mod_tls.c + +Проверить какие модули установленны, если нет tls то дальше не выполнять: + proftpd -vv + +sudo mkdir /etc/proftpd/ssl +sudo openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem +sudo chown -R proftpd:nogroup /etc/proftpd/ssl +Потом в /etc/proftpd/proftpd.conf раскоментируем строку Include /etc/proftpd/tls.conf +И откоректируем этот файл так: + +TLSEngine on +TLSLog /var/log/proftpd/tls.log +TLSProtocol SSLv23 TLSv1 +TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem +TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem +TLSOptions NoCertRequest +TLSVerifyClient off +TLSRequired on + +Перезапустить: /etc/init.d/proftpd restart +**************************************************************************************************** +На Ubuntu включить файрвол брандмауэр firewall: +http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/firewall +Желательно сменить порт для ssh допустим на 2222 + + sudo ufw allow ssh + sudo ufw enable + sudo ufw allow 80/tcp + sudo ufw allow 8080/tcp + sudo ufw allow 443/tcp + sudo ufw allow 10050/tcp + sudo ufw allow 50000:50010/tcp + sudo ufw allow 5432/tcp + sudo ufw allow 3219/tcp + sudo ufw allow 3221/tcp + +Эти настройки были до переустановки сервера + 443/tcp ALLOW Anywhere + 80/tcp ALLOW Anywhere + 10000/tcp ALLOW 192.168.0.0/24 + 3306/tcp ALLOW 192.168.0.0/24 + 10050/tcp ALLOW 192.168.0.0/24 + 10051/tcp ALLOW 192.168.0.0/24 + 2222/tcp ALLOW Anywhere + 8080/tcp ALLOW Anywhere + 5432/tcp ALLOW Anywhere + 1812/udp ALLOW Anywhere + 1813/udp ALLOW Anywhere + 3799/udp ALLOW Anywhere +Эти порты для терминалов: + 3211/tcp ALLOW Anywhere + 3212/tcp ALLOW Anywhere + 3213/tcp ALLOW Anywhere + 3214/tcp ALLOW Anywhere + 3215/tcp ALLOW Anywhere + 3216/tcp ALLOW Anywhere + 3217/tcp ALLOW Anywhere + 3218/tcp ALLOW Anywhere + 3219/tcp ALLOW Anywhere + 3220/tcp ALLOW Anywhere + 3221/tcp ALLOW Anywhere + + +Для freeredius: + sudo ufw allow 1812/udp + sudo ufw allow 1813/udp + sudo ufw allow 3799/udp + + sudo ufw deny ftps + sudo ufw delete +deny 80/tcp + sudo ufw allow from 192.168.0.89 to any port 3306 + sudo ufw allow from 192.168.0.0/24 to any port 2222 proto tcp + sudo ufw delete from 192.168.0.0/24 to any port 5432 proto tcp +Для отключения: + sudo ufw disable +Для получения списка включнных + sudo ufw status +**************************************************************************************************** +https://pro-gram.ru/bridge-utils-ubuntu-server-18-04.html +Устанавливаю ПО для сетевого моста: + sudo apt install bridge-utils +Смотрим интерфейсы: + ifconfig -a +Открываю: sudo nano /etc/netplan/50-cloud-init.yaml +Файлик для жолака есть в папке "Заливка" +**************************************************************************************************** +Отключить IP v6: http://www.linuxrussia.com/2013/05/disable-ipv6-ubuntu.html +**************************************************************************************************** +Установка sendmail для почты на php + sudo apt-get install php-mail + sudo apt-get install sendmail + sudo sendmailconfig +Проверить доменное имя: + sudo mcedit /etc/hosts +Настраиваем PHP: + sudo mcedit /etc/php/8.1/apache2/php.ini +Прописав: + sendmail_path = /usr/sbin/sendmail -t -i +Или если используем ssmtp то (ниже есть настройка для внешнего почтового сервера): + sendmail_path = /usr/sbin/ssmtp -t + +Перезагружаем апач: + sudo service apache2 restart +**************************************************************************************************** +Настройка переадресации почты: + sudo apt-get install postfix +В файл /etc/postfix/main.cf + recipient_bcc_maps = hash:/etc/postfix/virtual +В файл /etc/postfix/virtual записать: + @bigfoottrade.kz irigm@mail.ru + @bigfoottrade.kz instruments@asia.com +поле чего: + postmap /etc/postfix/virtual + postfix reload +Также добавить в фаирволл: + sudo ufw allow Postfix + sudo ufw allow 'Postfix SMTPS' + + sudo ufw deny Postfix + sudo ufw deny 'Postfix SMTPS' +**************************************************************************************************** +Использование для почты внешнего сервера например mail.ru (в php и других программах) + sudo apt-get install mailutils + sudo apt-get install ssmtp +Потом заходим в настройки и меняем параметры + sudo mcedit /etc/ssmtp/ssmtp.conf + +Для yandex.ru должно быть такое: + root=no_reply@bigfoottrade.kz + mailhub=smtp.yandex.ru:465 + #hostname=localhost + UseTLS=YES + AuthUser=no_reply@bigfoottrade.kz + AuthPass=Rp1ZB1nB340kSQAoPor3 + FromLineOverride=YES + Debug=NO +Для локального сервера istt.kz должно быть такое: + root=no-reply@istt.kz + mailhub=mail.istt.kz:465 + #hostname=localhost + UseTLS=YES + AuthUser=no-reply@istt.kz + AuthPass=je6&HHCEmJ + FromLineOverride=YES + Debug=NO + +А в файле sudo mcedit /etc/ssmtp/revaliases прописать: + administrator:no_reply@bigfoottrade.kz:smtp.yandex.ru:465 + www-data:no_reply@bigfoottrade.kz:smtp.yandex.ru:465 + igor:no_reply@bigfoottrade.kz:smtp.yandex.ru:465 + root:no_reply@bigfoottrade.kz:smtp.yandex.ru:465 + zabbix:no_reply@bigfoottrade.kz:smtp.yandex.ru:465 +Тестируем отправку в консоли: + echo test_message | ssmtp irigm@mail.ru +Логи находятся в папке sudo mcedit /var/log/maillog +**************************************************************************************************** +Старую версию агента/сервера из репазитория можно установить так: + cd /usr/src + wget http://repo.zabbix.com/zabbix/2.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_2.2-1+trusty_all.deb + sudo dpkg -i zabbix-release_2.2-1+trusty_all.deb + sudo apt-get update + sudo apt-get install zabbix-agent + service zabbix-agent start +**************************************************************************************************** +Устанавливаю zabbix сервер 5.2 https://techexpert.tips/zabbix/zabbix-5-install-ubuntu-linux/ на Ubuntu 18.04 + sudo apt update && sudo apt upgrade + sudo apt install apache2 + sudo apt install php php-cli php-common php-pgsql +Скачиваю настройки репозитория для zabbix для Ubuntu server 18.04 bionic x64: + wget -P ~ https://repo.zabbix.com/zabbix/5.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.2-1%2Bubuntu18.04_all.deb +Добавляю репозиторий заббикса: + sudo dpkg -i ./zabbix-release_5.2-1+ubuntu18.04_all.deb +Устанавливаю необходимые пакеты: + sudo apt update + sudo apt install zabbix-server-pgsql zabbix-frontend-php zabbix-apache-conf zabbix-agent zabbix-get +Создаю начальную базу, через WEB интерфейс, название базы: zabbix пароль z123456 + CREATE DATABASE transit + WITH OWNER = postgres + TEMPLATE = template0 + ENCODING = 'UTF8' + TABLESPACE = pg_default + LC_COLLATE = 'ru_RU.UTF-8' + LC_CTYPE = 'ru_RU.UTF-8' + CONNECTION LIMIT = -1; +Импортируем изначальную схему и данные: + zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix +Настраиваем логин пароль: + mcedit /etc/zabbix/zabbix_server.conf +Прописываем: + DBPassword=z123456 +Проверяю настройку PHP: mcedit /etc/php/7.2/apache2/php.ini + date.timezone = Asia/Almaty +Затем: + sudo service apache2 restart +Запускаем процессы сервера и агента + sudo service zabbix-server start + sudo update-rc.d zabbix-server enable + sudo systemctl restart zabbix-server zabbix-agent apache2 + sudo systemctl enable zabbix-server zabbix-agent apache2 +Логи при такой установке в: + /var/log/zabbix +Пробуем зайти + http://94.247.128.218/zabbix + +Проходимся по WEB настройке и авторизуемся: Admin с паролем zabbix там создаём узел сети и добавляем нужные шаблоны. +Поменял пароль на: ze0bra + + + + + +Настройка E-mail для оповещений при помощи скрипта http://efsol-it.blogspot.com/2014/05/zabbix-email.html: +Узнаём куда нужно ложить скрипты: + cat /etc/zabbix/zabbix_server.conf | grep alertscripts +Выдало: + # AlertScriptsPath=/usr/lib/zabbix/alertscripts + + +Записал туда этот путь: /usr/local/etc/zabbix/alertscripts + +Скрипт для отправки почты (закинул в 2 пуми в alertscripts и externalscripts): + #!/bin/bash + to="$1" + subject="$2" + body="$3" + echo $body | mail -s $subject $to + exit 0 +Прописываем права для скрипта: + chown zabbix.zabbix /usr/local/etc/zabbix/alertscripts/email.sh + chmod +x /usr/local/etc/zabbix/alertscripts/email.sh +Потом внастройках Администрирование -> Способы оповещений -> Создать способ оповещения +После того как создали в настройках пользователя присваиваем оповещение. +Потом активируем действия в "Настройка -> действия" +Перезапускаем + sudo service zabbix-server restart + +**************************************************************************************************** +Для копирования библиотек запустить: + mvn dependency:copy-dependencies -DoutputDirectory=${project.build.directory}/libs +Потом эти библиотеки хранить рядом с jar + +Скомпилировать в "IntelliJ IDEA -> Maven -> package" создастца TransitToRabbitMQ-1.0-SNAPSHOT.jar +Используем команду "-cp" а не "-jar" так как в манифесте нет описания главного класса: + /usr/bin/java -jar /opt/TransitToRabbitMQ.jar + /usr/bin/java -cp /opt/TransitToRabbitMQ.jar kz.istt.app.Forwarding +Для создания сервиса для запуска .jar необходимо создать файл Transit_RabbitMQ_Forwarding.service: + + + +[Unit] +Description=Forwarding RabbitMQ DATA +After=syslog.target + +[Service] +WorkingDirectory=/opt/ +ExecStart=/usr/bin/java -cp /opt/TransitToRabbitMQ.jar kz.istt.app.Forwarding +User=tomcat +Group=tomcat +UMask=0007 +RestartSec=120 +Restart=always +SuccessExitStatus=143 + +[Install] +WantedBy=multi-user.target + +[Journal] +SystemMaxUse=64M + + +Устанавливаем владельца: + sudo chown tomcat:tomcat -R /opt/ +Смотрим что выдаёт: + sudo journalctl -e -u Transit_RabbitMQ_Forwarding + +**************************************************************************************************** +Установка GeoServer на Tomcat +Скачиваем WAR с сайта http://geoserver.org/release/stable/ + cd /tmp + curl -O https://nav.dl.sourceforge.net/project/geoserver/GeoServer/2.23.2/geoserver-2.23.2-war.zip +Извлекаю tomcat: + sudo mkdir /opt/tomcat/geoserver + sudo apt-get install unzip + sudo unzip geoserver-2*war.zip + mv geoserver.war ROOT.war + cp ROOT.war /opt/tomcat/geoserver + sudo chown tomcat:tomcat -R /opt/tomcat/geoserver +Добавляем в sudo mcedit /opt/tomcat/conf/server.xml перед + geoserver2.ccalm.org + + +Стандартные логин и пароль администратора admin и geoserver (поменял на geoserver1) +Мастер пароль поменял с geoserver на geoserver1 http://uspdmanager.istt.kz:8080/geoserver + +Разрешаем запись для генерации тайлов: + + +При переносе на другой сервер скопировать папку /opt/tomcat/webapps/geoserver/data + +Расширения такие как gs-web-wps-2.11.0.jar закинуть в папку: /opt/tomcat/webapps/geoserver/WEB-INF/lib + +Если перенаправлять через HAProxy с HTTPS на HTTTP то GeoServer будет глючить так как на строне клиента пытается подстраиваться под протокол, поэтому нужно включать HTTPS и на Tomcat! + +**************************************************************************************************** +***** Настройка https ssl для tomcat ***** +Купил SSL сертификат в www.gogetssl.com сгенерировав на сайте SHA-256 CSR and Private Key. +Подтвердил владение, выслали 2 файла в архиве: integration-gateway_org.ca-bundle, integration-gateway_org.crt +Переписал Private ключ в текстовый файл locust_kz.key +Также прислали сертификаты на почту: "Sectigo RSA Domain Validation Secure Server CA", "USERTrust RSA Certification Authority", "AAA Certificate Services" и использую CA сертификат. + +Либо при помощи самоподписанного сертификата, генерим с алиасом geoserver и паролем qw0qw1qw2: + keytool -genkey -keyalg RSA -alias geoserver -keystore /opt/tomcat/conf/ssl/keystore.jks -storepass qw0qw1qw2 -validity 3650 -keysize 2048 +Проверяем что ключь создан корректно: + keytool -list -keystore /opt/tomcat/conf/ssl/keystore.jks -storepass qw0qw1qw2 + +Преобразую в хранилище pkcs12: + openssl pkcs12 -export -in [my_certificate.crt] -inkey [my_key.key] -out [keystore.p12] -name [new_alias] -CAfile [my_ca_bundle.crt] -caname root + openssl pkcs12 -export -in integration-gateway_org.crt -inkey integration-gateway_org.key -out keystore.p12 -name new_alias -CAfile integration-gateway_org.ca-bundle -caname root + openssl pkcs12 -export -in locust_kz.crt -inkey locust_kz.key -out keystore.p12 -name new_alias -CAfile locust_kz.ca-bundle -caname root + openssl pkcs12 -export -in ccalm_org.crt -inkey ccalm_org.key -out ccalm_org.p12 -name ccalm_org -CAfile ccalm_org.ca-bundle -caname root +Задал пароль: qw0qw1qw2 для хранилища ключей + +Преобразую в хранилище java: + keytool -importkeystore -deststorepass [new_keystore_pass] -destkeypass [new_key_pass] -destkeystore [keystore.jks] -srckeystore [keystore.p12] -srcstoretype PKCS12 -srcstorepass [pass_used_in_p12_keystore] -alias [alias_used_in_p12_keystore] + keytool -importkeystore -deststorepass qw0qw1qw2 -destkeypass qw0qw1qw2 -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass qw0qw1qw2 -alias new_alias + keytool -importkeystore -deststorepass qw0qw1qw2 -destkeypass qw0qw1qw2 -destkeystore ccalm_org.jks -srckeystore ccalm_org.p12 -srcstoretype PKCS12 -srcstorepass qw0qw1qw2 -alias ccalm_org +Импорт ключа в хранилище (теперь в нём 2 ключа для locust.kz и для ccalm.org): + keytool -importkeystore -srckeystore ccalm_org.p12 -destkeystore keystore.jks -srcstoretype pkcs12 -alias ccalm_org + +keytool -list -v -keystore keystore.jks + +Настроить томкат, добавив текст который ниже в: sudo mcedit /opt/tomcat/conf/server.xml + + + + + + + + + + +Также при помощи authbind разрешить не-root программе быть назначенными младшим портам: + sudo apt-get install authbind + sudo touch /etc/authbind/byport/443 + sudo chmod 500 /etc/authbind/byport/443 + sudo chown tomcat /etc/authbind/byport/443 + +**************************************************************************************************** +Для создания сервиса создайте service-файл /etc/systemd/system/zholak_gps.service (замените poc-smsc на имя вашего сервиса): + + sudo touch /etc/systemd/system/PServerARNAVI.service + sudo chmod 664 /etc/systemd/system/PServerARNAVI.service + sudo mcedit /etc/systemd/system/PServerARNAVI.service + +И пишем в этот файл следующий текст: + + + +[Unit] +Description=zholak_ftp + +[Service] +WorkingDirectory=/var/opt/servers/arnavi/ +ExecStart=/var/opt/servers/arnavi/PServerARNAVI PServerARNAVI.ini + +RestartSec=10 +Restart=always + +[Install] +WantedBy=multi-user.target + +Для перепрочтения настроек выполнить: + sudo systemctl daemon-reload +Затем можно выполнять команды: + sudo systemctl start geoserver2 + sudo systemctl start SServerWialonIPS_transit + sudo systemctl start PServerWialonIPS_transit_u + sudo systemctl start PServerWialonIPS + sudo systemctl start SServerARNAVI + sudo systemctl start SServerWialonIPS + sudo systemctl start PServerARNAVI + sudo systemctl start PServerEGTS_transit + sudo systemctl start PServerARNAVI_STATIONS_TEST + sudo systemctl start SServerTKSTAR_STATIONS + sudo systemctl start PServerTKSTAR_STATIONS + sudo systemctl start SServerMQTT + sudo systemctl start PServerMQTT + sudo systemctl start SServerEGTS_transit + sudo systemctl start SServerEGTS_transit_3241 + sudo systemctl start Transit_RabbitMQ_Forwarding + sudo systemctl start Transit_RabbitMQ_Forwarding_RUS + sudo systemctl start Transit_RabbitMQ_Read + sudo systemctl start SServerMT300_msp + sudo systemctl start PServerMT300_msp + sudo systemctl start SServerTeltonika + sudo systemctl start PServerTeltonika + sudo systemctl start SServerJointech + sudo systemctl start PServerJointech + + sudo systemctl stop SServerEGTS_transit + sudo systemctl stop SServerARNAVI_STATIONS_TEST + sudo systemctl stop zholak_ftp + sudo systemctl stop geoserver2 + sudo systemctl stop Transit_RabbitMQ_Forwarding_RUS + sudo systemctl stop SServerJointech + sudo systemctl stop PServerJointech + sudo systemctl stop PServerWialonIPS_transit + + sudo systemctl restart SServerWialonIPS_transit + sudo systemctl restart zholak_ftp + sudo systemctl restart PServerARNAVI + sudo systemctl restart PServerARNAVI_TEST + sudo systemctl restart PServerMT300_msp + sudo systemctl restart SServerTeltonika + sudo systemctl restart PServerTeltonika + sudo systemctl restart Transit_RabbitMQ_Forwarding + sudo systemctl restart Transit_RabbitMQ_Forwarding_RUS + sudo systemctl restart Transit_RabbitMQ_Read + sudo systemctl restart SServerJointech + + systemctl status geoserver2 + systemctl status PServerARNAVI + systemctl status SServerARNAVI_STATIONS + systemctl status Virtuasudo systemctl start PServerWialonIPS_transitlTerminal + systemctl status SServerARNAVI_STATIONS_TEST + systemctl status SServerTKSTAR_STATIONS + systemctl status PServerTKSTAR_STATIONS + systemctl status SServerARNAVI + systemctl status SServerWialonIPS + systemctl status PServerEGTS_transit + systemctl status PServerARNAVI + systemctl status PServerWialonIPS + systemctl status SServerMQTT + systemctl status PServerMQTT + systemctl status SServerEGTS_transit + systemctl status SServerEGTS_transit_3241 + systemctl status SServerWialonIPS_transit + systemctl status PServerWialonIPS_transit + systemctl status PServerWialonIPS_transit_u + systemctl status Transit_RabbitMQ_Forwarding + systemctl status Transit_RabbitMQ_Forwarding_RUS + systemctl status Transit_RabbitMQ_Read + systemctl status SServerMT300_msp + systemctl status PServerMT300_msp + systemctl status SServerTeltonika + systemctl status PServerTeltonika + systemctl status SServerJointech + systemctl status PServerJointech + +Чтобы добавить сервис в автозагрузку, необходимо активировать его: + sudo systemctl enable geoserver2 + sudo systemctl enable SServerEGTS_transit + sudo systemctl enable SServerEGTS_transit_3241 + sudo systemctl enable PServerEGTS_transit + sudo systemctl enable SServerWialonIPS_transit + sudo systemctl enable PServerWialonIPS_transit_u + sudo systemctl enable VirtualTerminal + sudo systemctl enable SServerARNAVI_STATIONS + sudo systemctl enable PServerARNAVI_STATIONS + sudo systemctl enable PServerARNAVI_STATIONS_TEST + sudo systemctl enable SServerTKSTAR_STATIONS + sudo systemctl enable PServerTKSTAR_STATIONS + sudo systemctl enable SServerMQTT + sudo systemctl enable PServerMQTT + sudo systemctl enable SServerMT300_msp + sudo systemctl enable PServerMT300_msp + sudo systemctl enable Transit_RabbitMQ_Forwarding + sudo systemctl enable Transit_RabbitMQ_Forwarding_RUS + sudo systemctl enable Transit_RabbitMQ_Read + sudo systemctl enable SServerJointech + sudo systemctl enable PServerJointech + + systemctl enable SServerARNAVI + systemctl enable SServerWialonIPS + systemctl enable PServerARNAVI + systemctl enable PServerWialonIPS + +Чтобы проверить логи сервиса, выполните: + journalctl -u zholak_gps + journalctl -u SServerWialonIPS_transit + journalctl -u PServerWialonIPS_transit + journalctl -u geoserver2 +**************************************************************************************************** +Команды Linux +pwd - получить имя текущей директории +cd - изменить текущую директорию +ls - распечатать информацию о файлах или директориях +cat - слить или вывести файлы-аргументы на стандартный вывод +cp - копировать файлы +mv - переместить (переименовать) файлы +ln - создать ссылку на файл +rm - удалить файлы +rmdir - удалить директорию +mkdir - создать директорию +echo - вывести аргументы командной строки на стандартный вывод +ps - узнать номера выполняемых процессов +kill - "убить" выполняемый процес по его номеру +man - выдать справку об использовании и ключах команды +**************************************************************************************************** +Удалённая отладка c++ приложения на Ubuntu при помощи GDB-gdbserver debug +Устанавливаем на удалённой машине: + sudo apt install gdbserver + +Для того чтобы не писать каждый раз пароль авторизуемся по ключю +Для этого генерим ключик локально: + ssh-keygen -t rsa -b 2048 +Значения по умолчанию оставил пустыми, сгенерился в /home/username/.ssh/id_rsa +Копируем ключик на нужную машину командай: + ssh-copy-id -p 22 administrator@10.101.1.3 + +Для копирования и запуска программы на целевую машину создаём скрипт копирования и запуска: + +#!/bin/bash +echo "*** copy file to server ***" +#scp -P 2222 /mnt/O_DRIVE/projects/Workspace_C++/GServer/Debug/GServer administrator@192.168.0.83:/var/www/server +scp -P 2222 /mnt/O_DRIVE/projects/Workspace_C++/MServer/Debug/MServer administrator@192.168.0.83:/var/www/server +#scp /mnt/O_DRIVE/projects/Workspace_C++/VTerminal/Debug/VTerminal administrator@192.168.0.83:/var/www/uspdmanager.istt.kz + +echo "*** exec program on server ***" + +#ssh -p 2222 administrator@192.168.0.83 gdbserver 192.168.0.83:10000 /var/www/server/GServer +ssh -p 2222 administrator@192.168.0.83 gdbserver 192.168.0.83:10000 /var/www/server/MServer +#ssh administrator@192.168.0.83 gdbserver 192.168.0.83:10000 /var/www/uspdmanager.istt.kz/VTerminal e101 + +Скрипт можно не делать так как в Eclipse это можно автоматизировать при помощи "C/C++ Remote Application". + + +**************************************************************************************************** +Настройка kannel для отправки SMS через SMPP (http://alexkorvin.blogspot.com/2011/05/sms-kannel-centos-55.html) +Устанавливаю kannel + sudo apt-get install kannel + +bearerbox – главный демон, который держит связь по SMPP в качестве клиента, работает с 3g-донглами, слушает порт для подключения других демонов. +opensmppbox – демон, который работает как SMPP сервер для подключения других клиентов. Тоже подключается к bearerbox и работает через него. + + sudo mcedit /etc/kannel/kannel.conf + + +Скрипт автостарта в ubuntu +Автор: Zeboton +Иногда нужно чтобы при загрузке Ubuntu выполнила какие-либо действия (к примеру, запустила какую-нибудь программу). Как же это сделать? +Всё просто как 3 копейки! +1. Нужно создать файл с командами, которые нужно выполнить при старте системе: +view source +print +? +1. +sudo nano /etc/init.d/autostart.script + +Как понятно, autostart.script это название файла в котором будут записаны команды и оно может быть любым, но не должно совпадать с именами уже существующих файлов в папке /etc/init.d/. +В первой строке файла должно быть указано какая оболочка или интерпретатор будет выполнять команды в файле. Если вы хотите использовать те же команды, что и в терминале, то файл должен начинаться со строки: +view source +print +? +1. +#!/bin/bash + +2. Нужно разрешить файлу выполняться: +view source +print +? +1. +sudo chmod +x /etc/init.d/autostart.script + +3. Рассказываем системе что этот файл нужно исполнять при старте системы: +view source +print +? +1. +sudo update-rc.d autostart.script defaults 95 + +Где 95 это порядок в очереди исполнения. Подробнее можно узнать из +view source +print +? +1. +man update-rc.d + +Перезапускаем систему и радуемся результату + +P.S. +Для удаления из автостарта нужно выполнить: +view source +print +? +1. +sudo update-rc.d autostart.script remove +**************************************************************************************************** +Подключение стронних SSL сертификатов, допустим с gogetssl.com +После покупки сертификата в .pem файл нужно переписать такие ключи и сертификаты как: + 1) PrivateKey + 2) Сертификат (Certificate) Использую только bigfoottrade_kz.crt + 3) Цепочка сертификатов (Chain of Trust) +Сертификат для подписи приватного ключа (Certificate Signing Request(CSR)) использовать не надо, он больше не нужен. + +Пробую собрать pem файл из того что скачал с сайта gogetssl.com (зайдя в раздел подробннее о сертификате) + cat istransit_kz.key istransit_kz.crt istransit_kz.ca> istransit_kz.pem +Потом зайти проверить через mcedit что символы перехода не из вины + +**************************************************************************************************** +Устанавливаю python на Ubuntu 18.04 + + sudo apt update + sudo apt-get install build-essential python3-all-dev + sudo apt-get install libhdf5-dev + sudo apt-get install gdal-bin + sudo apt-get install python3-gdal + sudo apt-get install python3-h5py + sudo apt-get install python3-requests + sudo apt-get install python3-pip + + + + sudo pip3 install --upgrade pip + sudo pip3 install requests + pip install --upgrade requests + sudo pip3 install ease_grid + +**************************************************************************************************** + Настраиваю статический сетевой IP адрес в Ubuntu 22.04: +Для этого открываем: sudo mcedit /etc/netplan/00-installer-config.yaml +И меняем: + network: + ethernets: + enp0s3: + dhcp4: true + version: 2 +На: +network: + ethernets: + enp0s3: + dhcp4: no + addresses: + - 192.168.0.138/24 + gateway4: 192.168.0.253 + nameservers: + addresses: + - 8.8.8.8 + - 8.8.4.4 + version: 2 +**************************************************************************************************** +В старой ubuntu 16.04 IP настраивались так: sudo nano /etc/network/interfaces + iface eth0 inet static + address 192.168.200.57 + netmask 255.255.255.0 + gateway 192.168.200.1 + auto eth0 + +Или так для DHCP + iface eth0 inet dhcp + auto eth0 + +Обновляю интерфейс не перезагружая: + sudo systemctl restart networking + +Для ubuntu 18.04 20.04 и далее настройки в etc\netplan +Для ЖОЛАК настраивал мост так: + network: + ethernets: + enp1s0: + addresses: [] + dhcp4: true + dhcp6: false + optional: true + enp2s0: + addresses: [] + dhcp4: false + dhcp6: false + optional: true + enp3s0: + addresses: [] + dhcp4: false + dhcp6: false + optional: true + enp4s0: + addresses: [] + dhcp4: false + dhcp6: false + optional: true + bridges: + br0: + interfaces: [enp2s0,enp3s0,enp4s0] + addresses: [192.168.1.10/24] + dhcp4: false + dhcp6: false + optional: true + version: 2 + +Применение конфигурации: + sudo netplan apply +**************************************************************************************************** +--sudo apt update +--sudo apt install libosmocore +Устанавливаю библиотеку OpenBSC: + sudo apt update + sudo apt install libosmocore-dev + sudo apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc libpcsclite-dev +---------------------------------------- +https://security-bits.de/research/cellular/lab_setup +Установка SimpleHLR согласно: https://osmocom.org/projects/osmonitb/wiki/Simplehlr + sudo apt install php php-sqlite3 +https://osmocom.org/projects/osmo-hlr/wiki/OsmoHLR + + +Пробую скомпилить: https://github.com/moiji-mobile/hlr эти исходники по 32 битную версию Линукса (На форумах говорят проблемы были по 64 битную версию поэтому автор и сделал по 32 бита) +Снадеждой что тут поддерживает TCAP/MAP так как: OsmoHLR does not support the classic TCAP/MAP protocol but rather implements the more light-weight GSUP protocol. + sudo apt-get install git-all + sudo apt-get install libtalloc-dev + sudo apt-get install libusb-dev + sudo apt-get install libusb-1.0-0-dev + sudo apt-get install libmnl-dev + sudo apt-get install libsctp-dev + git clone https://github.com/moiji-mobile/hlr +Потом запустил SH файл, скомпилилась libosmocore и что? Она типа с TCAP/MAP? + Узнаём версию библиотеки: +---------------------------------------- +Установка libosmoabis https://osmocom.org/projects/libosmo-abis/wiki/Libosmo-abis +Это библиотека, содержащая общий / разделяемый код, относящийся к интерфейсу A-bis между BTS и BSC. Он реализует драйверы для карт E1 на основе mISDN и DAHDI, а также для некоторых диалектов A-bis / IP. + sudo apt-get install libortp-dev + git clone git://git.osmocom.org/libosmo-abis.git + cd libosmo-abis/ + autoreconf -i + ./configure + make + sudo make install + sudo ldconfig -i + cd .. +---------------------------------------- +Установка libosmo-abis (libosmoabis) + sudo apt-get install libortp-dev + sudo apt-get install -y dahdi-linux + sudo apt-get install dahdi + git clone git://git.osmocom.org/libosmo-abis.git + cd libosmo-abis/ + autoreconf -i + ./configure + make + sudo make install + sudo ldconfig -i + cd .. +---------------------------------------- +Пробую установить: git://git.osmocom.org/osmo-hlr это тот который не работает через TCAP/MAP а только через GSUP + sudo apt-get install libpcsclite-dev + sudo apt-get install build-essential libtool libtalloc-dev libsctp-dev shtool autoconf automake git-core pkg-config make gcc python-minimal + sudo apt-get install libpcsclite-dev + + git clone git://git.osmocom.org/osmo-hlr + autoreconf -i + ./configure + make + make install +---------------------------------------- +Настройка osmo-hlr согласно: https://nickvsnetworking.com/gsm-with-osmocom-part-7-the-hlr-home-location-register-and-friends/ +Как установили то запускаем сервис: + systemctl start osmo-hlr +Подключается через telnet и продолжаем настройку + telnet localhost 4258 +---------------------------------------- +Установка libtasn1 версии 4.9 + wget https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.9.tar.gz + tar xvf libtasn1-4.9.tar.gz + cd libtasn1-4.9 + ./configure --prefix=/usr/local/libtasn1/4_9 + make + make check + make install +---------------------------------------- +Устанавливаю gnutls по инструкции https://noknow.info/it/os/install_gnutls_from_source: + sudo apt-get install -y libtasn1-bin (У меня показало 4.13-2 а затребовало 4.9) + sudo apt-get install -y nettle-dev (У меня показало что установленна версия: 3.4-1 поэтому ставлю версию gnutls-3.5.19.tar.xz) + wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.4/gnutls-3.4.17.tar.xz + wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5/gnutls-3.5.19.tar.xz + wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5/gnutls-3.5.19.tar.xz + wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.9.tar.xz + wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.0.tar.xz + tar xvf gnutls-3.6.9.tar.xz + cd gnutls-3.6.9 + ./configure --prefix=/usr/local/gnutls/3_6_9 + make + make check + make install +---------------------------------------------------------------- +Проверяем установлен ли libosmocore + dpkg -L libosmocore +Для установки версии разработчика libosmocore из репозитория: + sudo apt-get install libosmocore-dev +Для удаления libosmocore + sudo apt-get remove libosmocore + Либо с удалением зависимостей: sudo apt-get remove --auto-remove libosmocore + Либо для полного удаления включая зависемости и конфигурационные файлы: sudo apt-get purge libosmocore +Пробую откомпилить и установить: libosmocore из исходников (версия: 1.4.0.326-8c33d) + sudo apt-get install git build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls28-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev libpam0g-dev ntp + sudo apt-get install synaptic + sudo apt install libgnutls-dev + sudo apt-get install -y doxygen + sudo apt-get install -y libmnl-dev + git clone git://git.osmocom.org/libosmocore.git + cd libosmocore/ + autoreconf -i + ./configure + make + sudo make install + sudo ldconfig -i + +**************************************************************************************************** +Настройка IPSEC VPN тунель IKEv2 PSK на Ubuntu с использование StrongSwan: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04 + +Генерим секретный ключь + openssl rand -hex 32 +Выдаст примерно такое: + 23fa1e30aa1623371253e84e7d0dad9d33b1e8fc69253c247cf0297c009e5a9e + + + +Подключиться можно так: + https://thesafety.us/vpn-setup-ikev2-ubuntu21 + + + +**************************************************************************************************** +Установка и настройка openvpn на Ubuntu 16.04 согласно документу: https://timeweb.com/ru/community/articles/openvpn-na-ubuntu-16-04-ustanovka-1 https://www.digitalocean.com/community/tutorials/openvpn-ubuntu-16-04-ru + +Устанавливаем утилиту для синхронизации времени: + apt-get install chrony + systemctl enable chrony --now + cp /usr/share/zoneinfo/Asia/Almaty /etc/localtime + +Установка OpenVPN: + sudo apt-get install openvpn easy-rsa unzip + +Настройка центра сертификации easy-rsa +Копируем шаблонную директорию в нужное нам место + make-cadir ~/openvpn-ca +Дальше заходим в созданную папку и редактируем файл vars + mcedit vars +И в нем поменять значения в конце файла на свои, пример: + export KEY_COUNTRY="US" + export KEY_PROVINCE="NY" + export KEY_CITY="New York City" + export KEY_ORG="DigitalOcean" + export KEY_EMAIL="admin@example.com" + export KEY_OU="Community" + export KEY_NAME="server" + +Создание центра сертификации: +Убедитесь что вы в папке openvpn-ca и выполните команду: + source vars +Теперь нужно удалить все ненужные данные для того, чтобы почистить рабочую среду: + ./clean-all +Переходим к построению корня центра сертификации: + ./build-ca + +Создаём сертификаты: + ./build-key-server server + ./build-dh + openvpn --genkey --secret keys/ta.key + + +Создание сертификата клиента и пары ключей (для каждого подключаемого клиента нужно повторить генерацию) +Для того чтобы создался файл без пароля: + source vars + ./build-key client1 +**************************************************************************************************** +BananaPI SSH создать директорию в: /var/run/sshd и перезагрузить SSH или ОС также нужно подправить файл /usr/lib/tmpfiles.d/sshd.confи удалив /var из строки: d /var/run/sshd 0755 + service ssh start + /usr/lib/tmpfiles.d/sshd.conf + d /var/run/sshd 0755 root root +BananaPI WIFI: sudo nmtui и выбрать подходящую точку доступа для подключения +**************************************************************************************************** +Компиляция DAHDI Asterisk http://linux.mixed-spb.ru/asterisk/install_dahdi.php + git clone -b next git://git.asterisk.org/dahdi/linux dahdi-linux + cd dahdi-linux + make + make install +**************************************************************************************************** +Настройка TLS для Mosquitto MQTT брокера на windows (команды ниже выполнять в LINUX) https://mcuoneclipse.com/2017/04/14/enable-secure-communication-with-tls-and-the-mosquitto-broker/ +1) Создаю CA пару ключей + openssl genrsa -des3 -out m2mqtt_ca.key 2048 +Задал пароль: q123456 +2) Создаю сертификат для ключа m2mqtt_ca.key + openssl req -new -x509 -days 3650 -key m2mqtt_ca.key -out m2mqtt_ca.crt +Если выдаст: Unable to load config info from /usr/local/ssl/openssl.cnf то добавить переменную окружения OPENSSL_CONF со значением C:\Program Files\OpenSSL\openssl.cnf + set OPENSSL_CONF=o:\projects\Workspace_PHP\Apache24\conf\openssl.cnf +3) Create Mosquitto Broker Key Pair + openssl genrsa -out m2mqtt_srv.key 2048 + +4) Create Certificate Request from CA + openssl req -new -out m2mqtt_srv.csr -key m2mqtt_srv.key +5) Verify and Sign the Certificate Request + openssl x509 -req -in m2mqtt_srv.csr -CA m2mqtt_ca.crt -CAkey m2mqtt_ca.key -CAcreateserial -out m2mqtt_srv.crt -days 3650 +Дальше копируем файлы в папку mosquitto + /certs/m2mqtt_ca.crt + /certs/m2mqtt_srv.crt + /certs/m2mqtt_srv.key +Далее открываем /mosquitto.conf и + listener 1883 0.0.0.0 + listener 8883 0.0.0.0 + cafile C:\Program Files\mosquitto\certs\m2mqtt_ca.crt + certfile C:\Program Files\mosquitto\certs\m2mqtt_srv.crt + keyfile C:\Program Files\mosquitto\certs\m2mqtt_srv.key +Дальше перезапускаем mosquitto +Проверить кто занял порт: + netstat -ab + +Для получения отпечастка сертификата выполнить: + openssl x509 -in m2mqtt_srv.crt -noout -fingerprint -sha1 -inform pem + +Для преобразования в pem файл выполнить: + openssl rsa -in m2mqtt_srv.key -text > m2mqtt_srv.key.pem + openssl x509 -inform PEM -in m2mqtt_srv.crt > m2mqtt_srv.crt.pem +**************************************************************************************************** +Установка home-assistanto c Supervisor на Ubuntu Server 20.04, Linux Mint(и малинки) по мативам https://pikabu.ru/story/ustanovka_home_assistant_supervised_v_docker_na_ubuntu_2004_na_besplatnom_vps_servere_ot_oracle_testovaya_sistema_umnogo_doma_7980354 + sudo apt-get update + sudo apt-get upgrade -y + sudo apt autoremove -y + sudo apt-get install -y software-properties-common apparmor-utils apt-transport-https avahi-daemon ca-certificates curl dbus jq network-manager socat +Деактивируем и отключаем ModemManager: + sudo systemctl disable ModemManager + sudo systemctl stop ModemManager +На всякий случай перезагружаем систему + reboot +Устанавливаем Docker: + curl -fsSL get.docker.com | sudo sh +Загружаем скрипт "supervised-installer": + curl -Lo installer.sh https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh +И запускаем установку одним из способов: + - установщик сам выбирает директории (папки установки): sudo bash installer.sh + - мы выбираем директории (папки установки - нужно сначала создать)***: sudo bash installer.sh -p /home -d $PREFIX/hassio (это пример, подробнее на фото) +Разварачивание HA может занять 5 минут +**************************************************************************************************** +Установка Docker на Ubuntu 22.04 по мотивам: https://infoit.com.ua/linux/kak-ustanovit-docker-na-linux-mint-20/ +Обновляем и устанавливаем зависимости: + sudo apt update + sudo apt install curl software-properties-common ca-certificates apt-transport-https -y + wget -O- https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor | sudo tee /etc/apt/keyrings/docker.gpg > /dev/null + echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable"| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt update + sudo apt install docker-ce -y + sudo systemctl status docker +Устанавливаем Docker Compose с сервера: + Так старая версия установится: sudo apt-get install docker-compose + curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + chmod +x /usr/local/bin/docker-compose + docker-compose --version +После установки будет создана группа докеров. Добавьте своего пользователя в группу, которая будет запускать команды докеров: + sudo usermod -aG docker $USER +После этого проверьте установку Docker, используя следующую команд + sudo docker --version + docker compose version + + +**********PORTAINER********** +Также можно установить удобный интерфейс для управления докер контейнерами PORTAINER по документации из: https://timeweb.cloud/tutorials/docker/ustanovka-i-ispolzovanie-portainer и видео: https://www.youtube.com/watch?v=EmtNCo7SGbQ + cd /opt + sudo mkdir portainer + cd ./portainer + sudo mcedit docker-compose.yml +И прописываем в файл: + +version: "3.3" +services: + twportainer: + image: portainer/portainer-ce:latest + container_name: portainer + environment: + - TZ=Europe/Moscow + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /opt/portainer/portainer_data:/data + ports: + - "8000:8000" + - "9443:9443" + restart: always + +version: "3.3": Указывает версию Docker-compose, которую вы используете. Версия 3.3 подходит для большинства современных приложений. +services: В этой секции описываются запускаемые сервисы. +twportainer: Имя сервиса. Используется в качестве идентификатора. +image: portainer/portainer-ce:latest: Определяет образ, который будет использоваться. Здесь используется последняя версия Community Edition. +container_name: twportainer: Назначает имя контейнера, чтобы было легче его идентифицировать. +environment: Позволяет задать переменные окружения. Например, - TZ=Europe/Moscow устанавливает временную зону контейнера. +volumes: + /var/run/docker.sock:/var/run/docker.sock позволяет Portainer взаимодействовать с Docker на вашем хосте; + /opt/twportainer/portainer_data:/data создает постоянное хранилище данных. +ports: + "8000:8000" и "9443:9443" открывают соответствующие порты для доступа к Portainer. 9443 используется для HTTPS подключения. +restart: always: Гарантирует, что контейнер будет автоматически перезапускаться при необходимости, например, после перезагрузки сервера. + +Разрешаем пользователю запускать докер: + sudo usermod -aG docker $USER +Теперь можно запустить конфигурацию командой: + sudo docker-compose up -d + +Открываем: https://127.0.0.1:9443 +После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM] +**************************************************************************************************** +Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26 + sudo apt-get update + sudo apt-get install bind9 dnsutils + sudo apt-get install bind9utils +Добавляем сервис в автозапуск + systemctl enable bind9 +Проверяем что сервис работает + nslookup dmosk.ru 127.0.0.1 +Открываем настройки: + mcedit /etc/bind/named.conf.options +Для глобальных запросов добавляем строку: allow-query { any; }; +Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных + //forwarders { + // 8.8.8.8; + // 8.8.4.4; + //}; +Проверяем настройки командой (ответ должен быть пустым): + sudo named-checkconf +Перезагружаем: + sudo systemctl restart bind9 +Проверяю версию BIND: + named -v +Выдало: BIND 9.16.1-Ubuntu (Stable Release) +Можно проверить какой IP выдаст на DNS запрос + dig locust.kz A + +На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns. + + + + +Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками + +Перейдем в него. + cd /etc/bind/ +Генерируем пару ключь для обмена информацией между клиентом и сервером: + sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key + sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key +Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ. + include "/etc/bind/dirt.kz.key"; + include "/etc/bind/locust.kz.key"; +Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем. +zone "dirt.kz" { + type master; + allow-update {key dirt.kz;}; + file "/var/cache/bind/dirt.kz"; +}; + +zone "locust.kz" { + type master; + allow-update {key locust.kz;}; + file "/var/cache/bind/locust.kz"; +}; + + +В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где: +В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где: + +Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте +Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/ +SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA +NS — Сервер имён +A — рекорд +MX — Почта для обмена +CN — Каноническое имя +PTR — указатель +И таким содержимым: + +$ORIGIN dirt.kz +$TTL 604800 +@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. ( + 8 ; Serial + 604800 ; Refresh + 86400 ; Retry + 2419200 ; Expire + 604800 ) ; Negative Cache TTL +; +@ IN NS bigfoottrade.kz. + +Второй файл для locust.kz: + +$ORIGIN . +$TTL 604800 ; 1 week +locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. ( + 134 ; serial + 604800 ; refresh (1 week) + 86400 ; retry (1 day) + 1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds) + 604800 ; minimum (1 week) + ) + NS bigfoottrade.kz. +$TTL 3600 ; 1 hour + A 5.76.254.182 +$ORIGIN locust.kz. +* A 127.0.0.1 + + +Правлю права доступа: + sudo chown -R bind:bind /etc/bind + +Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой: + sudo rndc reconfig +Потом следует вызвать: + sudo systemctl restart bind9 +Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду +После настроек сервера перезагружаем его: + sudo named-checkconf + sudo rndc reload + sudo systemctl restart bind9 + sudo rndc status + journalctl | grep bind + sudo journalctl -u bind9 -n 50 + + +Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу: + +Файл из примера: + #!/bin/bash + TTL=3600 + SERVER=ns.dyndns.my + HOSTNAME=dhost.dyndns.my + ZONE=dyndns.my + KEYFILE=Kdyndns.my.+157+48025.private + new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! + cd /etc/ddns + nsupdate -v -k $KEYFILE << EOF + server $SERVER + zone $ZONE + update delete $HOSTNAME A + update add $HOSTNAME $TTL A $new_ip_address + send + EOF + +Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже: + #!/bin/bash + TTL=3600 + SERVER=127.0.0.1 + HOSTNAME=*.dirt.kz + ZONE=dirt.kz + KEYFILE=/etc/bind/dirt.kz.key + + new_ip_address= + FILE=/etc/ddns/ip.txt + if test -f "$FILE"; then + new_ip_address=`cat $FILE` + rm $FILE + fi + + len=${#new_ip_address} + if [ $len -gt 3 ] + then + echo "New IP address = $new_ip_address" + else + echo "Not find IP address" + exit + fi + + cd /etc/ddns + sudo nsupdate -v -k $KEYFILE << EOF + server $SERVER + zone $ZONE + update delete $HOSTNAME A + update add $HOSTNAME $TTL A $new_ip_address + update delete dirt.kz A + update add dirt.kz $TTL A $new_ip_address + send + EOF + echo "OK" + +Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента: +'; print_r(getallheaders()); echo ''; + +// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x" +foreach ( getallheaders() as $k => $v) { + if ( strtolower($k) == 'x-forwarded-for' ) { + $tmp = explode(', ', $v); + if ( $tmp[count($tmp)-1] != '' ) + $_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1]; + } +} + +if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){ + $myfile = fopen("/etc/ddns/ip.txt", "w"); + fwrite($myfile, $_SERVER['REMOTE_ADDR']); + fclose($myfile); +} + +echo $_SERVER['REMOTE_ADDR']; + +?> + +Проверяем что находит IP по доменному имени + nslookup dirt.kz 127.0.0.1 + + +**************************************************************************************************** +Установка сервиса обмена сообщениями RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/ + sudo apt-get update + sudo apt-get dist-upgrade + sudo apt install rabbitmq-server +Посмотреть список используемых плагинов: + sudo rabbitmq-plugins list +Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную. + sudo rabbitmq-plugins enable rabbitmq_management + +rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672 +Но для активации нужно добавить пользователя, смотрим пользователей: + sudo rabbitmqctl list_users + sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера + sudo rabbitmqctl set_user_tags admin administrator + sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" +Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43 + +Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed. +Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password + producer: клиент, выполняющий отправку сообщения + queue: собственно очередь сообщений + consumer: клиент, получающий сообщения из очереди + exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html) + +Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y + https://www.rabbitmq.com/devtools.html : +Создаю Maven проект в консоли: + cd O:\projects\Workspace_Java\ + mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false +Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client: + + + com.rabbitmq + amqp-client + 5.14.2 + +Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA. + + Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/ + или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/ +Добавил в POM файл: + + + RabbitMQ + https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0 + com.rabbitmq + + false + + + true + + + + + + + com.rabbitmq + amqp-client + 5.16.0 + + + + + +Перезагружаем: + sudo service rabbitmq-server restart + +**************************************************************************************************** +Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel + +Активирую плагин командой: + sudo rabbitmq-plugins enable rabbitmq_shovel + sudo rabbitmq-plugins enable rabbitmq_shovel_management + +Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку: + +sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation", + "src-queue": "TO_KAZ", + "dest-protocol": "amqp091", + "dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground", + "dest-exchange": "swap", + "dest-exchange-key": ".KAZ.", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' + +Для Росии такие настройки: + +sudo rabbitmqctl set_parameter shovel kaz_to_rus '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus", + "src-queue": "TO_RUS", + "dest-protocol": "amqp091", + "dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground", + "dest-exchange": "swap", + "dest-exchange-key": "KZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' + +Для Беларусии такие настройки: + +sudo rabbitmqctl set_parameter shovel kaz_to_blr '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr", + "src-queue": "TO_BLR", + "dest-protocol": "amqp091", + "dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber", + "dest-exchange": "eec.swap", + "dest-exchange-key": "KZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' + +Для Армении такие настройки: + +sudo rabbitmqctl set_parameter shovel kaz_to_arm '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm", + "src-queue": "TO_ARM", + "dest-protocol": "amqp091", + "dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation", + "dest-exchange": "swap_kz", + "dest-exchange-key": "KZ_ISTT", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' + +Для Кыргызстана (таможенная инфраструктура) + +sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz", + "src-queue": "TO_KGZ", + "dest-protocol": "amqp091", + "dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz", + "dest-exchange": "swap", + "dest-exchange-key": "KAZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' + +Удалять так: + sudo rabbitmqctl clear_parameter shovel kaz_to_kgz + +Для отправки из Киргизии нам то такие настройки: + +sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{ + "src-protocol": "amqp091", + "src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz", + "src-queue": "TO_KAZ", + "dest-protocol": "amqp091", + "dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz", + "dest-exchange": "swap", + "dest-exchange-key": "KGZ", + "ack-mode": "on-confirm", + "publish-properties": { + "delivery_mode": 2 + } +}' + +Удалять так: + sudo rabbitmqctl clear_parameter shovel kgz_to_kaz + + +Чтобы проверить текущие параметры Shovel: + sudo rabbitmqctl list_parameters +А также можно взглянуть что создалось через WEB интерфейс + +Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает. + +**************************************************************************************************** +Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/ + sudo apt-get install libgtk-3-dev build-essential checkinstall + mkdir gtk-build + cd gtk-build + ../configure --disable-shared --enable-unicode + make + sudo make install + sudo ldconfig + sudo checkinstall +**************************************************************************************************** +Wildfly (JBoss) https://helpingbox.net/ru/установите-и-настройте-wildfly-jboss-в-ubuntu-18-04-lts +**************************************************************************************************** +Установка Redmine на Ubuntu 22.04 по https://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_50x_on_Ubuntu_2004_with_Apache2 + +Потом скопировать и подправить на PostgreSQL +admin admin поменял на admin deSert!123 + +Готово теперь можно авторизоваться через WEB интерфейс + Username: admin + Password: admin +**************************************************************************************************** +Установка расширения https://github.com/michelp/pgjwt на ubuntu сервер +Для компиляции устанавливаю (На тестовую машину, не боевую): + sudo apt-get update + sudo apt-get install postgresql-server-dev-14 + apt install ca-certificates curl gnupg lsb-release +Остановился на том что потребовало установить докер при компиляции: https://www.cherryservers.com/blog/how-to-install-and-use-docker-compose-on-ubuntu-20-04 + sudo apt-get install docker-compose-plugin + sudo apt-get install docker-compose-plugin +Клонирую репозиторий: + sudo apt install git + git clone https://github.com/michelp/pgjwt.git +Потом + make +Ошибка на мейке... + install +**************************************************************************************************** +Install Redis по мативам: https://timeweb.cloud/tutorials/redis/ustanovka-i-nastrojka-redis-dlya-raznyh-os + sudo apt-get update + sudo apt install redis + redis-cli --version + sudo systemctl status redis +Config: + sudo mcedit /etc/redis/redis.conf +И меняем в конфигурации на: supervised systemd +Также желательно проверить настройку чтобы слушался только IP: 127.0.0.1 + bind 0.0.0.0 + +Также в поле SECURITY нужно установить пароль, сгенерированный при помощи: + openssl rand 25 | openssl base64 -A +Примерно такой должен быть получиться: + requirepass 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== + +Перезагружаем: + sudo systemctl restart redis-server +Проверяем Redis: + redis-cli +Или так проверяем: + redis-cli -h 127.0.0.1 -p 6379 -a 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== +И пишем: ping + +Проверяем какие порты прослушиваются на компе: + sudo netstat -lnp | grep redis + +**************************************************************************************************** +Для настройки локального сервера имен DNS сервер в место Bind9 теперь Dnsmasq так как он проще, понадобилось для haproxy + sudo apt-get install dnsmasq + sudo apt-get install resolvconf + sudo apt-get install net-tools + sudo apt-get install net-tools +На ошибку "failed to create listening socket for port 53: Address already in use" не обрашаем внимания это норма. +Настраиваем пакеты: + sudo mcedit /etc/dnsmasq.conf +Там будет всё закоментированно, добавляем это: + no-resolv + server=8.8.8.8 + listen-address=127.0.0.1 + bind-interfaces +Далее добавляем пути в /etc/hosts пример + 127.0.0.1 jwt.local +Перезагружаеи + sudo /etc/init.d/dnsmasq restart +Проверяем: + telnet 127.0.0.1 53 + dig @127.0.0.1 -p 53 jwt.local +**************************************************************************************************** +Установка GitLab на Ubuntu сервер по https://itslinuxfoss.com/install-gitlab-ubuntu-22-04/ + sudo apt update && sudo apt upgrade -y + sudo apt install tzdata curl ca-certificates openssh-server + sudo apt install curl debian-archive-keyring lsb-release ca-certificates apt-transport-https software-properties-common -y + curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash + sudo apt install gitlab-ce +Также для CI/CD устанавливаем runner, выполняет команды из .gitlab-ci.yml описание: https://habr.com/ru/companies/slurm/articles/306596/ + curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash + sudo apt-get install gitlab-runner +Редактируем имя хоста: + sudo mcedit /etc/gitlab/gitlab.rb +И прописываем туда + external_url 'http://gitlab.local:8081' +Затем: + sudo gitlab-ctl reconfigure +Как завершиться, проверяем: + sudo gitlab-ctl status +Должно выдать быть что-то в роде: + run: alertmanager: (pid 92581) 18s; run: log: (pid 92343) 80s + run: gitaly: (pid 92590) 18s; run: log: (pid 91561) 189s + run: gitlab-exporter: (pid 92551) 20s; run: log: (pid 92078) 98s + run: gitlab-kas: (pid 92520) 22s; run: log: (pid 91845) 175s + run: gitlab-workhorse: (pid 92531) 21s; run: log: (pid 91985) 117s + run: grafana: (pid 92610) 17s; run: log: (pid 92471) 38s + run: logrotate: (pid 91486) 202s; run: log: (pid 91494) 201s + run: nginx: (pid 91993) 114s; run: log: (pid 92013) 110s + run: node-exporter: (pid 92540) 21s; run: log: (pid 92049) 104s + run: postgres-exporter: (pid 92601) 18s; run: log: (pid 92367) 76s + run: postgresql: (pid 91693) 184s; run: log: (pid 91704) 183s + run: prometheus: (pid 92560) 20s; run: log: (pid 92297) 88s + run: puma: (pid 91904) 132s; run: log: (pid 91917) 129s + run: redis: (pid 91521) 196s; run: log: (pid 91538) 193s + run: redis-exporter: (pid 92553) 20s; run: log: (pid 92217) 94s + run: sidekiq: (pid 91922) 126s; run: log: (pid 91934) 122s +Теперь можно задать логин пользователя (команда долго инициализируется) + sudo gitlab-rake "gitlab:password:reset" +Пользователь: root пароль: q12!qwW@ww +Пробуем зайти по http://gitlab.local:8081 прописав домен в hosts + +Для настройки непрерывного развёртывания испотльзовать инструкцию: https://serverspace.ru/support/help/nastrojka-konvejera-nepreryvnogo-razvertyvaniya--gitlab-ubuntu-20-22/?utm_source=google.com&utm_medium=organic&utm_campaign=google.com&utm_referrer=google.com + +Клонирование через токен так: + https://oauth2:PERSONAL_ACCESS_TOKEN@git.istt.kz/locust/org.ccalm.jwt.git + https://oauth2:glpat-MCMi4iPS8GQzUusT3XUC@git.istt.kz/locust/org.ccalm.jwt.git + + https://oauth2:glpat-fseNuqu3Ftb7zwjv-kbT@git.istt.kz/locust/org.ccalm.dbms.git + https://oauth2:glpat-5fJzjVymFqVumq6FC1yq@git.istt.kz/locust/org.ccalm.main + https://oauth2:glpat-sKQh2x88gsmZbBCz4SfJ@git.istt.kz/transit/dispatcher/kz.istransit.dispatcher + + + + +**************************************************************************************************** +Установка nginx по инсткукции с сайта: https://www.8host.com/blog/sozdanie-samopodpisannogo-ssl-sertifikata-dlya-nginx-v-ubuntu-18-04/ + sudo apt-get update + sudo apt-get install nginx +Настройка самоподписанного сертификата для SSL nginx + sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt +Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера. + sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096 +Создаём файл: + sudo mcedit /etc/nginx/conf.d/ssl.conf +И вписываем в него: + +server { + listen 8091 ssl http2; + listen [::]:8091 ssl http2; + + server_name istransit.kg; + + ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; + ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; + ssl_dhparam /etc/nginx/dhparam.pem; + + root /opt/www/istransit.kg; + index index.html index.htm; + + location / { + try_files $uri $uri/ =404; # Попытка найти файл или возвращение 404 + } +} + + + sudo systemctl restart nginx + +Также есть такие команды: + nginx -s stop — быстрое завершение + nginx -s quit — плавное завершение + nginx -s reload — перезагрузка конфигурационного файла + nginx -s reopen — переоткрытие лог-файлов + +Создаю виртуальный хост: + sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/istransit.kz + sudo mcedit /etc/nginx/sites-available/aistransit.kz + +Модифицируем текст настройки: +server { + listen 8081; + listen [::]:8081; + + root /opt/www/istransit.kz; + index index.html; + + server_name istransit.kz www.istransit.kz; + + location / { + try_files $uri $uri/ =404; + } +} + +Теперь можно включить виртуальный хост: + sudo ln -s /etc/nginx/sites-available/istransit.kz /etc/nginx/sites-enabled/ +Проверяем правильность конфигурации: + sudo nginx -t +Перезапускаем: + sudo systemctl restart nginx + +**************************************************************************************************** +Как установить и настроить Elasticsearch, Logstash, Kibana (ELK Stack) на Ubuntu, Debian, Centos: https://portforwarded.com/install-elastic-elk-stack-8-x-on-ubuntu-22-04-lts/ или https://serveradmin.ru/ustanovka-i-nastroyka-elasticsearch-logstash-kibana-elk-stack/ + + sudo apt update && sudo apt upgrade -y +Установи java как это делается смотри выше + sudo apt-get install nginx curl gnupg2 wget -y + sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg + sudo apt-get install apt-transport-httpssudo + echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list + sudo apt update + sudo apt-get install elasticsearch +Если не удалось подключить ключи к репозиторию то скачиваем deb пакет в ручную: + wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.2-amd64.deb + + sudo systemctl enable elasticsearch + sudo systemctl start elasticsearch + + sudo mcedit /etc/elasticsearch/elasticsearch.yml +И там раскоментить и прописать строку: network.host: 0.0.0.0 +Также там поправить на: xpack.security.enabled: false + + sudo systemctl restart elasticsearch + +Проверяю версию Elasticsearch + sudo ufw allow 9200/tcp + curl -X GET "http://localhost:9200/" + +У меня выдало: +{ + "name" : "igor-System-Version", + "cluster_name" : "elasticsearch", + "cluster_uuid" : "Li0_4xz2QTuy8ET7qRLTgg", + "version" : { + "number" : "8.13.2", + "build_flavor" : "default", + "build_type" : "deb", + "build_hash" : "16cc90cd2d08a3147ce02b07e50894bc060a4cbf", + "build_date" : "2024-04-05T14:45:26.420424304Z", + "build_snapshot" : false, + "lucene_version" : "9.10.0", + "minimum_wire_compatibility_version" : "7.17.0", + "minimum_index_compatibility_version" : "7.0.0" + }, + "tagline" : "You Know, for Search" +} + +**********Теперь устанавливаем Kibana********** + sudo apt-get install kibana -y + sudo systemctl start kibana + sudo systemctl enable kibana +Создаём административного пользователя: + sudo su + echo "admin:`openssl passwd -apr1`" | tee -a /etc/nginx/htpasswd.users +Выдало: + Дома: admin:$apr1$sFyWSvZH$E8tL1Zbo.i8q2vSsVy1HK/ + На в виртуалке работа пароль 123456 выдало: admin:$apr1$/n5ACpeE$WZBtYrZOgZ10GfdT4YFD31 +Далее создаём в Nginx виртуальный хост, создав конфигурационный файл для сервиса кибаны: + sudo mcedit /etc/nginx/sites-available/kibana + +server { + listen 80; + + server_name kibana.example.com; + + auth_basic "Restricted Access"; + auth_basic_user_file /etc/nginx/htpasswd.users; + + location / { + proxy_pass http://localhost:5601; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + } +} + +Разрешаем виртуальный хост для проксирования: + sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/ + sudo systemctl restart nginx + sudo systemctl status nginx + +Теперь кибана должна открыться по адресу: kibana.example.com если не открылась перезагружаем комп + +*********Устанавливаю logstash********** + sudo apt install logstash + + sudo systemctl restart logstash.service + sudo systemctl enable logstash.service + sudo systemctl status logstash.service + + + +По документу из: https://habr.com/ru/articles/236341/ и из https://coderlessons.com/tutorials/devops/uznaite-logstash/logstash-kratkoe-rukovodstvo +Настраиваю logstash открываю потр для отправки логов из Java приложения log4j: + +Так как установили через репозиторий то для включения плагина Log4j он включается командой: + sudo su + /usr/share/logstash/bin/logstash-plugin install logstash-input-log4j + +Так как logstash загрузает все конфигурации из деректории то создаю новый файл для log4j + mcedit /etc/logstash/conf.d/log4j.conf +И теперь можно настроить для приёма log4j логов: + +input { + log4j { + mode => server + host => "0.0.0.0" + port => 5044 + type => "log4j" + } +} +output { + elasticsearch { + hosts => ["http://localhost:9200"] + index => "igor-%{+YYYY.MM.dd}" + #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" + #user => "elastic" + #password => "changeme" + } +} + +Затем нужно перезагрузить: + sudo systemctl restart logstash.service + +*********Устанавливаю filebeat********** + apt install filebeat + + + +**************************************************************************************************** +**********Устанавливаю Loki в месте с Grafana и другими компонентами (Promtail)********** +Согласно документации из: https://grafana.com/docs/loki/latest/get-started/quick-start/ Для Лва: https://www.youtube.com/watch?v=PBfKDyNPBug + +Создаём директорию в: + cd /opt + mkdir loki + cd loki + wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/loki-config.yaml -O loki-config.yaml + wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/promtail-local-config.yaml -O promtail-local-config.yaml + wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/docker-compose.yaml -O docker-compose.yaml + +Меням настройки, прописав в самый конец файла: loki-config.yaml следующее: +auth_enabled: false + + +Запускаем: + sudo docker compose up -d +Если нужно то для остановки можно выполнить следующую команду: + sudo docker compose down + +Пробуем открыть графану: + http://127.0.0.1:3000/ Логин: admin и пароль admin потом сгенерил пароль: gL%$FXVUrjP7zFf + + +Теперь можно отправить тестовую строку в логи label “foo=bar2” and a single log line “fizzbuzz”: + +curl -H "Content-Type: application/json" \ + -s -X POST "http://127.0.0.1:3100/loki/api/v1/push" \ + --data-raw '{"streams": [{ "stream": { "foo": "bar2" }, "values": [ [ "1717279123945000000", "fizzbuzz" ] ] }]}' + + + + +**********Устанавливаю Promtail********** +По мотивам: https://tech.pansolusi.com/2023/08/04/installing-promtail-on-ubuntu/ + + cd /opt + mkdir promtail + cd promtail + curl -O -L "https://github.com/grafana/loki/releases/download/v2.9.7/promtail-linux-amd64.zip" + unzip "promtail-linux-amd64.zip" + promtail -version + sudo mcedit /opt/promtail/promtail-local-config.yaml + +И записываем в файл: + +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: 'http://localhost:3100/loki/api/v1/push' + basic_auth: + username: alexander + password: eakrdutpnhjaE2EFrAoi + +scrape_configs: + - job_name: system + static_configs: + - targets: + - localhost + labels: + job: varlogs + __path__: /var/log/*log + - targets: + - localhost + labels: + job: nginx + __path__: /var/log/nginx/*log + + +Создаём сервис для запуска Promtail + sudo mcedit /etc/systemd/system/promtail.service +И записываем: + +[Unit] +Description=Promtail client for sending logs to Loki +After=network.target +[Service] +ExecStart=/opt/promtail/promtail -config.file=/opt/promtail/promtail-local-config.yaml +Restart=always +TimeoutStopSec=3 +[Install] +WantedBy=multi-user.target + +Запускаем: + sudo service promtail start + sudo service promtail stop + sudo service promtail restart + sudo service promtail status + sudo systemctl enable promtail + +Смотрим логи: + sudo journalctl -u promtail.service + +Теперь можно смотреть в графане логи: http://127.0.0.1:3000/ с label = file +Также можно взглянуть на простой WEB интерфейс promtail: http://127.0.0.1:9080 + +**********Устанавливаю Prometheus согласно инструкции из https://ruvds.com/ru/helpcenter/kak-ustanovit-prometheus-na-ubuntu/ ********** +Установка Prometheus + sudo apt update && + sudo apt upgrade -y && + sudo useradd --no-create-home --shell /bin/false prometheus && + sudo mkdir /etc/prometheus && + sudo mkdir /var/lib/prometheus && + sudo chown prometheus:prometheus /etc/prometheus && + sudo chown prometheus:prometheus /var/lib/prometheus && + cd /tmp && + wget https://github.com/prometheus/prometheus/releases/download/v3.1.0/prometheus-3.1.0.linux-amd64.tar.gz && + tar xvf prometheus-3.1.0.linux-amd64.tar.gz && + sudo cp prometheus-3.1.0.linux-amd64/prometheus /usr/local/bin/ && + sudo cp prometheus-3.1.0.linux-amd64/promtool /usr/local/bin/ && + sudo chown prometheus:prometheus /usr/local/bin/prometheus && + sudo chown prometheus:prometheus /usr/local/bin/promtool && + rm -rf prometheus-3.1.0.linux-amd64.tar.gz prometheus-3.1.0.linux-amd64 +Настройка Prometheus +Создайте файл конфигурации prometheus.yml: + sudo mcedit /etc/prometheus/prometheus.yml +Прописал туда настройки: + +global: + scrape_interval: 15s + +scrape_configs: + - job_name: 'prometheus' + static_configs: + - targets: ['localhost:9090'] + +Созданём systemd-сервис: + sudo mcedit /etc/systemd/system/prometheus.service + + +[Unit] +Description=Prometheus +Wants=network-online.target +After=network-online.target + +[Service] +User=prometheus +Group=prometheus +Type=simple +ExecStart=/usr/local/bin/prometheus \ + --config.file /etc/prometheus/prometheus.yml \ + --storage.tsdb.path /var/lib/prometheus/ + +[Install] +WantedBy=multi-user.target + + +Запускаю сервис: + sudo systemctl daemon-reload + sudo systemctl start prometheus + sudo systemctl enable prometheus + sudo systemctl status prometheus +```sh +sudo systemctl restart prometheus +``` + +Пробуем открыть по адресу: + http://192.168.200.84:9090 + +Теперь настраиваем сбор логов при помощи node exporter (по мотивам из https://it-dev-journal.ru/articles/monitoring-linux-servera-s-prometheus-node-exporter): +Последний билд: https://github.com/prometheus/node_exporter/releases + + wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz + tar xf node_exporter-*.tar.gz + cd node_exporter-1.8.2.linux-amd64 + sudo cp node_exporter /usr/local/bin + sudo useradd --no-create-home --home-dir / --shell /bin/false node_exporter + +Создаём сервис: + sudo mcedit /etc/systemd/system/node_exporter.service + +[Unit] +Description=Prometheus Node Exporter +After=network.target + +[Service] +Type=simple +User=node_exporter +Group=node_exporter +ExecStart=/usr/local/bin/node_exporter + +SyslogIdentifier=node_exporter +Restart=always + +PrivateTmp=yes +ProtectHome=yes +NoNewPrivileges=yes + +ProtectSystem=strict +ProtectControlGroups=true +ProtectKernelModules=true +ProtectKernelTunables=yes + +[Install] +WantedBy=multi-user.target + + sudo systemctl daemon-reload + sudo systemctl start node_exporter + sudo systemctl enable node_exporter + sudo systemctl status node_exporter + +Теперь Node exporter будет выдавать метрики по адресу + wget http://localhost:9100/metrics -O - + wget --user=prometheus --password=PUaAMOhUEOmDmcsJDFWA https://geoserver2.ccalm.org/metrics -O - + + +Настраиваем HAProxy и basic авторизацию (если писать: insecure-password то пароль не захеширован если написать password то должен быть в md5 лил SHA-*): + userlist prometheus_list + user prometheus insecure-password PUaAMOhUEOmDmcsJDFWA + + acl v_metrics path_beg /metrics + acl v_basic_auth http_auth(prometheus) + http-request auth realm Metrics if v_metrics !v_basic_auth + use_backend metrics if v_metrics + + backend metrics + balance roundrobin + server web1 127.0.0.1:9100 check + option httpchk + + +Теперь нужно отредактировать файл sudo mcedit /etc/prometheus/prometheus.yml, добавив новый job_name в scrape_configs с этим адресом. + +- job_name: 'node_exporter_metrics' + scrape_interval: 10s + static_configs: + - targets: ['localhost:9100'] + +Перезагружаем prometheus чтобы он начал собирать метрики +```sh + sudo systemctl restart prometheus +``` + +Смотрим: + http://192.168.200.84:9090/targets + + +Далее устанавливаем графану и добавляем графики для мониторинга + sudo apt-get install -y software-properties-common + sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" + sudo apt-get install -y gnupg + sudo apt-get install -y apt-transport-https + sudo wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - + sudo apt-get update + sudo apt-get install grafana +Запустите и включите сервис Grafana: + sudo systemctl start grafana-server + sudo systemctl enable grafana-server +Проверьте статус: + sudo systemctl status grafana-server +Открываем: + http://192.168.200.84:3000 Логин: admin Пароль: admin + +Заходим в: Home->Connections->Data sources->Add data source + +Для Node Exporter есть шаблоны: + Node Exporter Full (ID: 1860) — Полный дашборд для мониторинга серверов с использованием Node Exporter. + Prometheus (ID: 10991) — Дашборд для мониторинга самого Prometheus. + Linux Server Monitoring (ID: 10244) — Дополнительный дашборд для мониторинга серверов на Linux. + +Если вам нужно больше вариантов, вы всегда можете найти готовые дашборды на официальном сайте https://grafana.com/grafana/dashboards/ + +Заходим в графану и в правом верхенем углу жмём + потом Import Dashboard + + +**********Если нужно то Grafana может быть установленна отдельно ********** +Установка GrafanaLoki через Docker Engine и Docker Compose на Ubuntu 24.04 + +Для установки графаны через докер: + cd /opt + sudo mkdir grafana + cd ./grafana + sudo mcedit docker-compose.yml +И прописываем в файл: + +version: "3.3" +services: + grafana: + image: grafana/grafana-enterprise + container_name: grafana + restart: unless-stopped + ports: + - '3000:3000' + loki: + image: grafana/loki:latest + container_name: loki + restart: unless-stopped + ports: + - "3100:3100" + +Затем для запуска контейнера выполняем: + sudo docker-compose up -d +Если нужно то для остановки можно выполнить следующую команду: + sudo docker-compose down + +Пробуем открыть графану: + http://127.0.0.1:3000/ Логин: admin и пароль admin потом сгенерил пароль: gL%$FXVUrjP7zFf +**************************************************************************************************** +Настраиваю Promtail agent для винды для сбора логов c Windows: +Скачал: https://github.com/grafana/loki/releases в разделе Assets файл promtail-windows-386.exe.zip +Переместите файл promtail.exe в каталог, например, C:\Program Files\promtail +Добавьте этот каталог в PATH, чтобы можно было запускать Promtail из командной строки. +Создаём файл конфигурации в C:\Program Files\promtail promtail-config.yaml со следующим содержимым: + +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: C:\Program Files\promtail\positions.yaml + +clients: + - url: http://192.168.200.106:3100/loki/api/v1/push + +scrape_configs: + - job_name: dbms_logs + static_configs: + - targets: + - localhost + labels: + job: dbms_logs + __path__: O:\MyDocuments\projects\Workspace_JavaWin\com.geovizor.dbms\logs\kz_mcp_dbms.log + + - job_name: jwt_logs + static_configs: + - targets: + - localhost + labels: + job: jwt_logs + __path__: O:\MyDocuments\projects\Workspace_JavaWin\com.geovizor.jwt\logs\kz_mcp_jwt.log + + +Замените C:\path\to\positions.yaml и C:\path\to\log\files\*.log на соответствующие вашему окружению пути. +promtail.exe --config.file=promtail-config.yaml + +**************************************************************************************************** +Установка графаны через докер Grafana в Docker, по мотивам нейросети DeepSeek: +Установка Docker: + sudo apt update + sudo apt install -y apt-transport-https ca-certificates curl software-properties-common + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt update + sudo apt install -y docker-ce docker-ce-cli containerd.io +Установка Docker Compose: + sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + sudo chmod +x /usr/local/bin/docker-compose +Добавляем текущему пользователю группу чтобы он мог работать с докером: + sudo usermod -aG docker $USER + +Проверка установки: + docker --version + docker-compose --version + +Создайте директорию, где будут храниться данные Grafana: + sudo mkdir /opt/grafana + sudo mkdir /opt/grafana/data + sudo mkdir /opt/grafana/data/grafana-storage + sudo mkdir /opt/grafana/config + sudo chown -R 472:472 /opt/grafana/data/grafana-storage + sudo chmod -R 775 /opt/grafana/data/grafana-storage + cd /opt/grafana + mcedit docker-compose.yml +И записываем в него такие настройки: + +services: + grafana: + image: grafana/grafana:latest + container_name: grafana + restart: unless-stopped + ports: + - "3000:3000" + volumes: + - /opt/grafana/data/grafana-storage:/var/lib/grafana # Монтируем директорию хоста в контейнер + environment: + - GF_SECURITY_ADMIN_USER=admin + - GF_SECURITY_ADMIN_PASSWORD=admin + +Запускаем графану с логами для тестов: + docker-compose -f /opt/grafana/docker-compose.yml up +Теперь запускае в фоновом режиме: + docker-compose -f /opt/grafana/docker-compose.yml up -d + docker-compose -f /opt/grafana/docker-compose.yml down +Проверяем работу: + docker-compose -f /opt/grafana/docker-compose.yml ps + + +**************************************************************************************************** +Устанавливаю Gitea по мативам: https://linuxize.com/post/how-to-install-gitea-on-ubuntu-20-04/ + sudo apt update + sudo apt install sqlite3 + sudo apt install git + git --version + sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git + VERSION=1.22 + sudo wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64 + sudo mv /tmp/gitea /usr/local/bin + sudo chmod +x /usr/local/bin/gitea +Создаём директории для хранения данных: + sudo mkdir -p /var/lib/gitea/{custom,data,log} + sudo chown -R git:git /var/lib/gitea/ + sudo chmod -R 750 /var/lib/gitea/ + sudo mkdir /etc/gitea + sudo chown root:git /etc/gitea + sudo chmod 770 /etc/gitea + + sudo wget https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/systemd/gitea.service -P /etc/systemd/system/ + sudo systemctl daemon-reload + sudo systemctl enable --now gitea + sudo systemctl status gitea +Отобразило что можно зайти по: http://localhost:3000/ +Выбираем Database Type: SQLite3 остальные настройки можно оставить по умолчанию +Установил и задал логин: irigm@mail.ru пароль: PF"Ey7#7]mUZ49s + +Устанавливаем параметры только чтение: + sudo chmod 750 /etc/gitea + sudo chmod 640 /etc/gitea/app.ini + +По мотивам на сайте ещё описывается как сделать проксирование через nginx +А также как сделать отправку почты +А также как обновит если что + +**********CI/CD********** +Устанавливаю по инструкции из: https://gitea.com/gitea/act_runner +Скачиваю act_runner с https://about.gitea.com/products/runner/ в директорию: /usr/local/bin +Задаём права: + sudo chown root:root /usr/local/bin/act_runner +Проверяю версию: + act_runner --version +Выдало: v0.2.6 +Записываем в конец файла /etc/gitea/app.ini следующие настройки: +[actions] +ENABLED=true + +Потом: + sudo systemctl restart gitea +Далее переходим в настройки проекта в пункт "Действия": "Создать новый раннер" + Там был токен: CIaWAmzI4jYUCRnQcUCdBFPkg4FPGspnjdpqiqXl + +Создаю каталог: + /etc/act_runner + +Генерю конфиг по умолчанию: + act_runner generate-config > config.yaml + +Регистрирую новый runner + act_runner register + +В WEB интерфейсе gitea появится но похоже от туда можно только удалить. + +Можно попробовать запустить runner: + act_runner daemon + +Регистрация с конфигурационным файлом: + act_runner -c config.yaml register + +Запуск с конфигурационным файлом + act_runner -c config.yaml daemon + +Можно запустить act_runner как сервис, создав файл: sudo mcedit /etc/systemd/system/act_runner.service но нужно создать ползоветеля без привилений, такого: act_runner +Но у меня почему то не запустилось... +Так: + sudo adduser --disabled-password act_runner + sudo passwd act_runner + su act_runner + +Давать права не обязательно: sudo chown root:root /usr/local/bin/act_runner + +[Unit] +Description=Gitea Actions runner +Documentation=https://gitea.com/gitea/act_runner +After=docker.service + +[Service] +ExecStart=/usr/local/bin/act_runner daemon --config /etc/act_runner/config.yaml +ExecReload=/bin/kill -s HUP $MAINPID +WorkingDirectory=/var/lib/act_runner +TimeoutSec=0 +RestartSec=10 +Restart=always +User=act_runner + +[Install] +WantedBy=multi-user.target + + +Запускаем как сервис: + sudo systemctl daemon-reload + sudo systemctl enable act_runner + sudo systemctl restart act_runner + sudo systemctl stop act_runner + sudo systemctl start act_runner + sudo systemctl status act_runner + +Посмотреть на лог: + grep "act_runner" /var/log/syslog + + + + +# .gitea/workflows/publish.yml +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + run_pull: + name: run pull + runs-on: igor + steps: + - name: CreateDate + run: touch /home/igor/runner/$(date +"%Y-%m-%d_%H-%M-%S").txt + +**************************************************************************************************** +Устанавливаю из Node.js из не стандартного репозитория так как там v12.22.9 а нужно >= 18 версия +Удаляем старое: + sudo apt-get remove nodejs npm +Устанавливаем новое: + curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - + sudo apt-get install -y nodejs + node -v + npm -v +**************************************************************************************************** +LDAP — легковесный протокол доступа к каталогам (Для адрестной книги) + sudo apt install slapd ldap-utils + sudo dpkg-reconfigure slapd + +Настраиваем в файле: /etc/ldap/ldap.conf + BASE dc=domain,dc=com + URI ldap://ldap01.domain.com + +**************************************************************************************************** +Простой инструмент для мониторинга ресурсов сервера: + sudo apt install netdata + systemctl restart netdata + sudo mcedit /etc/netdata/netdata.conf + # bind socket to IP = 127.0.0.1 + bind socket to IP = 0.0.0.0 + systemctl restart netdata +Можно открывать по адресу: + http://10.101.1.3:19999/ + http://10.101.1.6:19999/ +**************************************************************************************************** +Install .NET SDK or .NET Runtime on Ubuntu + sudo apt-get update + sudo apt-get install -y dotnet-sdk-8.0 + sudo apt-get install -y aspnetcore-runtime-8.0 + sudo apt-get install -y dotnet-runtime-8.0 + sudo apt install zlib1g +Теперь можно запустить C# ASP.NET Core +**************************************************************************************************** +ssl genkeypair spring boot java +Генерим самоподписанный SSL сертификат: + keytool -genkeypair -alias weather -keyalg RSA -keystore keystore.jks -keysize 2048 -validity 3650 +Потом прописать настройки: + +server: + port: 8081 + ssl: + key-store: classpath:keystore.jks + key-store-password: QyKtWPZB + key-store-type: JKS + key-alias: weather + +**************************************************************************************************** +Для разрешения поиска через Samba и NetBIOS: + sudo apt update + sudo apt install samba + sudo systemctl restart smbd + sudo systemctl enable smbd + diff --git a/Unbound_install.md b/Unbound_install.md new file mode 100644 index 0000000..2145027 --- /dev/null +++ b/Unbound_install.md @@ -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 +``` diff --git a/Uptime_Kuma_install.md b/Uptime_Kuma_install.md index 86145cd..6e6d56d 100644 --- a/Uptime_Kuma_install.md +++ b/Uptime_Kuma_install.md @@ -1,66 +1,66 @@ -# Установка Uptime Kuma в Ubuntu 24.04 с помощью Docker Compose - -## 1. Установка необходимых пакетов -Обновите систему и установите Docker и Docker Compose: - -```sh -sudo apt update && sudo apt upgrade -y -sudo apt install -y docker.io docker-compose -``` - -## 2. Создание директории для Uptime Kuma -```sh - sudo mkdir -p /opt/uptime-kuma - cd /opt/uptime-kuma -``` - -## 3. Создание `docker-compose.yml` -Создайте файл `docker-compose.yml`: - -```sh - sudo mcedit /opt/uptime-kuma/docker-compose.yml -``` - -Вставьте следующий конфигурационный файл: - -```yaml -services: - uptime-kuma: - image: louislam/uptime-kuma:latest - container_name: uptime-kuma - restart: always - ports: - - "3001:3001" - volumes: - - ./data:/app/data -``` - -## 4. Запуск контейнера -```sh - sudo docker-compose up -d -``` - -## 5. Проверка работы Uptime Kuma -Откройте браузер и перейдите по адресу: - -```sh -start http://192.168.200.84:3001 -``` - -## 6. Управление контейнером -- **Остановить Uptime Kuma:** -```sh - sudo docker-compose down -``` -- **Перезапустить контейнер:** -```sh - sudo docker-compose restart -``` -- **Просмотреть логи:** - -```sh - sudo docker-compose logs -f -``` - -Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀 - +# Установка Uptime Kuma в Ubuntu 24.04 с помощью Docker Compose + +## 1. Установка необходимых пакетов +Обновите систему и установите Docker и Docker Compose: + +```sh +sudo apt update && sudo apt upgrade -y +sudo apt install -y docker.io docker-compose +``` + +## 2. Создание директории для Uptime Kuma +```sh + sudo mkdir -p /opt/uptime-kuma + cd /opt/uptime-kuma +``` + +## 3. Создание `docker-compose.yml` +Создайте файл `docker-compose.yml`: + +```sh + sudo mcedit /opt/uptime-kuma/docker-compose.yml +``` + +Вставьте следующий конфигурационный файл: + +```yaml +services: + uptime-kuma: + image: louislam/uptime-kuma:latest + container_name: uptime-kuma + restart: always + ports: + - "3001:3001" + volumes: + - ./data:/app/data +``` + +## 4. Запуск контейнера +```sh + sudo docker-compose up -d +``` + +## 5. Проверка работы Uptime Kuma +Откройте браузер и перейдите по адресу: + +```sh +start http://192.168.200.84:3001 +``` + +## 6. Управление контейнером +- **Остановить Uptime Kuma:** +```sh + sudo docker-compose down +``` +- **Перезапустить контейнер:** +```sh + sudo docker-compose restart +``` +- **Просмотреть логи:** + +```sh + sudo docker-compose logs -f +``` + +Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀 + diff --git a/Zulip_install.md b/Zulip_install.md index 8b6c352..8f5a5bd 100644 --- a/Zulip_install.md +++ b/Zulip_install.md @@ -1,38 +1,38 @@ -Открываю нужный сервер -```sh -wsl -``` - -```sh -curl -sSX POST https://istt-kz.zulipchat.com/api/v1/fetch_api_key \ - --data-urlencode username=ivanov.i@istt.kz \ - --data-urlencode password=fsUHb3hf3QCdpBLsKyhL -``` -Выдало: -```json -{ - "result":"success", - "msg":"", - "api_key":"91kQqr13HCwFP2HeARWPHxrfksYPH82p", - "email":"ivanov.i@istt.kz", - "user_id":880555 -} -``` - -```sh -curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \ - -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \ - -d "type=stream" \ - -d "to=general" \ - -d "topic=Тест5" \ - -d "content=Привет из консоли!" -``` - -```sh -curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \ - -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \ - -d "type=private" \ - -d "to=ivanov.i@istt.kz" \ - -d "topic=Тест5" \ - -d "content=Привет из консоли!" -``` +Открываю нужный сервер +```sh +wsl +``` + +```sh +curl -sSX POST https://istt-kz.zulipchat.com/api/v1/fetch_api_key \ + --data-urlencode username=ivanov.i@istt.kz \ + --data-urlencode password=fsUHb3hf3QCdpBLsKyhL +``` +Выдало: +```json +{ + "result":"success", + "msg":"", + "api_key":"91kQqr13HCwFP2HeARWPHxrfksYPH82p", + "email":"ivanov.i@istt.kz", + "user_id":880555 +} +``` + +```sh +curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \ + -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \ + -d "type=stream" \ + -d "to=general" \ + -d "topic=Тест5" \ + -d "content=Привет из консоли!" +``` + +```sh +curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \ + -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \ + -d "type=private" \ + -d "to=ivanov.i@istt.kz" \ + -d "topic=Тест5" \ + -d "content=Привет из консоли!" +``` diff --git a/rabbitmq_replication_setup_instructions.md b/rabbitmq_replication_setup_instructions.md index 33d2302..6b105b3 100644 --- a/rabbitmq_replication_setup_instructions.md +++ b/rabbitmq_replication_setup_instructions.md @@ -1,341 +1,341 @@ -Here’s a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly: - ---- - -## **Step 1: Prepare the Servers** - -Ensure you have at least **three** nodes (recommended for HA) with: - -- Ubuntu 22.04 (or a supported OS) -- Sufficient CPU/RAM based on workload -- Open necessary firewall ports (**5672, 15672, 25672**) - -Set hostnames for clarity: - -```bash -sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node -``` - ---- - -## **Step 2: Install Erlang and RabbitMQ** - -Run the following on **all nodes**: - -### **1. Add the RabbitMQ Repository** - -```bash -sudo apt update -sudo apt install -y curl gnupg -curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/rabbitmq-key.asc -echo "deb [signed-by=/usr/share/keyrings/rabbitmq-key.asc] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list -``` - -### **2. Install Erlang and RabbitMQ** - -```bash -sudo apt update -sudo apt install -y rabbitmq-server -``` - -### **3. Enable RabbitMQ** - -```bash -sudo systemctl enable --now rabbitmq-server -``` - ---- - -## **Step 3: Configure Clustering** - -### **1. Stop RabbitMQ on All Nodes** - -```bash -sudo systemctl stop rabbitmq-server -``` - -### **2. Configure Cookie for Clustering** - -Run on **all nodes** (same cookie ensures clustering works): - -```bash -echo "MY_CLUSTER_COOKIE" | sudo tee /var/lib/rabbitmq/.erlang.cookie -sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie -``` - -Replace `"MY_CLUSTER_COOKIE"` with a strong, identical value on all nodes. - ---- - -## **Step 4: Join Nodes to the Cluster** - -Perform this on **nodes 2 and 3**, joining them to **node1**: - -```bash -sudo rabbitmqctl stop_app -sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1 -sudo rabbitmqctl start_app -``` - -Check cluster status: - -```bash -sudo rabbitmqctl cluster_status -``` - ---- - -## **Step 5: Enable High Availability (HA) Mirroring** - -To replicate all queues, run on **any one node**: - -```bash -rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}' -``` - -This ensures all queues are **replicated across all nodes**. - ---- - -## **Step 6: Enable Management UI** - -Run on **each node** to enable the web interface: - -```bash -sudo rabbitmq-plugins enable rabbitmq_management -``` - -Access at: -**http://[NODE_IP]:15672** -(Default login: `guest/guest`, change this for security.) - ---- - -## **Step 7: Test the Cluster** - -Run on **each node**: - -```bash -rabbitmqctl list_queues -``` - -Queues should be visible and synchronized. - ---- - -## **Step 8: Enable Auto-Recovery** (Optional) - -Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add: - -```ini -cluster_formation.peer_discovery_backend = classic_config -cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1 -cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2 -cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3 -``` - -Then restart RabbitMQ: - -```bash -sudo systemctl restart rabbitmq-server -``` - ---- - -## **Step 9: Secure the Cluster** (Recommended) - -### **1. Create an Admin User** - -```bash -rabbitmqctl add_user admin StrongPassword123! -rabbitmqctl set_user_tags admin administrator -rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" -``` - -Then **disable the guest account**: - -```bash -rabbitmqctl delete_user guest -``` - -### **2. Enable TLS (Optional)** - -For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html). - ---- - -## **Step 10: Setup Monitoring (Optional)** - -Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**: - -```bash -sudo rabbitmq-plugins enable rabbitmq_prometheus -``` - ---- - -Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀 - ---- - -
-
-
-
- -# Instructions to fix **unexpected** configuration errors - -If you can't find the RabbitMQ config file under `/etc/rabbitmq`, it may not exist by default. You need to **create it manually**. Here's how: - -## **1️⃣ Create the Configuration File** - -RabbitMQ uses either a **`.conf` file** (modern format) or a **`.config` file** (legacy format). The recommended format is `.conf`. - -Create the file if it doesn't exist: - -```bash -sudo nano /etc/rabbitmq/rabbitmq.conf -``` - -Then add the following cluster configuration: - -``` -cluster_formation.peer_discovery_backend = classic_config -cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main -cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica -``` - -Save and exit (`CTRL+X`, then `Y`, then `Enter`). - ---- - -## **2️⃣ Set Correct Permissions** - -Ensure the RabbitMQ user can read it: - -```bash -sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf -sudo chmod 644 /etc/rabbitmq/rabbitmq.conf -``` - ---- - -## **3️⃣ Restart RabbitMQ** - -After modifying the configuration, restart the RabbitMQ service: - -```bash -sudo systemctl restart rabbitmq-server -``` - -Check the status: - -```bash -sudo systemctl status rabbitmq-server -``` - ---- - -## **4️⃣ Verify the Cluster Configuration** - -After restarting, verify that clustering is working: - -```bash -rabbitmqctl cluster_status -``` - -If the nodes are listed correctly, your setup is working. - ---- - -## **5️⃣ If Using the Legacy `.config` Format** - -Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create: - -```bash -sudo nano /etc/rabbitmq/rabbitmq.config -``` - -Add this: - -```erlang -[ - {rabbit, [ - {cluster_formation, [ - {peer_discovery_backend, classic_config}, - {classic_config, [ - {nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']} - ]} - ]} - ]} -]. -``` - -Then restart RabbitMQ: - -```bash -sudo systemctl restart rabbitmq-server -``` - ---- - -### **🔍 Troubleshooting** - -❌ **RabbitMQ doesn't restart?** -Check logs for errors: - -```bash -sudo journalctl -u rabbitmq-server --no-pager | tail -50 -``` - -❌ **Cluster not forming?** -Try forcing a node to join manually: - -```bash -rabbitmqctl stop_app -rabbitmqctl join_cluster rabbit@rabbitmq-main -rabbitmqctl start_app -``` - ---- - -
-
-
-
- -# Instructions to fix **unexpected** management UI authentication errors - -stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837) - -## Answer - -### ❌ **Cannot login with guest/guest credentials** - -I had the same Problem.. - -I installed RabbitMQ and Enabled Web Interface also but still couldn't sign in with any user i newly created, this is because you need to be administrator to access this. - -Do not create any config file and mess with it.. - -This is what i did then, - -1. Add a new/fresh user, say user test and password test: - -```bash -rabbitmqctl add_user test test -``` - -2. Give administrative access to the new user: - -```bash -rabbitmqctl set_user_tags test administrator -``` - -3. Set permission to newly created user: - -```bash -rabbitmqctl set_permissions -p / test ".*" ".*" ".*" -``` - -That's it, enjoy :) +Here’s a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly: + +--- + +## **Step 1: Prepare the Servers** + +Ensure you have at least **three** nodes (recommended for HA) with: + +- Ubuntu 22.04 (or a supported OS) +- Sufficient CPU/RAM based on workload +- Open necessary firewall ports (**5672, 15672, 25672**) + +Set hostnames for clarity: + +```bash +sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node +``` + +--- + +## **Step 2: Install Erlang and RabbitMQ** + +Run the following on **all nodes**: + +### **1. Add the RabbitMQ Repository** + +```bash +sudo apt update +sudo apt install -y curl gnupg +curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/rabbitmq-key.asc +echo "deb [signed-by=/usr/share/keyrings/rabbitmq-key.asc] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list +``` + +### **2. Install Erlang and RabbitMQ** + +```bash +sudo apt update +sudo apt install -y rabbitmq-server +``` + +### **3. Enable RabbitMQ** + +```bash +sudo systemctl enable --now rabbitmq-server +``` + +--- + +## **Step 3: Configure Clustering** + +### **1. Stop RabbitMQ on All Nodes** + +```bash +sudo systemctl stop rabbitmq-server +``` + +### **2. Configure Cookie for Clustering** + +Run on **all nodes** (same cookie ensures clustering works): + +```bash +echo "MY_CLUSTER_COOKIE" | sudo tee /var/lib/rabbitmq/.erlang.cookie +sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie +``` + +Replace `"MY_CLUSTER_COOKIE"` with a strong, identical value on all nodes. + +--- + +## **Step 4: Join Nodes to the Cluster** + +Perform this on **nodes 2 and 3**, joining them to **node1**: + +```bash +sudo rabbitmqctl stop_app +sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1 +sudo rabbitmqctl start_app +``` + +Check cluster status: + +```bash +sudo rabbitmqctl cluster_status +``` + +--- + +## **Step 5: Enable High Availability (HA) Mirroring** + +To replicate all queues, run on **any one node**: + +```bash +rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}' +``` + +This ensures all queues are **replicated across all nodes**. + +--- + +## **Step 6: Enable Management UI** + +Run on **each node** to enable the web interface: + +```bash +sudo rabbitmq-plugins enable rabbitmq_management +``` + +Access at: +**http://[NODE_IP]:15672** +(Default login: `guest/guest`, change this for security.) + +--- + +## **Step 7: Test the Cluster** + +Run on **each node**: + +```bash +rabbitmqctl list_queues +``` + +Queues should be visible and synchronized. + +--- + +## **Step 8: Enable Auto-Recovery** (Optional) + +Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add: + +```ini +cluster_formation.peer_discovery_backend = classic_config +cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1 +cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2 +cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3 +``` + +Then restart RabbitMQ: + +```bash +sudo systemctl restart rabbitmq-server +``` + +--- + +## **Step 9: Secure the Cluster** (Recommended) + +### **1. Create an Admin User** + +```bash +rabbitmqctl add_user admin StrongPassword123! +rabbitmqctl set_user_tags admin administrator +rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" +``` + +Then **disable the guest account**: + +```bash +rabbitmqctl delete_user guest +``` + +### **2. Enable TLS (Optional)** + +For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html). + +--- + +## **Step 10: Setup Monitoring (Optional)** + +Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**: + +```bash +sudo rabbitmq-plugins enable rabbitmq_prometheus +``` + +--- + +Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀 + +--- + +
+
+
+
+ +# Instructions to fix **unexpected** configuration errors + +If you can't find the RabbitMQ config file under `/etc/rabbitmq`, it may not exist by default. You need to **create it manually**. Here's how: + +## **1️⃣ Create the Configuration File** + +RabbitMQ uses either a **`.conf` file** (modern format) or a **`.config` file** (legacy format). The recommended format is `.conf`. + +Create the file if it doesn't exist: + +```bash +sudo nano /etc/rabbitmq/rabbitmq.conf +``` + +Then add the following cluster configuration: + +``` +cluster_formation.peer_discovery_backend = classic_config +cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main +cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica +``` + +Save and exit (`CTRL+X`, then `Y`, then `Enter`). + +--- + +## **2️⃣ Set Correct Permissions** + +Ensure the RabbitMQ user can read it: + +```bash +sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf +sudo chmod 644 /etc/rabbitmq/rabbitmq.conf +``` + +--- + +## **3️⃣ Restart RabbitMQ** + +After modifying the configuration, restart the RabbitMQ service: + +```bash +sudo systemctl restart rabbitmq-server +``` + +Check the status: + +```bash +sudo systemctl status rabbitmq-server +``` + +--- + +## **4️⃣ Verify the Cluster Configuration** + +After restarting, verify that clustering is working: + +```bash +rabbitmqctl cluster_status +``` + +If the nodes are listed correctly, your setup is working. + +--- + +## **5️⃣ If Using the Legacy `.config` Format** + +Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create: + +```bash +sudo nano /etc/rabbitmq/rabbitmq.config +``` + +Add this: + +```erlang +[ + {rabbit, [ + {cluster_formation, [ + {peer_discovery_backend, classic_config}, + {classic_config, [ + {nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']} + ]} + ]} + ]} +]. +``` + +Then restart RabbitMQ: + +```bash +sudo systemctl restart rabbitmq-server +``` + +--- + +### **🔍 Troubleshooting** + +❌ **RabbitMQ doesn't restart?** +Check logs for errors: + +```bash +sudo journalctl -u rabbitmq-server --no-pager | tail -50 +``` + +❌ **Cluster not forming?** +Try forcing a node to join manually: + +```bash +rabbitmqctl stop_app +rabbitmqctl join_cluster rabbit@rabbitmq-main +rabbitmqctl start_app +``` + +--- + +
+
+
+
+ +# Instructions to fix **unexpected** management UI authentication errors + +stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837) + +## Answer + +### ❌ **Cannot login with guest/guest credentials** + +I had the same Problem.. + +I installed RabbitMQ and Enabled Web Interface also but still couldn't sign in with any user i newly created, this is because you need to be administrator to access this. + +Do not create any config file and mess with it.. + +This is what i did then, + +1. Add a new/fresh user, say user test and password test: + +```bash +rabbitmqctl add_user test test +``` + +2. Give administrative access to the new user: + +```bash +rabbitmqctl set_user_tags test administrator +``` + +3. Set permission to newly created user: + +```bash +rabbitmqctl set_permissions -p / test ".*" ".*" ".*" +``` + +That's it, enjoy :)