Merge pull request 'states/2024.04' (#15) from states/2024.04 into main
continuous-integration/drone/push Build is passing Details

Reviewed-on: #15
states/2024.05
thest1tch 9 months ago
commit c9e604d7e4

@ -4,29 +4,28 @@ type: docker
name: build-home-docs name: build-home-docs
steps: steps:
#- name: build main - name: build main
# image: squidfunk/mkdocs-material:9.4.6 image: git.st1t.ru/thest1tch/mkdocs-material:latest
# pull: if-not-exists pull: if-not-exists
# volumes: volumes:
# - name: site - name: site-st1tru
# path: /site path: /site
# commands: commands:
# - pip install -U -r ./requirements.txt - mkdocs build
# - mkdocs build - cp -r site/ /site
# - cp -r site/ /site - chown 1000:1000 /site
# - chown 1000:1000 /site - chmod -R 777 /site
# - chmod -R 777 /site when:
# when: event:
# event: - push
# - push branch:
# branch: - main
# - main
- name: build states - name: build states
image: git.st1t.ru/thest1tch/mkdocs-material:latest image: git.st1t.ru/thest1tch/mkdocs-material:latest
pull: if-not-exists pull: if-not-exists
volumes: volumes:
- name: site-st1tru - name: site-dev
path: /site path: /site
commands: commands:
- mkdocs build - mkdocs build
@ -40,9 +39,9 @@ steps:
- states/* - states/*
volumes: volumes:
- name: site
host:
path: /opt/appdata/mkdocswiki
- name: site-st1tru - name: site-st1tru
host: host:
path: /opt/appdata/nginx/st1t.ru path: /opt/appdata/nginx/st1t.ru
- name: site-dev
host:
path: /opt/appdata/nginx/dev.thest1tch.ru

@ -1,6 +1,6 @@
# Grafana # Grafana
Для запуска будет использовать Docker Compose. Я предпологаю, что уже есть настроенное окружение с Docker Compose, если нет, то сделать можно в [инструкции](docs/docker/install.md). Для запуска будет использовать Docker Compose. Я предпологаю, что уже есть настроенное окружение с Docker Compose, если нет, то сделать можно в [инструкции](../install.md).
Grafana — один из самых популярных инструментов мониторинга. В сочетании с Prometheus, Grafana предлагает мощный инструмент визуализации данных временных рядов. Grafana — один из самых популярных инструментов мониторинга. В сочетании с Prometheus, Grafana предлагает мощный инструмент визуализации данных временных рядов.

@ -1,12 +1,12 @@
# Homarr - дашборд для быстрого доступа к сервисам. # Homarr - дашборд для быстрого доступа к сервисам.
[![](https://img.shields.io/github/stars/ajnart/homarr?label=%E2%AD%90%20Stars)](https://github.com/ajnart/homarr) [![](https://img.shields.io/github/stars/ajnart/homarr?label=%E2%AD%90%20Stars&style=flat-square)](https://github.com/ajnart/homarr)
[![](https://img.shields.io/github/v/release/ajnart/homarr?label=%F0%9F%9A%80%20Release)](https://github.com/ajnart/homarr/releases/latest) [![](https://img.shields.io/github/v/release/ajnart/homarr?label=%F0%9F%9A%80%20Release&style=flat-square)](https://github.com/ajnart/homarr/releases/latest)
[![](https://img.shields.io/badge/Demo-purple)](https://demo.homarr.dev/ru) [![](https://img.shields.io/badge/Demo-purple)](https://demo.homarr.dev/ru)
Современная панель управления домашней лабой. Позваоляет видеть все, что поднято. Современная панель управления домашней лабой. Позволяет видеть все, что поднято.
![](../images/docker/homarr.png)
## Запуск через Docker ## Запуск через Docker

@ -0,0 +1,27 @@
# Homepage
[![](https://img.shields.io/github/stars/gethomepage/homepage?label=%E2%AD%90%20Stars&style=flat-square)](https://github.com/gethomepage/homepage)
[![](https://img.shields.io/github/v/release/gethomepage/homepage?label=%F0%9F%9A%80%20Release&style=flat-square)](https://github.com/gethomepage/homepage/releases/latest)
Современная, полностью статичная, быстрая, безопасная, полностью прокси-серверная, легко настраиваемая панель управления приложениями с интеграцией более чем 100 сервисов и переводом на несколько языков. Легко настраивается с помощью файлов YAML или с помощью обнаружения меток Docker.
![](../images/docker/homepage-1.png)
## Запуск через Docker Compose
```yaml
version: "3.3"
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
environment:
PUID: 1000 #-- optional, your user id
PGID: 1000 #-- optional, your group id
ports:
- 3000:3000
volumes:
- /path/to/config:/app/config # Make sure your local config directory exists
- /var/run/docker.sock:/var/run/docker.sock:ro # optional, for docker integrations
restart: unless-stopped
```

@ -1,14 +1,11 @@
# Nextcloud - свое облако для файлов # Nextcloud - свое облако для файлов
Запуск через docker-compose. Для начала создадим файл `.env` со следующим содержанием: Запуск через docker-compose. Для начала создадим файл `.env` со следующим содержанием:
```env title=".env" ```env title=".env"
PUID= PUID=
PGID= PGID=
TZ= TZ=
DOCKER_APP=
SECRETSDIR=
NEXTCLOUD_DOMAIN_NAME= NEXTCLOUD_DOMAIN_NAME=
REDIS_PASSWORD= REDIS_PASSWORD=
``` ```
@ -21,15 +18,14 @@ version: "3.7"
services: services:
# Nextcloud Docker Application # Nextcloud Docker Application
nextcloud: nextcloud:
image: nextcloud:25.0.4 image: nextcloud:28
container_name: nextcloud container_name: nextcloud
restart: always restart: always
volumes: volumes:
- $DOCKER_APP/nextcloud:/var/www/html - ./nextcloud:/var/www/html
- $DOCKER_APP/nextcloud/apps:/var/www/html/custom_apps - ./nextcloud/apps:/var/www/html/custom_apps
- $DOCKER_APP/nextcloud/config:/var/www/html/config - ./nextcloud/config:/var/www/html/config
- /mnt/NAS/Nextcloud:/var/www/html/data - ./nextcloud/data:/var/www/html/data
- /mnt:/mnt
environment: environment:
- POSTGRES_HOST=192.168.1.12 - POSTGRES_HOST=192.168.1.12
- POSTGRES_DB_FILE=/run/secrets/nextcloud_postgres_db - POSTGRES_DB_FILE=/run/secrets/nextcloud_postgres_db
@ -37,8 +33,8 @@ services:
- POSTGRES_PASSWORD_FILE=/run/secrets/nextcloud_postgres_password - POSTGRES_PASSWORD_FILE=/run/secrets/nextcloud_postgres_password
- NEXTCLOUD_ADMIN_PASSWORD_FILE=/run/secrets/nextcloud_admin_password - NEXTCLOUD_ADMIN_PASSWORD_FILE=/run/secrets/nextcloud_admin_password
- NEXTCLOUD_ADMIN_USER_FILE=/run/secrets/nextcloud_admin_user - NEXTCLOUD_ADMIN_USER_FILE=/run/secrets/nextcloud_admin_user
- REDIS_HOST=172.18.3.249 #- REDIS_HOST=
- REDIS_HOST_PASSWORD=$REDIS_PASSWORD #- REDIS_HOST_PASSWORD=
- PUID=$PUID - PUID=$PUID
- PGID=$PGID - PGID=$PGID
- TZ=$TZ - TZ=$TZ

@ -11,7 +11,7 @@
Запуск простой, через docker: Запуск простой, через docker:
```bash ```bash
docker run -d -p 8080:80 --name=pictshare ghcr.io/hascheksolutions/pictshare docker run -d -p 8080:80 -e "TITLE=My own PictShare" -e "URL=http://localhost/" hascheksolutions/pictshare:2
``` ```
После, открываем [http://localhost:8080/](http://localhost:8080) в браузере и пользуемся. После, открываем [http://localhost:8080/](http://localhost:8080) в браузере и пользуемся.
@ -30,4 +30,5 @@ docker run -d -p 8080:80 --name=pictshare ghcr.io/hascheksolutions/pictshare
- Изменяйте и изменяйте размеры своих изображений и видео, просто отредактировав URL-адрес. - Изменяйте и изменяйте размеры своих изображений и видео, просто отредактировав URL-адрес.
- Дубликаты не занимают места. Если один и тот же файл загружается дважды, вторая загрузка будет связана с первой. - Дубликаты не занимают места. Если один и тот же файл загружается дважды, вторая загрузка будет связана с первой.
- [Много возможностей для настройки](https://github.com/HaschekSolutions/pictshare/blob/master/rtfm/CONFIG.md) - [Много возможностей для настройки](https://github.com/HaschekSolutions/pictshare/blob/master/rtfm/CONFIG.md)
- Полный контроль над вашими данными. Удаление изображений с индивидуальными и глобальными кодами удаления - Полный контроль над вашими данными. Удаление изображений с индивидуальными и глобальными кодами удаления

@ -144,14 +144,4 @@ sudo docker compose -f ~/docker/docker-compose.yml up -d
Другой безопасный способ доступа к Plex - использовать обратный прокси. Но для этого нужно доменное имя или DDNS. Другой безопасный способ доступа к Plex - использовать обратный прокси. Но для этого нужно доменное имя или DDNS.
Можно использовать NGINX или Traefik. NGINX прост в настройке, но не гибок. Я рекомендую [Traefik](../traefik/index.md). Можно использовать NGINX или Traefik. NGINX прост в настройке, но не гибок. Я рекомендую [Traefik](../traefik/index.md).
## Полезные команды
### Удаление мусора из PhotoTranscoder
Часто бывает так, что папка `../Library/Application Support/Plex Media Server/Cache/PhotoTranscoder` начинает занимать очень много места. в ней хранится весь кеш из изображений. Разные версии превью - все тут. Надо как-то почистить старое, чтобы освободить место:
```bash
find "/home/plex/plexconfig/Library/Application Support/Plex Media Server/Cache/PhotoTranscoder" -name "*.jpg" -type f -mtime +5 -delete
```

@ -2,4 +2,9 @@
[![](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/Jackett/Jackett/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/) <<<<<<< HEAD
[![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/)
>>>>>>> 49f6799 (?)

@ -0,0 +1,41 @@
# Решение проблем Plex
## Удаление мусора из PhotoTranscoder
Часто бывает так, что папка `../Library/Application Support/Plex Media Server/Cache/PhotoTranscoder` начинает занимать очень много места. в ней хранится весь кеш из изображений. Разные версии превью - все тут. Надо как-то почистить старое, чтобы освободить место:
```bash
find "<path_to_plexfolder>/Library/Application Support/Plex Media Server/Cache/PhotoTranscoder" -name "*.jpg" -type f -mtime +5 -delete
```
## Удаленный доступ в LAN сети
### Длинная версия
Столкнулся тут с проблемой воспроизведения киношки на тв дома. Почему-то, клиент Plex для ТВ не понимал, что находится в локальной сети и сервер плекса, с которого воспроизводится контент, находится в 5 метрах от него. Из-за этого, шел постоянный процесс транскодинга к 700p. Согласитесь, смотреть кино 4K ужатое до 700p это ужас.
Мой сетап:
- Plex для TV на базе Plex for Android, версия 10.12.
- Сервер Plex на Ubuntu Server в docker (8 ядер, 16гб RAM)
- Роутер Mikrotik - это важно, далее поясню почему.
Первым дело решено было смотреть, какие натсройки есть в Plex, влияющие на подключения. В настройках был обнаружен параметр **Включить ретрансляцию** (Настройки/Сеть). Если кратко, то при включении параметр позволяет подключаться через прокси ретранслятор, когда нет прямого доступа до сервера Плекса. Скорость у этого пркоси ограниченная. Это была первая причина, почему тормозило.
При отключении этого параметра, клиент Плекса на ТВ перестал подключаться к серверу. Это был знак. С одной стороны хороший, с другой не очень - ибо надо дальше искать и чинить проблему. Ошибка `Plex unable to connect securely`.
Ниже этого параметра, есть другой - **Внешний URL-адрес сервера**. Как я понял, это URL адреса для подключения к серверу плекса через DNS-подмену. У меня был указан адрес контейнера Докера в bridge сети. Поменял на свои внешние адреса. Пример: `"https://plex.site.ru","http://your_wan_ip:32400"`
Но это не помогло :(
При входе из локалки на [https://app.plex.tv](https://app.plex.tv) показывало, что библиотека не доступна. Но если входить из вне, то доступ появлялся. Значит какая то проблема с роутером. И тут я вспомнил, что для доступа к своей лабе из локалки, я настраивал [Hairpin NAT](../../network/mikrotik/hairpin-nat.md). Так может и для плекса нужно его сделать.
Это помогло. Настроил для порта *32400*
### Короткая версия
Если ТВ в локалке пишет, что скорости мало, то:
- Проверить не включен ли параметр **Включить ретрансляцию** (Настройки/Сеть)
- Проверить, стоят ли верные **внешние URL адреса**
- Если микротик, то попробовать настроить Hairpin NAT для порта plex (обычно 32400)

@ -127,7 +127,7 @@ Google SSO выбран, как один из самых простых спос
Теперь, когда учетные данные OAuth настроены, нужно полготовить контейнер OAuth. Теперь, когда учетные данные OAuth настроены, нужно полготовить контейнер OAuth.
Обязательно нужно остановить контейнер [Traefik](../traefik.md) и поправить файл `docker-compose.yml`, добавив метки Traefik и контейнер OAuth, как описано ниже. Обязательно нужно остановить контейнер [Traefik](index.md) и поправить файл `docker-compose.yml`, добавив метки Traefik и контейнер OAuth, как описано ниже.
### Этап 3.1. Создание middlewares - Traefik Auth ### Этап 3.1. Создание middlewares - Traefik Auth

@ -1,16 +1,22 @@
Traefik — это обратный прокси-сервер с открытым исходным кодом, обеспечивающий простую работу с микросервисами и/или просто контейнерами с вашими приложениями. # Traefik
Обратный прокси-сервер (reverse proxy, реверс-прокси) служит для ретрансляции запросов из внешней сети к каким-либо серверам/сервисам внутренней сети (например веб-сервера, БД или файловые хранилища) и позволяет: **Traefik** — это обратный прокси-сервер с открытым исходным кодом, обеспечивающий простую работу с микросервисами и/или просто контейнерами с вашими приложениями.
- обеспечить сокрытие структуры внутренней сети и подробностей о находящейся в ней сервисах;
- осуществлять балансировку нагрузки (load balancing) между экземплярами одного и того же сервиса или серверами с одинаковыми задачами; !!! tip
- обеспечить зашифрованное (HTTPS) соединение между клиентом и любым сервисом, в таком случае SSL сессия создается между клиентом и прокси, а между прокси и сервисом во внутренней сети устанавливается незашифрованное HTTP соединение, если сервис поддерживает HTTPS то можно организовать зашифрованное соединение и во внутренней сети; Обратный прокси-сервер (reverse proxy, реверс-прокси) служит для ретрансляции запросов из внешней сети к каким-либо серверам/сервисам внутренней сети (например веб-сервера, БД или файловые хранилища) и позволяет:
- организовать контроль доступа к сервисам (аутентификацию клиента), а также установить файрвол (брандмауэр).
- обеспечить сокрытие структуры внутренней сети и подробностей о находящейся в ней сервисах
- осуществлять балансировку нагрузки (load balancing) между экземплярами одного и того же сервиса или серверами с одинаковыми задачами
- обеспечить зашифрованное (HTTPS) соединение между клиентом и любым сервисом, в таком случае SSL сессия создается между клиентом и прокси, а между прокси и сервисом во внутренней сети устанавливается незашифрованное HTTP соединение, если сервис поддерживает HTTPS то можно организовать зашифрованное соединение и во внутренней сети
- организовать контроль доступа к сервисам (аутентификацию клиента), а также установить файрвол (брандмауэр).
В статье будет описываться использование Traefik в Docker в качестве реверс-прокси для других контейнеров Docker, а также не контейнеризированных сервисов. В статье будет описываться использование Traefik в Docker в качестве реверс-прокси для других контейнеров Docker, а также не контейнеризированных сервисов.
## Введение ## Введение
Traefik позиционируется разработчиками как “Edge Router”, то есть можно направить его непосредственно в глобальную сеть одной стороной и во внутреннюю другой. Если у читателя создалось впечатление что таким образом создается единая точка отказа всей системы, то так и есть, но есть несколько моментов:
- во-первых, **Traefik** имеет развитый функционал для автоматического восстановления при сбоях; **Traefik** позиционируется разработчиками как "Edge Router", то есть можно направить его непосредственно в глобальную сеть одной стороной и во внутреннюю другой. Если у читателя создалось впечатление что таким образом создается единая точка отказа всей системы, то так и есть, но есть несколько моментов:
- во-первых, **Traefik** имеет развитый функционал для автоматического восстановления при сбоях
- во-вторых, существует **Traefik EE** — платная версия, в которой помимо прочих преимуществ имеется HA (Hight Availability, Высокая доступность), что подразумевает распределение нагрузки между несколькими экземплярами сервиса (узлами), таким образом при отказе одного его задачи перераспределяются на другие узлы, а отказавший узел отключается и затем немедленно вводится обратно в эксплуатацию. - во-вторых, существует **Traefik EE** — платная версия, в которой помимо прочих преимуществ имеется HA (Hight Availability, Высокая доступность), что подразумевает распределение нагрузки между несколькими экземплярами сервиса (узлами), таким образом при отказе одного его задачи перераспределяются на другие узлы, а отказавший узел отключается и затем немедленно вводится обратно в эксплуатацию.
> В качестве примечания отметим, что в статье будет рассматриваться бесплатная версия Traefik. > В качестве примечания отметим, что в статье будет рассматриваться бесплатная версия Traefik.
@ -19,23 +25,23 @@ Traefik позиционируется разработчиками как “Ed
Список основных провайдеров: Список основных провайдеров:
- Docker - Docker
- File
- Kubernetes - Kubernetes
- Consul Catalog - Consul Catalog
- Marathon - Marathon
- Rancher - Rancher
- File
В рамках этой статьи будут рассмотрены первый и последний провайдеры из этого списка. В рамках этой статьи будут рассмотрены первый и второй провайдеры из этого списка.
Вероятно, не знакомому с темой читателю будет не понятно, чем является провайдер с именем — “File”, это некоторый файл (или папка с файлами), в котором описана конфигурация какого-либо сервиса, не связанного с другими провайдерами, но который должен быть скрыт за реверс-прокси. Остальные же провайдеры являются различными системами оркестрации контейнеров. Вероятно, не знакомому с темой читателю будет не понятно, чем является провайдер с именем — *File*, это некоторый файл (или папка с файлами), в котором описана конфигурация какого-либо сервиса, не связанного с другими провайдерами, но который должен быть скрыт за реверс-прокси. Остальные же провайдеры являются различными системами оркестрации контейнеров.
Файл конфигурации Traefik, а также файлы для провайдера “File” могут быть написаны на TOML либо YAML, в статье будут приведены примеры на YAML так как этот синтаксис больше нравится автору, а какой-либо функциональной разницы между ними нет, а также не составляет трудности переписать файлы на другой формат конфигурации. Traefik будет развернут в Docker. Для развертывания будет использоваться docker-compose, для обеспечения простоты повторного развертывания. Файл конфигурации **Traefik**, а также файлы для провайдера *File* могут быть написаны на TOML либо YAML, в статье будут приведены примеры на YAML так как этот синтаксис больше нравится автору, а какой-либо функциональной разницы между ними нет, а также не составляет трудности переписать файлы на другой формат конфигурации. Traefik будет развернут в Docker. Для развертывания будет использоваться `docker-compose`, для обеспечения простоты повторного развертывания.
> В статье будут приведены команды для ОС Linux. > В статье будут приведены команды для ОС Ubuntu.
## Деплой Traefik ## Деплой Traefik
Предполагается что у читателя установлены и настроены `docker` и `docker-compose`, их установка выходит за рамки этой статьи. Предполагается, что у читателя установлены и настроены `docker` и `docker-compose`. Установить можно [тут](../install.md)
Создадим в домашней папке пользователя папку `traefik`, в которой будем хранить всю конфигурацию, и перейдем в эту папку Создадим в домашней папке пользователя папку `traefik`, в которой будем хранить всю конфигурацию, и перейдем в эту папку
@ -49,7 +55,7 @@ cd ~/traefik
version: '3.9' version: '3.9'
services: services:
traefik: traefik:
image: traefik:v2.10 image: traefik:v2.10 # Лучше не использовать тег latest
container_name: traefik container_name: traefik
restart: unless-stopped restart: unless-stopped
security_opt: security_opt:
@ -58,9 +64,9 @@ services:
- 80:80 - 80:80
- 443:443 - 443:443
volumes: volumes:
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro # for localtime
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro # Docker Socket
- ./data/traefik.yml:/traefik.yml:ro - ./data/traefik.yml:/traefik.yml:ro # static config
``` ```
Во внешний мир будут смотреть порты 80 и 443 для HTTP и HTTPS соответственно. Также пробросим в контейнер сокет демона Docker для работы механизма автоматической конфигурации. Конфигурацию Traefik будем описывать в файле `traefik.yml` находящемся в папке `data` в текущей директории. Во внешний мир будут смотреть порты 80 и 443 для HTTP и HTTPS соответственно. Также пробросим в контейнер сокет демона Docker для работы механизма автоматической конфигурации. Конфигурацию Traefik будем описывать в файле `traefik.yml` находящемся в папке `data` в текущей директории.
@ -70,6 +76,7 @@ services:
Создадим и будем постепенно наполнять этот файл. Создадим и будем постепенно наполнять этот файл.
Для начала опишем точки входа в наш прокси (те самые порты, которые смотрят во внешний мир): Для начала опишем точки входа в наш прокси (те самые порты, которые смотрят во внешний мир):
```yaml ```yaml
entryPoints: entryPoints:
http: http:
@ -89,7 +96,7 @@ providers:
exposedByDefault: false exposedByDefault: false
``` ```
Параметром указываем что Traefik не должен брать все контейнеры подряд, далее будет объяснено каким образом мы будем сообщать какие контейнеры нас интересуют. Также здесь видно зачем мы пробрасывали сокет в контейнер — именно через него Traefik будет получать сведения о запускаемых контейнерах на этом хосте (можно подключиться и к демону на другом хосте). Параметром `exposedByDefault` указываем, что Traefik не должен брать все контейнеры подряд, далее будет объяснено каким образом мы будем сообщать какие контейнеры нас интересуют. Также здесь видно зачем мы пробрасывали сокет в контейнер — именно через него Traefik будет получать сведения о запускаемых контейнерах на этом хосте (можно подключиться и к демону на другом хосте).
Следующим шагом развернем весь HTTP трафик в HTTPS (почему это было сделано именно таким образом будет описано дальше): Следующим шагом развернем весь HTTP трафик в HTTPS (почему это было сделано именно таким образом будет описано дальше):
@ -117,10 +124,10 @@ Traefik может проксировать не только HTTP трафик,
Рассмотрим на примере описанного выше роутера: Рассмотрим на примере описанного выше роутера:
- `http-catchall` — имя роутера, может быть любым, но обязано быть уникальным в рамках блока `http` всей конфигурации Traefik; - `http-catchall` — имя роутера, может быть любым, но обязано быть уникальным в рамках блока `http` всей конфигурации **Traefik**
- `rule:` — правило, описывает какой трафик попадает в этот роутер, в данном случае описывается `HostRegexp`, то есть поле `Host` запроса должно попадать под регулярное выражение `.+` (то есть любое), здесь мы видим специфику регулярных выражений в Traefik — оно должно быть заключено в фигурные скобки и иметь наименование (`host` в данном случае), то есть синтаксис имеем вид `{name:reg_exp}`; - `rule` — правило, описывает какой трафик попадает в этот роутер, в данном случае описывается `HostRegexp`, то есть поле `Host` запроса должно попадать под регулярное выражение `.+` (то есть любое). Синтаксис имеет вид `{name:reg_exp}`
- `entrypoints` — массив описанных ранее точек входа, которые будут использоваться этим роутером, в нашем случае используем только `http`; - `entrypoints` — массив описанных ранее точек входа, которые будут использоваться этим роутером, в нашем случае используем только `http`
- `middlewares` — массив промежуточных обработчиков, куда попадает трафик перед передачей к сервису (сервисы будут рассмотрены позднее). - `middlewares` — массив промежуточных обработчиков, куда попадает трафик перед передачей к сервису (сервисы будут рассмотрены позднее)
Подробнее о различных видах правил можно прочитать в [документации](https://docs.traefik.io/routing/routers/#rule). Подробнее о различных видах правил можно прочитать в [документации](https://docs.traefik.io/routing/routers/#rule).
@ -133,6 +140,8 @@ Traefik может проксировать не только HTTP трафик,
Подробнее о различных обработчиках можно прочитать в [документации](https://docs.traefik.io/middlewares/overview/) (дальше в статье будет описан ещё один обработчик — BasicAuth). Подробнее о различных обработчиках можно прочитать в [документации](https://docs.traefik.io/middlewares/overview/) (дальше в статье будет описан ещё один обработчик — BasicAuth).
## Файл конфиурации
??? note "Полностью файл traefik.yml" ??? note "Полностью файл traefik.yml"
```yaml ```yaml
entryPoints: entryPoints:
@ -159,15 +168,17 @@ Traefik может проксировать не только HTTP трафик,
permanent: false permanent: false
``` ```
Таким образом мы получим первую рабочую конфигурацию. Выполняем Таким образом мы получим первую рабочую конфигурацию. Выполняем:
```bash ```bash
sudo docker-compose up -d sudo docker-compose up -d
``` ```
И прокси должен подняться, можно почитать логи (`sudo docker-compose logs -f`) и убедиться, что всё работает. И прокси должен подняться, можно почитать логи (`sudo docker-compose logs -f`) и убедиться, что всё работает.
## Lets Encrypt ## Lets Encrypt
Поскольку мы хотим использовать HTTPS нам нужно где-то взять SSL сертификаты для сервисов, есть возможность использовать свои сертификаты, но мы настроем автоматическое получение бесплатных сертификатов от Lets Encrypt. Поскольку мы хотим использовать HTTPS, нам нужно где-то взять SSL сертификаты для сервисов. У нас есть возможность использовать свои сертификаты, но мы настроем автоматическое получение бесплатных сертификатов от **Lets Encrypt**.
Добавим в конфигурацию (`traefik.yml`) новый блок: Добавим в конфигурацию (`traefik.yml`) новый блок:
@ -181,17 +192,17 @@ certificatesResolvers:
httpChallenge: httpChallenge:
entryPoint: http entryPoint: http
``` ```
Здесь: Здесь:
- `letsEncrypt` — это просто имя резолвера;
- `acme` — тип резолвера (других типов в общем-то и нет); - `letsEncrypt` — это просто имя резолвера
- `storage` — файл, в котором хранятся сведения о полученных сертификатах; - `acme` — тип резолвера (других типов в общем-то и нет)
- `httpChallenge` — тип acme-челенжа, дополнительно указываем параметр — точку входа; - `storage` — файл, в котором хранятся сведения о полученных сертификатах
- `httpChallenge` — тип acme-челенжа, дополнительно указываем параметр — точку входа
- `caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"` — позволяет использовать не основной сервер Lets Encrypt в тестовых целях, так как основной имеет строгие лимиты API (можно закомментировать, когда наладите получение сертификатов). - `caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"` — позволяет использовать не основной сервер Lets Encrypt в тестовых целях, так как основной имеет строгие лимиты API (можно закомментировать, когда наладите получение сертификатов).
Также дополним пункт `volumes` в файле `docker-compose.yml`, чтобы сохранять сертификаты при перезапуске контейнера (предварительно создав файл `data/acme.json`): Также дополним пункт `volumes` в файле `docker-compose.yml`, чтобы сохранять сертификаты при перезапуске контейнера (предварительно создав файл `data/acme.json`):
```yaml ```yaml hl_lines="5"
volumes: volumes:
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
@ -215,20 +226,21 @@ HTTPS настроен, пришло время поднять первый се
- "traefik.http.services.traefik-traefik.loadbalancer.server.port=888" - "traefik.http.services.traefik-traefik.loadbalancer.server.port=888"
``` ```
Разберем построчно: Разберем построчно:
- `traefik.enable=true` — указываем что Traefik должен обеспечить - `traefik.enable=true` — указываем что Traefik должен обеспечить
доступ к этому контейнеру, необходимо для всего остального; доступ к этому контейнеру, необходимо для всего остального
- `traefik.http.routers.traefik.entrypoints=https` — создаем новый - `traefik.http.routers.traefik.entrypoints=https` — создаем новый
роутер с точной входа `https`; роутер с точной входа `https`
- `traefik.http.routers.traefik.rule=Host(`traefik.example.com`)` — - `traefik.http.routers.traefik.rule=Host(`traefik.example.com`)` —
роутер будет жить по адресу traefik.example.com; роутер будет жить по адресу traefik.example.com
- `traefik.http.routers.traefik.tls=true` — указываем что используется - `traefik.http.routers.traefik.tls=true` — указываем что используется
TLS; TLS
- `traefik.http.routers.traefik.tls.certresolver=letsEncrypt` - `traefik.http.routers.traefik.tls.certresolver=letsEncrypt`
указываем через какой резолвер получать сертификат; указываем через какой резолвер получать сертификат
- `traefik.http.routers.traefik.service=api@internal` — указываем, что - `traefik.http.routers.traefik.service=api@internal` — указываем, что
сервер за этим роутером — `api@internal`, это специальный сервис, сервер за этим роутером — `api@internal`, это специальный сервис,
созданный по умолчанию, это как раз и есть дашбоард который мы хотели созданный по умолчанию, это как раз и есть дашбоард который мы хотели
увидеть; увидеть
- `traefik.http.services.traefik-traefik.loadbalancer.server.port=888` - `traefik.http.services.traefik-traefik.loadbalancer.server.port=888`
— издержки интерфейса, без этого не заработает, но можно написать — издержки интерфейса, без этого не заработает, но можно написать
абсолютно любую цифру. абсолютно любую цифру.
@ -248,25 +260,26 @@ sudo docker-compose down && sudo docker-compose up -d
Когда всё поднимется можно перейти на `traefik.example.com` (тут на самом деле должен быть ваш домен, который направлен на хост с Traefik) и увидеть дашборд. Когда всё поднимется можно перейти на `traefik.example.com` (тут на самом деле должен быть ваш домен, который направлен на хост с Traefik) и увидеть дашборд.
Дашбоард это хорошо, но мы не хотим, чтобы все пользователи интернета имели к нему доступ, закроем его от внешнего мира с помощью BasicAuth, для это в Traefik есть специальный middleware. Дашбоард это хорошо, но мы не хотим, чтобы все пользователи интернета имели к нему доступ, закроем его от внешнего мира с помощью BasicAuth, для это в Traefik есть специальный *middleware*.
Для начала сгенерируем для нас строку с логином и паролем (admin/password)^ Для начала сгенерируем для нас строку с логином и паролем (admin/password):
```bash ```bash
$ htpasswd -nb admin password $ htpasswd -nb admin password
admin:$apr1$vDSqkf.v$GTJOtsd9CBiAFFnHTI2Ds1 admin:$apr1$vDSqkf.v$GTJOtsd9CBiAFFnHTI2Ds1
``` ```
Теперь добавим в наш `docker-compose.yml` новые строчки: Теперь добавим в наш `docker-compose.yml` новые строчки:
```yaml ```yaml
- "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$$apr1$$vDSqkf.v$$GTJOtsd9CBiAFFnHTI2Ds1" - "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$$apr1$$vDSqkf.v$$GTJOtsd9CBiAFFnHTI2Ds1"
- "traefik.http.routers.traefik.middlewares=traefik-auth" - "traefik.http.routers.traefik.middlewares=traefik-auth"
``` ```
Заметим, что символы `$` из полученной строки мы должны заменить на `$$`. Заметим, что символы `$` из полученной строки мы должны заменить на `$$`.
- `traefik.http.middlewares.traefik-auth.basicauth.users=...` — создаем middleware типа `basicauth` с параметром `users`;
- `traefik.http.routers.traefik.middlewares=traefik-auth` — указываем что роутер `traefik` использует только что-то созданный middleware. - `traefik.http.middlewares.traefik-auth.basicauth.users=...` — создаем middleware типа `basicauth` с параметром `users`
- `traefik.http.routers.traefik.middlewares=traefik-auth` — указываем что роутер `traefik` использует только что-то созданный middleware
??? note "Весь docker-compose.yml" ??? note "Весь docker-compose.yml"
```yaml ```yaml
@ -294,6 +307,8 @@ admin:$apr1$vDSqkf.v$GTJOtsd9CBiAFFnHTI2Ds1
- "traefik.http.routers.traefik.tls.certresolver=letsEncrypt" - "traefik.http.routers.traefik.tls.certresolver=letsEncrypt"
- "traefik.http.routers.traefik.service=api@internal" - "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.services.traefik-traefik.loadbalancer.server.port=888" - "traefik.http.services.traefik-traefik.loadbalancer.server.port=888"
- "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$$apr1$$vDSqkf.v$$GTJOtsd9CBiAFFnHTI2Ds1"
- "traefik.http.routers.traefik.middlewares=traefik-auth"
``` ```
Теперь при попытке доступа к дашборду у нас спросят логин и пароль. Теперь при попытке доступа к дашборду у нас спросят логин и пароль.
@ -318,7 +333,7 @@ admin:$apr1$vDSqkf.v$GTJOtsd9CBiAFFnHTI2Ds1
Добавим в `docker-compose.yml` ещё один `volume`: Добавим в `docker-compose.yml` ещё один `volume`:
```yaml ```yaml hl_lines="5"
volumes: volumes:
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
@ -333,7 +348,6 @@ admin:$apr1$vDSqkf.v$GTJOtsd9CBiAFFnHTI2Ds1
```yaml ```yaml
providers: providers:
...
file: file:
directory: /custom directory: /custom
watch: true watch: true
@ -370,7 +384,7 @@ http:
loadBalancer: loadBalancer:
servers: servers:
- хосты для балансировки нагрузки - хосты для балансировки нагрузки
- ... #- ...
``` ```
Дополнительно мы указываем параметр `passHostHeader: true` чтобы тот хост думал, что он на самом деле смотрит в сеть и прокси нет. Дополнительно мы указываем параметр `passHostHeader: true` чтобы тот хост думал, что он на самом деле смотрит в сеть и прокси нет.

@ -9,8 +9,6 @@
## Modular Rail Network ## Modular Rail Network
[![](https://i.imgur.com/7UHaFA1.jpeg)](https://www.factorio.school/view/-K_VpUtsGAlQeBuZ1oez) [![](https://i.imgur.com/7UHaFA1.jpeg)](https://www.factorio.school/view/-K_VpUtsGAlQeBuZ1oez)
[![name](pic)](link)
## Tileable Science Production 0.17-1.0 - Early to Mid Game ## Tileable Science Production 0.17-1.0 - Early to Mid Game
[![](http://i.imgur.com/42RoMSil.jpeg)](https://www.factorio.school/view/-KnQ865j-qQ21WoUPbd3) [![](http://i.imgur.com/42RoMSil.jpeg)](https://www.factorio.school/view/-KnQ865j-qQ21WoUPbd3)

@ -0,0 +1,11 @@
# Установка Xpenology DSM 7.2
Ставить будем через ARC
https://github.com/AuxXxilium/arc
https://www.reddit.com/r/Xpenology/comments/xho4fg/upgrade_from_6x_to_7x_xpenology/
https://xpenology.com/forum/topic/62221-tutorial-installmigrate-to-dsm-7x-with-tinycore-redpill-tcrp-loader/
https://bafista.ru/kak-obnovit-xpenology-s-dsm-7-1-do-7-2/
Тут же применимо обновление версии Xpenology с 6 до 7.2
Обновление не сильно отличает от новой устанвоки

@ -0,0 +1,46 @@
# SSO вход на Synology через Authentik
Чуть от себя, чуть с [официальной документации](https://kb.synology.com/en-af/DSM/help/DSM/AdminCenter/file_directory_service_sso?version=7).
!!! warning
Применимо к DSM 7.1 и выше.
# Подготовка
Будут использоваться следующие заполнители:
- `synology.company`— это полное доменное имя сервера Synology DSM.
- `authentik.company`— это полное доменное имя установки authentik.
## Настройки на Authentik
В интерфейсе администратора Authentik, в разделе *«Поставщики»* создайте поставщика OAuth2/OpenID со следующими настройками:
- Название: Synology
- URI перенаправления: `https://synology.company/#/signin` (обратите внимание на отсутствие косой черты и включение порта веб-интерфейса)
- Ключ подписи: выберите любой доступный ключ.
- Режим темы: `Based on the Users's Email`
- Обратите внимание на `Client ID` и `Client secret`.
Далее. Создайте приложение, использующее этого провайдера. При необходимости примените ограничения доступа к приложению.
## Настройка Synology DSM
Чтобы настроить Synology DSM для использования Authentik в качестве поставщика OpenID Connect 1.0:
1. В панели управления DSM перейдите в раздел **Домен/LDAP** -> **Клиент SSO**.
2. Установите флажок **Выберите SSO по умолчанию на странице входа в систему**.
3. Установите флажок **Включить службу OpenID Connect SSO**.
4. Нажмите на кнопку **Настройки OpenID Connect SSO**.
5. Настройте следующие значения:
- Профиль: OIDC
- Тип учетной записи: Домен/LDAP/локальный
- Имя: Authentik
- Well-known url: скопируйте его из «URL-адреса конфигурации OpenID» в провайдере аутентификации (URL-адрес заканчивается на «/.well-known/openid-configuration»).
- Идентификатор приложения: «Идентификатор клиента» от поставщика аутентификации.
- Секрет приложения: «Секрет клиента» от провайдера аутентификации.
- Переадресация URI: `https://synology.company/#/signin` (он должен точно соответствовать «URI перенаправления» в authentik)
- Область действия авторизации: `openid profile email`
- Заявка на имя пользователя: `preferred_username`
- Сохраните настройки.

@ -0,0 +1,29 @@
# Обновление пакета корневых сертификатов CA
Я столкнулся с проблемой, что мой Synology NAS не может получить данные из локального реестра Docker:
```
docker: Error response from daemon: Get "https://redacted-local-hostname.net/v2/": x509: certificate has expired or is not yet valid
```
Оказывается, мой Synology не получает последние корневые сертификаты CA. Я обнаружил это, пытаясь скачать докер образ. Каждый раз выходила ошибка. Тогда я решил постучаться куда нить через **curl**.
```bash
curl -I https://st1t.ru
curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.haxx.se/docs/sslcerts.html
...
```
Исправить оказалось довольно легко. Нужно лишь скачать актуальные корневые сертифиаты. Приведенные ниже команды загружают сертификаты с сайта Curl.se в формате PEM. Перемещаем их туда, где Synology хранит связку CA-сертификатов, перезаписывая его. Мы сделаем резервную копию исходного пакета сертификатов CA с *.backup* расширением на тот случай, если по какой-либо причине вы захотите вернуться.
```bash
cp /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt.backup
wget --no-check-certificate https://curl.se/ca/cacert.pem
mv cacert.pem /etc/ssl/certs/ca-certificates.crt
```
После этого та же команда **curl** начала работать успешно. Однако Docker по-прежнему выдавал ту же ошибку — то есть не получал обновленные корневые сертификаты. Чтобы заставить работать, нужно перезапустить демон Synology Docker:
```bash
synoservice --restart pkgctl-Docker
```

@ -0,0 +1,27 @@
# ТСД - Терминалы Сбора Данных
1. [Решение проблем с ТСД Motorola](troubleshooting.md)
2. [Компонентный ремонт](repair.md)
## Motorola MC 9090
1. [Переустановка ОС CE 5.0](reinstall-os/ce5.md)
2. [Переустановка ОС WM 6.1](reinstall-os/m61.md)
## Motorola MC 9200
1. [Переустановка ОС](reinstall-os/ce7.md)
2. [Настройка ТСД](config-ce.md)
3. [Настройка Wi-Fi](config-wifi.md)
4. [Настройка TelnetCE](config-telnetce.md)
5. [Установка TelnetCE](install-telnetce.md)
## Софт
!!! note
7.0 версии не требуют лицензии
1. [Zebra MC9000](http://www.wavelink.com/Zebra-MC9000-Emulators-downloads/)
2. [Zebra MC9100](http://www.wavelink.com/Zebra-MC9100-Emulators-downloads/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

@ -1,27 +0,0 @@
# ТСД - Терминалы Сбора Данных
1. [Решение проблем с ТСД Motorola](../../other/tsd/troubleshooting.md)
2. [Компонентный ремонт](../../other/tsd/repair.md)
## Motorola MC 9090
1. [Переустановка ОС CE 5.0](../../other/tsd/reinstall-os/ce5.md)
2. [Переустановка ОС WM 6.1](../../other/tsd/reinstall-os/m61.md)
## Motorola MC 9200
1. [Переустановка ОС](../../other/tsd/reinstall-os/ce7.md)
2. [Настройка ТСД](../../other/tsd/config-ce.md)
3. [Настройка Wi-Fi](../../other/tsd/config-wifi.md)
4. [Настройка TelnetCE](../../other/tsd/config-telnetce.md)
5. [Установка TelnetCE](../../other/tsd/install-telnetce.md)
## Софт
!!! note
7.0 версии не требуют лицензии
1. [Zebra MC9000](http://www.wavelink.com/Zebra-MC9000-Emulators-downloads/)
2. [Zebra MC9100](http://www.wavelink.com/Zebra-MC9100-Emulators-downloads/)

@ -9,8 +9,8 @@
## Карточка ## Карточка
![](../../images/hass/card-budilnik-1.png) ![](../../../images/hass/card-budilnik-1.png)
![](../../images/hass/card-budilnik-2.png) ![](../../../images/hass/card-budilnik-2.png)
??? example "Код карточки" ??? example "Код карточки"

@ -2,7 +2,7 @@
Чтоб установить актуальную версию, нам нужно зайти в магазин дополнений и добавить туда новую ссылку: `https://github.com/zigbee2mqtt/hassio-zigbee2mqtt` Чтоб установить актуальную версию, нам нужно зайти в магазин дополнений и добавить туда новую ссылку: `https://github.com/zigbee2mqtt/hassio-zigbee2mqtt`
![](../images/hass/card-budilnik-1.png) ![](../../images/hass/zigbee2mqtt-1.png)
После добавления этой ссылки в репозитории, необходимо перезапустить Home Assistant. После добавления этой ссылки в репозитории, необходимо перезапустить Home Assistant.
@ -35,7 +35,7 @@ USB Stick Sonoff ZB Dongle-E это новый координатор Zigbee
6. Выбираем **Все оборудование**. 6. Выбираем **Все оборудование**.
7. Находим через поиск наш стик - можно ввести в поиск sonoff, покажется адрес 7. Находим через поиск наш стик - можно ввести в поиск sonoff, покажется адрес
![](../images/hass/zigbee2mqtt-2.png) ![](../../images/hass/zigbee2mqtt-2.png)
Копируем строчу начиная от **DEVLINKS:**. Строчка должна выглядеть примерно так: Копируем строчу начиная от **DEVLINKS:**. Строчка должна выглядеть примерно так:

@ -12,4 +12,23 @@ https://wirenboard.com/wiki/Wiren_Board_7.4
``` ```
timedatectl set-timezone Asia/Yekaterinburg timedatectl set-timezone Asia/Yekaterinburg
``` ```
## Новое устройство для Modbus
Первым делом, увеличиваем скорость работы. Со стандартных 9600 на 115200, что соответствует "быстрому modbus"
Подключаемся к контроллеру по ssh и останавливаем службу `wb-mqtt-serial`. Затем выставляем нужную скорость и запускаем службу обратно.
```bash
systemctl stop wb-mqtt-serial
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-2 -a212 -t0x06 -r110 1152
systemctl start wb-mqtt-serial
```
Разберем 2 строчку подробнее:
- `-b9600` - текущая скорость работы
- `-a212` - адрес устройство в modbus
- `/dev/ttyRS485-2` - через какой интерфейс подключаемся
- `-r110 1152` - записываем в регистр **110** значение скорости *115200*

@ -31,12 +31,6 @@ GO
## Удаление Log Shipping без второго сервера ## Удаление Log Shipping без второго сервера
![Database Properties](http%3A%2F%2Flh3.googleusercontent.com%2F-8u7Gar1yO54%2FVbBhpg9uqII%2FAAAAAAAAAxk%2FscsPJqqKNRI%2Fimage_thumb%5B5%5D.png)
![Error Deleting Log Shipping Configuration](http%3A%2F%2Flh3.googleusercontent.com%2F-0bXadZHuNDo%2FVbBhqc0arwI%2FAAAAAAAAAxw%2FiTkT7RLZsJQ%2Fimage_thumb%5B7%5D.png)
![image](http%3A%2F%2Flh3.googleusercontent.com%2F-2JVo2aXEBAU%2FVbBhq7Ocz-I%2FAAAAAAAAAyA%2FMB1kTPPthvM%2Fimage_thumb%5B9%5D.png)
Удаление через скрипт Удаление через скрипт
```sql ```sql

@ -22,9 +22,13 @@ nav:
- Сервисы: - Сервисы:
- Drone CI: docker/drone.md - Drone CI: docker/drone.md
- Gitea: docker/gitea.md - Gitea: docker/gitea.md
- Grafana+Prometheus: docker/grafana-prometheus.md #- Grafana+Prometheus: docker/grafana-prometheus.md
- Grafana:
- index.md
- Prometheus: docker/grafana/prometheus.md
- HandBrake: docker/handbrake.md - HandBrake: docker/handbrake.md
- Homarr: docker/homarr.md - Homarr: docker/homarr.md
- Homepage: docker/homepage.md
- Linx Server: docker/linx-server.md - Linx Server: docker/linx-server.md
- MotionEye: docker/motioneye.md - MotionEye: docker/motioneye.md
- Nextcloud: - Nextcloud:
@ -34,6 +38,7 @@ 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
- Photoprism: docker/photoprism.md
- Pictshare: docker/pictshare.md - Pictshare: docker/pictshare.md
- Plex: - Plex:
- docker/plex/index.md - docker/plex/index.md
@ -43,8 +48,9 @@ nav:
- Plex Meta Manager: docker/plex/plex-mm.md - Plex Meta Manager: docker/plex/plex-mm.md
- Plex Trakt Sync: docker/plex/plextraktsync.md - Plex Trakt Sync: docker/plex/plextraktsync.md
- Prowlarr: docker/plex/prowlarr.md - Prowlarr: docker/plex/prowlarr.md
#- Radarr: - Radarr: docker/plex/radarr.md
#- Sonarr: - Sonarr: docker/plex/sonarr.md
- Решение проблем: docker/plex/troubleshooting.md
- Redis: docker/redis.md - Redis: docker/redis.md
- Samba: docker/samba.md - Samba: docker/samba.md
- Syncthing: docker/syncthing.md - Syncthing: docker/syncthing.md
@ -116,6 +122,33 @@ nav:
- Установка DialUX: software/win/desk/dialux.md - Установка DialUX: software/win/desk/dialux.md
- VS Code: - VS Code:
- Запрос учетных данных Git: software/vscode/asking-git-credentials.md - Запрос учетных данных Git: software/vscode/asking-git-credentials.md
- Hardware:
- IP Телефоны:
- Grandstream:
- Provisioning через TFTP: hardware/phone/grandstream/provisioning.md
- Пример конфигурации: hardware/phone/grandstream/example-config.md
- Ipecs-MG:
- Общие настройки: hardware/phone/ipecs-mg/general.md
- Книги: hardware/phone/ipecs-mg/books.md
- Голосовые приветствия: hardware/phone/ipecs-mg/voice.md
- Принтеры:
- Kyocera: hardware/printers/kyocera.md
- ТСД:
- hardware/tsd/index.md
- Переустановка ОС:
- CE 5.0: hardware/tsd/reinstall-os/ce5.md
- CE 7.0: hardware/tsd/reinstall-os/ce7.md
- WM 6.1: hardware/tsd/reinstall-os/m61.md
- Настройка ТСД: hardware/tsd/config-ce.md
- Настройка Wi-Fi: hardware/tsd/config-wifi.md
- Настройка TelnetCE: hardware/tsd/config-telnetce.md
- Установка TelnetCE: hardware/tsd/install-telnetce.md
- Траблшутинг: hardware/tsd/troubleshooting.md
- Synology:
- HPE Microserver Gen10: hardware/synology/install-hpe-ms-gen10.md
- SSO Login: hardware/synology/sso-client.md
- Update CA root Cert: hardware/synology/update-ca-root-cert.md
- HPE iLo: hardware/hpe-ilo.md
- Proxmox: - Proxmox:
- Proxmox VE: - Proxmox VE:
- proxmox/index.md - proxmox/index.md
@ -139,24 +172,7 @@ nav:
- Другое: - Другое:
- Закрыть фишинговый сайт: 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
- Hardware:
- HPE iLo: other/hardware/hpe-ilo.md
- Принтеры:
- Kyocera: other/hardware/printers/kyocera.md
- ТСД:
- other/tsd/index.md
- Переустановка ОС:
- CE 5.0: other/tsd/reinstall-os/ce5.md
- CE 7.0: other/tsd/reinstall-os/ce7.md
- WM 6.1: other/tsd/reinstall-os/m61.md
- Настройка ТСД: other/tsd/config-ce.md
- Настройка Wi-Fi: other/tsd/config-wifi.md
- Настройка TelnetCE: other/tsd/config-telnetce.md
- Установка TelnetCE: other/tsd/install-telnetce.md
- Траблшутинг: other/tsd/troubleshooting.md
- Synology:
- HPE Microserver Gen10: other/synology/install-hpe-ms-gen10.md
- Office: - Office:
- Excel: - Excel:
- other/office/excel/index.md - other/office/excel/index.md
@ -169,14 +185,6 @@ nav:
- VBA Удаление пароля: other/office/excel/vba-remove-pass.md - VBA Удаление пароля: other/office/excel/vba-remove-pass.md
- Outlook: - Outlook:
- Ошибки: other/office/outlook/error.md - Ошибки: other/office/outlook/error.md
- IP Телефоны:
- Grandstream:
- Provisioning через TFTP: other/phone/grandstream/provisioning.md
- Пример конфигурации: other/phone/grandstream/example-config.md
- Ipecs-MG:
- Общие настройки: other/phone/ipecs-mg/general.md
- Книги: other/phone/ipecs-mg/books.md
- Голосовые приветствия: other/phone/ipecs-mg/voice.md
- Сеть: - Сеть:
- Утилиты: - Утилиты:
- Wtraf: network/tools/wtraf.md - Wtraf: network/tools/wtraf.md

Loading…
Cancel
Save