states/2024.04 #15

Merged
thest1tch merged 21 commits from states/2024.04 into main 9 months ago

@ -4,29 +4,28 @@ type: docker
name: build-home-docs
steps:
#- name: build main
# image: squidfunk/mkdocs-material:9.4.6
# pull: if-not-exists
# volumes:
# - name: site
# path: /site
# commands:
# - pip install -U -r ./requirements.txt
# - mkdocs build
# - cp -r site/ /site
# - chown 1000:1000 /site
# - chmod -R 777 /site
# when:
# event:
# - push
# branch:
# - main
- name: build main
image: git.st1t.ru/thest1tch/mkdocs-material:latest
pull: if-not-exists
volumes:
- name: site-st1tru
path: /site
commands:
- mkdocs build
- cp -r site/ /site
- chown 1000:1000 /site
- chmod -R 777 /site
when:
event:
- push
branch:
- main
- name: build states
image: git.st1t.ru/thest1tch/mkdocs-material:latest
pull: if-not-exists
volumes:
- name: site-st1tru
- name: site-dev
path: /site
commands:
- mkdocs build
@ -40,9 +39,9 @@ steps:
- states/*
volumes:
- name: site
host:
path: /opt/appdata/mkdocswiki
- name: site-st1tru
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
Для запуска будет использовать Docker Compose. Я предпологаю, что уже есть настроенное окружение с Docker Compose, если нет, то сделать можно в [инструкции](docs/docker/install.md).
Для запуска будет использовать Docker Compose. Я предпологаю, что уже есть настроенное окружение с Docker Compose, если нет, то сделать можно в [инструкции](../install.md).
Grafana — один из самых популярных инструментов мониторинга. В сочетании с Prometheus, Grafana предлагает мощный инструмент визуализации данных временных рядов.

@ -1,12 +1,12 @@
# Homarr - дашборд для быстрого доступа к сервисам.
[![](https://img.shields.io/github/stars/ajnart/homarr?label=%E2%AD%90%20Stars)](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/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&style=flat-square)](https://github.com/ajnart/homarr/releases/latest)
[![](https://img.shields.io/badge/Demo-purple)](https://demo.homarr.dev/ru)
Современная панель управления домашней лабой. Позваоляет видеть все, что поднято.
Современная панель управления домашней лабой. Позволяет видеть все, что поднято.
![](../images/docker/homarr.png)
## Запуск через 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 - свое облако для файлов
Запуск через docker-compose. Для начала создадим файл `.env` со следующим содержанием:
```env title=".env"
PUID=
PGID=
TZ=
DOCKER_APP=
SECRETSDIR=
NEXTCLOUD_DOMAIN_NAME=
REDIS_PASSWORD=
```
@ -21,15 +18,14 @@ version: "3.7"
services:
# Nextcloud Docker Application
nextcloud:
image: nextcloud:25.0.4
image: nextcloud:28
container_name: nextcloud
restart: always
volumes:
- $DOCKER_APP/nextcloud:/var/www/html
- $DOCKER_APP/nextcloud/apps:/var/www/html/custom_apps
- $DOCKER_APP/nextcloud/config:/var/www/html/config
- /mnt/NAS/Nextcloud:/var/www/html/data
- /mnt:/mnt
- ./nextcloud:/var/www/html
- ./nextcloud/apps:/var/www/html/custom_apps
- ./nextcloud/config:/var/www/html/config
- ./nextcloud/data:/var/www/html/data
environment:
- POSTGRES_HOST=192.168.1.12
- POSTGRES_DB_FILE=/run/secrets/nextcloud_postgres_db
@ -37,8 +33,8 @@ services:
- POSTGRES_PASSWORD_FILE=/run/secrets/nextcloud_postgres_password
- NEXTCLOUD_ADMIN_PASSWORD_FILE=/run/secrets/nextcloud_admin_password
- NEXTCLOUD_ADMIN_USER_FILE=/run/secrets/nextcloud_admin_user
- REDIS_HOST=172.18.3.249
- REDIS_HOST_PASSWORD=$REDIS_PASSWORD
#- REDIS_HOST=
#- REDIS_HOST_PASSWORD=
- PUID=$PUID
- PGID=$PGID
- TZ=$TZ

@ -0,0 +1,134 @@
# Photoprism
[![](https://img.shields.io/github/stars/Prowlarr/Prowlarr?label=%E2%AD%90%20Stars&style=flat-square)](https://github.com/photoprism/photoprism)
[![](https://img.shields.io/github/v/release/Prowlarr/Prowlarr?label=%F0%9F%9A%80%20Release&style=flat-square)](https://github.com/photoprism/photoprism/releases/latest)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/prowlarr.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/photoprism/photoprism)
PhotoPrism® — это приложение для фотографий на базе искусственного интеллекта для [децентрализованной сети](https://en.wikipedia.org/wiki/Decentralized_web). Он использует новейшие технологии для автоматического пометки и поиска изображений, не мешая вам. Вы можете запустить его дома, на частном сервере или в облаке.
![](../images/docker/photoprism.png)
Чтобы получить первое впечатление, можно поиграться в [демо-версию](https://try.photoprism.app/).
## Установка
Устанавливать будем через Docker. Как обычно.
!!! tip
Настройка докера описывается в статье: [Установка Docker](install.md)
Создаем файл `docker-compose.yml`, используя команду:
```bash
nano docker-compose.yml
```
Заполняем новый файл:
```yaml
version: "3.7"
services:
photoprism:
container_name: photoprism
image: photoprism/photoprism:latest
restart: unless-stopped
stop_grace_period: 10s
depends_on:
- mariadb
security_opt:
- seccomp:unconfined
- apparmor:unconfined
ports:
- "2342:2342"
environment:
PHOTOPRISM_ADMIN_USER: $PHOTOPRISM_ADMIN_USER # admin login username
PHOTOPRISM_ADMIN_PASSWORD: $PHOTOPRISM_ADMIN_PASSWORD # initial admin password (8-72 characters)
PHOTOPRISM_AUTH_MODE: "password" # authentication mode (public, password)
PHOTOPRISM_SITE_URL: $PHOTOPRISM_SITE_URL # server URL in the format "http(s)://domain.name(:port)/(path)"
PHOTOPRISM_DISABLE_TLS: "false" # disables HTTPS/TLS even if the site URL starts with https:// and a certificate is available
PHOTOPRISM_DEFAULT_TLS: "true" # defaults to a self-signed HTTPS/TLS certificate if no other certificate is available
PHOTOPRISM_ORIGINALS_LIMIT: 5000 # file size limit for originals in MB (increase for high-res video)
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip)
PHOTOPRISM_LOG_LEVEL: "info" # log level: trace, debug, info, warning, error, fatal, or panic
PHOTOPRISM_READONLY: "false" # do not modify originals directory (reduced functionality)
PHOTOPRISM_EXPERIMENTAL: "false" # enables experimental features
PHOTOPRISM_DISABLE_CHOWN: "false" # disables updating storage permissions via chmod and chown on startup
PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server
PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API
PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow
PHOTOPRISM_DISABLE_FACES: "false" # disables face detection and recognition (requires TensorFlow)
PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification (requires TensorFlow)
PHOTOPRISM_DISABLE_VECTORS: "false" # disables vector graphics support
PHOTOPRISM_DISABLE_RAW: "false" # disables indexing and conversion of RAW images
PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW images (reduces performance)
PHOTOPRISM_JPEG_QUALITY: 85 # a higher value increases the quality and file size of JPEG images and thumbnails (25-100)
PHOTOPRISM_DETECT_NSFW: "false" # automatically flags photos as private that MAY be offensive (requires TensorFlow)
PHOTOPRISM_UPLOAD_NSFW: "true" # allows uploads that MAY be offensive (no effect without TensorFlow)
# PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that doesn't require a server
PHOTOPRISM_DATABASE_DRIVER: "mysql" # use MariaDB 10.5+ or MySQL 8+ instead of SQLite for improved performance
PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" # MariaDB or MySQL database server (hostname:port)
PHOTOPRISM_DATABASE_NAME: "photoprism" # MariaDB or MySQL database schema name
PHOTOPRISM_DATABASE_USER: "photoprism" # MariaDB or MySQL database user name
PHOTOPRISM_DATABASE_PASSWORD: $MARIADB_PASSWORD # MariaDB or MySQL database user password
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App"
PHOTOPRISM_SITE_DESCRIPTION: "" # meta site description
PHOTOPRISM_SITE_AUTHOR: "" # meta site author
## Video Transcoding (https://docs.photoprism.app/getting-started/advanced/transcoding/):
# PHOTOPRISM_FFMPEG_ENCODER: "software" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi)
# PHOTOPRISM_FFMPEG_SIZE: "1920" # video size limit in pixels (720-7680) (default: 3840)
# PHOTOPRISM_FFMPEG_BITRATE: "32" # video bitrate limit in Mbit/s (default: 50)
## Run/install on first startup (options: update https gpu tensorflow davfs clitools clean):
# PHOTOPRISM_INIT: "https gpu tensorflow"
## Run as a non-root user after initialization (supported: 0, 33, 50-99, 500-600, and 900-1200):
# PHOTOPRISM_UID: 1000
# PHOTOPRISM_GID: 1000
# PHOTOPRISM_UMASK: 0000
user: "1000:1000"
working_dir: "/photoprism" # do not change or remove
## Storage Folders: "~" is a shortcut for your home directory, "." for the current directory
volumes:
# "/host/folder:/photoprism/folder" # Example
- ./photoprism/originals:/photoprism/originals
- ./photoprism/storage:/photoprism/storage
- ./photoprism/import:/photoprism/import
# - "/example/family:/photoprism/originals/family" # *Additional* media folders can be mounted like this
## Database Server (recommended)
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
mariadb:
container_name: mariadb
image: mariadb:11
## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue:
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
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
## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder:
volumes:
- "./database:/var/lib/mysql" # DO NOT REMOVE
environment:
MARIADB_AUTO_UPGRADE: "1"
MARIADB_INITDB_SKIP_TZINFO: "1"
MARIADB_DATABASE: "photoprism"
MARIADB_USER: "photoprism"
MARIADB_PASSWORD: $MARIADB_PASSWORD
MARIADB_ROOT_PASSWORD: $MARIADB_ROOT_PASSWORD
```
Создаем файл, где будут описаны переменные:
```bash
cp .env
```
Нужно заполнить его:
```
PHOTOPRISM_ADMIN_USER=admin # Имя админа
PHOTOPRISM_ADMIN_PASSWORD=password # пароль админа
PHOTOPRISM_SITE_URL=http://site.name # URL сайта, для доступа
MARIADB_ROOT_PASSWORD=strong-password # Пароль root от БД mariadb
MARIADB_PASSWORD=strong-password1 # Пароль от юзера photoprism БД
```

@ -11,7 +11,7 @@
Запуск простой, через docker:
```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) в браузере и пользуемся.
@ -30,4 +30,5 @@ docker run -d -p 8080:80 --name=pictshare ghcr.io/hascheksolutions/pictshare
- Изменяйте и изменяйте размеры своих изображений и видео, просто отредактировав URL-адрес.
- Дубликаты не занимают места. Если один и тот же файл загружается дважды, вторая загрузка будет связана с первой.
- [Много возможностей для настройки](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.
Можно использовать 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
```
Можно использовать NGINX или Traefik. NGINX прост в настройке, но не гибок. Я рекомендую [Traefik](../traefik/index.md).

@ -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/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.
Обязательно нужно остановить контейнер [Traefik](../traefik.md) и поправить файл `docker-compose.yml`, добавив метки Traefik и контейнер OAuth, как описано ниже.
Обязательно нужно остановить контейнер [Traefik](index.md) и поправить файл `docker-compose.yml`, добавив метки Traefik и контейнер OAuth, как описано ниже.
### Этап 3.1. Создание middlewares - Traefik Auth

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

@ -9,8 +9,6 @@
## Modular Rail Network
[![](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
[![](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-2.png)
![](../../../images/hass/card-budilnik-1.png)
![](../../../images/hass/card-budilnik-2.png)
??? example "Код карточки"

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

@ -12,4 +12,23 @@ https://wirenboard.com/wiki/Wiren_Board_7.4
```
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 без второго сервера
![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

@ -22,9 +22,13 @@ nav:
- Сервисы:
- Drone CI: docker/drone.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
- Homarr: docker/homarr.md
- Homepage: docker/homepage.md
- Linx Server: docker/linx-server.md
- MotionEye: docker/motioneye.md
- Nextcloud:
@ -34,6 +38,7 @@ nav:
- Cron: docker/nextcloud/cron.md
- Проблемы с data: docker/nextcloud/problems-after-moving-data-folder.md
- OCC: docker/nextcloud/occ-files-scan.md
- Photoprism: docker/photoprism.md
- Pictshare: docker/pictshare.md
- Plex:
- docker/plex/index.md
@ -43,8 +48,9 @@ nav:
- Plex Meta Manager: docker/plex/plex-mm.md
- Plex Trakt Sync: docker/plex/plextraktsync.md
- Prowlarr: docker/plex/prowlarr.md
#- Radarr:
#- Sonarr:
- Radarr: docker/plex/radarr.md
- Sonarr: docker/plex/sonarr.md
- Решение проблем: docker/plex/troubleshooting.md
- Redis: docker/redis.md
- Samba: docker/samba.md
- Syncthing: docker/syncthing.md
@ -116,6 +122,33 @@ nav:
- Установка DialUX: software/win/desk/dialux.md
- VS Code:
- Запрос учетных данных 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 VE:
- proxmox/index.md
@ -139,24 +172,7 @@ nav:
- Другое:
- Закрыть фишинговый сайт: other/close-phishing-site.md
- SSL для сайта: other/ssl-for-site.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
- Self Hosted: other/self-hosted.md
- Office:
- Excel:
- other/office/excel/index.md
@ -169,14 +185,6 @@ nav:
- VBA Удаление пароля: other/office/excel/vba-remove-pass.md
- Outlook:
- Ошибки: 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

Loading…
Cancel
Save