Compare commits

..

No commits in common. 'main' and 'states/2024.05' have entirely different histories.

@ -1,107 +0,0 @@
# Dockge
![](../images/docker/dockge.svg){: style="height:150px;width:150px"}
[![](https://img.shields.io/github/stars/louislam/dockge?label=%E2%AD%90%20Stars&style=flat-square)](https://github.com/louislam/dockge)
[![](https://img.shields.io/github/v/release/louislam/dockge?label=%F0%9F%9A%80%20Release&style=flat-square)](https://github.com/louislam/dockge/releases/latest)
[![Docker Pulls](https://img.shields.io/docker/pulls/louislam/dockge.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/louislam/dockge/)
Стильный, простой и быстрый self-hosted менеджер Docker Compose менеджер.
![](../images/docker/dockge01.png)
## ⭐ Возможности
- 🧑‍💼 Управление `compose.yaml` файлом
- Создание/Редактирование/Запуск/Остановка/Перезапуск/Удаление
- Обновление Docker образов
- ⌨️ Интерактивный редактор для `compose.yaml`
- 🦦 Интерактивный Web-терминал
- 🕷️ (1.4.0 🆕) Поддержка нескольких инстансов - Можно управлять несколькими стаками на разных Docker хостах через один интерфейс
- 🏪 Преобразование `docker run ...` команд в `compose.yaml`
- 📙 Файловая структура - Dockge не меняет изначальные файлы, они хранятся на диске как обычно. Можно взаимодействовать с ними, используя обычные `docker compose` команды
- 🚄 Быстрый - Прогресс (Pull/Up/Down) и вывод терминала в режиме реального времени
- 🐣 Простой в использовании и стильный пользовательский интерфейс.
## 🔧 Установка
Требования:
- [Docker](https://docs.docker.com/engine/install/) 20+ / Podman
- (Podman only) podman-docker (Debian: `apt install podman-docker`)
- OS:
- Основные дистрибутивы Linux могут запускать Docker/Podman, например:
- ✅ Ubuntu
- ✅ Debian (Bullseye или новее)
- ✅ Raspbian (Bullseye или новее)
- ✅ CentOS
- ✅ Fedora
- ✅ ArchLinux
- Arch: armv7, arm64, amd64 (a.k.a x86_64)
### Основы
- Папка хранения стеков: `/opt/stacks`
- Порт: 5001
```
# Create directories that store your stacks and stores Dockge's stack
mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge
# Download the compose.yaml
curl https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml --output compose.yaml
# Start the server
docker compose up -d
# If you are using docker-compose V1 or Podman
# docker-compose up -d
```
Dockge будет запущен по адресу http://localhost:5001
### Углубленный
```yaml
services:
dockge:
image: louislam/dockge:1
restart: unless-stopped
ports:
# Host Port : Container Port
- 5001:5001
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
# If you want to use private registries, you need to share the auth file with Dockge:
# - /root/.docker/:/root/.docker
# Stacks Directory
# ⚠️ READ IT CAREFULLY. If you did it wrong, your data could end up writing into a WRONG PATH.
# ⚠️ 1. FULL path only. No relative path (MUST)
# ⚠️ 2. Left Stacks Path === Right Stacks Path (MUST)
- /opt/stacks:/opt/stacks
environment:
# Tell Dockge where is your stacks directory
- DOCKGE_STACKS_DIR=/opt/stacks
```
## Обновление
```bash
cd /opt/dockge
docker compose pull && docker compose up -d
```
## Скриншоты
![](https://github.com/louislam/dockge/assets/1336778/e7ff0222-af2e-405c-b533-4eab04791b40)
![](https://github.com/louislam/dockge/assets/1336778/7139e88c-77ed-4d45-96e3-00b66d36d871)
![](https://github.com/louislam/dockge/assets/1336778/f019944c-0e87-405b-a1b8-625b35de1eeb)
![](https://github.com/louislam/dockge/assets/1336778/a4478d23-b1c4-4991-8768-1a7cad3472e3)

@ -1,23 +0,0 @@
# MariaDB
```yaml
services:
mariadb:
container_name: mariadb
image: mariadb:latest #11.5.2
restart: unless-stopped
stop_grace_period: 5s
security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239
- seccomp:unconfined
- apparmor:unconfined
command: --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
volumes:
- "./database:/var/lib/mysql"
environment:
MARIADB_AUTO_UPGRADE: "1"
MARIADB_INITDB_SKIP_TZINFO: "1"
MARIADB_DATABASE: "name_db"
MARIADB_USER: "username"
MARIADB_PASSWORD: "pass_user"
MARIADB_ROOT_PASSWORD: "root_pass"
```

@ -1,12 +0,0 @@
# OIDC логин через Authentik
Добавил авторизацию через Authentik, но потребовалось сделать так, чтобы формы входа не было. Чтобы сразу шел редирект на страницу авторизации Authentik.
Для этого нужно выолпнить команду (nextcloud в докере):
```
docker exec -ti --user 1000 nextcloud_app php occ config:app:set --value=0 user_oidc allow_multiple_user_backends
```
где `nextcloud_app` - имя контейнера
Применимо только для приложения nextcloud: **user_oidc** (https://github.com/nextcloud/user_oidc)

@ -132,19 +132,3 @@ PHOTOPRISM_SITE_URL=http://site.name # URL сайта, для доступа
MARIADB_ROOT_PASSWORD=strong-password # Пароль root от БД mariadb MARIADB_ROOT_PASSWORD=strong-password # Пароль root от БД mariadb
MARIADB_PASSWORD=strong-password1 # Пароль от юзера photoprism БД MARIADB_PASSWORD=strong-password1 # Пароль от юзера photoprism БД
``` ```
## Проблемы
Если после обновления, пропали фотки. Или идет цикличная загрузка по кругу, то лучше всего снести БД и восстановится на чистую.
Порядок действий таков:
1. Сносим текущую БД
2. Ставим новую БД с настройками старой
3. Перезапускаем призму
4. В терминале вводим: `docker compose exec photoprism photoprism restore -i`
Должно получится.
Можно и без команды, но тогда не вернутся текущие фотки.

@ -15,6 +15,8 @@
## Установка через docker-compose ## Установка через docker-compose
```yaml ```yaml
version: "3.7"
services: services:
plextraktsync: plextraktsync:
image: ghcr.io/taxel/plextraktsync image: ghcr.io/taxel/plextraktsync
@ -29,7 +31,7 @@ services:
command: sync command: sync
``` ```
Запустить синхронизацию: `docker compose run --rm plextraktsync sync` Запустить синхронизацию: `docker-compose run --rm plextraktsync sync`
Для запуска автоматически по расписанию можно использовать crontab или sheduler: Для запуска автоматически по расписанию можно использовать crontab или sheduler:

@ -1,7 +1,7 @@
# Prowlarr # Prowlarr
[![](https://img.shields.io/github/stars/Prowlarr/Prowlarr?label=%E2%AD%90%20Stars&style=flat-square)](https://github.com/Prowlarr/Prowlarr) [![](https://img.shields.io/github/stars/Prowlarr/Prowlarr?label=%E2%AD%90%20Stars&style=flat-square)](https://github.com/Prowlarr/Prowlarr)
[![](https://img.shields.io/github/v/release/Prowlarr/Prowlarr?label=%F0%9F%9A%80%20Release&style=flat-square)](https://github.com/Prowlarr/Prowlarr/releases/latest) [![](https://img.shields.io/github/v/release/Prowlarr/Prowlarr?label=%F0%9F%9A%80%20Release&style=flat-square)](https://github.com/Jackett/Jackett/releases/latest)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/prowlarr.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/prowlarr/) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/prowlarr.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/prowlarr/)
![](../../images/docker/prowlarr-1.png) ![](../../images/docker/prowlarr-1.png)
@ -23,6 +23,7 @@ Prowlarr — это менеджер индексаторов и прокси,
С Prowlarr у вас будет одно место для управления всеми индексаторами всех ваших приложений Arr. Это отличная замена [Jackett](./jackett.md). С Prowlarr у вас будет одно место для управления всеми индексаторами всех ваших приложений Arr. Это отличная замена [Jackett](./jackett.md).
```yaml title="docker-compose.yml" ```yaml title="docker-compose.yml"
version: "3.7"
services: services:
prowlarr: prowlarr:

@ -247,11 +247,9 @@ networks:
!!! warning "Внимание" !!! warning "Внимание"
никогда не открывайте порт 2375 для доступа в Интернет. Вас взломают/ Это еще более важно для виртуальных частных серверов, которые обычно предоставляют доступ ко всем портам. Включите брандмауэр, чтобы разрешить только порты 80 и 443 (и заблокировать остальные) для прохождения на ваш сервер, а также реализовать обходной путь Docker IP Tables, описанный далее в этом руководстве.
Никогда не открывайте порт 2375 для доступа в Интернет. Вас взломают. Это еще более важно для виртуальных частных серверов, которые обычно предоставляют доступ ко всем портам. Включите брандмауэр, чтобы разрешить только порты 80 и 443 (и заблокировать остальные) для прохождения на ваш сервер, а также реализовать обходной путь Docker IP Tables, описанный далее в этом руководстве.
!!! note !!! note
Кроме того, порт `2375` должен быть открыт только для внутренней сети (*127.0.0.1:2375*). Кроме того, порт `2375` должен быть открыт только для внутренней сети (*127.0.0.1:2375*).
В блоке **environment:** указываем раздел Docker API, который хотим открыть или закрыть. Я добавил комментарии, чтобы описать, какие службы требуют каких разделов API. Например, если вы не используете WatchTower, вы можете ввести **0** для нескольких разделов API. В блоке **environment:** указываем раздел Docker API, который хотим открыть или закрыть. Я добавил комментарии, чтобы описать, какие службы требуют каких разделов API. Например, если вы не используете WatchTower, вы можете ввести **0** для нескольких разделов API.

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="640" height="640" viewBox="0 0 640 640" xml:space="preserve">
<desc>Created with Fabric.js 5.3.0</desc>
<defs>
</defs>
<g transform="matrix(0.9544918218 0 0 0.9544918218 320 325.5657767239)" id="0UAuLmXgnot4bJxVEVJCQ" >
<linearGradient id="SVGID_136_0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1 0 0 1 -236.6470440833 -213.9441386034)" x1="259.78" y1="261.15" x2="463.85" y2="456.49">
<stop offset="0%" style="stop-color:#74C2FF;stop-opacity: 1"/>
<stop offset="100%" style="stop-color:rgb(134,230,169);stop-opacity: 1"/>
</linearGradient>
<path style="stroke: rgb(242,242,242); stroke-opacity: 0.51; stroke-width: 190; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: url(#SVGID_136_0); fill-rule: nonzero; opacity: 1;" transform=" translate(0, 0)" d="M 131.8665 -139.04883 C 159.01022 -111.20969000000001 170.12421 -99.45396000000001 203.11849999999998 -51.72057000000001 C 236.1128 -3.9871800000000093 264.44147999999996 83.98416999999998 187.33995 144.05073 C 177.72728999999998 151.53955 166.73827 158.81189999999998 154.65932999999998 165.65812999999997 C 69.85514999999998 213.72433999999998 -68.67309000000003 240.78578 -161.79279 174.28328999999997 C -268.17583 98.30862999999997 -260.10282 -68.66557000000003 -144.35093 -170.50579000000005 C -28.599040000000002 -272.34602000000007 104.72278 -166.88797000000005 131.86649999999997 -139.04883000000004 z" stroke-linecap="round" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

@ -1,31 +0,0 @@
# Получение кастомных маршрутов eBGP
Выпускаем трафик BGP с маршрутизатора
```
/ip firewall filter add action=accept chain=output protocol=tcp dst-address=51.75.66.20 dst-port=179 out-interface=site2
```
Прописываем маршрут до сервиса, который содержит маршруты BGP. Это нужно для того, чтобы избежать фильтрации BGP.
```
/ip route add dst-address=51.75.66.20/32 gateway=site2
```
Настраиваем пиринг с сервисом
!!! info "Mikrotik ROS7"
```
/routing bgp template
add as="64999" disabled=no hold-time=4m input.filter=bgp_in .ignore-as-path-len=yes keepalive-time=1m multihop=yes name=BGP_1 routing-table=main
/routing bgp connection add as=64999 disabled=no hold-time=4m input.filter=bgp_in .ignore-as-path-len=yes keepalive-time=1m local.address=<local_IP> .role=\
ebgp multihop=yes name=BGP1 output.filter-chain=discard \
remote.address=51.75.66.20/32 .as=65444 router-id=<WAN_IP> \
routing-table=main templates=BGP_1
/routing filter rule
add chain=bgp_in disabled=no rule="set gw site2; accept;
add chain=discard disabled=no rule=reject
```

@ -1,23 +0,0 @@
# Маркировка траффика
Сделаем Policy-based Routing (PBR) - маршрутизация на основе определенных политик (правил, условий), которые являются относительно гибкими и устанавливаются Администратором. Другими словами это технология предоставляет условия гибкой маршрутизации (если смотреть на технологию с первоочередной ее задачи), по источнику или назначению пакета.
Формируем списки (`address-list`) для адресов или подсетей:
```
# auth.servarr.com - ресурс, у которого меняем маршрут
/ip firewall address-list add list=PBR address=auth.servarr.com
```
Создаем таблицу маршрутизации
```
/routing table
add Disabled=no name=PBR fib
```
Настраиваем правила роутинга
```
/ip firewall mangle add disabled=no action=mark-routing chain=prerouting dst-address-list=PBR new-routing-mark=PBR passthrough=yes src-address=192.168.88.2-192.168.88.254
/ip route add disabled=no dst-address=0.0.0.0/0 type=unicast gateway=site2 routing-mark=PBR scope=30 target-scope=10
/ip firewall nat add chain=srcnat src-address=192.168.88.0/24 out-interface=site2 action=masquerade
```

@ -0,0 +1,67 @@
# Обход блокировок Европейских сайтов
Расписывать как поднять и настроить VPN через Wireguard или OpenVPN не буду. В сети достаточно инструкций.
Варианта как обходить блокировки 2:
- через таблицу маршрутизации, куда вносим ресурсы руками или скриптами
- через BGP с одного "неизвестного" сайта
## Вариант 1: таблица маршрутизации
Статья о маркировке трафика, для отправки его в VPN: [Policy_Base_Routing](https://wiki.mikrotik.com/wiki/Policy_Base_Routing)
Формируем списки (`address-list`) для подсетей, трафик на которые будем гнать через VPN:
```
# auth.servarr.com - заблоченный ресурс
/ip firewall address-list add list=unblock address=auth.servarr.com
```
Вместо формирования руками, готовые списки можно выкачивать с [https://antifilter.download](https://antifilter.download)
Создаем таблицу маршрутизации
```
/routing table
add Disabled=no name=unblock fib
```
Настраиваем правила роутинга
```
/ip firewall mangle add disabled=no action=mark-routing chain=prerouting dst-address-list=unblock new-routing-mark=unblock passthrough=yes src-address=192.168.88.2-192.168.88.254
/ip route add disabled=no dst-address=0.0.0.0/0 type=unicast gateway=wireguard1 routing-mark=unblock scope=30 target-scope=10
/ip firewall nat add chain=srcnat src-address=192.168.88.0/24 out-interface=wireguard1 action=masquerade
```
## Вариант 2: BGP
Проверяем, что VPN жив и работает.
Выпускаем трафик BGP с маршрутизатора
```
/ip firewall filter add action=accept chain=output protocol=tcp dst-address=51.75.66.20 dst-port=179 out-interface=wireguard1
```
Прописываем маршрут до сервиса antifilter.network через VPN. Это нужно для того, чтобы если провайдер блочит или фильтрует BGP, на нас это не влияло.
```
/ip route add dst-address=51.75.66.20/32 gateway=wireguard1
```
Настраиваем пиринг с сервисом
!!! info "Mikrotik ROS7"
```
/routing bgp template
add as="64999" disabled=no hold-time=4m input.filter=bgp_in .ignore-as-path-len=yes keepalive-time=1m multihop=yes name=antifilter routing-table=main
/routing bgp connection add as=64999 disabled=no hold-time=4m input.filter=bgp_in .ignore-as-path-len=yes keepalive-time=1m local.address=<local_IP> .role=\
ebgp multihop=yes name=bgp-antifilter.net output.filter-chain=discard \
remote.address=51.75.66.20/32 .as=65444 router-id=<WAN_IP> \
routing-table=main templates=antifilter
/routing filter rule
add chain=bgp_in disabled=no rule="set gw wireguard1; accept;
add chain=discard disabled=no rule=reject
```

@ -1,4 +0,0 @@
# Полезные ресурсы
[HTPasswd Generator](https://www.web2generators.com/apache-tools/htpasswd-generator)

@ -1,84 +0,0 @@
# Proxmox VE, проброс физического HDD в виртуальную машину
Периодически так бывает, что нужно подключить к виртуальной машине дополнительный физический диск. Долго расписывать не буду что и как.
Все решается 1 командой на ноде Proxmox VE:
```bash
qm set <vm_id> -[virtio|sata|ide|scsi][№] [/dev/disk/by-id|/dev/disk/by-uuid]
```
где:
* `vm_id` - номер виртуальной машины (в интерфейсе Proxmox указывается перед именем VM)
* `virtio|sata|ide|scsi` - допустимый тип и номер HDD интерфейса
* `/dev/disk/by-id|/dev/disk/by-uuid` - пробрасываемою физическое устройство
# ID и UUID
Возникает вопрос: где же взять путь `/dev/disk/by-id` или `/dev/disk/by-uuid`.
Все просто, чтобы вывести UUID диска, нужно выполнить:
```bash
blkid /dev/sdb1
```
Так же, можно проверить, есть ли диск в директории /by-uuid:
```bash
ls /dev/disk/by-uuid/
```
Если диска нет, то можно использовать его ID. Чтобы получить идентификатор (серийный номер диска) выполните:
```bash
lshw -class disk -class storage
```
Скопируйте значение serial. Например, *Serial: QP8516N*
Выведите идентификаторы диска и разделов на нем по его серийному номеру:
```bash
ls -l /dev/disk/by-id | grep QP8516N
```
# Команда
Итого. Чтобы пробросить диск по ID, выполняем команду:
```bash
qm set 100 -virtio2 /dev/disk/by-id/scsi-36003005700ba2e00ff00002a02aec9e8
```
А для UUID:
```bash
qm set 100 -virtio2 /dev/disk/by-uuid/0b56138b-6124-4ec4-a7a3-7c503516a65c
```
Проверить, что диск подключился можно в веб-интерфейсе Proxmox, на вкладке Hardware виртуалки или проверив конфигурационный файл ВМ:
```bash
cat /etc/pve/qemu-server/100.conf
```
# Проверка
Должно появится строка вида
```bash
virtio0: volume=/dev/disk/by-uuid/0b56138b-6124-4ec4-a7a3-7c503516a65c
```
или
```bash
sata0: volume=/dev/disk/by-uuid/0b56138b-6124-4ec4-a7a3-7c503516a65c
```
---
Можно почитать [тут](https://pve.proxmox.com/wiki/Passthrough_Physical_Disk_to_Virtual_Machine_(VM)#Check_Configuration_File)

@ -1,3 +1,2 @@
User-agent: * User-agent: *
Sitemap: https://st1t.ru/sitemap.xml Sitemap: https://st1t.ru/sitemap.xml
Clean-param: q

@ -14,9 +14,6 @@ https://wirenboard.com/wiki/Wiren_Board_7.4
timedatectl set-timezone Asia/Yekaterinburg timedatectl set-timezone Asia/Yekaterinburg
``` ```
https://github.com/4mr/wb-engine
## Новое устройство для Modbus ## Новое устройство для Modbus
Первым делом, увеличиваем скорость работы. Со стандартных 9600 на 115200, что соответствует "быстрому modbus" Первым делом, увеличиваем скорость работы. Со стандартных 9600 на 115200, что соответствует "быстрому modbus"
@ -35,19 +32,3 @@ systemctl start wb-mqtt-serial
- `/dev/ttyRS485-2` - через какой интерфейс подключаемся - `/dev/ttyRS485-2` - через какой интерфейс подключаемся
- `-r110 1152` - записываем в регистр **110** значение скорости *115200* - `-r110 1152` - записываем в регистр **110** значение скорости *115200*
## Смена ID-адреса у устройства
Останавливаем службу `wb-mqtt-serial`. Затем выставляем новый адрес и запускаем службу обратно.
Идентификацию делаем по серийноу номеру:
```
systemctl stop wb-mqtt-serial
wb-modbus-scanner -d /dev/ttyRS485-2 -b 115200 -s 174072 -i 51 - сменить адрес у устройства с SN=174072
systemctl start wb-mqtt-serial
```
Разберем 2 строчку подробнее:
- `-b 115200` - текущая скорость работы
- `-s 174072` - серийник устройства
- `/dev/ttyRS485-2` - через какой интерфейс подключаемся
- `-i 51` - новый адрес

@ -1,35 +0,0 @@
# Подключение и настройка термостата Hessway.
Купил себе в дом термостат Hessway c управлением по RS-485 (Modbus). С установкой правда возникли сложности, тк Wirenboard отказывался самостоятельно находить устройство.
Для начала физическое подключение. Шина RS подключается по 2 проводам, на термостате красный и белый. **В большинстве случаев A=красный, B=белый. Но это же китайцы, может быть и по другому.**
Параметры подключения RS-485 с завода:
- Baud rate — 9600 бит/с,
- Parity — None,
- Data bits — 8,
- Stop bits — 1.
Но даже с этими параметрами, не находит. Поэтому будет прописывать вручную. С завода, у термостата адрес 1. Его можно поменять через меню:
1. Выключите термостат нажатием на кнопку ON/OFF.
2. Зажмите одновременно кнопки M и Clock на 5 секунд — термостат войдет в сервисный режим.
3. Кратким нажатием на кнопку M выберите параметр C.
4. Кнопками вверх ↑ и вниз ↓ установите новый адрес термостата.
5. После установки адреса подождите 5 секунд, термостат применит новые настройки и выйдет из сервисного режима.
6. Включите термостат нажатием на кнопку ON/OFF.
Далее вручную прописываем на нужном порту эти настройки и привязываем к шаблону: BHT-002GBLN (Скачать можно по ссылке: https://support.wirenboard.com/uploads/short-url/oBLAAEHVntr3mGnoplxGsgTgMEp.json)
После все должно заработать.
## Не нашлось или хз
Можно попробовать перебрать адреса на порту:
```
systemctl stop wb-mqtt-serial
for i in {1..255}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-2 --debug -b9600 -pnone -s2 -a$i -t3 -o400 -r0 -c1 2>/dev/null | grep Data:`; echo -e $D; done
systemctl start wb-mqtt-serial
```

@ -1,71 +0,0 @@
# Русский язык для консоли Ubuntu
**Локаль (locale)** — это файл, который содержит таблицу с указанием того, какие символы считать буквами, и как их следует сортировать. Операционная система использует эту таблицу для отображения букв определенного национального алфавита.
После установки чистой системы Linux Ubuntu или Debian, если не был выбран русский ввод и вывод, то их надо установить.
Для начала проверяем, какая локаль установлена:
```
locale
```
Если вывод команды такой:
```
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
```
То нужно настроить локаль.
Выполним команду:
```
dpkg-reconfigure locales
```
Откроется диалоговое окно, в котором необходимо установить нужное значение региональных настроек (локали).
Выбираем: `ru_RU.UTF-8 UTF-8`
Установим пакет `console-cyrillic`:
```
sudo apt install console-cyrillic
```
Далее необходимо перезагрузить систему командой:
```
reboot
```
После загрузки системы выполним команду:
```
locale
```
В результате должен быть вывод:
```
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
```

@ -1,16 +0,0 @@
# ![btop++](https://github.com/aristocratos/btop/raw/main/Img/logo.png)
[![](https://img.shields.io/github/stars/aristocratos/btop?label=%E2%AD%90%20Stars&style=flat-square)](https://github.com/aristocratos/btop)
[![](https://img.shields.io/github/v/release/aristocratos/btop?label=%F0%9F%9A%80%20Release&style=flat-square)](https://github.com/aristocratos/btop/releases/latest)
Удобная тулза для мониторинга ресурсов на различных ОС. Есть поддержка видеокарт. Отображение в терминале.
Для установки на убунту необходимо скачать пакет через apt:
```
sudo apt update
sudo apt install btop
```
# ![](https://github.com/aristocratos/btop/raw/main/Img/normal.png)

@ -1,40 +0,0 @@
# Отключение AppArmor в Ubuntu
**AppArmor** — это модуль безопасности для **Ubuntu** и **Debian** , который применяет политики контроля доступа к приложениям. В определенных средах эти ограничения могут мешать определенным операциям или требовать корректировки. Отключение **AppArmor** может потребоваться для обеспечения совместимости с определенными приложениями или конфигурациями.
В системах, где гибкость имеет решающее значение, например, в средах разработки, может потребоваться отключение или удаление AppArmor. __Этот процесс включает остановку службы, отключение ее запуска при загрузке и удаление пакета AppArmor__ и его зависимостей. Важно понимать последствия для безопасности, поскольку отключение AppArmor снижает защиту системы.
Обычно рекомендуется держать AppArmor включенным в производственных средах. Однако, если ситуация требует этого, отключение AppArmor следует выполнять с осторожностью. Имейте в виду, что некоторые пакеты, такие как snapd , могут переустановить AppArmor при удалении.
## Действия по отключению и удалению AppArmor в Ubuntu и Debian:
1. Откройте терминал в вашей системе.
2. Остановите службу AppArmor .
```
sudo systemctl stop apparmor
```
3. Отключить запуск AppArmor при загрузке.
```
sudo systemctl disable apparmor
Synchronizing state of apparmor.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install disable apparmor
Removed "/etc/systemd/system/sysinit.target.wants/apparmor.service".
```
4. При необходимости удалите пакет AppArmor и его зависимости.
```
sudo apt remove --assume-yes --purge apparmor
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
apparmor* snapd*
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 122 MB disk space will be freed.
##### snipped
```
!!! tip
Это также удалит snapd . Продолжайте, только если вы не используете snapd для управления пакетами. Переустановка snapd также установит AppArmor как зависимость.

@ -1,130 +0,0 @@
# Защита Linux
## Юзер без прав рута
Длоя начала, сделаем себе юзера, у которого не будет прав рута. Root имеет полные права в системе и если разрешать для него удаленное администрирование, то это будет не безопасно.
Новый пользователь создается командой [`adduser`](https://manpages.ubuntu.com/manpages/oracular/en/man8/adduser.8.html), во время создания вводится имя пользователя, устанавливается пароль. По умолчанию, команда `adduser` выберет первый доступный UID из диапазона обычных пользователей, заданного в файле настройки. UID может быть изменён с помощью параметра `--uid`.
```bash
adduser user1
```
После, добавим созданного пользователя в группу, которая имеет право выполнять команды с повышением привилегий `sudo`. В различных дистрибутивах это могут быть разные команды:
=== "CentOS и Red Hat"
```bash
usermod -aG wheel <username>
```
=== "Ubuntu"
```bash
usermod -aG sudo <username>
```
## SSH Ключи вместо паролей
Пароли это конечно хорошо, но в случае утечки - это вектор атаки. Так же, не забываем, что пароль всегда можно подобрать через брутфорс. Если брутфорс можно отсеить через fail2ban, то как быть с утечкой? Все просто - можно вместо паролей использовать аутентификацию по ключам.
Рассмотрим самую популярную реализации протокола SSH - OpenSSH
=== "Клиентская"
```bash
sudo apt install openssh-client
```
=== "Серверная"
```bash
# Установка на сервере
sudo apt install openssh-server
#Запуск демона SSH (sshd) на сервере под Ubuntu
sudo systemctl start sshd
#
Автоматический запуск демона при каждой загрузке
sudo systemctl enable sshd
```
!!! tip
Замечу, что серверная часть OpenSSH включает в себя клиентскую. То есть через openssh-server можно подключаться к другим серверам.
Нет смысла на обычном пк, не являющимся сервером, ставить полноценный сервер OpenSSH - это только даст возможность удалённого подключения к компьютеру (кроме случаев когда это дейсвтительно нужно)
После того, как OpenSSH поставлен, нужно сгенерировать ключи SSH на компьютере, с которого вы будете заходить на сервер:
```bash
ssh-keygen -t rsa
```
Публичный ключ хранится в файле `.pub` и выглядит как строка случайных символов, которые начинаются с `ssh-rsa`.
```
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname
```
Затем нужно из-под рута создать на сервере директорию SSH в домашнем каталоге пользователя и добавить публичный ключ SSH в файл authorized_keys, используя текстовый редактор вроде nano:
```bash
mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys
nano /home/user_name/.ssh/authorized_keys
```
После устанавливаем корректные разрешения для файла и меняем владельца:
```bash
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys
chown -R username:username /home/username/.ssh
```
На стороне клиента указываем местоположение секретного ключа для аутентификации:
```bash
ssh-add DIR_PATH/keylocation
```
Теперь можно залогиниться на сервер под именем юзера по этому ключу:
```bash
ssh [username]@hostname
```
!!! warning
Настоятельно рекомендую сделать несколько резервных копий приватного ключа. Так как если авторизация по паролю будет отключена, а приватный ключ утерян, то для того чтобы войти на сервер, нужен будет или прямой доступ к клавиатуре или KVM консоль.
По умолчанию, в Убунте отключен вход через ssh под рутом, но в Debian и других ОС нет. Чтобы отключить, нужно в файле `/etc/ssh/sshd_config` найти строчку `PermitRootLogin yes` и изменить значение на `no`.
После, можно отключить авторизацию пользователя по паролю. Для этого все в том же файле `/etc/ssh/sshd_config` меняем параметр у строки `PasswordAuthentication` yes на `no`.
## Fail2Ban
Ранее, я уже уопминал про защиту от брутфорса, используя Fail2Ban. Fail2Ban - это сервис, который анализирует логи и считает количество авторизаций за период времени с каждого IP адреса. К примеру, можно блокировать доступ к серверу, если за последний час было 5 проваленных авторизаций.
Установка обычная, через пакет:
```bash
sudo apt install fail2ban
systemctl start fail2ban
systemctl enable fail2ban
```
У сервиса есть 2 конфига: `/etc/fail2ban/fail2ban.conf` и `/etc/fail2ban/jail.conf`. Параметры ограничений указываются во втором файле:
```text
[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
```
## Смена портов по умолчанию
По умолчанию, SSH работает на 22 порту и если не стоит fail2ban, а сервер смотрит в интернет, то в логах начнут попадатся брутфорс. Даже с учетом отключенной авторизации через пароли. Чтобы лишний раз не триггерить сканеры, рекоменудю сменить порт у SSH на любой другой.
Сделать это можно в файле `/etc/ssh/sshd_config` в параметре `Port 22`
Чтобы подключиться к серверу через кастомный порт, используется команда вида:
```
ssh server -p port
```

@ -21,7 +21,6 @@ nav:
- TCP Route: docker/traefik/tcp-routes.md - TCP Route: docker/traefik/tcp-routes.md
- Сервисы: - Сервисы:
- Drone CI: docker/drone.md - Drone CI: docker/drone.md
- Dockge: docker/dockge.md
- Gitea: docker/gitea.md - Gitea: docker/gitea.md
#- Grafana+Prometheus: docker/grafana-prometheus.md #- Grafana+Prometheus: docker/grafana-prometheus.md
- Grafana: - Grafana:
@ -39,7 +38,6 @@ nav:
- Cron: docker/nextcloud/cron.md - Cron: docker/nextcloud/cron.md
- Проблемы с data: docker/nextcloud/problems-after-moving-data-folder.md - Проблемы с data: docker/nextcloud/problems-after-moving-data-folder.md
- OCC: docker/nextcloud/occ-files-scan.md - OCC: docker/nextcloud/occ-files-scan.md
- OIDC-login: docker/nextcloud/oidc-login.md
- Photoprism: docker/photoprism.md - Photoprism: docker/photoprism.md
- Pictshare: docker/pictshare.md - Pictshare: docker/pictshare.md
- Plex: - Plex:
@ -77,9 +75,6 @@ nav:
- Использование Proxy: ubuntu/proxy-system.md - Использование Proxy: ubuntu/proxy-system.md
- Watchdog: ubuntu/watchdog.md - Watchdog: ubuntu/watchdog.md
- Обновление дистрибутива: ubuntu/upgrade-dist.md - Обновление дистрибутива: ubuntu/upgrade-dist.md
- Русский язык в консоли: ubuntu/add-locale-russian.md
- Отключение AppArmor: ubuntu/disable-apparmor.md
- Защита Linux: ubuntu/secure-linux.md
- Backup: - Backup:
- Google Диск: ubuntu/backup/google.md - Google Диск: ubuntu/backup/google.md
- Yandex: ubuntu/backup/yandex.md - Yandex: ubuntu/backup/yandex.md
@ -94,7 +89,6 @@ nav:
- HPE: - HPE:
- Management Component Pack: ubuntu/hpe/hpe-mcp.md - Management Component Pack: ubuntu/hpe/hpe-mcp.md
- NCDU: ubuntu/ncdu.md - NCDU: ubuntu/ncdu.md
- btop: ubuntu/btop.md
- ctop: ubuntu/ctop.md - ctop: ubuntu/ctop.md
- Software: - Software:
- Powershell: - Powershell:
@ -160,7 +154,6 @@ nav:
- proxmox/index.md - proxmox/index.md
- CT Template: proxmox/ct-template.md - CT Template: proxmox/ct-template.md
- Nvidia LXC: proxmox/nvidia-lxc.md - Nvidia LXC: proxmox/nvidia-lxc.md
- Добавление диска к VM: proxmox/add-disk-vm.md
- Умный дом: - Умный дом:
- Home Assistant: - Home Assistant:
- Установка на Debian: smart-home/hass/install-hass-debian.md - Установка на Debian: smart-home/hass/install-hass-debian.md
@ -177,7 +170,6 @@ nav:
- Wirenboard: - Wirenboard:
- Новый контроллер: smart-home/wirenboard/new-controller.md - Новый контроллер: smart-home/wirenboard/new-controller.md
- Другое: - Другое:
- Полезные ресурсы: other/helpfull-links.md
- Закрыть фишинговый сайт: other/close-phishing-site.md - Закрыть фишинговый сайт: other/close-phishing-site.md
- SSL для сайта: other/ssl-for-site.md - SSL для сайта: other/ssl-for-site.md
- Self Hosted: other/self-hosted.md - Self Hosted: other/self-hosted.md
@ -206,9 +198,7 @@ nav:
- Split-DNS: network/mikrotik/split-dns.md - Split-DNS: network/mikrotik/split-dns.md
- Hairpin NAT: network/mikrotik/hairpin-nat.md - Hairpin NAT: network/mikrotik/hairpin-nat.md
- UPnP: network/mikrotik/upnp.md - UPnP: network/mikrotik/upnp.md
- eBGP: network/mikrotik/ebgp.md - Обход блокировок: network/mikrotik/unblock-site.md
- Маркировка трафика: network/mikrotik/mark-traffik.md
#- Обход блокировок: network/mikrotik/unblock-site.md
- Ubiquiti: - Ubiquiti:
- Добавление новой точки: network/ubi/add-new-ap.md - Добавление новой точки: network/ubi/add-new-ap.md
- Ошибка обновления: network/ubi/failed-update.md - Ошибка обновления: network/ubi/failed-update.md
@ -311,9 +301,4 @@ markdown_extensions:
- pymdownx.superfences # allows for the nesting of code blocks inside other blocks - pymdownx.superfences # allows for the nesting of code blocks inside other blocks
- pymdownx.keys - pymdownx.keys
extra:
analytics:
provider: google
property: G-E6GYT2D13K
copyright: 2024 &copy; TheSt1tch - Licensed under GPLv3 copyright: 2024 &copy; TheSt1tch - Licensed under GPLv3

@ -1,36 +1,3 @@
steps: steps:
build-docs: buildDocs:
# build the docs in /docs with mkdocs and image: woodpeckerci/plugin-mkdocs:latest
# add the .domains file for codeberg pages
image: squidfunk/mkdocs-material
commands:
- mkdocs build -f ./mkdocs.yml -d docs_build
- git switch --orphan pages
- mv docs_build/* .
- echo -e 'openfindata.org\nopenfindata.codeberg.page\npages.openfindata.codeberg.page' > .domains
when:
path:
include:
- 'mkdocs.yml'
- 'docs/**'
deploy-docs:
# Push the resulting files to openfindata/pages
# to deploy
name: Push built docs to codeberg pages
image: appleboy/drone-git-push
settings:
branch: main
remote: git@codeberg.org:openfindata/pages.git
force: true
commit: true
ssh_key:
# created using woodpecker cli with:
# woodpecker secret add -repository openfindata/openfindata \
# -name codeberg_push_from_ci_priv_key -value @<path_to_privkey_file>
from_secret: codeberg_push_from_ci_priv_key
when:
path:
include:
- 'mkdocs.yml'
- 'docs/**'
Loading…
Cancel
Save