Merge pull request #2 from SailorUpiter/refactor

Refactor
This commit is contained in:
2026-05-13 07:34:19 +03:00
committed by GitHub
21 changed files with 415 additions and 43 deletions
+2 -1
View File
@@ -1 +1,2 @@
.venv
.venv
docs/copypaste
View File
+19
View File
@@ -0,0 +1,19 @@
services:
gitlab:
image: gitlab/gitlab-ce:18.11.2-ce.0
container_name: gitlab
restart: always
hostname: 'gitlab.sailor.lab'
environment:
GITLAB_OMNIBUS_CONFIG: |
# Add any other gitlab.rb configuration here, each on its own line
external_url 'https://gitlab.sailor.lab'
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- '/mnt/data/gitlab/config:/etc/gitlab'
- '/mnt/data/gitlab/logs:/var/log/gitlab'
- '/mnt/data/gitlab/data:/var/opt/gitlab'
shm_size: '256m'
+68
View File
@@ -0,0 +1,68 @@
services:
mariadb:
image: mariadb:10.11
container_name: pdns-mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: "SuperSecretRootPassword"
MYSQL_DATABASE: "powerdns"
MYSQL_USER: "powerdns"
MYSQL_PASSWORD: "StrongUserPassword"
volumes:
- ./mariadb-data:/var/lib/mysql
networks:
- pdns-net
powerdns:
image: pschiffe/pdns-mysql:latest
container_name: pdns-server
restart: always
depends_on:
- mariadb
ports:
- "53:53/tcp"
- "53:53/udp"
- "8081:8081"
environment:
PDNS_gmysql_host: "mariadb"
PDNS_gmysql_port: "3306"
PDNS_gmysql_user: "powerdns"
PDNS_gmysql_password: "StrongUserPassword"
PDNS_gmysql_dbname: "powerdns"
# PDNS_master: "yes" ← УДАЛЕНО! Больше не нужно
PDNS_api: "yes"
PDNS_api_key: "MySecretApiKey123"
PDNS_webserver: "yes"
PDNS_webserver_address: "0.0.0.0"
PDNS_webserver_port: "8081"
PDNS_webserver_allow_from: "0.0.0.0/0"
PDNS_default_soa_content: "ns1.lan hostmaster.lan 0 10800 3600 604800 3600"
PDNS_default_ttl: "3600"
PDNS_local_address: "0.0.0.0"
PDNS_local_port: "53"
networks:
- pdns-net
pdns-admin:
image: powerdnsadmin/pda-legacy:latest
container_name: pdns-admin
restart: always
ports:
- "8080:80"
depends_on:
- powerdns
environment:
PDA_DB_HOST: "mariadb"
PDA_DB_PORT: "3306"
PDA_DB_USER: "powerdns"
PDA_DB_PASSWORD: "StrongUserPassword"
PDA_DB_NAME: "powerdnsadmin"
PDA_PDNS_API_URL: "http://powerdns:8081/"
PDA_PDNS_API_KEY: "MySecretApiKey123"
networks:
- pdns-net
networks:
pdns-net:
driver: bridge
+20 -14
View File
@@ -5,7 +5,7 @@
Подготавливаем ноду для установки. Все это дело работает на джаве. И хоть в архиве опенсерча уже есть жаба лучше поставить ее прямо на машину, что бы было проще работать
```
sudo apt update && sudo apt upgrade -y
sudo apt install openjdk-25-jdk
sudo apt install -y openjdk-25-jdk
```
Отключим свап и настроем виртуальную память хоста
```
@@ -18,18 +18,24 @@ cat /proc/sys/vm/max_map_count
```
После обновления и установки жабы, лучше всего перезагрузится. Далее мы качаем архив с опенсерчем с оффсайта
```
wget https://artifacts.opensearch.org/releases/bundle/opensearch/3.5.0/opensearch-3.5.0-linux-x64.tar.gz
```
```
Распакуем архив в папку
```
tar -xvf opensearch-3.5.0-linux-x64.tar.gz -С /etc/opensearch
```
Создадим папку для хранения сертификатов и перейдем в нее.
```
sudo mkdir /etc/opensearch/ssl
cd /etc/opensearch/ssl
bash ssl.sh
wget https://artifacts.opensearch.org/releases/bundle/opensearch/3.6.0/opensearch-3.6.0-linux-x64.deb
sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=5ruXurur! dpkg -i opensearch-3.6.0-linux-x64.deb
sudo systemctl enable opensearch
```
Выполним скрипт ssl.sh (лежит в доке как пример) для создания самоподписанных сертификатов и хранилища сертификатов. СОздадутся корневой сертификат ЦА. Так же создастся на его основе админский сертификат и сертификаты для каждой ноды. Это нужно что бы общение между нодами и дашбордой были зашифрованы. Так же выпустится админский серт для зашифрованного подключения админа.
После завершения подготовки требуется нарисовать кофниг. Конфиг имеет формат YAML и различается в зависимости от кластера или стендэлон опенсерча
После завершения подготовки требуется нарисовать кофниг. Конфиг имеет формат YAML и различается в зависимости от кластера или стендэлон опенсерча
mv /etc/opensearch/opensearch.yml /etc/opensearch/opensearch.yml.back
rm /etc/opensearch/*.pem
vim /etc/opensearch/opensearch.yml
systemctl start opensearch
wget https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.6.0/opensearch-dashboards-3.6.0-linux-x64.deb
$2y$12$7.7YOQi6.CEN1VSNXg3BqefgQLEeqDbsqxNBNhY1tgZ085q1eZeCK
@@ -0,0 +1,12 @@
cluster.name: kal-cluster
node.name: opensearch-1
node.roles: [ cluster_manager, data ]
cluster.initial_cluster_manager_nodes: ["opensearch-cluster_manager"]
discovery.seed_hosts: ["opensearch-1.sailor.com", "opensearch-2.sailor.com", "opensearch-3.sailor.com"]
network.host: 0.0.0.0
http.port: 9200
plugins.security.disabled: true
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/lib/opensearch
# Path to log files:
path.logs: /var/log/opensearch
@@ -0,0 +1,12 @@
cluster.name: kal-cluster
node.name: opensearch-2
node.roles: [ cluster_manager, data ]
cluster.initial_cluster_manager_nodes: ["opensearch-cluster_manager"]
discovery.seed_hosts: ["opensearch-1.sailor.com", "opensearch-2.sailor.com", "opensearch-3.sailor.com"]
network.host: 0.0.0.0
http.port: 9200
plugins.security.disabled: true
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/lib/opensearch
# Path to log files:
path.logs: /var/log/opensearch
@@ -0,0 +1,12 @@
cluster.name: kal-cluster
node.name: opensearch-3
node.roles: [ cluster_manager, data ]
cluster.initial_cluster_manager_nodes: ["opensearch-cluster_manager"]
discovery.seed_hosts: ["opensearch-1.sailor.com", "opensearch-2.sailor.com", "opensearch-3.sailor.com"]
network.host: 0.0.0.0
http.port: 9200
plugins.security.disabled: true
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/lib/opensearch
# Path to log files:
path.logs: /var/log/opensearch
@@ -0,0 +1,40 @@
cluster.name: kal-cluster
node.name: opensearch-2
node.roles: [ cluster_manager, data ]
cluster.initial_cluster_manager_nodes: ["opensearch-cluster_manager"]
discovery.seed_hosts: ["opensearch-1.sailor.com", "opensearch-2.sailor.com", "opensearch-3.sailor.com"]
network.host: 0.0.0.0
http.port: 9200
plugins.security.nodes_dn:
- "CN=opensearch-1.sailor.com,OU=Lab,O=Sailor Lab,L=Moscow,ST=Moscow,C=RU"
- "CN=opensearch-2.sailor.com,OU=Lab,O=Sailor Lab,L=Moscow,ST=Moscow,C=RU"
- "CN=opensearch-3.sailor.com,OU=Lab,O=Sailor Lab,L=Moscow,ST=Moscow,C=RU"
plugins.security.ssl.transport.keystore_filepath: /etc/opensearch/ssl/keystore.jks
plugins.security.ssl.transport.keystore_password: Passw0rd
plugins.security.ssl.transport.keystore_keypassword: Passw0rd
plugins.security.ssl.transport.truststore_filepath: /etc/opensearch/ssl/truststore.jks
plugins.security.ssl.transport.truststore_password: Passw0rd
transport.ssl.enforce_hostname_verification: false
plugins.security.ssl.http.enabled: true #Whether to enable TLS on the REST layer. If enabled, only HTTPS is allowed. Optional. Default is false.
plugins.security.ssl.http.keystore_filepath: /etc/opensearch/ssl/keystore.jks
plugins.security.ssl.http.keystore_password: Passw0rd
plugins.security.ssl.http.keystore_keypassword: Passw0rd
plugins.security.ssl.http.truststore_filepath: /etc/opensearch/ssl/truststore.jks
plugins.security.ssl.http.truststore_password: Passw0rd
plugins.security.authcz.admin_dn:
- "EMAILADDRESS=medik19999@mail.ru,CN=grigory,OU=Lab,O=Sailor Lab,L=Moscow,ST=Moscow,C=RU"
plugins.security.ssl.transport.pemcert_filepath: /etc/opensearch/ssl/node1.pem
plugins.security.ssl.transport.pemkey_filepath: /etc/opensearch/ssl/node1-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/opensearch/ssl/root-ca.pem
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: /etc/opensearch/ssl/node1.pem
plugins.security.ssl.http.pemkey_filepath: /etc/opensearch/ssl/node1-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: /etc/opensearch/ssl/root-ca.pem
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/lib/opensearch
# Path to log files:
path.logs: /var/log/opensearch
@@ -0,0 +1,32 @@
cluster.name: kal-cluster
node.name: opensearch-2
node.roles: [ cluster_manager, data ]
cluster.initial_cluster_manager_nodes: ["opensearch-cluster_manager"]
discovery.seed_hosts: ["opensearch-1.sailor.com", "opensearch-2.sailor.com", "opensearch-3.sailor.com"]
network.host: 0.0.0.0
http.port: 9200
plugins.security.nodes_dn:
- "CN=opensearch-1.sailor.com,OU=Lab,O=Sailor Lab,L=Moscow,ST=Moscow,C=RU"
- "CN=opensearch-2.sailor.com,OU=Lab,O=Sailor Lab,L=Moscow,ST=Moscow,C=RU"
- "CN=opensearch-3.sailor.com,OU=Lab,O=Sailor Lab,L=Moscow,ST=Moscow,C=RU"
plugins.security.ssl.transport.keystore_filepath: /etc/opensearch/ssl/keystore.jks
plugins.security.ssl.transport.keystore_password: Passw0rd
plugins.security.ssl.transport.keystore_keypassword: Passw0rd
plugins.security.ssl.transport.truststore_filepath: /etc/opensearch/ssl/truststore.jks
plugins.security.ssl.transport.truststore_password: Passw0rd
plugins.security.ssl.http.enabled: true #Whether to enable TLS on the REST layer. If enabled, only HTTPS is allowed. Optional. Default is false.
plugins.security.ssl.http.keystore_filepath: /etc/opensearch/ssl/keystore.jks
plugins.security.ssl.http.keystore_password: Passw0rd
plugins.security.ssl.http.keystore_keypassword: Passw0rd
plugins.security.ssl.http.truststore_filepath: /etc/opensearch/ssl/truststore.jks
plugins.security.ssl.http.truststore_password: Passw0rd
plugins.security.authcz.admin_dn:
- "EMAILADDRESS=medik19999@mail.ru,CN=grigory,OU=Lab,O=Sailor Lab,L=Moscow,ST=Moscow,C=RU"
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/lib/opensearch
# Path to log files:
path.logs: /var/log/opensearch
-17
View File
@@ -1,17 +0,0 @@
cluster.name: kal-cluster # Имя кластера
node.name: opensearch-1 # Имя ноды кластера
# Включение плагина безопасности для шифрования трафика между нодами
plugins.security.ssl.transport.keystore_filepath: /etc/opensearch/config/ssl/keystore.jks # Путь к файлу keystore.jks, который содержит ключи к сертификатам
plugins.security.ssl.transport.keystore_password: MyCertPassword # Пароль от кейстора
plugins.security.ssl.transport.keystore_keypassword: MyCertPassword # Пароль от приватного ключа внутри кейстора
plugins.security.ssl.transport.truststore_filepath: /etc/opensearch/config/ssl/truststore.jks # Путь к хранилищу сертификатов
plugins.security.ssl.transport.truststore_password: MyCertPassword # Пароль от хранилища сертификатов
#Включение плагина безопасности для шифрования трафика между дашбордом и опенсерчом
#plugins.security.ssl.http.enabled: # Включение шифрования при обращении к REST api. По умолчанию выключено. При включении http будет принудительно отключен и всегда будет использоваться https
plugins.security.ssl.http.keystore_filepath: /etc/opensearch/config/ssl/keystore.jks # Путь к файлу keystore.jks, который содержит ключи к сертификатам
plugins.security.ssl.http.keystore_password: MyCertPassword # Пароль от кейстора
plugins.security.ssl.http.keystore_keypassword: MyCertPassword # Пароль от приватного ключа внутри кейстора
plugins.security.ssl.http.truststore_filepath: /etc/opensearch/config/ssl/truststore.jks # Путь к хранилищу сертификатов
plugins.security.ssl.http.truststore_password: MyCertPassword # Пароль от хранилища сертификатов
+13
View File
@@ -0,0 +1,13 @@
Установка из тарбола завершилась тем что я не разложил бинарники логи и тд по папкам. Так же все напутал с правами, юзерами, группами и т.д. Секурити плагин не смог прочитать кейстор, видимо что то я сделал неправильно
Попробуем установить его через апт завтра. Так же откатимся в хотелках и просто сгенерим сертификаты, без кестора и трастстора
20/04/2026 Установка через апт работает. Но проблема с сертификатами остается. Смиряемся и откатываемся. Возможно я генерю сертификаты не правильно. Из важного сертификаты надо генерить на 1 ноде. А потом раскидать все это дело по узлам.
Из важного записать все ноды в файлы хостс или поднять свой днс
27.04.2026 Решил поднимать свой днс. Помучил нейронки. Из предлженных вариантов только powerdns имеет апи и тераформ провайдера. Подолбится ли с базовой инфрой? Или попытатся обойтись костылями?
04.05.2026 Днс сработал и решил 1 проблему. Как приятно держать свою инфру. Выяснил что с винды не создавалась тачка потому как был включен впн, а я забыл что прокс виртуальный с винды и трафик тунелируется через вмваре бридж прямо в тунель. Собрал кластер без секюрити плагина. Установил дашборду. Столкнулся с пробелмой авторизации. Пока отключил все настройки безопасности на серче и дашборде.
Шаг 0 выполнен. Теперь надо поднять все то же самое но с включенным секьюрити плагином. И прокинуть пользаков в опенсерч.
Так же можно задуматься какие логи я буду писать в опенсерч. Для начала можно попробовать напрямую логи самого серча
Для сбора используем fluenbit. Шаг 0 заставить это как то работать
На заметку поискать мб какую то Пошечку для автоматизации выпуска сертификатов и их доставки на сервера
+2
View File
@@ -0,0 +1,2 @@
Ты devops инженер. Твоя основная специальность это автоматизация и настройка серверов.
Ты занят настройкой opensearch.
-10
View File
@@ -1,10 +0,0 @@
Test dosck
- list 1
- list 2
!!! note
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod
nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor
massa, nec semper lorem quam in massa.
+18
View File
@@ -0,0 +1,18 @@
[Unit]
Description=Gitea (Git with a cup of tea)
After=network.target
Wants=postgresql.service
After=postgresql.service
[Service]
# Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that
# LimitNOFILE=524288:524288
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target
+142
View File
@@ -0,0 +1,142 @@
# Нструкция по установке Gitea
Примитивная инструкция по установке gitea.
Ссылка на официальную документацию https://docs.gitea.com/next/installation/install-from-binary
Требования и версии
Ubuntu 22.04
postgresql 17.9
gitea main-nightly ( 1.27.0)
git => 2.0
## Подготовка базы
Установим и настроем базу данных postgresql
1) Добавим репозиторий и ключ
```
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
sudo apt update
```
2) Установим postgresql, запустим и добавим в автозагрузку
```
sudo apt install postgresql-17
sudo systemctl start postgresql
sudo systemctl enable postgresql
```
3) Настроим файл postgesql.conf для подключения. Файл лежит /etc/postgresql/17/main/postgresql.conf (17 это версия postgesql)
Если сторка закоментирована, то раскоментировать и добавить адрес сервера на котором будет развернута gitea
```
listen_addresses = 'localhost, 203.0.113.3'
```
4) Создадим юзера для БД. Для создания нового юзера надо подключится к Субд под дефолтным юзером postges. После ROLE идет имя юзера. Требуется заменить дефолтные на свои.
```
su -c "psql" - postgres
CREATE ROLE gitea WITH LOGIN PASSWORD 'gitea';
```
5) Создадим БД для gitea. Владельцем базы назначим свежесозданного юзера. Кодировка базы UTF8. Сменить имя базы на свою
```
CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
```
1) Разрешим подключаться к базе пользователю к созданной выше базе данных, добавив следующее правило аутентификации в pg_hba.conf. Файл лежит /etc/postgresql/17/main/
```
local giteadb gitea scram-sha-256 #Для локальной базы данных
host giteadb gitea 192.0.2.10/32 scram-sha-256 #Для удаленной базы данных
```
1) На сервере Gitea проверим подключение к базе данных.
Для локальной базы данных:
```
psql -U gitea -d giteadb
```
Для удаленной базы данных:
```
psql "postgres://gitea@203.0.113.3/giteadb"
```
## Установка
1) Обновим систему
```
sudo apt update && sudo apt upgrade -y
```
2) Скачаем бинарник и выдадим ему права на исполнение.
```
wget -O gitea https://dl.gitea.com/gitea/main-nightly/gitea-main-nightly-linux-amd64
```
```
sudo chmod gitea
```
3) Проверим подпись бинарника. В репозитории есть GPG ключ.
```
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
wget https://dl.gitea.com/gitea/main-nightly/gitea-main-nightly-linux-386.asc
gpg --verify gitea-main-nightly-linux-amd64.asc gitea-main-nightly-linux-amd64
```
4) НА сервере должен быть установлен git версии => 2.0. Убедимся что git подходящей версии
```
git --version
```
5) Добавим локального юзера для запуска gitea.
```
adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
```
1) Создадим необходимые для работы директории и выдадим созданному юзеру права на них. Права 770 на директорию /etc/gitea выдаются только для первоначальной настройки.
```
mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
```
1) Создадим системный юнит для запуска gitea как сервиса systemd. Создадим файл юнита по пути /etc/systemd/system/gitea.service
Добавим конфиг юнита
```
[Unit]
Description=Gitea (Git with a cup of tea)
After=network.target
Wants=postgresql.service
After=postgresql.service
[Service]
# Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that
# LimitNOFILE=524288:524288
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target
```
Перечитаем список юнитов
```
sudo systemctl daemon-reload
```
Запустим gitea
```
sudo systemctl enable gitea --now
```
## Первоначальная настройка
1) Для первоначальной настройки нужно зайти по адресу нашего сервера на порте 3000
http://ip-addr-or-fqdn:3000/
Откроется веб странциа первоначальной настройки, где нужно:
1) указать юзера, пароль и БД, которую мы будем использовать.
2) Указать домен и URl сервера
3) Зарегестрировать администратора.
Если забудем логи\пароль админа, то его можно сменить через консоль сервера
```
gitea admin user change-password --username user --password password --config /etc/gitea/app.ini:
```
4) Так же стоит запретить самостоятельную регистрацию на сервер
После первоначальной настройки меняем права на директорию /etc/gitea на 750
```
chmod 750 /etc/gitea
```
+3
View File
@@ -0,0 +1,3 @@
### Записик для изучения модулей в terraform
09.05.2026
Узнал что существуют модули
@@ -0,0 +1,12 @@
# Переменные в terraform
Переменные - значения, которые передаются пользователем и могут менятся в зависимости от задачи. Существует два вида переменных.
1) Входящие - переменные, которые поступают от пользователя.
2) Исходящие - определяются в результате работы
## Входящие переменные
Для использования переменных их нужно сначало объявить. Для соблюдения чистоты рекомендуется делать это в отдельном файле variable.tf
Объявив переменную мы можем вызвать ее в ресурсе используюя ее имя.
Так же мы можем записывать значения в файл с расширение *.tfvars. Тогда нужно будет при планировании указать ключ -var-file и имя файла
```
tofu plan -var-file example.tfvars -out example
```
Создавая файлы переменных с разными значениями, мы можем использовать 1 и тот же код ресурса для разных окружений
@@ -0,0 +1,5 @@
Манифест - этакая программа, состоящая из HCL кода, для выполнения набора действий и логики. Для читаемости разбивается на файлы.
Блок - блок кода в терраформе, который выполняет определенное действие. Если приводить аналогию с програмированием, то это функция.
Переменная - изменяемое значение, передается на вход пользователем или на выход программой.
Ресурс - блок кода, используемый для создания чего либо. Возможности определяются провайдером.
Модуль - готовый набор ресурсов, который мы можем переиспользовать в другом манифесте.
@@ -0,0 +1,2 @@
# Заметка для запоминания горячих клавиш в Vscode
1) Для рендера Markdown ctrl + shift + V. Для того что бы вернуться в редактор нужно нажать еще раз
+1 -1
View File
@@ -1,4 +1,4 @@
site_name: Documentation demo
site_name: Sailor.lab
site_url : https://SailorUpiter.github.io/mkdocs
repo_url: https://github.com/SailorUpiter/mkdocs.git
theme: