diff --git a/docs/docker/plex/imagemaid.md b/docs/docker/plex/imagemaid.md new file mode 100644 index 0000000..e78999a --- /dev/null +++ b/docs/docker/plex/imagemaid.md @@ -0,0 +1,8 @@ +# ImageMaid - очистка канртинок для библиотеки + +[![](https://img.shields.io/github/stars/Kometa-Team/ImageMaid?label=%E2%AD%90%20Stars&style=flat-square)](https://github.com/Kometa-Team/ImageMaid) +[![](https://img.shields.io/github/v/release/Kometa-Team/ImageMaid?label=%F0%9F%9A%80%20Release&style=flat-square)](https://github.com/Kometa-Team/ImageMaidreleases/latest) +[![Docker Pulls](https://img.shields.io/docker/pulls/kometateam/imagemaid.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/kometateam/imagemaid/) + +![](https://github.com/Kometa-Team/ImageMaid/raw/master/cleanup.png) + diff --git a/docs/docker/vaultwarden.md b/docs/docker/vaultwarden.md new file mode 100644 index 0000000..10854e6 --- /dev/null +++ b/docs/docker/vaultwarden.md @@ -0,0 +1,51 @@ +# Vaultwarden - Неофициальный сервер, совместимый с Bitwarden + +```yaml +services: +## Bitwarden - Password Vault + bitwarden: + container_name: bitwarden + image: vaultwarden/server:latest + restart: always + ports: + - "80:80" + - "3012:3012" + security_opt: + - no-new-privileges:true + volumes: + - ./vaultwarden:/data + - /var/log/docker:/var/log/docker + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + environment: + #- SIGNUPS_ALLOWED=true # Change to false after first login + - INVITATIONS_ALLOWED=true # Send invitation using admin page + - WEBSOCKET_ENABLED=true + - LOG_FILE=/var/log/docker/bitwarden.log + - ADMIN_TOKEN=${BW_ADMIN_TOKEN} + - DATABASE_URL=$DATABASE_URL + #- DISABLE_ADMIN_TOKEN=false + + postgres: + container_name: postgres + image: docker.io/library/postgres:14-alpine + restart: always + ports: + - "5432:5432" + environment: + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ + - POSTGRES_PASSWORD=$PG_ROOT_PASSWORD + security_opt: + - no-new-privileges:true + volumes: + - $DOCKER_APP/postgres:/bitnami/postgresql + - $DOCKER_APP/db-backup:/dbbackup + - /etc/localtime:/etc/localtime:ro + #healthcheck: + # test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] + # interval: 1s + # timeout: 5s + # retries: 10 +``` \ No newline at end of file diff --git a/docs/docker/woodpecker.md b/docs/docker/woodpecker.md new file mode 100644 index 0000000..97a4705 --- /dev/null +++ b/docs/docker/woodpecker.md @@ -0,0 +1,47 @@ +# Woodpecker - простой, но мощный движок CI/CD + +Woodpecker — простой, но мощный движок CI/CD с большими возможностями расширения. + +Woodpecker использует Docker-контейнеры для выполнения этапов конвейера. + +![](../../images/docker/woodpecker.png) + +[![](https://img.shields.io/github/stars/woodpecker-ci/woodpecker?label=%E2%AD%90%20Stars&style=flat-square)](https://github.com/woodpecker-ci/woodpecker) +[![](https://img.shields.io/github/v/release/woodpecker-ci/woodpecker?label=%F0%9F%9A%80%20Release&style=flat-square)](https://github.com/woodpecker-ci/woodpecker/releases/latest) +[![Docker Pulls](https://img.shields.io/docker/pulls/woodpeckerci/woodpecker-server.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/woodpeckerci/woodpecker-server) + +## Что такое CI/CD или конвейеры? + +CI/CD означает **Continuous Integration and Continuous Deployment** (непрерывная интеграция и непрерывное развертывание). По сути, это конвейерная лента, которая перемещает ваш код из разработки в производство, выполняя всевозможные проверки, тесты и процедуры по пути. Типичный конвейер может включать следующие шаги: + +1. Проведение тестов +2. Создание вашего приложения +3. Развертывание вашего приложения + +[Более глубокое изучение самое идеи CI/CD](https://blog.skillfactory.ru/glossary/ci-cd/) + +## Развертывание Woodpecker + +Развертывание Woodpecker состоит из 2 частей: + +- Сервер, являющийся сердцем системы и предоставлюящий веб интерфейс +- Агенты, которык запускают конвееры + +Каждый агнет может обрабатывать 1 рабочий процесс. То есть 6 агентов могут обрабатывать 6 рабочих процессов параллельно. + +### Системный требования + +Минимальные требования: + +- Сервер: CPU 1 ядро, RAM 200 Mb +- Агент: CPU 1 ядро, RAM 32 Mb + +Так же потребуется база данных, которой тоже нужны будут ресурсы. + +### Docker Compose + +Устанавливать будем через Docker Compose, используя базу данных SQLite, которая не требует установки или настройки. Посмотреть настройки для других баз данных можно на [странице](https://woodpecker-ci.org/docs/administration/database) + +https://woodpecker-ci.org/docs/intro +https://woodpecker-ci.org/docs/administration/getting-started +https://woodpecker-ci.org/docs/administration/deployment-methods/docker-compose \ No newline at end of file diff --git a/docs/images/docker/woodpecker.png b/docs/images/docker/woodpecker.png new file mode 100644 index 0000000..0de3b87 Binary files /dev/null and b/docs/images/docker/woodpecker.png differ diff --git a/docs/smart-home/hass/dashboard/mushroom-cards.md b/docs/smart-home/hass/dashboard/mushroom-cards.md new file mode 100644 index 0000000..8293c7a --- /dev/null +++ b/docs/smart-home/hass/dashboard/mushroom-cards.md @@ -0,0 +1,112 @@ +# Mushroom Cards + +## Выпадающий список к карточке + +Объединение нескольких карточек, для управления подсветкой ТВ и медиаплеером + +![](https://community-assets.home-assistant.io/original/4X/6/0/0/6002f8a3af520e53d3f95f8bb5e061c1bd4d1554.gif) + +??? example title="Пример" + + ```yaml +type: custom:stack-in-card +cards: + - type: custom:layout-card + layout_type: custom:grid-layout + layout: + grid-template-columns: auto 20px + margin: '-4px -4px -8px -4px' + cards: + - type: custom:mushroom-media-player-card + entity: media_player.shield_universal + name: Shield TV + icon: mdi:play + use_media_info: true + use_media_artwork: false + show_volume_level: true + media_controls: + - on_off + - play_pause_stop + - previous + - next + volume_controls: + - volume_set + - volume_mute + fill_container: true + card_mod: + style: | + mushroom-shape-icon { + {% set media_type = state_attr(config.entity, 'media_content_type') %} + --card-mod-icon: + {% if media_type == 'tvshow' %} + mdi:television-classic + {% elif media_type == 'movie' %} + mdi:movie-open + {% elif media_type == 'music' %} + mdi:music + {% elif media_type == 'playlist' %} + mdi:music + {% else %} + mdi:play + {% endif %}; + } + :host { + {% if not is_state(config.entity, 'off') %} + background: url( '{{ state_attr(config.entity, "entity_picture") }}' ), linear-gradient(to left, transparent, rgb(var(--rgb-card-background-color)) 50%); + {% endif %} + background-size: 50%, 100%; + background-position: right; + background-repeat: no-repeat; + background-blend-mode: lighten; + } + :host([dark-mode]) { + background-blend-mode: darken; + } + + ha-card { + background: none; + --ha-card-box-shadow: 0px; + } + - type: custom:mushroom-template-card + entity: input_boolean.ambilight_dropdown + primary: '' + secondary: '' + icon: >- + {{ 'mdi:chevron-down' if is_state(entity, 'off') else 'mdi:chevron-up' + }} + icon_color: disabled + hold_action: + action: none + card_mod: + style: | + ha-card { + align-items: flex-end; + background: none; + --ha-card-box-shadow: 0px; + } + mushroom-shape-icon { + --shape-color: none !important; + } + - type: conditional + conditions: + - entity: input_boolean.ambilight_dropdown + state: 'on' + card: + type: custom:stack-in-card + cards: + - type: custom:mushroom-light-card + entity: light.ambilight_wled + icon: mdi:television-ambient-light + name: Ambilight + layout: horizontal + show_brightness_control: true + show_color_temp_control: true + show_color_control: true + use_light_color: true + card_mod: + style: | + ha-card { + background: none; + --ha-card-box-shadow: 0px; + } +``` diff --git a/docs/software/ansible.md b/docs/software/ansible.md new file mode 100644 index 0000000..74a3ad3 --- /dev/null +++ b/docs/software/ansible.md @@ -0,0 +1,32 @@ +# Ansible + +Ставим на Debian 12 + +Хотя Ansible доступен в [основном репозитории Debian](https://packages.debian.org/stable/ansible) , он может быть устаревшим. + +Чтобы получить более новую версию, пользователи Debian могут использовать Ubuntu PPA в соответствии со следующей таблицей: + +| **Debian** | | **Ubuntu** | **UBUNTU_CODENAME** | +|----|----|----|----| +| Debian 12 (Bookworm) | -> | Ubuntu 22.04 (Jammy) | jammy | +| Debian 11 (Bullseye) | -> | Ubuntu 20.04 (Focal) | focal | +| Debian 10 (Buster) | -> | Ubuntu 18.04 (Bionic) | bionic | + +В следующем примере мы предполагаем, что у вас уже установлены wget и gpg `sudo apt install wget gpg` + +Выполните следующие команды, чтобы добавить репозиторий и установить Ansible. Установите `UBUNTU_CODENAME=...` на основе таблицы выше (мы используем `jammy` в этом примере). + +```bash +$ UBUNTU_CODENAME=jammy +$ wget -O- "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | sudo gpg --dearmour -o /usr/share/keyrings/ansible-archive-keyring.gpg +$ echo "deb [signed-by=/usr/share/keyrings/ansible-archive-keyring.gpg] http://ppa.launchpad.net/ansible/ansible/ubuntu $UBUNTU_CODENAME main" | sudo tee /etc/apt/sources.list.d/ansible.list +$ sudo apt update && sudo apt install ansible +``` + +!!! Note + + " " вокруг URL-адреса сервера ключей важны. Вокруг "echo deb" важно использовать " ", а не ' '. + +Эти команды загружают ключ подписи и добавляют запись в источники apt, указывающую на PPA. + +Ранее вы могли использовать `apt-key add` . Теперь это [устарело](https://manpages.debian.org/testing/apt/apt-key.8.en.html) по соображениям безопасности (в Debian, Ubuntu и других местах). Для получения более подробной информации см. [этот пост AskUbuntu](https://askubuntu.com/a/1307181) . Также обратите внимание, что по соображениям безопасности мы НЕ добавляем ключ в `/etc/apt/trusted.gpg.d/`, или туда `/etc/apt/trusted.gpg`, где было бы разрешено подписывать релизы из ЛЮБОГО репозитория. diff --git a/docs/software/semaphore.md b/docs/software/semaphore.md new file mode 100644 index 0000000..7d07789 --- /dev/null +++ b/docs/software/semaphore.md @@ -0,0 +1,102 @@ +# Semaphore + +!!! note + + Ansible Semaphore — это веб-интерфейс для запуска Ansible-плейбуков с расширенными возможностями: + + - объединение Ansible-плейбуков в проекты; + - запуск задач по расписанию; + - хранение и просмотр логов выполнения задач; + - управление правами доступа; + - уведомления на электронную почту и в Telegram. + + Ansible Semaphore написан на Go и распространяется с исходным кодом под свободной лицензией. + +## Подготовка + +Для установки, нужен хост, где уже стоит и одна из СУБД: MariaDB, BoltDB либо PostgreSQL. + +### Установка MariaDB + +Добавляем репозиторий MariaDB + +``` +curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup +sudo bash mariadb_repo_setup +``` + +Устанавливаем СУБД +``` +sudo apt -y install MariaDB-server MariaDB-client MariaDB-backup +``` + +Запускаем сервис +``` +sudo systemctl enable --now mariadb +systemctl status mariadb +``` + +Запускаем скрипт инициализации и настройки +``` +sudo mariadb-secure-installation +``` +Создаем пользователя и базу +``` +mysql -u root -p + +CREATE DATABASE semaphoredb; +GRANT ALL PRIVILEGES ON semaphore.* TO 'semaphore'@'localhost' IDENTIFIED BY 'semaphorepass'; +exit +``` +### Установка PostgreSQL 15 + +Добавляем репозиторий PostgreSQL +``` +sudo apt -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm +sudo apt update -y +``` +Отключаем модуль postgresql, что не не устанавливался PostgreSQL из дефолтных репозиториев +``` +sudo apt -qy module disable postgresql +``` +Устанавливаем PostgreSQL 15 +``` +sudo apt install -y postgresql15-server +``` +Инициализируем БД +``` +sudo /usr/pgsql-15/bin/postgresql-15-setup initdb +``` +Правим конфиг pg_hba.conf +``` +sudo nano /var/lib/pgsql/15/data/pg_hba.conf +... +host all all 127.0.0.1/32 md5 +# IPv6 local connections: +host all all ::1/128 md5 +... +``` +Запускаем PostgreSQL +``` +sudo systemctl enable postgresql-15 --now +sudo systemctl status postgresql-15 +``` +Устанавливаем пароль пользователя postgres +``` +sudo -u postgres psql +=# ALTER USER postgres WITH PASSWORD 'PostgreSQLPass'; +``` +Создаем пользователя и базу для Ansible Semaphore +``` +=# CREATE USER semaphore WITH ENCRYPTED PASSWORD 'semaphorepass'; +=# CREATE DATABASE semaphoredb OWNER semaphore; +=# GRANT ALL PRIVILEGES ON DATABASE semaphoredb TO semaphore; +=# \l +=# \q +``` +### Установка Git +Устанавливаем git, смотрим версию +``` +sudo apt -y install git +git --version +``` \ No newline at end of file diff --git a/docs/ubuntu/fail2ban.md b/docs/ubuntu/fail2ban.md new file mode 100644 index 0000000..1b31a3f --- /dev/null +++ b/docs/ubuntu/fail2ban.md @@ -0,0 +1,111 @@ +# Fail2ban для SSH + +ЛЮбой сервер переодически становится целью для попытки взлома. Чаще всего, это происходит ботом и носит случайный характер. Бот ищет в сети доступные для подключения по SSH сервера и пробует подключиться к ним методом перебора логина и пароля. + +Для защиты от атак можно использовать программу **Fail2ban**. Она отслеживает логи подключения к серверу и в случае превышения определенного количества попыток, блокирует IP. + +Далее будет инструкция, как установить, настроить и запустить **Fail2ban** на своем сервере. + +Устонавливать будем на Debian 12 + +## Установка + +Для начала обновим список пакетов apt: +``` +sudo apt update +sudo apt upgrade +``` +После устанавливаем **Fail2ban**: +``` +sudo apt install fail2ban +``` +Теперь активируем Fail2ban, для добавления в автозапуск при запуске ОС: +``` +sudo systemctl enable fail2ban +``` + +Осталось проверить и настроить параметры фильтрации, согласно которым будет происходить блокировка IP. + +## Настройка + +По умолчанию Fail2ban использует правила блокировки, указанные в файле `jail.conf`. Это системный файл, который обновляется вместе с программой, поэтому использовать его в качестве основного файла с параметрами блокировки не рекомендуется. + +Мы создадим собственный конфигурационный файл `jail.local`. Система приоритетов в Fail2ban настроена таким образом, что в качестве основных применяются правила, указанные в `jail.local`. + +## Структура конфигурационного файла +Конфигурационный файл Fail2ban состоит из так называемых jail-ов — отдельных блоков правил для разных служб. В одном файле `jail.local` можно не только указать все правила для всех сетевых служб сервера, но и управлять их включением и выключением. + +Структура всех jail-ов одинакова: + +В первой строке в квадратных скобках указывают название службы, к которой будет применяться следующий ниже набор правил. В нашем случае это [sshd]. + +Далее определяют параметр enabled, отвечающий за включение или отключение данного jail-а. Мы установим его true, чтобы наш jail был активен. + +После этого указывают условия блокировки: максимальное количество попыток подключения (maxretry), время, за которое эти попытки были произведены (findtime), и время, на которое нужно запретить доступ с этого IP (bantime). + +В последней части jail-а указывают IP-адреса, которые считаются надёжными (ignoreip), например, IP-адрес вашего домашнего компьютера. + +Мы рекомендуем добавить в строку ignoreip домашний адрес вашего компьютера, чтобы в случае особо жёстких настроек фильтрации программа не заблокировала вам доступ к серверу — например, после нескольких неудачных попыток ввода пароля. + +Создадим конфигурационный файл: +``` +sudo nano /etc/fail2ban/jail.local + +[sshd] +enabled = true +maxretry = 6 +findtime = 1h +bantime = 1d +ignoreip = 127.0.0.1/8 23.34.45.56 +``` +Этот набор условий означает, что IP-адрес, с которого было произведено 6 неудачных попыток SSH-подключения за последний час (3600 секунд), будет заблокирован на одни сутки (86400 секунд). Не будут блокироваться IP-адреса в диапазоне от 127.0.0.1 до 127.0.0.8 и адрес 23.34.45.56. + +Время для параметров findtime и bantime можно указывать не только в секундах, но и в минутах, часах, днях и даже неделях. Для этого необходимо сразу после численного значения параметра указать соответствующую букву (m, h, d, w). + +## Получение уведомлений +После строки с указанием надёжных IP можно добавить параметр, отвечающий за отправку на e-mail уведомлений о заблокированных IP. + +Добавьте в конфигурационный файл строку: + +destemail=admin@example.com +Теперь на указанную здесь почту будут приходить уведомления о каждом заблокированном программой IP-адресе. + +Чтобы получать более детальную информацию о заблокированных IP, на сервер можно установить службу whois: + +sudo apt install whois +В этом случае в письма о блокировке будут добавлены более подробные сведения, получаемые службой whois. + +Будьте внимательны при настройке уведомлений! + +Fail2ban отправляет отдельным письмом сведения о каждом заблокированном IP, а в случае брутфорс-атаки количество IP, с которых проводится подключение, может достигать нескольких сотен. + +## Начало работы +После создания конфигурационного файла, содержащего все необходимые правила, можно запускать Fail2ban и наблюдать за его работой. + +Команда для запуска программы: + +sudo systemctl start fail2ban +Команда для вывода на экран сведений о работе jail-а, отвечающего за службу sshd: + +sudo fail2ban-client status sshd +Если в данный момент сервер не подвергается атаке, сразу после установки и запуска программы на экране будет следующая информация: +``` +Status for the jail: sshd +|- Filter +| |- Currently failed: 0 +| |- Total failed: 0 +| `- File list: /var/log/auth.log +`- Actions + |- Currently banned: 0 + |- Total banned: 0 + `- Banned IP list: +``` +Здесь приведены сведения о попытках подключения к серверу и о заблокированных IP-адресах. + +Если вы решите изменить настройки, указанные в конфигурационном файле `jail.local`,` не забудьте перезапустить Fail2ban, чтобы изменения вступили в силу: +``` +sudo systemctl restart fail2ban +``` +!!! warning title="Обрати внимание" + + Некоторые современные программы для брутфорса могут «обходить» заданные по умолчанию значения fail2ban. Например, делать 4 попытки подключения в течение 1 часа, ждать оставшееся время и пробовать подключиться заново. Поэтому мы рекомендуем установить собственные значения для всех условий. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 0c4a000..4c23dea 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -172,6 +172,8 @@ nav: - Package: - smart-home/hass/package/index.md - Будильник: smart-home/hass/package/budilnik.md + - Dashboards: + - Mushroom Cards: smart-home/hass/dashboard/mushroom-cards.md - Device: - Xiaomi Airpurifier: smart-home/hass/device/xiaomi-airpurifier.md - Автоматизации: