<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>fonwa</title><subtitle>Этот блог я использую для личных заметок с публикацией на первоисточник со своими правками.</subtitle><author><name>fonwa</name></author><id>https://teletype.in/atom/fonwa</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/fonwa?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/fonwa?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-18T12:37:01.574Z</updated><entry><id>fonwa:http-nginx-lxc</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/http-nginx-lxc?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>Деплоим HTTP File Server в LXC (NGINX)</title><published>2025-11-15T22:16:16.809Z</published><updated>2025-11-15T22:16:16.809Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b9/96/b996c672-848e-430a-83c8-64b41cb258d3.png"></media:thumbnail><category term="nginx" label="nginx"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/04/4f/044f2107-1153-42a3-9115-ce41ef77e7b5.png&quot;&gt;Я собрал несколько скриптов под Tampermonkey и понадобился единый ресурс, откуда пользователи смогут получать обновления.</summary><content type="html">
  &lt;p id=&quot;CjWq&quot;&gt;Я собрал несколько скриптов под Tampermonkey и понадобился единый ресурс, откуда пользователи смогут получать обновления.&lt;/p&gt;
  &lt;blockquote id=&quot;obqv&quot;&gt;Для Tampermonkey источник обновления указывается прямо в скрипте, а само расширение уже опрашивает этот адрес.&lt;/blockquote&gt;
  &lt;p id=&quot;9jo2&quot;&gt;NGINX идеально подходит под такую задачу: лёгкий, быстрый, надёжный и разворачивается меньше чем за минуту.&lt;/p&gt;
  &lt;p id=&quot;X2cZ&quot;&gt;Ниже — простой и рабочий способ поднять HTTP-хост под раздачу файлов.&lt;/p&gt;
  &lt;p id=&quot;iS0J&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;ILAd&quot;&gt;В этой инструкции я покажу, как развернуть контейнер, настроить минимальный конфиг и получить рабочий HTTP-хост для файлов.&lt;/p&gt;
  &lt;p id=&quot;ti1p&quot;&gt;Для тех, кто уже трогал Proxmox - ничего сложного.&lt;/p&gt;
  &lt;p id=&quot;WWF9&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;fWN1&quot;&gt;&lt;strong&gt;1. Создаём LXC-контейнер&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;aoK8&quot;&gt;
    &lt;li id=&quot;D2vo&quot;&gt;Debian 12&lt;/li&gt;
    &lt;li id=&quot;Spzc&quot;&gt;Unprivileged&lt;/li&gt;
    &lt;li id=&quot;aQN6&quot;&gt;Network: Static IP&lt;/li&gt;
    &lt;li id=&quot;APRb&quot;&gt;Specs&lt;strong&gt;:&lt;/strong&gt; 1 CPU / 512 MB RAM / 8 GB Disk — более чем достаточно&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8j6w&quot;&gt;После запуска контейнера подключаемся.&lt;/p&gt;
  &lt;p id=&quot;zGXG&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;S7Dv&quot;&gt;2. &lt;strong&gt;Установка базовых пакетов&lt;/strong&gt;&lt;/h3&gt;
  &lt;pre data-lang=&quot;bash&quot; id=&quot;iOFW&quot;&gt;apt update &amp;amp;&amp;amp; apt upgrade -y
apt install curl nginx openssh-server -y
# Создаём каталог, в котором будем хранить скрипты
mkdir -p /var/www/updates
# Активируем NGINX
systemctl enable nginx
systemctl start nginx&lt;/pre&gt;
  &lt;p id=&quot;8UMe&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;jyuj&quot;&gt;3. Проверяем работу&lt;/h3&gt;
  &lt;pre id=&quot;Rtwg&quot; data-lang=&quot;bash&quot;&gt;curl http://localhost&lt;/pre&gt;
  &lt;blockquote id=&quot;K0ka&quot;&gt;Если видишь стандартную страницу — всё ок.&lt;/blockquote&gt;
  &lt;p id=&quot;FL8L&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;0b4d&quot;&gt;4. &lt;strong&gt;Настраиваем NGINX &lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;Hxpo&quot;&gt;Открываем конфиг&lt;/p&gt;
  &lt;pre id=&quot;Qwfc&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nginx/sites-enabled/default&lt;/pre&gt;
  &lt;p id=&quot;X7m5&quot;&gt;Меняем несколько строк:&lt;/p&gt;
  &lt;pre id=&quot;sYVn&quot; data-lang=&quot;nginx&quot;&gt;root /var/www/; # оставляем так, если хотим видеть все каталоги в www
# или
# root /var/www/updates;
index index.html;
autoindex on;
autoindex_exact_size off; # опционально, размеры будут показываться в MB / KB / GB
autoindex_localtime on; # опционально, вывод будет в твоей локальной тайм-зоне&lt;/pre&gt;
  &lt;p id=&quot;J05O&quot;&gt;Сохраняем и выходим.&lt;/p&gt;
  &lt;p id=&quot;PZ9I&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;QDeC&quot;&gt;Перезапускаем nginx:&lt;/p&gt;
  &lt;pre id=&quot;vQUx&quot; data-lang=&quot;bash&quot;&gt;systemctl restart nginx&lt;/pre&gt;
  &lt;p id=&quot;FQut&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;CNLb&quot;&gt;5. &lt;strong&gt;Настраиваем доступ по SSH/SCP&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;k5Fm&quot;&gt;Открываем конфиг SSH:&lt;/p&gt;
  &lt;pre id=&quot;keWm&quot; data-lang=&quot;bash&quot;&gt;nano /etc/ssh/sshd_config&lt;/pre&gt;
  &lt;p id=&quot;BRLW&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;MyU7&quot;&gt;Нужно раскомментировать или добавить следующие строчки:&lt;/p&gt;
  &lt;pre data-lang=&quot;bash&quot; id=&quot;2bhJ&quot;&gt;PasswordAuthentication yes
PermitRootLogin yes&lt;/pre&gt;
  &lt;p id=&quot;L2aQ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;NAeD&quot;&gt;Сохраняем и перезапускаем ssh:&lt;/p&gt;
  &lt;pre data-lang=&quot;bash&quot; id=&quot;mQ5w&quot;&gt;systemctl restart ssh&lt;/pre&gt;
  &lt;p id=&quot;EZtX&quot;&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;VaBT&quot;&gt;Если сервис доступен только внутри локальной сети, это допустимо.&lt;br /&gt;В публичных сетях лучше переключить на SSH-ключи.&lt;/blockquote&gt;
  &lt;p id=&quot;WlCb&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;qMHx&quot;&gt;6. Загружаем файлы&lt;/h3&gt;
  &lt;p id=&quot;oGL4&quot;&gt;Можно через &lt;code&gt;scp&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;erK6&quot; data-lang=&quot;bash&quot;&gt;scp /Users/fonwa/script.js root@192.168.1.x:/var/www/updates&lt;/pre&gt;
  &lt;p id=&quot;SSQ8&quot;&gt;Или через любой SFTP-клиент&lt;/p&gt;
  &lt;p id=&quot;eLSX&quot;&gt;В GUI-клиент сохраняем хост, подключаемся, просто перетягиваем файлы в &lt;code&gt;/var/www/updates&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;aPp4&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;0W7c&quot;&gt;7. Проверяем&lt;/h3&gt;
  &lt;p id=&quot;tH8a&quot;&gt;На этом этапе ресурс уже доступен в локальной сети по IP-адресу контейнера.&lt;/p&gt;
  &lt;p id=&quot;S6ZJ&quot;&gt;В браузере достаточно ввести адрес хоста, чтобы увидеть каталог с загруженными файлами.&lt;/p&gt;
  &lt;p id=&quot;OWJP&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;TLI4&quot;&gt;Если нужно локально прикрутить доменное имя — ранее я рассказывал, как можно настроить &lt;a href=&quot;https://teletype.in/@fonwa/adguard-home&quot; target=&quot;_blank&quot;&gt;домашний DNS&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;yQPX&quot;&gt;А если хочется завернуть трафик в HTTPS и опубликовать - это легко делается через &lt;a href=&quot;https://teletype.in/@fonwa/nginx-proxy-manager&quot; target=&quot;_blank&quot;&gt;Nginx Proxy Manager&lt;/a&gt;.&lt;/p&gt;

</content></entry><entry><id>fonwa:nginx-nut</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/nginx-nut?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>Настраиваем Nginx Proxy Manager для NUT</title><published>2025-06-03T19:21:28.452Z</published><updated>2025-06-03T19:25:16.574Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/54/83/54833ad6-0712-40f9-90a3-b866f32ee214.png"></media:thumbnail><category term="nginx" label="nginx"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/2b/e0/2be09074-1e89-47b1-88d4-643201138d62.jpeg&quot;&gt;Если вы используете NUT для мониторинга источников бесперебойного питания (ИБП), то наверняка сталкивались с необходимостью организовать доступ к веб-интерфейсу через удобный домен. Мы разберем, как это сделать простым и понятным способом через Nginx Proxy Manager.</summary><content type="html">
  &lt;p id=&quot;dU8I&quot;&gt;Если вы используете &lt;a href=&quot;https://teletype.in/@fonwa/proxmox_nut_synology&quot; target=&quot;_blank&quot;&gt;NUT&lt;/a&gt; для мониторинга источников бесперебойного питания (ИБП), то наверняка сталкивались с необходимостью организовать доступ к веб-интерфейсу через удобный домен. Мы разберем, как это сделать простым и понятным способом через &lt;a href=&quot;https://teletype.in/@fonwa/nginx-proxy-manager&quot; target=&quot;_blank&quot;&gt;Nginx Proxy Manager&lt;/a&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;EfHE&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;wXDb&quot;&gt;Зачем нужен Nginx Proxy Manager для NUT?&lt;/h2&gt;
  &lt;p id=&quot;7iv3&quot;&gt;Веб-интерфейс NUT работает через CGI-скрипты (например, &lt;code&gt;upsstats.cgi&lt;/code&gt; и &lt;code&gt;upsimage.cgi&lt;/code&gt;), и это было основной проблемой при настройке Nginx. Эти скрипты могут быть доступны только по локальному адресу (например, &lt;code&gt;http://192.168.1.8/cgi-bin/nut/upsstats.cgi&lt;/code&gt;). Далее мы рассмотрим, как сделать их доступными через удобное доменное имя (например, &lt;code&gt;nut.home.local&lt;/code&gt;) и защитить соединение через HTTPS.&lt;/p&gt;
  &lt;p id=&quot;L49Y&quot;&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;h2 id=&quot;yFNB&quot;&gt;Подготовка сервера NUT&lt;/h2&gt;
  &lt;p id=&quot;ikQp&quot;&gt;Перед настройкой Nginx Proxy Manager убедитесь, что:&lt;/p&gt;
  &lt;ol id=&quot;BmK5&quot;&gt;
    &lt;li id=&quot;hjE7&quot;&gt;Установлен и настроен &lt;a href=&quot;https://teletype.in/@fonwa/proxmox_nut_synology&quot; target=&quot;_blank&quot;&gt;NUT.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;GkRK&quot;&gt;В NPM добавлен SSL сертификат - &lt;a href=&quot;https://teletype.in/@fonwa/selfsigned-ssl&quot; target=&quot;_blank&quot;&gt;самоподписанный&lt;/a&gt; или Let&amp;#x27;s Encrypt.&lt;/li&gt;
    &lt;li id=&quot;Nbk5&quot;&gt;&lt;a href=&quot;https://teletype.in/@fonwa/adguard-home&quot; target=&quot;_blank&quot;&gt;Локальный DNS&lt;/a&gt; знает доменное имя &lt;code&gt;nut.home.local&lt;/code&gt; и на какой IP перенаправлять запросы.&lt;/li&gt;
    &lt;li id=&quot;Trei&quot;&gt;Эти скрипты доступны напрямую по IP адресу, например: &lt;br /&gt;&lt;code&gt;http://192.168.1.8/cgi-bin/nut/upsstats.cgi&lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;wpU0&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;SPgp&quot;&gt;Настройка Nginx Proxy Manager&lt;/h2&gt;
  &lt;p id=&quot;kIpf&quot;&gt;Теперь перейдем к самому интересному — настройке Nginx Proxy Manager.&lt;/p&gt;
  &lt;h3 id=&quot;ykkz&quot;&gt;Создаем новый прокси-хост&lt;/h3&gt;
  &lt;ol id=&quot;93Du&quot;&gt;
    &lt;li id=&quot;35cI&quot;&gt;Открываем веб-интерфейс Nginx Proxy Manager.&lt;/li&gt;
    &lt;li id=&quot;F4nL&quot;&gt;Создаем новый прокси-хост:&lt;/li&gt;
    &lt;ul id=&quot;S18b&quot;&gt;
      &lt;li id=&quot;JLnq&quot;&gt;&lt;strong&gt;Domain Names &lt;/strong&gt;: &lt;code&gt;nut.home.local&lt;/code&gt;&lt;/li&gt;
      &lt;li id=&quot;ubWJ&quot;&gt;&lt;strong&gt;Scheme &lt;/strong&gt;: &lt;code&gt;https&lt;/code&gt;&lt;/li&gt;
      &lt;li id=&quot;MzMN&quot;&gt;&lt;strong&gt;Forward Hostname/IP &lt;/strong&gt;: &lt;code&gt;192.168.1.8&lt;/code&gt;&lt;/li&gt;
      &lt;li id=&quot;ECax&quot;&gt;&lt;strong&gt;Forward Port &lt;/strong&gt;: &lt;code&gt;80&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;IcJB&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/ca/ce/cace0eb5-93f3-4e92-8843-aa83805f93fe.png&quot; width=&quot;1002&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;w4XV&quot;&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;cm1A&quot;&gt;Добавляем Custom Locations&lt;/h3&gt;
  &lt;p id=&quot;NCVN&quot;&gt;Чтобы все запросы работали корректно, добавляем следующие правила:&lt;/p&gt;
  &lt;h4 id=&quot;9cCH&quot;&gt;Правило 1: Корневой путь&lt;/h4&gt;
  &lt;ul id=&quot;qNkt&quot;&gt;
    &lt;li id=&quot;eB3s&quot;&gt;&lt;strong&gt;Location &lt;/strong&gt;: &lt;code&gt;/&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;CzVa&quot;&gt;&lt;strong&gt;Scheme &lt;/strong&gt;: &lt;code&gt;http&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;KihM&quot;&gt;&lt;strong&gt;Forward Hostname/IP &lt;/strong&gt;: &lt;code&gt;192.168.1.8/cgi-bin/nut/upsstats.cgi&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;nEGQ&quot;&gt;&lt;strong&gt;Forward Port &lt;/strong&gt;: &lt;code&gt;80&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;L8d0&quot;&gt;Это правило перенаправляет все запросы к корню (&lt;code&gt;/&lt;/code&gt;) на основной скрипт &lt;code&gt;upsstats.cgi&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;BEZK&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2d/a3/2da3cc0c-6b2a-4a4c-958b-67d62800d706.png&quot; width=&quot;940&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;krMm&quot;&gt;&lt;/p&gt;
  &lt;h4 id=&quot;N5ki&quot;&gt;Правило 2: Путь для &lt;code&gt;upsstats.cgi&lt;/code&gt;&lt;/h4&gt;
  &lt;ul id=&quot;jNun&quot;&gt;
    &lt;li id=&quot;Y6JG&quot;&gt;&lt;strong&gt;Location &lt;/strong&gt;: &lt;code&gt;/upsstats.cgi&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;o43y&quot;&gt;&lt;strong&gt;Scheme &lt;/strong&gt;: &lt;code&gt;http&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;aUEN&quot;&gt;&lt;strong&gt;Forward Hostname/IP &lt;/strong&gt;: &lt;code&gt;192.168.1.8/cgi-bin/nut/upsstats.cgi&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;u9Ck&quot;&gt;&lt;strong&gt;Forward Port &lt;/strong&gt;: &lt;code&gt;80&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3XCf&quot;&gt;Это правило обрабатывает запросы к &lt;code&gt;https://nut.home.local/upsstats.cgi&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;W6ow&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/88/7e/887e40f6-c329-41ad-b5ac-dd75ca39a728.png&quot; width=&quot;938&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;HWVL&quot;&gt;&lt;/p&gt;
  &lt;h4 id=&quot;UclZ&quot;&gt;Правило 3: Путь для &lt;code&gt;upsimage.cgi&lt;/code&gt;&lt;/h4&gt;
  &lt;ul id=&quot;Vrd6&quot;&gt;
    &lt;li id=&quot;DFkF&quot;&gt;&lt;strong&gt;Location &lt;/strong&gt;: &lt;code&gt;/upsimage.cgi&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;dtvw&quot;&gt;&lt;strong&gt;Scheme &lt;/strong&gt;: &lt;code&gt;http&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;mpqS&quot;&gt;&lt;strong&gt;Forward Hostname/IP &lt;/strong&gt;: &lt;code&gt;192.168.1.8/cgi-bin/nut/upsimage.cgi&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;qBbN&quot;&gt;&lt;strong&gt;Forward Port &lt;/strong&gt;: &lt;code&gt;80&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;56qY&quot;&gt;Это правило нужно для динамической генерации изображений через &lt;code&gt;upsimage.cgi&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;DyPl&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/21/2e/212e68cd-561a-4578-ba44-2c69e194967b.png&quot; width=&quot;938&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;cWw0&quot;&gt;Настройка Advanced&lt;/h3&gt;
  &lt;p id=&quot;vDbo&quot;&gt;В разделе &lt;strong&gt;Advanced &lt;/strong&gt;добавляем следующие строки:&lt;/p&gt;
  &lt;pre id=&quot;i5ru&quot; data-lang=&quot;nginx&quot;&gt;proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass_request_headers on;
proxy_pass_request_body on;&lt;/pre&gt;
  &lt;p id=&quot;y2pX&quot;&gt;&lt;br /&gt;Эти директивы нужны для того, чтобы backend-сервер получал всю необходимую информацию о клиенте и его запросе, даже если между клиентом и backend-ом стоит прокси-сервер. Это важно для правильной работы приложений, логирования, аутентификации и маршрутизации.&lt;/p&gt;
  &lt;p id=&quot;3uWL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;fegs&quot;&gt;За что отвечает каждая из них:&lt;/p&gt;
  &lt;pre id=&quot;4GPM&quot; data-lang=&quot;nginx&quot;&gt;proxy_set_header Host $host;&lt;/pre&gt;
  &lt;p id=&quot;4GPM&quot;&gt;Устанавливает заголовок Host в исходящее проксируемое соединение. Обычно это имя хоста, по которому клиент обратился к вашему серверу. Это важно для backend-приложений, которые используют Host для маршрутизации или проверки домена.&lt;/p&gt;
  &lt;p id=&quot;qZxO&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;POVb&quot; data-lang=&quot;nginx&quot;&gt;proxy_set_header X-Real-IP $remote_addr;&lt;/pre&gt;
  &lt;p id=&quot;POVb&quot;&gt;Передаёт реальный IP-адрес клиента в заголовке X-Real-IP. Это позволяет backend-серверу узнать настоящий IP пользователя, а не IP прокси-сервера.&lt;/p&gt;
  &lt;p id=&quot;DXP8&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;y8ge&quot; data-lang=&quot;nginx&quot;&gt;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;/pre&gt;
  &lt;p id=&quot;y8ge&quot;&gt;Добавляет IP-адрес клиента к цепочке IP-адресов в заголовке X-Forwarded-For. Если запрос уже содержит этот заголовок, то к нему добавляется ещё один IP (адрес клиента, с которым Nginx установил соединение). Это полезно при наличии нескольких прокси на пути запроса, чтобы backend мог видеть всю цепочку адресов.&lt;/p&gt;
  &lt;p id=&quot;g2Ar&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;4o78&quot; data-lang=&quot;nginx&quot;&gt;proxy_set_header X-Forwarded-Proto $scheme;&lt;/pre&gt;
  &lt;p id=&quot;4o78&quot;&gt;Указывает протокол (http или https), по которому клиент обратился к прокси. Это важно для backend-приложений, которые должны знать, был ли исходный запрос защищённым (https) или нет.&lt;/p&gt;
  &lt;p id=&quot;ZEMa&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;PL6U&quot; data-lang=&quot;nginx&quot;&gt;proxy_pass_request_headers on;&lt;/pre&gt;
  &lt;p id=&quot;PL6U&quot;&gt;Включает передачу всех заголовков, полученных от клиента, на backend-сервер. По умолчанию Nginx передаёт только стандартные заголовки, а с этой опцией — все, включая кастомные.&lt;/p&gt;
  &lt;p id=&quot;NffP&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;MxdP&quot; data-lang=&quot;nginx&quot;&gt;proxy_pass_request_body on;&lt;/pre&gt;
  &lt;p id=&quot;MxdP&quot;&gt;Включает передачу тела запроса (например, данных POST) на backend-сервер. Обычно это включено по умолчанию, но явное указание гарантирует, что тело запроса не будет отброшено.&lt;/p&gt;
  &lt;h2 id=&quot;jUyl&quot;&gt;&lt;br /&gt;Проверка работы&lt;/h2&gt;
  &lt;ol id=&quot;hd1W&quot;&gt;
    &lt;li id=&quot;Kssy&quot;&gt;Открываем браузер и переходим по адресу:&lt;br /&gt;&lt;code&gt;https://nut.home.local&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;4vmw&quot;&gt;Убеждаемся, что страница загружается корректно.&lt;/li&gt;
    &lt;li id=&quot;h5Gw&quot;&gt;Проверяем, отображаются ли изображения (например, график заряда батареи).&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;PvUr&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4f/3a/4f3abd22-1d34-45ee-995c-0371364a0098.png&quot; width=&quot;2060&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;BV3M&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bd/db/bddbd1ac-a635-494e-8bab-218106df02e5.png&quot; width=&quot;2060&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FcO4&quot;&gt;Теперь вы знаете, как настроить Nginx Proxy Manager для работы с NUT. Благодаря этому вы сможете:&lt;/p&gt;
  &lt;ul id=&quot;pFId&quot;&gt;
    &lt;li id=&quot;SauV&quot;&gt;Получить доступ к веб-интерфейсу NUT через удобное доменное имя.&lt;/li&gt;
    &lt;li id=&quot;LbCc&quot;&gt;Защитить соединение через HTTPS.&lt;/li&gt;
    &lt;li id=&quot;MYlo&quot;&gt;Автоматически перенаправлять запросы к нужным CGI-скриптам.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>fonwa:nginx-proxy-manager</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/nginx-proxy-manager?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>NGINX Proxy Manager</title><published>2025-05-30T21:36:38.680Z</published><updated>2025-06-02T15:19:29.124Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/76/1e/761ec5a5-6196-4598-837a-b307fb33ab7f.png"></media:thumbnail><category term="nginx" label="nginx"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/fe/74/fe746719-dc1e-41a3-adee-43789ffe25a1.png&quot;&gt;Раньше я знал все свои IP-адреса наизусть.
Теперь я по FQDN, и только мама зовёт меня по имени.</summary><content type="html">
  &lt;blockquote id=&quot;2cHm&quot;&gt;Раньше я знал все свои IP-адреса наизусть. Теперь я по FQDN, и только мама зовёт меня по имени.&lt;/blockquote&gt;
  &lt;p id=&quot;VoMR&quot;&gt;Если вы только начинаете осваивать маршрутизацию трафика или хотите удобно управлять несколькими сайтами на одном IP — эта статья для вас. Сегодня поговорим о NGINX Proxy Manager, который делает управление Nginx простым и понятным даже без глубоких знаний.&lt;/p&gt;
  &lt;figure id=&quot;sWF9&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fe/74/fe746719-dc1e-41a3-adee-43789ffe25a1.png&quot; width=&quot;1500&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;45ED&quot;&gt;&lt;/h3&gt;
  &lt;h2 id=&quot;6G1o&quot;&gt;Что такое NGINX Proxy Manager?&lt;/h2&gt;
  &lt;p id=&quot;sisL&quot;&gt;Это удобный веб-интерфейс для управления прокси через NGINX. Представьте, что это графическая панель, где вы кликаете мышкой вместо того, чтобы редактировать конфиги в терминале. Это идеальный инструмент для домашней лаборатории или небольшого проекта.&lt;/p&gt;
  &lt;p id=&quot;2GgM&quot;&gt;Работает как Docker-образ, то есть его легко запустить и настроить. Всё уже собрано — просто стартуем контейнер и заходим в интерфейс через браузер.&lt;/p&gt;
  &lt;p id=&quot;sziF&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;GUQh&quot;&gt;Зачем он нужен?&lt;/h2&gt;
  &lt;p id=&quot;CURH&quot;&gt;Допустим, у вас есть несколько сайтов/сервисов, которые крутятся в разных контейнерах/ВМ. У всех свои IP адреса и порты. Запомнить довольно сложно, когда вываливается такой список, как ниже.&lt;/p&gt;
  &lt;figure id=&quot;yaP6&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f1/74/f1743d52-622b-4d4b-8c8b-ac22cdef755a.png&quot; width=&quot;2372&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IwA6&quot;&gt;Все они ведут на один внешний IP-адрес вашего сервера. И вот тут NGINX Proxy Manager берёт на себя задачу смотреть на заголовок запроса (Host) и отправлять пользователя куда нужно — на нужный сервер, контейнер или виртуальную машину внутри вашей сети.&lt;/p&gt;
  &lt;p id=&quot;G7Ni&quot;&gt;Кроме этого:&lt;/p&gt;
  &lt;ul id=&quot;k35a&quot;&gt;
    &lt;li id=&quot;h927&quot;&gt;Поддерживает HTTPS (можно автоматически получать сертификаты Let&amp;#x27;s Encrypt).&lt;/li&gt;
    &lt;li id=&quot;wk1I&quot;&gt;Позволяет настраивать доступ по спискам разрешённых/запрещённых IP.&lt;/li&gt;
    &lt;li id=&quot;emvE&quot;&gt;Есть аудит действий пользователей и система ролей.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8OXg&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;aPkN&quot;&gt;Устанавливаем NPM&lt;/h2&gt;
  &lt;h3 id=&quot;7oD1&quot;&gt;Подготовка среды&lt;/h3&gt;
  &lt;p id=&quot;Wvtz&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;RxXk&quot;&gt;Мы будем использовать Ubuntu 22.04 LTS (можно и другие ОС, но пример на Ubuntu).  &lt;br /&gt;Нам понадобятся:&lt;br /&gt;- 2 ядра процессора&lt;br /&gt;- 1 ГБ оперативной памяти&lt;br /&gt;- 10 ГБ дискового пространства&lt;/p&gt;
  &lt;p id=&quot;J49K&quot;&gt;Обновляем систему и устанавливаем Docker:&lt;/p&gt;
  &lt;pre id=&quot;uIWc&quot; data-lang=&quot;bash&quot;&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y
sudo apt install -y docker.io docker-compose&lt;/pre&gt;
  &lt;p id=&quot;YGjB&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;G4Qm&quot;&gt;Создаём файл &lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;ywy3&quot; data-lang=&quot;bash&quot;&gt;nano docker-compose.yaml&lt;/pre&gt;
  &lt;p id=&quot;3GIQ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;NTOh&quot;&gt;Копируем и сохраняем&lt;/p&gt;
  &lt;pre id=&quot;ftnE&quot; data-lang=&quot;yaml&quot;&gt;version: &amp;quot;3&amp;quot;
services:
  nginx-proxy-manager:
    image: &amp;#x27;jc21/nginx-proxy-manager:latest&amp;#x27;
    restart: unless-stopped
    ports:
      - &amp;#x27;80:80&amp;#x27; # HTTP port
      - &amp;#x27;443:443&amp;#x27; # HTTPS port
      - &amp;#x27;81:81&amp;#x27; # Admin web port
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt&lt;/pre&gt;
  &lt;p id=&quot;M5sy&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;PWTL&quot;&gt;Запускаем контейнер:&lt;/h3&gt;
  &lt;pre id=&quot;2AQD&quot; data-lang=&quot;bash&quot;&gt;docker-compose up -d&lt;/pre&gt;
  &lt;p id=&quot;WpC1&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;gsGq&quot;&gt;Через пару минут можно открыть браузер и перейти по адресу:&lt;br /&gt;&lt;code&gt;http://IP_адрес_хоста:81&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;p id=&quot;0CHj&quot;&gt;Логин по умолчанию:&lt;br /&gt;Email - &lt;code&gt;admin@example.com&lt;/code&gt;&lt;br /&gt;Пароль - &lt;code&gt;changeme&lt;/code&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;MSUe&quot;&gt;При первом входе сервис предложит создать нового администратора и поменять пароль — обязательно сделайте это.&lt;/blockquote&gt;
  &lt;p id=&quot;6bqz&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Lvui&quot;&gt;Настраиваем&lt;/h2&gt;
  &lt;h3 id=&quot;Quzx&quot;&gt;Добавляем сертификат. &lt;/h3&gt;
  &lt;p id=&quot;CaPI&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;j1Ks&quot;&gt;В моём случае, был сгенерирован &lt;a href=&quot;https://teletype.in/@fonwa/selfsigned-ssl&quot; target=&quot;_blank&quot;&gt;самоподписанный SSL сертификат&lt;/a&gt;, который  добавлен в корневые сертификаты на доверенные устройства в сети.&lt;/p&gt;
  &lt;p id=&quot;B7Sq&quot;&gt;Переходим в &lt;code&gt;SSL Certificates&lt;/code&gt; -&amp;gt; &lt;code&gt;Add SSL Certificate&lt;/code&gt; -&amp;gt; &lt;code&gt;Custom&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;N4XG&quot;&gt;Указываем &lt;code&gt;Name&lt;/code&gt;, прикрепляем &lt;code&gt;Certificate Key&lt;/code&gt; и &lt;code&gt;Certificate&lt;/code&gt; -&amp;gt; &lt;code&gt;Save&lt;/code&gt;.&lt;/p&gt;
  &lt;blockquote id=&quot;YBMJ&quot;&gt;Промежуточный не обязателен, а он и не создавался.&lt;/blockquote&gt;
  &lt;figure id=&quot;uEEg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/26/dd/26ddc882-7318-4e4a-b60f-79045db3e438.png&quot; width=&quot;1004&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;mS3k&quot;&gt;Сертификат появится в интерфейсе&lt;/p&gt;
  &lt;figure id=&quot;iHzN&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a8/68/a8688dbd-167c-42a6-8d86-838042dc87d4.png&quot; width=&quot;2370&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;UcCD&quot;&gt;&lt;/h3&gt;
  &lt;h3 id=&quot;z75T&quot;&gt;Добавляем хост&lt;/h3&gt;
  &lt;p id=&quot;Hnnw&quot;&gt;Переходим в раздел &lt;code&gt;Proxy Hosts&lt;/code&gt; → &lt;code&gt;Add Proxy Host&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;QAk3&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;QQNy&quot;&gt;Во вкладке &lt;code&gt;Details&lt;/code&gt; указываем: &lt;/p&gt;
  &lt;p id=&quot;HoDT&quot;&gt;&lt;code&gt;Domain Names&lt;/code&gt; - доменное имя хоста &lt;/p&gt;
  &lt;p id=&quot;3S9W&quot;&gt;&lt;code&gt;Scheme&lt;/code&gt;- http/s &lt;/p&gt;
  &lt;p id=&quot;gIvg&quot;&gt;&lt;code&gt;Forward Hostname / IP&lt;/code&gt; - адрес хоста.&lt;/p&gt;
  &lt;figure id=&quot;TYzO&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/31/cf316458-be05-4172-8e29-09396b042484.png&quot; width=&quot;998&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;Wiod&quot;&gt;То есть, даже если мы выбираем &lt;code&gt;Scheme&lt;/code&gt; - &lt;code&gt;http&lt;/code&gt;, NGINX заворачивает его в SSL терминацию и мы ходим по https, так как браузер обращается в системное хранилище сертификатов&lt;/blockquote&gt;
  &lt;p id=&quot;FBVc&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;6vmq&quot;&gt;Во вкладке &lt;code&gt;SSL&lt;/code&gt; выбираем ранее добавленный &lt;code&gt;SSL Certificate&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;UVFv&quot;&gt;Включаем все тумблеры и читаем дальше почему.&lt;/p&gt;
  &lt;figure id=&quot;9NIt&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/79/4b/794b3bf8-c5e0-4f78-b4d4-c32e301721cd.png&quot; width=&quot;998&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;hoD5&quot;&gt;Force SSL&lt;/h3&gt;
  &lt;p id=&quot;GHRE&quot;&gt;Принудительно перенаправляет все HTTP-запросы на HTTPS. Если пользователь попытается открыть сайт по протоколу http, его автоматически перенаправит на https, обеспечивая защищённое соединение.&lt;/p&gt;
  &lt;h3 id=&quot;LoGQ&quot;&gt;&lt;br /&gt;HTTP/2 Support&lt;/h3&gt;
  &lt;p id=&quot;QHKy&quot;&gt;Включает поддержку протокола HTTP/2 для данного домена. HTTP/2 ускоряет загрузку сайтов за счёт мультиплексирования запросов, более эффективной компрессии заголовков и других улучшений, но работает только поверх HTTPS.&lt;/p&gt;
  &lt;h3 id=&quot;wAgX&quot;&gt;&lt;br /&gt;HSTS Enabled&lt;/h3&gt;
  &lt;p id=&quot;P2At&quot;&gt;Включает HTTP Strict Transport Security (HSTS) — механизм, который сообщает браузеру, что сайт всегда должен открываться только по HTTPS. Даже если пользователь наберёт http, браузер сам заменит протокол на https до отправки запроса. Это защищает от атак типа “downgrade” и перехвата трафика.&lt;/p&gt;
  &lt;h3 id=&quot;Cyh7&quot;&gt;&lt;br /&gt;HSTS Subdomains&lt;/h3&gt;
  &lt;p id=&quot;oosV&quot;&gt;Расширяет действие политики HSTS на все поддомены выбранного домена. Например, если включено для home.local, то и для *.home.local браузер будет использовать только HTTPS.&lt;/p&gt;
  &lt;p id=&quot;rCrH&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;yHLN&quot;&gt;Сохраняем — и сайт будет доступен по вашему домену.&lt;/p&gt;
  &lt;p id=&quot;flCk&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;a9kk&quot;&gt;Однако, важно:&lt;/p&gt;
  &lt;p id=&quot;bWLI&quot;&gt;DNS-запись вашего домена должна указывать на IP-адрес, где работает NGINX Proxy Manager. Для этого рекомендуется развернуть локальный DNS-сервер, например, &lt;a href=&quot;https://teletype.in/@fonwa/adguard-home&quot; target=&quot;_blank&quot;&gt;AdGuard Home&lt;/a&gt;, который поддерживает функцию перезаписи DNS-запросов.&lt;/p&gt;
  &lt;p id=&quot;MZHJ&quot;&gt;Просто развернуть только Nginx Proxy Manager для перенаправления запросов в локальной сети недостаточно, потому что по умолчанию ваш роутер не знает о существовании такого доменного имени. В результате браузер будет пытаться найти этот адрес во внешнем интернете, а не внутри вашей сети. Рекомендую посмотреть видеоролик “&lt;a href=&quot;https://youtu.be/jBvkN8_c7t8?si=Ez-i1dOOJKX_qGYn&quot; target=&quot;_blank&quot;&gt;Процесс загрузки web страницы&lt;/a&gt;”  или  &amp;quot;&lt;a href=&quot;https://youtu.be/ylG8_d9Qk1U?si=28TRLcznsatBSNWw&quot; target=&quot;_blank&quot;&gt;Что делает браузер, чтобы загрузить Веб-страницу?&lt;/a&gt;&amp;quot; — это поможет лучше понять процесс.&lt;/p&gt;
  &lt;p id=&quot;eYv4&quot;&gt;Решение:&lt;br /&gt;Разверните локальный DNS-сервер и укажите его в качестве дополнительного DNS-сервера в настройках вашего роутера. После этого все устройства в вашей локальной сети смогут обращаться к локальным доменным именам, и изменения вступят в силу автоматически.&lt;/p&gt;
  &lt;p id=&quot;ZaLE&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;olZx&quot;&gt;Немного теории&lt;/h2&gt;
  &lt;h3 id=&quot;CffJ&quot;&gt;Как работает SSL-терминация&lt;/h3&gt;
  &lt;p id=&quot;K74Z&quot;&gt;Если вы выбираете использование SSL-сертификата (даже если &lt;code&gt;Scheme&lt;/code&gt; выбран как &lt;code&gt;http&lt;/code&gt;), NPM настраивает так называемую SSL-терминацию:&lt;/p&gt;
  &lt;ul id=&quot;1J5N&quot;&gt;
    &lt;li id=&quot;h5GU&quot;&gt;Внешний клиент (браузер) подключается к вашему серверу по HTTPS.&lt;/li&gt;
    &lt;li id=&quot;QsfP&quot;&gt;Nginx принимает зашифрованный трафик, расшифровывает его с помощью SSL-сертификата, и далее передаёт уже расшифрованный HTTP-трафик на внутренний сервер (по указанному IP и порту).&lt;/li&gt;
    &lt;li id=&quot;kNiW&quot;&gt;Таким образом, внутренний сервис может работать по обычному HTTP, а пользователи снаружи всегда используют защищённое HTTPS-соединение.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;kLkp&quot;&gt;Это стандартная практика для обратных прокси и называется SSL-терминацией (SSL termination):&lt;/p&gt;
  &lt;p id=&quot;EQXW&quot;&gt;SSL-терминация является процессом на обратном прокси сервере, который обрабатывает шифрование и дешифровку SSL таким образом, чтобы трафик между прокси и внутренними серверами был в HTTP.&lt;br /&gt;&lt;/p&gt;
  &lt;h3 id=&quot;Wwi7&quot;&gt;Что происходит в браузере&lt;/h3&gt;
  &lt;ul id=&quot;08J5&quot;&gt;
    &lt;li id=&quot;r3QT&quot;&gt;Браузер пользователя устанавливает HTTPS-соединение с Nginx Proxy Manager.&lt;/li&gt;
    &lt;li id=&quot;B3s1&quot;&gt;При этом браузер проверяет SSL-сертификат, который хранится в системном хранилище сертификатов (или добавлен вручную, если это self-signed или локальный CA).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3jMI&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;yNUK&quot;&gt;Полезные фишки&lt;/h2&gt;
  &lt;h3 id=&quot;AyBI&quot;&gt;Статистика и мониторинг&lt;/h3&gt;
  &lt;p id=&quot;9mZJ&quot;&gt;Если хочется видеть нагрузку, количество запросов, ошибки и прочее — можно добавить в &amp;#x60;docker-compose&amp;#x60; ещё один сервис для анализа логов:&lt;/p&gt;
  &lt;pre id=&quot;fQLf&quot; data-lang=&quot;yaml&quot;&gt;npm-monitoring:
  image: xavierh/goaccess-for-nginxproxymanager:latest
  restart: always
  environment:
    - TZ=Asia/Yekaterinburg
    - LOG_TYPE=NPM
  ports:
    - &amp;#x27;82:7880&amp;#x27;
  volumes:
    - ./data/logs:/opt/log&lt;/pre&gt;
  &lt;p id=&quot;QjOt&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;WE9E&quot;&gt;Открываете &lt;code&gt;http://IP_адрес_хоста:82&lt;/code&gt; и видите красивую статистику по трафику.&lt;/p&gt;
  &lt;p id=&quot;fnzk&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;zva5&quot;&gt;Кастомная страница 404&lt;/h3&gt;
  &lt;p id=&quot;yI5x&quot;&gt;Вместо скучного сообщения об ошибке можно сделать весёлый редирект. Например, на видео с котиками или... на Rickroll 😄&lt;/p&gt;
  &lt;p id=&quot;YwBI&quot;&gt;Добавляем в &amp;#x60;docker-compose&amp;#x60;:&lt;/p&gt;
  &lt;pre id=&quot;pqsV&quot; data-lang=&quot;yaml&quot;&gt;error-page-404:
  image: &amp;#x27;kale5/rickroll:latest&amp;#x27;
  restart: unless-stopped
  ports:
    - &amp;#x27;83:80&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;DTg1&quot;&gt;А в настройках NGINX Proxy Manager указываем редирект на &amp;#x60;http://localhost:83&amp;#x60;.&lt;/p&gt;
  &lt;p id=&quot;0T9R&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;ssoM&quot;&gt;Финальный &amp;#x60;docker-compose.yml&amp;#x60;&lt;/p&gt;
  &lt;pre id=&quot;8Xdl&quot; data-lang=&quot;yaml&quot;&gt;version: &amp;quot;3&amp;quot;
services:
  nginx-proxy-manager:
    image: &amp;#x27;jc21/nginx-proxy-manager:latest&amp;#x27;
    restart: unless-stopped
    ports:
      - &amp;#x27;80:80&amp;#x27;
      - &amp;#x27;443:443&amp;#x27;
      - &amp;#x27;81:81&amp;#x27;
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  npm-monitoring:
    image: xavierh/goaccess-for-nginxproxymanager:latest
    restart: always
    environment:
      - TZ=Asia/Yekaterinburg
      - LOG_TYPE=NPM
    ports:
      - &amp;#x27;82:7880&amp;#x27;
    volumes:
      - ./data/logs:/opt/log
  error-page-404:
    image: &amp;#x27;kale5/rickroll:latest&amp;#x27;
    restart: unless-stopped
    ports:
      - &amp;#x27;83:80&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;oeJJ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;6gyj&quot;&gt;NGINX Proxy Manager — это отличный выбор для тех, кто хочет быстро поднять reverse proxy без головной боли. Он простой, удобный, поддерживает HTTPS «из коробки» и позволяет настраивать всё через веб-интерфейс.&lt;/p&gt;
  &lt;p id=&quot;l4cD&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;1P49&quot;&gt;Мне помогли:&lt;/p&gt;
  &lt;p id=&quot;yu1Y&quot;&gt;&lt;a href=&quot;https://akmalov.com/blog/nginx-proxy-manager&quot; target=&quot;_blank&quot;&gt;https://akmalov.com/blog/nginx-proxy-manager&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>fonwa:glances</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/glances?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>Glances в Proxmox и экспорт в Grafana</title><published>2025-05-29T21:54:28.949Z</published><updated>2025-05-29T22:05:22.727Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/13/a2/13a2fb2b-0960-40fa-9af8-7f034cc18449.png"></media:thumbnail><category term="proxmox" label="Proxmox"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/7b/25/7b25ab22-dc78-4654-8de2-fc579b07fec4.png&quot;&gt;Glances - это кроссплатформенный инструмент для мониторинга системных ресурсов, работающий в терминале и написанный на Python. Основная задача Glances - предоставлять максимально полную информацию о состоянии системы на одном экране в режиме реального времени, что делает его удобным для администрирования серверов и рабочих станций.</summary><content type="html">
  &lt;p id=&quot;joJy&quot;&gt;Случайно наткнулся на проект и захотелось им поделиться. &lt;/p&gt;
  &lt;p id=&quot;Q1uP&quot;&gt;Glances - это кроссплатформенный инструмент для мониторинга системных ресурсов, работающий в терминале и написанный на Python. Основная задача Glances - предоставлять максимально полную информацию о состоянии системы на одном экране в режиме реального времени, что делает его удобным для администрирования серверов и рабочих станций.&lt;/p&gt;
  &lt;p id=&quot;JQpt&quot;&gt;Полученные метрики из Glances можно экспортировать в CSV, InfluxDB, Cassandra, OpenTSDB, StatsD, ElasticSearch или даже RabbitMQ. Glances также предоставляет специальную панель мониторинга Grafana.&lt;/p&gt;
  &lt;blockquote id=&quot;vi27&quot;&gt;Тезисно, этакий динамический htop в браузере с возможностью экспорта куда угодно&lt;/blockquote&gt;
  &lt;p id=&quot;f5MG&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;QsGu&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7b/25/7b25ab22-dc78-4654-8de2-fc579b07fec4.png&quot; width=&quot;3600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;oKOI&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;wUOa&quot;&gt;Устанавливаем змею&lt;/h3&gt;
  &lt;pre id=&quot;nqzA&quot; data-lang=&quot;bash&quot;&gt;apt update &amp;amp;&amp;amp; apt install python3-pip python3-dev gcc pipx curl -y&lt;/pre&gt;
  &lt;p id=&quot;xdE7&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;uB6M&quot;&gt;Устанавливаем Glances в pipx&lt;/h3&gt;
  &lt;pre id=&quot;spKp&quot; data-lang=&quot;bash&quot;&gt;pipx install glances[web]&lt;/pre&gt;
  &lt;blockquote id=&quot;KlbG&quot;&gt;Если все предыдущие команды выполнялись из домашнего каталога, то явный путь для запуска Glances будет:&lt;br /&gt;&lt;code&gt;/root/.local/bin/glances -w&lt;/code&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;2fxO&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;zvZY&quot;&gt;Добавим в переменную окружения PATH из домашнего каталога&lt;/p&gt;
  &lt;pre id=&quot;ryGD&quot; data-lang=&quot;bash&quot;&gt;pipx ensurepath&lt;/pre&gt;
  &lt;figure id=&quot;bsTQ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7e/61/7e610812-d936-4f49-a158-789314f7eea3.png&quot; width=&quot;1330&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qP6A&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;jMxk&quot;&gt;После потребуется рестарт хоста&lt;/p&gt;
  &lt;pre id=&quot;R3DT&quot; data-lang=&quot;bash&quot;&gt;reboot&lt;/pre&gt;
  &lt;p id=&quot;FNhI&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;2vOx&quot;&gt;Проверяем, что путь добавлен&lt;/p&gt;
  &lt;pre id=&quot;1x5L&quot; data-lang=&quot;bash&quot;&gt;echo $PATH
which glances&lt;/pre&gt;
  &lt;figure id=&quot;NjqF&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3a/a0/3aa0af53-725c-4231-b2b4-6c91008a5380.png&quot; width=&quot;1114&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;OdKQ&quot;&gt;Запускаем процесс&lt;/p&gt;
  &lt;pre id=&quot;bWCe&quot; data-lang=&quot;bash&quot;&gt;glances -w&lt;/pre&gt;
  &lt;figure id=&quot;UtkV&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ee/63/ee63123b-c0e2-46a8-bad6-fcbd988bbc2f.png&quot; width=&quot;1226&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gAOH&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;hBYX&quot;&gt;Открываем веб интерфейс Glances с указанным хосту IP адреса с портом 61208. Должно получиться &lt;code&gt;http://IP_адрес_хоста:61208&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;phLj&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;FZcJ&quot;&gt;Настраиваем сервис Glances&lt;/h3&gt;
  &lt;p id=&quot;V8j1&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;h7p4&quot;&gt;Теперь настроим сервис для Glances, чтобы он мог запускаться автоматически при рестарте системы&lt;/p&gt;
  &lt;pre id=&quot;jKie&quot; data-lang=&quot;bash&quot;&gt;nano /etc/systemd/system/glances.service&lt;/pre&gt;
  &lt;p id=&quot;bVhG&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;twV3&quot;&gt;Копируем. Вставляем содержимое и сохраняем.&lt;/p&gt;
  &lt;blockquote id=&quot;R0Us&quot;&gt;Я делал от рута, поэтому у меня всё просто&lt;/blockquote&gt;
  &lt;pre id=&quot;Npbt&quot; data-lang=&quot;bash&quot;&gt;[Unit]
Description=Glances - web-based monitoring
After=network.target

[Service]
ExecStart=/root/.local/bin/glances -w
Restart=always
User=root
Environment=PATH=/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

[Install]
WantedBy=multi-user.target&lt;/pre&gt;
  &lt;figure id=&quot;swpT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1e/8d/1e8d2fc6-2b65-442e-89c5-ce1a71ed12e4.png&quot; width=&quot;993&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;zBUy&quot;&gt;Перезапускаем сервисы&lt;/p&gt;
  &lt;pre id=&quot;frF9&quot; data-lang=&quot;bash&quot;&gt;systemctl daemon-reexec
systemctl daemon-reload
systemctl enable --now glances
systemctl status glances&lt;/pre&gt;
  &lt;p id=&quot;kTGi&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;UXQN&quot;&gt;Glances запущен, и теперь можно открывать его через web или экспортировать в другие сервисы.&lt;/p&gt;
  &lt;p id=&quot;ed6c&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;T1QV&quot;&gt;Устанавливаем InfluxDB&lt;/h3&gt;
  &lt;pre id=&quot;1cZe&quot; data-lang=&quot;bash&quot;&gt;curl -LO https://download.influxdata.com/influxdb/releases/influxdb2_2.7.6-1_amd64.deb
sudo dpkg -i influxdb2_2.7.6-1_amd64.deb
sudo service influxdb start&lt;/pre&gt;
  &lt;h3 id=&quot;QaGy&quot;&gt;&lt;/h3&gt;
  &lt;h3 id=&quot;82qQ&quot;&gt;Настраиваем InfluxDB&lt;/h3&gt;
  &lt;p id=&quot;3aV7&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;rm5e&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/99/02/990241dc-b31b-45f0-9100-16519345fcec.png&quot; width=&quot;1593&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;yKnb&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/67/86/678621e8-ac9e-4bc6-976b-9ea9459047df.png&quot; width=&quot;1266&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;11c8&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b4/b1/b4b1d374-993f-4196-b9b3-6b689aa2ab1f.png&quot; width=&quot;1594&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;gYPt&quot;&gt;&lt;br /&gt;Настраиваем экспорт в InfluxDB&lt;/h3&gt;
  &lt;p id=&quot;uTCr&quot;&gt;&lt;br /&gt;Так можно найти, где находится glances.conf&lt;/p&gt;
  &lt;pre id=&quot;yZQo&quot; data-lang=&quot;bash&quot;&gt;find / -type f -name &amp;quot;glances.conf&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;3eIy&quot;&gt;Настройка конфигурации (путь к файлу может отличаться):&lt;/p&gt;
  &lt;pre id=&quot;iIa2&quot; data-lang=&quot;bash&quot;&gt;nano /root/.local/share/pipx/venvs/glances/share/doc/glances/glances.conf&lt;/pre&gt;
  &lt;p id=&quot;79w7&quot;&gt;Прокручиваем вниз до:&lt;/p&gt;
  &lt;pre id=&quot;rhtZ&quot; data-lang=&quot;bash&quot;&gt;[influxdb2]
host=localhost
port=8086
protocol=http
org=fonwa
bucket=glances
token=токен, полученный из influxDB
measurement=localhost&lt;/pre&gt;
  &lt;figure id=&quot;FWGL&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/88/24/8824143f-0154-4ef4-b366-da115f3bc988.png&quot; width=&quot;779&quot; /&gt;
    &lt;figcaption&gt;Лайфхак - чтобы скролить длинные конфиги, подключайся через SSH и двигай колесо.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;n2yu&quot;&gt;Правим и сохраняемся&lt;/p&gt;
  &lt;p id=&quot;Niwe&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;KqXU&quot;&gt;Установка клиента InfluxDB:&lt;/p&gt;
  &lt;pre id=&quot;oMoI&quot; data-lang=&quot;bash&quot;&gt;pipx inject glances influxdb-client&lt;/pre&gt;
  &lt;p id=&quot;iXxX&quot;&gt;Проверяем через консоль экспорт &lt;/p&gt;
  &lt;pre id=&quot;QdW4&quot; data-lang=&quot;bash&quot;&gt;glances --export influxdb2&lt;/pre&gt;
  &lt;blockquote id=&quot;by2z&quot;&gt;Если метрики отправляются и ошибок нет — переходим к следующему шагу.&lt;/blockquote&gt;
  &lt;p id=&quot;9a4j&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;50uA&quot;&gt;Проверяем путь к Glances:&lt;/p&gt;
  &lt;pre id=&quot;Hrbt&quot;&gt;which glances&lt;/pre&gt;
  &lt;p id=&quot;sHQC&quot;&gt;(вставьте его в &lt;code&gt;ExecStart&lt;/code&gt;, если он отличается)&lt;/p&gt;
  &lt;pre id=&quot;irSd&quot; data-lang=&quot;bash&quot;&gt;sudo nano /etc/systemd/system/glances-influxdb.service&lt;/pre&gt;
  &lt;p id=&quot;fvba&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;wWQR&quot;&gt;Копируем содержимое и сохраняем&lt;/p&gt;
  &lt;pre id=&quot;fvba&quot; data-lang=&quot;bash&quot;&gt;
[Unit]
Description=Glances system monitor with InfluxDB 2.x export
After=network.target

[Service]
ExecStart=/root/.local/bin/glances --export influxdb2
Restart=always
User=root

[Install]
WantedBy=multi-user.target&lt;/pre&gt;
  &lt;p id=&quot;COnH&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;eXSS&quot;&gt;Перезапускаем сервисы&lt;/p&gt;
  &lt;pre id=&quot;6et0&quot;&gt;sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable glances-influxdb
sudo systemctl start glances-influxdb
systemctl status glances-influxdb.service&lt;/pre&gt;
  &lt;p id=&quot;NSMT&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;ZAFP&quot;&gt;Добавляем дашборд в Grafana&lt;/h3&gt;
  &lt;p id=&quot;kick&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;472C&quot;&gt;Выбираем &lt;code&gt;Data Sources&lt;/code&gt; -&amp;gt; &lt;code&gt;Add new data source.&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;OGFK&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/18/3f/183ff91a-a780-4cad-b274-00e360f316fb.png&quot; width=&quot;1718&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;AHE8&quot;&gt;Находим &lt;code&gt;InfluxDB&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;WgbC&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/74/7a/747a9e9a-8bec-4a2c-bf21-5618f2a2e062.png&quot; width=&quot;1416&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IzGX&quot;&gt;&lt;code&gt;Query Language&lt;/code&gt; - Flux&lt;/p&gt;
  &lt;p id=&quot;GcaW&quot;&gt;&lt;code&gt;URL&lt;/code&gt; - &lt;a href=&quot;http://IP_&quot; target=&quot;_blank&quot;&gt;http://IP_&lt;/a&gt;вашего_хоста:8086&lt;/p&gt;
  &lt;p id=&quot;T8qv&quot;&gt;&lt;code&gt;User&lt;/code&gt; - указанный вами логин в Influx&lt;/p&gt;
  &lt;p id=&quot;TnIs&quot;&gt;&lt;code&gt;Password&lt;/code&gt; - токен из Influx&lt;/p&gt;
  &lt;p id=&quot;kJdi&quot;&gt;&lt;code&gt;Organization&lt;/code&gt; - организация из influx&lt;/p&gt;
  &lt;p id=&quot;JMhP&quot;&gt;&lt;code&gt;Token&lt;/code&gt; - токен из Influx&lt;/p&gt;
  &lt;p id=&quot;DKb2&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Dxrn&quot;&gt;Выбираем в самом низу &lt;code&gt;Save &amp;amp; Test&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;3Hpa&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ec/13/ec131767-b67a-40f3-b4a8-7cadd6a16cdf.png&quot; width=&quot;888&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XvnD&quot;&gt;Переходим в &lt;code&gt;Dashboard&lt;/code&gt; -&amp;gt; &lt;code&gt;New&lt;/code&gt; -&amp;gt; &lt;code&gt;Import&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;umcL&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3f/4d/3f4db172-da6f-4cd8-b4d0-cc4c17b9de55.png&quot; width=&quot;1718&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pONb&quot;&gt;Копируем JSON &lt;a href=&quot;https://github.com/nicolargo/glances/blob/develop/conf/glances-grafana-influxql.json&quot; target=&quot;_blank&quot;&gt;отсюда &lt;/a&gt;-&amp;gt; &lt;code&gt;Load&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;dMdN&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/45/8d/458dc814-d24f-479e-923c-1fd069de8afb.png&quot; width=&quot;703&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9AK2&quot;&gt;Выбираем в нижнем выпадающем поле &lt;code&gt;Influxdb&lt;/code&gt; -&amp;gt; &lt;code&gt;Import&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;pvur&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b5/dd/b5ddc41c-9932-49e3-a4e9-207bd3886972.png&quot; width=&quot;734&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Vo2E&quot;&gt;Дашборд готов и работает. Даже после перезагрузки хоста.&lt;/p&gt;
  &lt;figure id=&quot;pqM7&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/dc/4e/dc4e4416-b1f0-4d76-bf33-68b41f17d10f.png&quot; width=&quot;1400&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;7Vi0&quot;&gt;Добавляем Glances в GetHomePage&lt;/h3&gt;
  &lt;p id=&quot;udkQ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;KSrM&quot;&gt;Для добавления в GetHomePage в хеддер нужно поправить widgets.yaml&lt;/p&gt;
  &lt;pre id=&quot;lrmp&quot; data-lang=&quot;bash&quot;&gt;nano /path/to/config/widgets.yaml&lt;/pre&gt;
  &lt;figure id=&quot;DFNd&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4e/6d/4e6d55da-e503-4f22-8601-195fb8261ee0.png&quot; width=&quot;1513&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;MzDl&quot; data-lang=&quot;yaml&quot;&gt;- glances:
    url: http://IP_вашего_хоста:61208
    version: 4 # required only if running glances v4 or higher, defaults to 3
    cpu: true # optional, enabled by default, disable by setting to false
    mem: true # optional, enabled by default, disable by setting to false
    cputemp: true # disabled by default
    uptime: true # disabled by default
    disk: / # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)
    diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk
    expanded: true # show the expanded view&lt;/pre&gt;
  &lt;p id=&quot;eBZu&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;RSX9&quot;&gt;Мне помогли:&lt;/p&gt;
  &lt;p id=&quot;9XsI&quot;&gt;&lt;a href=&quot;https://github.com/nicolargo/glances&quot; target=&quot;_blank&quot;&gt;https://github.com/nicolargo/glances&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;4eq7&quot;&gt;&lt;a href=&quot;https://github.com/nicolargo/glances/blob/develop/conf/glances-grafana-influxql.json&quot; target=&quot;_blank&quot;&gt;https://github.com/nicolargo/glances/blob/develop/conf/glances-grafana-influxql.json&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;wVbp&quot;&gt;&lt;a href=&quot;https://habr.com/ru/companies/vdsina/articles/545274/&quot; target=&quot;_blank&quot;&gt;https://habr.com/ru/companies/vdsina/articles/545274/&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>fonwa:adguard-home</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/adguard-home?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>Локальный DNS-сервер с AdGuard Home</title><published>2025-04-30T23:36:30.874Z</published><updated>2026-05-08T09:52:52.130Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/9b/9f/9b9f6d49-4855-4871-b47a-2217e1e92b55.png"></media:thumbnail><category term="linux" label="Linux"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/57/49/5749ab7b-25fd-423e-ba77-c8cf6210f2b6.gif&quot;&gt;В этой статье разберём, как быстро и просто поднять собственный DNS-сервер в AdGuard Home, чтобы забыть о рекламе и получить полный контроль над интернет-трафиком в нашей сети.</summary><content type="html">
  &lt;p id=&quot;fJDG&quot;&gt;&lt;strong&gt;Adguard Home &lt;/strong&gt;- это &lt;a href=&quot;https://github.com/AdguardTeam/AdGuardHome&quot; target=&quot;_blank&quot;&gt;Github&lt;/a&gt; Open Source проект с открытым исходным кодом.&lt;/p&gt;
  &lt;p id=&quot;2HMZ&quot;&gt;В этой статье разберём, как быстро и просто поднять собственный DNS-сервер в &lt;strong&gt;AdGuard Home&lt;/strong&gt;, чтобы забыть о рекламе и получить полный контроль над интернет-трафиком в нашей сети. В нем так же возможно настроить DHCP, блокировать часть рекламного контента, устанавливать и настраивать различные фильтры. Всё будет работать через Docker Compose. Подходит для виртуалок, выделенных серверов и мини-ПК вроде Raspberry Pi.&lt;/p&gt;
  &lt;p id=&quot;gzXt&quot;&gt;Я же для себя выбрал его как дополнительный DNS сервер, с которого удобнее назначать устройствам в сети FQDN имена, чем например с роутера в cli:&lt;/p&gt;
  &lt;pre id=&quot;fe62&quot; data-lang=&quot;bash&quot;&gt;ip host adg.home.local 192.168.1.11
system configuration save&lt;/pre&gt;
  &lt;p id=&quot;zsR3&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;BNc6&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/57/49/5749ab7b-25fd-423e-ba77-c8cf6210f2b6.gif&quot; width=&quot;756&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vnM7&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;1-подготовка-среды&quot;&gt;Готовим площадку: минимальные требования&lt;a href=&quot;https://akmalov.com/blog/adguard-home#1-%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0-%D1%81%D1%80%D0%B5%D0%B4%D1%8B&quot; target=&quot;_blank&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;
  &lt;p id=&quot;UEcM&quot;&gt;Установка будет проходить в LXC-контейнере на Proxmox, но подойдёт любая машина с Ubuntu 22.04 (или новее).&lt;br /&gt;Минимальные ресурсы:&lt;br /&gt;	•	ОС: Ubuntu 22.04&lt;br /&gt;	•	CPU: 2 ядра&lt;br /&gt;	•	RAM: 1 ГБ&lt;br /&gt;	•	Диск: 10 ГБ&lt;/p&gt;
  &lt;p id=&quot;Y9vm&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;HLOV&quot;&gt;Обновляем систему и ставим Docker:&lt;/p&gt;
  &lt;pre id=&quot;dOz8&quot; data-lang=&quot;bash&quot;&gt;apt update &amp;amp;&amp;amp; apt upgrade -y
apt install -y curl
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh&lt;/pre&gt;
  &lt;p id=&quot;IWT0&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;2-настройка-docker-composeyaml&quot;&gt;Настраиваем docker-compose.yml&lt;/h2&gt;
  &lt;p id=&quot;KbKS&quot;&gt;Создаем файл&lt;/p&gt;
  &lt;pre id=&quot;KbKS&quot; data-lang=&quot;bash&quot;&gt;nano docker-compose.yml&lt;/pre&gt;
  &lt;p id=&quot;9u72&quot;&gt;Копируем содержимое для docker-compose.yml&lt;/p&gt;
  &lt;pre id=&quot;bHB1&quot; data-lang=&quot;dockerfile&quot;&gt;version: &amp;quot;3.8&amp;quot;
services:
 adguardhome:
 image: adguard/adguardhome:latest
 hostname: adguard
 volumes:
 - ./adguard/work:/opt/adguardhome/work
 - ./adguard/conf:/opt/adguardhome/conf
 ports:
 - 53:53/tcp
 - 53:53/udp
 - 80:80/tcp
 - 443:443/tcp
 - 443:443/udp
 - 3000:3000/tcp
 restart: unless-stopped&lt;/pre&gt;
  &lt;p id=&quot;JzAI&quot;&gt;Вносим изменения, сохраняемся и выходим.&lt;/p&gt;
  &lt;p id=&quot;JHcg&quot;&gt;Описание используемых портов:&lt;/p&gt;
  &lt;ul id=&quot;031e&quot;&gt;
    &lt;li id=&quot;TEqD&quot;&gt;&lt;code&gt;53/tcp 53/udp&lt;/code&gt; - для работы DNS сервера.&lt;/li&gt;
    &lt;li id=&quot;PPVK&quot;&gt;&lt;code&gt;67/udp 68/tcp 68/udp&lt;/code&gt; - для работы DHCP сервера&lt;/li&gt;
    &lt;li id=&quot;vJf3&quot;&gt;&lt;code&gt;80/tcp 443/tcp 443/udp 3000/tcp&lt;/code&gt; - для доступа к Web панели и работы в режиме HTTPS/DNS-over-HTTPS&lt;/li&gt;
    &lt;li id=&quot;CclC&quot;&gt;&lt;code&gt;853/tcp &lt;/code&gt;- для работы в режиме DNS-over-TLS&lt;/li&gt;
    &lt;li id=&quot;4wFz&quot;&gt;&lt;code&gt;784/udp 853/udp 8853/udp&lt;/code&gt; - для DNS-over-QUIC&lt;/li&gt;
    &lt;li id=&quot;X0wA&quot;&gt;&lt;code&gt;5443/tcp 5443/udp&lt;/code&gt; - для DNSCrypt&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;00jn&quot;&gt;DHCP, DNS-over-QUIC и DNSCrypt я не использовал - соответствующие порты не пробрасываем для безопасности и экономии ресурсов.&lt;/p&gt;
  &lt;p id=&quot;PuBJ&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Ouhi&quot;&gt;Освобождаем порт 53&lt;/h2&gt;
  &lt;p id=&quot;A9bf&quot;&gt;Если при запуске контейнера видите ошибку:&lt;/p&gt;
  &lt;pre id=&quot;KATJ&quot; data-lang=&quot;bash&quot;&gt;Error starting userland proxy: listen tcp4 0.0.0.0:53: bind: address already in use&lt;/pre&gt;
  &lt;p id=&quot;gIVE&quot;&gt;Значит порт 53 уже занят (обычно это systemd-resolve).&lt;/p&gt;
  &lt;p id=&quot;enWb&quot;&gt;Проверяем, кто занял порт:&lt;/p&gt;
  &lt;pre id=&quot;ZWW8&quot; data-lang=&quot;bash&quot;&gt;lsof -i :53&lt;/pre&gt;
  &lt;figure id=&quot;tNF0&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e3/31/e331a705-e487-45f4-8431-bc8f37397a45.png&quot; width=&quot;1452&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;cQQK&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;lTtb&quot;&gt;Отключаем DNSStubListener&lt;/h3&gt;
  &lt;p id=&quot;WTGw&quot;&gt;Открываем файл:&lt;/p&gt;
  &lt;pre id=&quot;83It&quot; data-lang=&quot;bash&quot;&gt;nano /etc/systemd/resolved.conf&lt;/pre&gt;
  &lt;figure id=&quot;QeYm&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3c/6a/3c6ab4b0-e075-49d6-97a7-d21f2ecbc30e.png&quot; width=&quot;2390&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;B7sB&quot;&gt;В секции &lt;code&gt;[Resolve]&lt;/code&gt; прописываем:&lt;/p&gt;
  &lt;pre id=&quot;B7sB&quot; data-lang=&quot;bash&quot;&gt;DNS=127.0.0.1
DNSStubListener=no&lt;/pre&gt;
  &lt;p id=&quot;CfX1&quot;&gt;Сохраняем и перезапускаем службу:&lt;/p&gt;
  &lt;pre id=&quot;OZmn&quot; data-lang=&quot;bash&quot;&gt;systemctl restart systemd-resolved.service&lt;/pre&gt;
  &lt;p id=&quot;mQJw&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;71yE&quot;&gt;Запускаем AdGuard Home&lt;/h2&gt;
  &lt;p id=&quot;DQl9&quot;&gt;Теперь запускаем контейнер:&lt;/p&gt;
  &lt;pre id=&quot;sZj1&quot; data-lang=&quot;bash&quot;&gt;docker compose up -d&lt;/pre&gt;
  &lt;p id=&quot;pY0E&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;3-настройка-adguard-home&quot;&gt;Первичная настройка AdGuard Home&lt;a href=&quot;https://akmalov.com/blog/adguard-home#3-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-adguard-home&quot; target=&quot;_blank&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;
  &lt;p id=&quot;GI4D&quot;&gt;Открываем браузер и идём по адресу:&lt;br /&gt;&lt;code&gt;http://&amp;lt;IP-адрес вашего сервера&amp;gt;:3000/&lt;/code&gt;&lt;br /&gt;	•	Придумываем логин и пароль для панели управления.&lt;br /&gt;	•	Следуем инструкции мастера установки.&lt;br /&gt;	•	После завершения попадаем в основное меню.&lt;/p&gt;
  &lt;blockquote id=&quot;OQqJ&quot;&gt;У меня все настройки по умолчанию.&lt;/blockquote&gt;
  &lt;figure id=&quot;nFHu&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://akmalov.com/assets/images/adguard-home-docker-91756aad42811580265320d0188e6913.png&quot; width=&quot;698&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KdHh&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;roRV&quot;&gt;Меняем основной DNS на роутере&lt;/h2&gt;
  &lt;p id=&quot;XKxt&quot;&gt;Тут я лишь могу показать на примере своего роутера Keenetic.&lt;/p&gt;
  &lt;p id=&quot;ukNe&quot;&gt;В настройках &lt;strong&gt;Мои Сети и WiFi -&lt;/strong&gt; &lt;strong&gt;Домашняя сеть&lt;/strong&gt; нужно указать DNS AdGuard. &lt;/p&gt;
  &lt;blockquote id=&quot;4U2l&quot;&gt;Не забываем перед этим указать ему статику. У меня это &lt;code&gt;192.168.10.11&lt;/code&gt;&lt;/blockquote&gt;
  &lt;figure id=&quot;MQLj&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4a/c2/4ac23d3b-9cc2-426f-b895-13a9c6e9b7c4.png&quot; width=&quot;1332&quot; /&gt;
    &lt;figcaption&gt;Обновил этот скрин 05.05.2026 когда понял, что настроил неправильно и думал, что нужно оставить альтернативный сервер роутера, однако в таком случае часть запросов будут ходить мимо AdGuard. Для домашней лабы это ок, но со стороны отказоустойчивости провал, стоит подумать о том, чтобы развернуть на отдельной железке дублирующий сервер, либо на самом роутере.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wk0f&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;jPMj&quot;&gt;Теперь весь трафик домашних устройств будет проходить через AdGuard Home. Устройства в сети автоматически определят этот DNS.&lt;/p&gt;
  &lt;p id=&quot;C1QA&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;0G5g&quot;&gt;Настраиваем фильтрацию рекламы&lt;/h2&gt;
  &lt;p id=&quot;OKvI&quot;&gt;&lt;strong&gt;Фильтры&lt;/strong&gt; - &lt;strong&gt;Черные списки DNS.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;vzYy&quot;&gt;Добавляем чёрные списки - это основной инструмент для блокировки рекламы и вредоносных сайтов.&lt;/p&gt;
  &lt;p id=&quot;nsWu&quot;&gt;Все фильтры находятся в &lt;strong&gt;Добавить черный список&lt;/strong&gt; - &lt;strong&gt;Выбрать из списка.&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;FsZn&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/61/18/611810f1-f1cb-41eb-80c9-c068637b96df.png&quot; width=&quot;2398&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vS5Q&quot;&gt;Я же добавил эти:&lt;/p&gt;
  &lt;ul id=&quot;nQ9B&quot;&gt;
    &lt;li id=&quot;n86h&quot;&gt;AdGuard DNS filter&lt;/li&gt;
    &lt;li id=&quot;OggY&quot;&gt;AdAway Default Blocklist&lt;/li&gt;
    &lt;li id=&quot;gFRo&quot;&gt;1Hosts (Lite)&lt;/li&gt;
    &lt;li id=&quot;YLcG&quot;&gt;AdGuard DNS Popup Hosts filter&lt;/li&gt;
    &lt;li id=&quot;NwSd&quot;&gt;AWAvenue Ads Rule&lt;/li&gt;
    &lt;li id=&quot;A5Fg&quot;&gt;OISD Blocklist Big&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;t5dq&quot;&gt;Фильтры обновляются автоматически, поэтому нет необходимости проверять их актуальность.&lt;/blockquote&gt;
  &lt;p id=&quot;VoxW&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;OtFB&quot;&gt;Upstream DNS-серверы&lt;/h2&gt;
  &lt;p id=&quot;ksOw&quot;&gt;&lt;strong&gt;Настройки&lt;/strong&gt; - &lt;strong&gt;Настройки DNS&lt;/strong&gt; - &lt;strong&gt;Upstream DNS-серверы.&lt;/strong&gt; &lt;/p&gt;
  &lt;p id=&quot;ndpn&quot;&gt;Необходимо указать тип DNS over HTTPS. Их можно взять &lt;a href=&quot;https://adguard-dns.io/kb/ru/general/dns-providers/&quot; target=&quot;_blank&quot;&gt;тут. &lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;7bMT&quot;&gt;Протестировать популярные DOH для вашей сети можно &lt;a href=&quot;https://dnsspeedtest.online/&quot; target=&quot;_blank&quot;&gt;тут.&lt;/a&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;7vHI&quot;&gt;Не рекомендую прописывать великое множество. Разные DNS могут давать разные CDN/IP. Часть запросов уходит во много мест. Сложнее отлаживать. Может быть нестабильность по гео/CDN. Добавьте несколько на свое усмотрение, после смотрите на главной странице Среднее время ответа upstream-сервера. Выбирайте с наименьшим пингом.&lt;/blockquote&gt;
  &lt;p id=&quot;p5LB&quot;&gt;Я установил такие:&lt;/p&gt;
  &lt;pre id=&quot;iwEd&quot; data-lang=&quot;http&quot;&gt;https://common.dot.dns.yandex.net/dns-query
tls://common.dot.dns.yandex.net
https://dns.comss.one/dns-query
https://dns.google/dns-query
https://freedns.controld.com/p0&lt;/pre&gt;
  &lt;p id=&quot;iwEd&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;iwEd&quot;&gt;Проверяем работоспособность через кнопку &lt;strong&gt;TEST Upstream&lt;/strong&gt; - если ошибок нет, всё работает корректно.&lt;/p&gt;
  &lt;p id=&quot;E2qK&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;NAY7&quot;&gt;Bootstrap DNS&lt;/h2&gt;
  &lt;p id=&quot;n7iC&quot;&gt;Оставил только такие , без IPv6.&lt;/p&gt;
  &lt;pre id=&quot;F0FE&quot; data-lang=&quot;dns-zone-file&quot;&gt;1.1.1.1
8.8.8.8
77.88.8.8
9.9.9.10&lt;/pre&gt;
  &lt;h2 id=&quot;2eby&quot;&gt;Перезапись DNS-запросов&lt;/h2&gt;
  &lt;blockquote id=&quot;73oo&quot;&gt;Собственно, ради чего я это всё затеял. &lt;/blockquote&gt;
  &lt;p id=&quot;wMBm&quot;&gt;&lt;strong&gt;Фильтры&lt;/strong&gt; - &lt;strong&gt;Перезапись DNS-запросов&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;6pkl&quot;&gt;Добавляем записи. У меня большая часть ведет через локальный обратный прокси &lt;a href=&quot;https://teletype.in/@fonwa/nginx-proxy-manager&quot; target=&quot;_blank&quot;&gt;Nginx Proxy Manager&lt;/a&gt; (192.168.1.88), на котором уже указаны статические адреса хостов с &lt;a href=&quot;https://teletype.in/@fonwa/selfsigned-ssl&quot; target=&quot;_blank&quot;&gt;самоподписанным сертификатом&lt;/a&gt; home.local и на которые хожу по HTTPS. &lt;/p&gt;
  &lt;blockquote id=&quot;8l85&quot;&gt;AdGuard так же прописан в NPM.&lt;/blockquote&gt;
  &lt;p id=&quot;uzP8&quot;&gt;Даже не имея сертификата, можно указать любое имя, например &lt;code&gt;phanteks.pc&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;0ifQ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/22/62/22626055-25c7-4c24-a95b-adf8692ebfc8.png&quot; width=&quot;2376&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qP9C&quot;&gt;Можно сразу пингануть этот хост&lt;/p&gt;
  &lt;figure id=&quot;Qskr&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/29/e0/29e0c855-cb0f-4d76-a786-e24bb17550f1.png&quot; width=&quot;1204&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;iaGv&quot;&gt;Либо подключиться к нему по RDP&lt;/p&gt;
  &lt;figure id=&quot;Hi8W&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/42/1a/421ab4c7-113e-4da3-aaca-f32cd62a9e98.png&quot; width=&quot;1398&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;uUe1&quot;&gt;Проверяем работу фильтров&lt;/h2&gt;
  &lt;p id=&quot;UA2M&quot;&gt;Для проверки DoH использу сервис Cloudflare - &lt;a href=&quot;https://1.1.1.1/help&quot; target=&quot;_blank&quot;&gt;https://1.1.1.1/help&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;bZ3C&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/da/c0/dac0ac3f-6d74-405d-9df7-d4dd2b8d9ab8.png&quot; width=&quot;1304&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;DSq3&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;EPbW&quot;&gt;Для теста блокировки рекламы - &lt;a href=&quot;https://checkadblock.ru&quot; target=&quot;_blank&quot;&gt;https://checkadblock.ru&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;AoKv&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://akmalov.com/assets/images/dns-block-adds-e95d735acd87349aee149b4c2bd4f5f5.png&quot; width=&quot;995&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;cTUY&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;FbNY&quot;&gt;Больше радует что в черные списки попадают сервисы сбора метрик и блокируется это наглядно. Можно увидеть в статистике главной панели.&lt;/p&gt;
  &lt;figure id=&quot;bXYD&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0e/e8/0ee836a1-9a0e-4752-b010-a6e7b5ffde6a.png&quot; width=&quot;2404&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;aZ4Y&quot;&gt;Где видно как Phanteks активно пытается отправлять телеметрию в Microsoft, но их блокирует Adguard.&lt;/p&gt;
  &lt;p id=&quot;fiY5&quot;&gt;&lt;strong&gt;Дополнительные настройки&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;1nOP&quot;&gt;
    &lt;li id=&quot;EQhw&quot;&gt;Тонкая настройка клиентов - создавайте группы с разными правилами, управляйте белыми и чёрными списками, блокируйте контент 18+.&lt;/li&gt;
    &lt;li id=&quot;8MR6&quot;&gt;Быстрая блокировка популярных сервисов - одним кликом можно ограничить доступ к соцсетям, мессенджерам и другим отвлекающим ресурсам.&lt;/li&gt;
    &lt;li id=&quot;OH2g&quot;&gt;Статистика - на главной панели видно, какие устройства чаще всего обращаются к DNS и что именно блокируется.&lt;br /&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;HFHI&quot;&gt;&lt;strong&gt;Блокировка сервисов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;sKVp&quot;&gt;Позволяет быстро заблокировать популярные сайты и сервисы.&lt;/p&gt;
  &lt;figure id=&quot;8l2N&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/66/52/665234e3-ef0e-40f3-bfbb-9647c94146f6.png&quot; width=&quot;2402&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;итоги&quot;&gt;Итоги&lt;a href=&quot;https://akmalov.com/blog/adguard-home#%D0%B8%D1%82%D0%BE%D0%B3%D0%B8&quot; target=&quot;_blank&quot;&gt;​&lt;/a&gt;&lt;/h2&gt;
  &lt;p id=&quot;CITV&quot;&gt;AdGuard Home - мощный и удобный инструмент для домашнего и офисного использования. Простая установка, гибкая настройка, наглядная статистика и возможность блокировать рекламу на всех устройствах без лишних танцев с бубном. Подходит даже для образовательных учреждений и малого бизнеса.&lt;br /&gt;Собственный DNS - это не только про блокировку рекламы, но и про приватность, контроль и безопасность вашей сети.&lt;/p&gt;
  &lt;p id=&quot;gT3i&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;hDkf&quot;&gt;Мне помогли:&lt;/p&gt;
  &lt;p id=&quot;03G8&quot;&gt;&lt;a href=&quot;https://akmalov.com/blog/adguard-home&quot; target=&quot;_blank&quot;&gt;https://akmalov.com/blog/adguard-home&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>fonwa:selfsigned-ssl</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/selfsigned-ssl?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>Самоподписанный SSL сертификат для внутреннего использования</title><published>2025-04-29T08:02:08.750Z</published><updated>2025-04-30T23:57:26.112Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/19/8d/198d53e4-0004-404c-8543-a9791ca4abce.png"></media:thumbnail><category term="linux" label="Linux"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/6e/90/6e904b72-3b32-43f2-8466-c67c3549c2ac.png&quot;&gt;Как оказалось,  создание SSL-сертификатов – это проще, чем кажется. Достаточно одной команды:</summary><content type="html">
  &lt;figure id=&quot;wM3I&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6e/90/6e904b72-3b32-43f2-8466-c67c3549c2ac.png&quot; width=&quot;782&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Rauj&quot;&gt;Шифрование данных стало неотъемлемой частью современного интернета. Практически весь трафик передается через защищенное HTTPS-соединение, а сайты без шифрования встречаются крайне редко и автоматически помечаются браузерами как небезопасные.&lt;/p&gt;
  &lt;p id=&quot;ZrOk&quot;&gt;Несмотря на предупреждения браузеров о &amp;quot;непроверенных&amp;quot; сертификатах, само шифрование работает корректно. Использование бесплатных сертификатов Lets Encrypt для домашней сети связано со множеством сложностей и затрат:&lt;/p&gt;
  &lt;ul id=&quot;wrpc&quot;&gt;
    &lt;li id=&quot;NSIj&quot;&gt;Покупка домена&lt;/li&gt;
    &lt;li id=&quot;ZY0u&quot;&gt;Скрытие персональных данных&lt;/li&gt;
    &lt;li id=&quot;f7eB&quot;&gt;Настройка DNS-хостинга&lt;/li&gt;
    &lt;li id=&quot;2jdc&quot;&gt;Статический IP или DDNS&lt;/li&gt;
    &lt;li id=&quot;PqHe&quot;&gt;Проброс портов&lt;/li&gt;
    &lt;li id=&quot;wdx4&quot;&gt;Регулярное обновление каждые 3 месяца&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;iWLg&quot;&gt;Поэтому для внутренней сети оптимальным решением являются самоподписанные сертификаты, а Lets Encrypt лучше оставить для внешних сервисов.&lt;/p&gt;
  &lt;p id=&quot;F5YW&quot;&gt;Как оказалось,  создание SSL-сертификатов – это проще, чем кажется. Достаточно одной команды:&lt;/p&gt;
  &lt;pre id=&quot;HHtV&quot; data-lang=&quot;bash&quot;&gt;openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
-keyout homelocal.key -out homelocal.crt -subj &amp;quot;/CN=home.local&amp;quot; \
-addext &amp;quot;subjectAltName=DNS:home.local&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;jdZx&quot;&gt;Эта команда создаст:&lt;/p&gt;
  &lt;ul id=&quot;HiRZ&quot;&gt;
    &lt;li id=&quot;egOZ&quot;&gt;Файл ключа (homelocal.key)&lt;/li&gt;
    &lt;li id=&quot;PYb3&quot;&gt;Файл сертификата (homelocal.crt)&lt;/li&gt;
    &lt;li id=&quot;w6cb&quot;&gt;Срок действия: 10 лет&lt;/li&gt;
    &lt;li id=&quot;LGuE&quot;&gt;Уровень шифрования (rsa:4096, sha256)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;cwAL&quot;&gt;По умолчанию оба файла будут созданы в том каталоге, из которого выполнялась команда.&lt;/blockquote&gt;
  &lt;p id=&quot;lIGk&quot;&gt;Для удобства управления рекомендуется использовать один домен для всей домашней сети (например, home.local) и размещать сервисы на поддоменах:&lt;/p&gt;
  &lt;ul id=&quot;eD1F&quot;&gt;
    &lt;li id=&quot;VsJI&quot;&gt;pve.home.local&lt;/li&gt;
    &lt;li id=&quot;AaLk&quot;&gt;npm.home.local&lt;/li&gt;
    &lt;li id=&quot;lpE3&quot;&gt;adg.home.local&lt;/li&gt;
    &lt;li id=&quot;AQ5R&quot;&gt;nut.home.local&lt;/li&gt;
    &lt;li id=&quot;BDRD&quot;&gt;etc&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;9GG9&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;VBpA&quot;&gt;Чтобы ходить по данным именам, необходимо:&lt;/p&gt;
  &lt;p id=&quot;q5ju&quot;&gt;1. Развернуть 2 сервиса:&lt;/p&gt;
  &lt;ul id=&quot;E6KW&quot;&gt;
    &lt;li id=&quot;6X6j&quot;&gt;DNS - у меня это &lt;a href=&quot;https://teletype.in/@fonwa/adguard-home&quot; target=&quot;_blank&quot;&gt;Adguard Home&lt;/a&gt;, который добавлен на роутере как дополнительный DNS.&lt;/li&gt;
    &lt;li id=&quot;nCbg&quot;&gt;Nginx - у меня это Nginx Proxy Manager, в который добавлен сертификат.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;A3vP&quot;&gt;2. Добавить созданный сертификат в &lt;strong&gt;Доверенные корневые сертификаты&lt;/strong&gt; на Windows или в &lt;strong&gt;Связку ключей&lt;/strong&gt; на macOS&lt;/p&gt;
  &lt;p id=&quot;zljk&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;7Lrx&quot;&gt;Итог: внедрение SSL-сертификатов в домашнюю сеть – простой и эффективный способ защитить данные, который не требует значительных временных и финансовых затрат.&lt;/p&gt;
  &lt;p id=&quot;vTUB&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;xGgo&quot;&gt;Мне помогли:&lt;/p&gt;
  &lt;p id=&quot;5LJG&quot;&gt;&lt;a href=&quot;https://andrey.dvur.me/posts/selfsigned-cert/&quot; target=&quot;_blank&quot;&gt;https://andrey.dvur.me/posts/selfsigned-cert/&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>fonwa:proxmox_hdd_smart</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/proxmox_hdd_smart?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>Как переназначить нечитаемый сектор HDD в Proxmox: пошаговая инструкция</title><published>2025-03-31T08:14:45.025Z</published><updated>2025-04-29T07:16:01.354Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/9e/5f/9e5f1d56-b8fc-4e26-9516-12af18780eb6.png"></media:thumbnail><category term="proxmox" label="Proxmox"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/0f/b2/0fb2edb9-a5a8-4b06-a2a1-273f33094332.jpeg&quot;&gt;В предыдущей статье я описывал, как включить получение уведомлений с Proxmox на Gmail, после чего мне прилетело несколько SMART-алертов по одному диску. Попробуем продлить ему жизнь.</summary><content type="html">
  &lt;p id=&quot;bQCn&quot;&gt;В предыдущей статье я описывал, как включить получение уведомлений с Proxmox на Gmail, после чего мне прилетело несколько SMART-алертов по одному диску. Попробуем продлить ему жизнь.&lt;/p&gt;
  &lt;figure id=&quot;PnXI&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5a/6b/5a6b4108-19bc-42d1-b339-d4124f11d222.png&quot; width=&quot;1454&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;Nd0N&quot;&gt;Почему важно реагировать на SMART-алерты&lt;/h3&gt;
  &lt;p id=&quot;96DN&quot;&gt;SMART-предупреждения (например, о нечитаемых секторах) — серьёзный сигнал о деградации HDD. Это может привести к потере данных, если не предпринять меры. В статье рассмотрим, как диагностировать проблему и принудительно переназначить повреждённый сектор.&lt;/p&gt;
  &lt;p id=&quot;PiKm&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;WZ3Z&quot;&gt;Проверка текущего SMART-статуса &lt;/h2&gt;
  &lt;p id=&quot;RkFN&quot;&gt;Чтобы понять состояние диска, выполняем команду:&lt;/p&gt;
  &lt;pre id=&quot;xOMN&quot; data-lang=&quot;bash&quot;&gt;smartctl -a /dev/sdd&lt;/pre&gt;
  &lt;p id=&quot;tAZ3&quot;&gt;Ключевые параметры для анализа:&lt;/p&gt;
  &lt;ul id=&quot;lGqu&quot;&gt;
    &lt;li id=&quot;7gsY&quot;&gt;&lt;strong&gt;Reallocated_Sector_Ct&lt;/strong&gt; – количество переназначенных секторов (если растёт, диск умирает).&lt;/li&gt;
    &lt;li id=&quot;iX7j&quot;&gt;&lt;strong&gt;Current_Pending_Sector&lt;/strong&gt; – количество секторов, которые ожидают ремапа (если не 0 – диск нестабилен).&lt;/li&gt;
    &lt;li id=&quot;lliG&quot;&gt;&lt;strong&gt;Offline_Uncorrectable&lt;/strong&gt; – количество необратимо повреждённых секторов.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;rO0H&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7f/7e/7f7e5d34-1e2a-464c-91b4-a1add457f244.png&quot; width=&quot;1574&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;S60D&quot;&gt;В моём случае (пример):&lt;/p&gt;
  &lt;ul id=&quot;vQ5m&quot;&gt;
    &lt;li id=&quot;uWCQ&quot;&gt;&lt;code&gt;Current_Pending_Sector = 1&lt;/code&gt; — 1 сектор требует переназначения.&lt;/li&gt;
    &lt;li id=&quot;RxNa&quot;&gt;&lt;code&gt;Reallocated_Sector_Ct = 0&lt;/code&gt; — пока нет переназначенных секторов.&lt;/li&gt;
    &lt;li id=&quot;GxHk&quot;&gt;&lt;code&gt;Power_On_Hours = 24857&lt;/code&gt; — диск отработал ~2.8 года.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;uXsR&quot;&gt;&lt;/h3&gt;
  &lt;h2 id=&quot;vYQl&quot;&gt;Запуск глубокого SMART-теста&lt;/h2&gt;
  &lt;p id=&quot;A5Da&quot;&gt;Для подтверждения ошибки выполняем:&lt;/p&gt;
  &lt;pre id=&quot;1c6g&quot; data-lang=&quot;bash&quot;&gt;smartctl -t long /dev/sdd&lt;/pre&gt;
  &lt;ul id=&quot;SvY7&quot;&gt;
    &lt;li id=&quot;QhCF&quot;&gt;Тест занимает несколько часов.&lt;/li&gt;
    &lt;li id=&quot;T9b7&quot;&gt;После завершения проверяем результаты.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;mJr5&quot; data-lang=&quot;bash&quot;&gt;smartctl -a /dev/sdd  &lt;/pre&gt;
  &lt;p id=&quot;Zc9Y&quot;&gt;Результаты теста в моем случае:&lt;/p&gt;
  &lt;ul id=&quot;VUlH&quot;&gt;
    &lt;li id=&quot;RDCZ&quot;&gt;Ошибка чтения на LBA 4054769360.&lt;/li&gt;
    &lt;li id=&quot;azgd&quot;&gt;&lt;code&gt;Current_Pending_Sector&lt;/code&gt; остался равным 1 — проблема подтверждена.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;f5NQ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/75/d3/75d39ea3-e095-4120-80b7-8f38e08ed062.png&quot; width=&quot;1600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;rikg&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;OAc2&quot;&gt;Принудительная перезапись повреждённого сектора&lt;/h2&gt;
  &lt;h3 id=&quot;ufOH&quot;&gt;Метод 1: Запись нулей в сектор&lt;/h3&gt;
  &lt;p id=&quot;gF6H&quot;&gt;Принудительно записать данные в проблемный сектор (⚠️ Возможна потеря данных на этом секторе!)&lt;/p&gt;
  &lt;pre id=&quot;0XUQ&quot; data-lang=&quot;bash&quot;&gt;dd if=/dev/zero of=/dev/sdd bs=512 count=1 seek=4054769360&lt;/pre&gt;
  &lt;blockquote id=&quot;b6uP&quot;&gt;Это заставит диск либо исправить сектор, либо пометить его как сбойный и заменить на резервный.&lt;/blockquote&gt;
  &lt;p id=&quot;vqLS&quot;&gt;Однако, в моём случае, не получилось переназначить&lt;/p&gt;
  &lt;figure id=&quot;pk1c&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a2/91/a2917440-62c6-4620-9904-b24fa18458a1.png&quot; width=&quot;1200&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;XwFI&quot; data-lang=&quot;bash&quot;&gt;dd: error writing &amp;#x27;/dev/sdd&amp;#x27;: Input/output error&lt;/pre&gt;
  &lt;p id=&quot;JRCJ&quot;&gt;Ошибка означает, что диск &lt;strong&gt;не смог записать данные в указанный сектор&lt;/strong&gt;. Это подтверждает, что сектор физически повреждён и диск &lt;strong&gt;не способен автоматически заменить его на резервный&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;UWlm&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;4r8S&quot;&gt;Метод 2: Форсирование ремапа через hdparm&lt;/h3&gt;
  &lt;p id=&quot;xAEh&quot;&gt;Попробовать форсировать ремап повреждённого сектора:&lt;/p&gt;
  &lt;pre id=&quot;mz2u&quot; data-lang=&quot;bash&quot;&gt;hdparm --write-sector 4054769360 --yes-i-know-what-i-am-doing /dev/sdd&lt;/pre&gt;
  &lt;blockquote id=&quot;PaLa&quot;&gt;Этот метод грубо перезаписывает сектор и может привести к его переназначению.&lt;/blockquote&gt;
  &lt;p id=&quot;O0Rj&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;ccKQ&quot;&gt;Проверка результата&lt;/h3&gt;
  &lt;p id=&quot;JrEx&quot;&gt;После исправления повторно запускаем тест и анализируем SMART-параметры:&lt;/p&gt;
  &lt;pre id=&quot;XwPQ&quot; data-lang=&quot;bash&quot;&gt;smartctl -t long /dev/sdd  
smartctl -a /dev/sdd  &lt;/pre&gt;
  &lt;p id=&quot;aip9&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;cQMs&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6e/a3/6ea30162-f697-4f40-a5a1-91d1d50e98af.png&quot; width=&quot;1596&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;PN2H&quot;&gt;&lt;strong&gt;Обновлённый анализ SMART-статуса&lt;/strong&gt;&lt;/h3&gt;
  &lt;h4 id=&quot;qzSd&quot;&gt;Что изменилось?&lt;/h4&gt;
  &lt;p id=&quot;pMf8&quot;&gt;✅ &lt;code&gt;Current_Pending_Sector&lt;/code&gt; = 0 — сектор либо исправлен, либо переназначен.&lt;br /&gt;✅ &lt;code&gt;Extended offline test&lt;/code&gt; завершился без ошибок.&lt;br /&gt;❗ Отслеживайте &lt;code&gt;Multi_Zone_Error_Rate&lt;/code&gt; — рост показателя требует внимания.&lt;/p&gt;
  &lt;h3 id=&quot;Cfx7&quot;&gt;Итоги и рекомендации&lt;/h3&gt;
  &lt;ol id=&quot;aE1u&quot;&gt;
    &lt;li id=&quot;EnXs&quot;&gt;&lt;strong&gt;Если проблема решена:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;LbD5&quot;&gt;
      &lt;li id=&quot;Ok2x&quot;&gt;Диск стабилен, но продолжайте мониторить SMART-параметры.&lt;/li&gt;
      &lt;li id=&quot;9gfC&quot;&gt;Регулярно запускайте тесты (&lt;code&gt;smartctl -t long&lt;/code&gt;).&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;OZJx&quot;&gt;&lt;strong&gt;Если сектор неисправим:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;EjGv&quot;&gt;
      &lt;li id=&quot;11xj&quot;&gt;&lt;code&gt;Reallocated_Sector_Ct&lt;/code&gt; &amp;gt; 0 — диск начинает «умирать».&lt;/li&gt;
      &lt;li id=&quot;mcLk&quot;&gt;Замените его как можно скорее.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;ffm0&quot;&gt;Важно:&lt;/h3&gt;
  &lt;p id=&quot;iPq0&quot;&gt;Не игнорируйте SMART-предупреждения! Даже единичный повреждённый сектор может стать началом более серьёзных проблем.&lt;/p&gt;
  &lt;p id=&quot;Fca0&quot;&gt;👉 Подписывайтесь на мой канал для полезных гайдов!&lt;/p&gt;

</content></entry><entry><id>fonwa:proxmox_gmail</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/proxmox_gmail?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>Уведомления Proxmox на Gmail</title><published>2025-03-25T18:12:46.769Z</published><updated>2025-04-29T07:17:10.847Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/ea/e3/eae357d4-381d-4b02-bdde-35aa1fc45ffd.png"></media:thumbnail><category term="proxmox" label="Proxmox"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/7a/6a/7a6aa96b-111e-438d-928e-afe66c76e87d.png&quot;&gt;У меня нет собственного почтового сервера на домашней лабе, а уведомления иногда нужны. Из решений на просторах нашел следующую реализацию, которой хочу поделиться.</summary><content type="html">
  &lt;p id=&quot;7dQQ&quot;&gt;У меня нет собственного почтового сервера на домашней лабе, а уведомления иногда нужны. Из решений на просторах нашел следующую реализацию, которой хочу поделиться.&lt;/p&gt;
  &lt;p id=&quot;5yXw&quot;&gt;Подключаемся по SSH к нашему узлу Proxmox и авторизуемся в системе как пользователь root. &lt;/p&gt;
  &lt;p id=&quot;xsoM&quot;&gt;Выполняем команды, чтобы загрузить дополнительные программные зависимости, которые нам понадобятся.&lt;/p&gt;
  &lt;pre id=&quot;F5sc&quot; data-lang=&quot;bash&quot;&gt;apt update 
apt install -y libsasl2-модули mailutils&lt;/pre&gt;
  &lt;p id=&quot;61Uw&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;rGO8&quot;&gt;Включаем двухфакторную аутентификацию для учётной записи Gmail, которая будет использоваться, перейдя в &lt;a href=&quot;https://myaccount.google.com/security&quot; target=&quot;_blank&quot;&gt;настройки безопасности.&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;cyFP&quot;&gt;Создаём пароль приложения для своей учетной записи.&lt;/p&gt;
  &lt;ol id=&quot;F0n6&quot;&gt;
    &lt;li id=&quot;EhQH&quot;&gt;Перейти к &lt;a href=&quot;https://security.google.com/settings/security/apppasswords&quot; target=&quot;_blank&quot;&gt;Паролям приложения.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;6Wej&quot;&gt;Введите: &lt;code&gt;Proxmox&lt;/code&gt; или то, как собираетесь идентифицировать этот пароль в дальнейшем.&lt;/li&gt;
    &lt;li id=&quot;TXsu&quot;&gt;Выбираем &lt;strong&gt;Создать.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;1yCp&quot;&gt;Сохраняем пароль.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;Zqct&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0c/39/0c3900ba-0de4-448a-a344-31b83b1857c0.png&quot; width=&quot;717&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;rgc1&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;VkwN&quot;&gt;Вводим учётные данные Gmail в файл&lt;/p&gt;
  &lt;blockquote id=&quot;hRNV&quot;&gt;Нужно заменить на свои&lt;/blockquote&gt;
  &lt;pre id=&quot;gut7&quot; data-lang=&quot;bash&quot;&gt;echo &amp;quot;smtp.gmail.com youremail@gmail.com:yourpassword&amp;quot; &amp;gt; /etc/postfix/sasl_passwd

# chmod u=rw
chmod 600 /etc/postfix/sasl_passwd

# generate /etc/postfix/sasl_passwd.db
postmap hash:/etc/postfix/sasl_passwd&lt;/pre&gt;
  &lt;p id=&quot;ehkZ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;AW6o&quot;&gt;Открываем файл конфигурации Postfix  &lt;/p&gt;
  &lt;pre id=&quot;GZwU&quot; data-lang=&quot;bash&quot;&gt;nano /etc/postfix/main.cf&lt;/pre&gt;
  &lt;p id=&quot;Nviz&quot;&gt;Добавляем следующее в конец файла:&lt;/p&gt;
  &lt;pre id=&quot;w1Bb&quot; data-lang=&quot;bash&quot;&gt;relayhost = smtp.gmail.com:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/Entrust_Root_Certification_Authority.pem
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache
smtp_tls_session_cache_timeout = 3600s&lt;/pre&gt;
  &lt;blockquote id=&quot;2WI6&quot;&gt;&lt;strong&gt;ВАЖНО&lt;/strong&gt;: закомментируйте существующую строку, содержащую только &lt;code&gt;relayhost=&lt;/code&gt;, поскольку мы используем этот ключ в нашей конфигурации, которую мы только что вставили.&lt;/blockquote&gt;
  &lt;p id=&quot;kBV1&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;2lkQ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/06/5b/065bb6eb-5365-4215-8380-7ecb2f27f63c.png&quot; width=&quot;1678&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;SS0U&quot;&gt;Сохраняем и закрываем&lt;/p&gt;
  &lt;p id=&quot;9QYs&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;sfA4&quot;&gt;Перезагружаем postfix&lt;/p&gt;
  &lt;pre id=&quot;gLhS&quot; data-lang=&quot;bash&quot;&gt;postfix reload&lt;/pre&gt;
  &lt;p id=&quot;yczO&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;gFMj&quot;&gt;Протестируйте, чтобы убедиться, что все в порядке, либо создайте бекап любой ВМ.&lt;/p&gt;
  &lt;pre id=&quot;0kPC&quot; data-lang=&quot;bash&quot;&gt;echo &amp;quot;sample message&amp;quot; | mail -s &amp;quot;sample subject&amp;quot; anotheremail@gmail.com&lt;/pre&gt;
  &lt;p id=&quot;rhbP&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;wzzg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5b/e4/5be468ff-9659-45a6-8420-c8a0bb3d3238.png&quot; width=&quot;1030&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;JtG6&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;9KJL&quot;&gt;Мне помогли:&lt;/p&gt;
  &lt;p id=&quot;luDk&quot;&gt;&lt;a href=&quot;https://gist.github.com/tomdaley92/9315b9326d4589c9652ce0307c9c38a3&quot; target=&quot;_blank&quot;&gt;https://gist.github.com/tomdaley92/9315b9326d4589c9652ce0307c9c38a3&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>fonwa:proxmox_nut_synology</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/proxmox_nut_synology?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>Настройка NUT + Proxmox + Synology</title><published>2025-03-21T14:04:43.102Z</published><updated>2025-05-15T07:40:23.692Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/37/ce/37cec8f9-5783-4012-a74f-d657099239ae.png"></media:thumbnail><category term="proxmox" label="Proxmox"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/5d/f0/5df0cc65-a766-4c46-915d-568381ecaa25.png&quot;&gt;У меня в Proxmox развернут DSM (XPEnology). Я недавно переехал и сейчас тут периодические проблемы с электричеством, которые у меня ранее не возникали. Приобрел 1 из доступных ИБП - CyberPower UT850EIG c IEC розетками.</summary><content type="html">
  &lt;p id=&quot;xmRw&quot;&gt;У меня в Proxmox развернут DSM (XPEnology). Я недавно переехал и сейчас тут периодические проблемы с электричеством, которые у меня ранее не возникали. Приобрел 1 из доступных ИБП - CyberPower UT850EIG c IEC розетками.&lt;/p&gt;
  &lt;p id=&quot;Dx4c&quot;&gt;После прочтения двух статей была найдена интересная реализация, которую я успешно применил на своем сервере.&lt;/p&gt;
  &lt;p id=&quot;OwrC&quot;&gt;В целом, как показала практика, любой UPS с USB можно подружить с Proxmox и прокинуть в DSM как ИБП Synology, несмотря на отсутствие поддержки ИБП в списке моделей для Synology.&lt;/p&gt;
  &lt;blockquote id=&quot;vCC8&quot;&gt;Суть реализации в настройке NUT сервера и клиента прямо на машине с Proxmox для контроля ИБП и поведения при изменении статуса батарей. Дополнительно же установим LXC контейнер с NUT клиентом и веб-сервером Apache для мониторинга состояния ИБП без использования консоли. В конце добавим ИБП в Synology.&lt;/blockquote&gt;
  &lt;p id=&quot;dDjw&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;A20T&quot;&gt;Настройка NUT сервера и клиента на сервере с Proxmox&lt;/h3&gt;
  &lt;p id=&quot;Q3Ds&quot;&gt;Заходим в консоль машины, на которой установлен Proxmox (в моем случае версии 8.3.0) и смотрим список usb устройств командой:&lt;/p&gt;
  &lt;pre id=&quot;yfLT&quot; data-lang=&quot;bash&quot;&gt;lsusb&lt;/pre&gt;
  &lt;p id=&quot;sn77&quot;&gt;Нам нужно найти наш ИБП и узнать его bus и device:&lt;/p&gt;
  &lt;figure id=&quot;lmFz&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5d/f0/5df0cc65-a766-4c46-915d-568381ecaa25.png&quot; width=&quot;1284&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ovzr&quot;&gt;Теперь посмотрим детальную информацию, указав bus и device, в моем случае:&lt;/p&gt;
  &lt;pre id=&quot;7KlL&quot; data-lang=&quot;bash&quot;&gt;lsusb -v -s 3:5&lt;/pre&gt;
  &lt;p id=&quot;czvJ&quot;&gt;где 3 - шина (bus), 5 - устройство (device)&lt;/p&gt;
  &lt;figure id=&quot;AMQZ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/da/dc/dadc9b87-41ab-4c09-a652-2d4ebf76f1fe.png&quot; width=&quot;1470&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;1Gle&quot;&gt;Как видно, система распознает ИБП и можно приступать к установке nut:&lt;/p&gt;
  &lt;pre id=&quot;vpCZ&quot; data-lang=&quot;bash&quot;&gt;apt install nut -y&lt;/pre&gt;
  &lt;p id=&quot;6BLU&quot;&gt;Проверяем, видит ли nut наш ИБП:&lt;/p&gt;
  &lt;pre id=&quot;J3xB&quot; data-lang=&quot;bash&quot;&gt;nut-scanner -U&lt;/pre&gt;
  &lt;figure id=&quot;vYFK&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fb/45/fb45fc1c-d6d1-4836-85da-708a7d900cf9.png&quot; width=&quot;1128&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dLUV&quot;&gt;Перед правкой конфигов, на всякий случай, лучше сделать резервные копии всех этих файлов:&lt;/p&gt;
  &lt;pre id=&quot;fbrw&quot; data-lang=&quot;bash&quot;&gt;cp /etc/nut/nut.conf /etc/nut/nut.example.conf
cp /etc/nut/ups.conf /etc/nut/ups.example.conf
cp /etc/nut/upsd.conf /etc/nut/upsd.example.conf
cp /etc/nut/upsd.users /etc/nut/upsd.example.users
cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf
cp /etc/nut/upssched.conf /etc/nut/upssched.example.conf
cp /bin/upssched-cmd /bin/upssched-cmd.example&lt;/pre&gt;
  &lt;p id=&quot;EvH9&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;IIEq&quot;&gt;Теперь перейдем к правке. Первый на очереди &lt;code&gt;nut.conf&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;wSro&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/nut.conf&lt;/pre&gt;
  &lt;p id=&quot;DCjI&quot;&gt;Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;AzRr&quot; data-lang=&quot;bash&quot;&gt;MODE=netserver&lt;/pre&gt;
  &lt;p id=&quot;8NbB&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;nJO5&quot;&gt;Далее редактируем &lt;code&gt;ups.conf&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;LCyx&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/ups.conf&lt;/pre&gt;
  &lt;p id=&quot;dpE1&quot;&gt;Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;4Nju&quot; data-lang=&quot;bash&quot;&gt;# pollinterval и maxretry работают вместе для надежного мониторинга
# Определяет частоту опроса состояния ИБП (в секундах)
pollinterval = 15
# Количество попыток повторного подключения к ИБП при потере связи
# Если после 3 попыток связь не восстановится, система считает ИБП недоступным
maxretry = 3

# offdelay и ondelay образуют временную защиту для процессов выключения/включения
# Задержка перед фактическим выключением питания после команды на shutdown (в секундах)
# Это время дается системе на:
#     Корректное завершение работы всех служб
#     Сохранение данных
#     Выполнение процедур очистки
offdelay = 300
# Задержка перед включением питания после восстановления основного электропитания (в секундах)
# Это предотвращает:
#     Многократные циклы включения/выключения при нестабильном питании
#     Слишком быстрое включение до полной стабилизации напряжения
ondelay = 30

[ups]
   driver = usbhid-ups
   port = auto
   desc = &amp;quot;CyberPower UT850EG&amp;quot;
   vendorid = 0764
   productid = 0501
   serial = &amp;quot;&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;zQuV&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;THBQ&quot;&gt;Обратите внимание, что все данные по своему ИБП я брал из вывода команд, указанных выше. В квадратных скобках имя ups оставляем как есть для Synology. &lt;/p&gt;
  &lt;blockquote id=&quot;4eUK&quot;&gt;Необходимо настроить файл ups.conf на сервере NUT, чтобы ИБП назывался «ups». Он не может называться как-то иначе. В противном случае Synology откажется подключаться.&lt;/blockquote&gt;
  &lt;p id=&quot;8dHD&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;nHDZ&quot;&gt;Сохраняем файл и можем протестировать драйвер:&lt;/p&gt;
  &lt;pre id=&quot;VaFA&quot; data-lang=&quot;bash&quot;&gt;upsdrvctl start&lt;/pre&gt;
  &lt;figure id=&quot;3hSM&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e5/2d/e52d7aa3-4cef-4d1d-9b29-b2a5a4094bdd.png&quot; width=&quot;910&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;DRUP&quot;&gt;Если что-то неверно распознается, проверьте &lt;a href=&quot;https://networkupstools.org/stable-hcl.html&quot; target=&quot;_blank&quot;&gt;список совместимого оборудования&lt;/a&gt; чтобы узнать, какой драйвер использовать.&lt;/p&gt;
  &lt;p id=&quot;4w9H&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;ft1d&quot;&gt;Отредактируем &lt;code&gt;upsd.conf&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;lXFJ&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/upsd.conf&lt;/pre&gt;
  &lt;p id=&quot;36xS&quot;&gt;Дадим указание серверу отвечать на запросы из всех сетей. Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;5Md6&quot; data-lang=&quot;bash&quot;&gt;LISTEN 0.0.0.0 3493
LISTEN :: 3493&lt;/pre&gt;
  &lt;p id=&quot;61Ry&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;mJ5I&quot;&gt;Далее редактируем &lt;code&gt;upsd.users&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;W0Ks&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/upsd.users&lt;/pre&gt;
  &lt;p id=&quot;F2Hb&quot;&gt;Настроим администратора и пользователя. Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;kMqQ&quot; data-lang=&quot;bash&quot;&gt;[upsadmin]
# Administrative user
password = ********
# Allow changing values of certain variables in the UPS.
actions = SET
# Allow setting the &amp;quot;Forced Shutdown&amp;quot; flag in the UPS.
actions = FSD
# Allow all instant commands
instcmds = ALL
upsmon master

[upsuser]
# Normal user
password = ********
upsmon slave

[monuser]
# DSM user
password = secret
admin slave&lt;/pre&gt;
  &lt;blockquote id=&quot;AdMq&quot;&gt;Нужно создать пользователя на сервере NUT (в uspd.users) с именем «admin» и паролем «secret». Я безуспешно пытался подключить Synology к серверу NUT, используя менее очевидное имя пользователя и сложный пароль, но безрезультатно.&lt;/blockquote&gt;
  &lt;p id=&quot;QyvH&quot;&gt;Замените звездочки на ваши пароли.&lt;/p&gt;
  &lt;p id=&quot;TnTU&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;0YGL&quot;&gt;Редактируем &lt;code&gt;upsmon.conf&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;GUWI&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/upsmon.conf&lt;/pre&gt;
  &lt;p id=&quot;EviU&quot;&gt;Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;8oLM&quot; data-lang=&quot;bash&quot;&gt;RUN_AS_USER root
MONITOR ups@localhost 1 upsadmin ******* master

MINSUPPLIES 1
SHUTDOWNCMD &amp;quot;/sbin/shutdown -h now&amp;quot;
NOTIFYCMD /usr/sbin/upssched
POLLFREQ 4
POLLFREQALERT 2
HOSTSYNC 15
DEADTIME 24
MAXAGE 24
POWERDOWNFLAG /etc/killpower

NOTIFYMSG ONLINE &amp;quot;UPS %s on line power&amp;quot;
NOTIFYMSG ONBATT &amp;quot;UPS %s on battery&amp;quot;
NOTIFYMSG LOWBATT &amp;quot;UPS %s battary is low&amp;quot;
NOTIFYMSG FSD &amp;quot;UPS %s: forced shutdown in progress&amp;quot;
NOTIFYMSG COMMOK &amp;quot;Communications with UPS %s established&amp;quot;
NOTIFYMSG COMMBAD &amp;quot;Communications with UPS %s lost&amp;quot;
NOTIFYMSG SHUTDOWN &amp;quot;Auto logout and shutdown proceeding&amp;quot;
NOTIFYMSG REPLBATT &amp;quot;UPS %s battery needs to be replaced&amp;quot;
NOTIFYMSG NOCOMM &amp;quot;UPS %s is unavailable&amp;quot;
NOTIFYMSG NOPARENT &amp;quot;upsmon parent process died - shutdown impossible&amp;quot;

NOTIFYFLAG ONLINE   SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT   SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT  SYSLOG+WALL+EXEC
NOTIFYFLAG FSD      SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK   SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD  SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL
NOTIFYFLAG NOCOMM   SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL

RBWARNTIME 43200
NOCOMMWARNTIME 600

FINALDELAY 5&lt;/pre&gt;
  &lt;p id=&quot;4Uvs&quot;&gt;Не забудьте заменить звездочки на ваш пароль администратора во второй строчке.&lt;/p&gt;
  &lt;p id=&quot;EaLq&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;81rR&quot;&gt;Редактируем &lt;code&gt;upssched.conf&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;PlGt&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/upssched.conf&lt;/pre&gt;
  &lt;p id=&quot;Jm8N&quot;&gt;Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;CgZZ&quot; data-lang=&quot;bash&quot;&gt;CMDSCRIPT /bin/upssched-cmd
PIPEFN /etc/nut/upssched.pipe
LOCKFN /etc/nut/upssched.lock

AT ONBATT * START-TIMER shutdown_proxmox 100
AT ONLINE * CANCEL-TIMER shutdown_proxmox online
AT LOWBATT * EXECUTE shutdown_proxmox
AT COMMBAD * START-TIMER commbad 30
AT COMMOK * CANCEL-TIMER commbad commok
AT NOCOMM * EXECUTE commbad
AT SHUTDOWN * EXECUTE shutdown_proxmox&lt;/pre&gt;
  &lt;blockquote id=&quot;R5hX&quot;&gt;&lt;code&gt;START-TIMER shutdown_proxmox 120&lt;/code&gt; — запускает таймер на 2 минуты для выключения Proxmox после перехода на батарею.&lt;br /&gt;&lt;code&gt;CANCEL-TIMER shutdown_proxmox online&lt;/code&gt; — отменяет таймер, если питание восстановилось до истечения времени.&lt;br /&gt;&lt;code&gt;EXECUTE shutdown_proxmox&lt;/code&gt; — немедленно выполняет выключение при критическом уровне заряда батареи или других событиях.&lt;/blockquote&gt;
  &lt;p id=&quot;dgEk&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;6cli&quot;&gt;Как это будет работать?&lt;/h3&gt;
  &lt;ol id=&quot;xxJz&quot;&gt;
    &lt;li id=&quot;2I4t&quot;&gt;Переход на батарею:&lt;/li&gt;
    &lt;ul id=&quot;cHQV&quot;&gt;
      &lt;li id=&quot;9XVj&quot;&gt;Когда ИБП переходит на батарею (&lt;code&gt;ONBATT&lt;/code&gt;), запускается таймер на 2 минуты.&lt;/li&gt;
      &lt;li id=&quot;pVI3&quot;&gt;Если за это время питание не восстановится, через 2 минуты выполнится команда &lt;code&gt;shutdown_proxmox&lt;/code&gt;.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;kdDB&quot;&gt;Восстановление питания:&lt;/li&gt;
    &lt;ul id=&quot;RRZQ&quot;&gt;
      &lt;li id=&quot;rpux&quot;&gt;Если питание восстановится до истечения 2 минут, таймер будет отменен, и система продолжит работу.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;Lek3&quot;&gt;Критический уровень батареи:&lt;/li&gt;
    &lt;ul id=&quot;IUyz&quot;&gt;
      &lt;li id=&quot;uKNl&quot;&gt;Если батарея разрядится до критического уровня, выполнится немедленное выключение.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;nMY0&quot;&gt;Потеря связи с ИБП:&lt;/li&gt;
    &lt;ul id=&quot;E0ev&quot;&gt;
      &lt;li id=&quot;svQP&quot;&gt;Если связь с ИБП потеряна более чем на 30 секунд, система также выполнит выключение.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;mMqi&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;blpZ&quot;&gt;Нужно убедиться, что PIPEFN и LOCKFN указывают на существующую директорию. У меня ее не было, поэтому я ее создал.&lt;/p&gt;
  &lt;pre id=&quot;MF6A&quot; data-lang=&quot;bash&quot;&gt;mkdir /etc/nut/upssched/&lt;/pre&gt;
  &lt;p id=&quot;8QVW&quot;&gt;Редактируем upssched-cmd:&lt;/p&gt;
  &lt;pre id=&quot;pHTg&quot; data-lang=&quot;bash&quot;&gt;nano /bin/upssched-cmd&lt;/pre&gt;
  &lt;p id=&quot;NNGd&quot;&gt;Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;daht&quot; data-lang=&quot;bash&quot;&gt;#!/bin/bash

case $1 in
    shutdown_proxmox)
        logger -t upssched-cmd &amp;quot;UPS on battery too long — shutting down Proxmox&amp;quot;
        /sbin/shutdown -h now
        ;;
    *)
        logger -t upssched-cmd &amp;quot;Unknown command from upssched: $1&amp;quot;
        ;;
esac&lt;/pre&gt;
  &lt;blockquote id=&quot;RRrh&quot;&gt;При получении команды &lt;code&gt;shutdown_proxmox&lt;/code&gt; система логгирует сообщение и выполняет выключение командой &lt;code&gt;/sbin/shutdown -h now&lt;/code&gt;.&lt;/blockquote&gt;
  &lt;h3 id=&quot;Bj79&quot;&gt;Сохраняем, затем предоставляем права:&lt;/h3&gt;
  &lt;pre id=&quot;ARxC&quot; data-lang=&quot;bash&quot;&gt;chmod +x /bin/upssched-cmd&lt;/pre&gt;
  &lt;p id=&quot;XDQ0&quot;&gt;Осталось перезагрузить систему, или, если нет такой возможности, перезагрузить сервисы командами:&lt;/p&gt;
  &lt;pre id=&quot;1a2u&quot; data-lang=&quot;bash&quot;&gt;systemctl restart nut-server
systemctl restart nut-client
systemctl restart nut-monitor
upsdrvctl stop
upsdrvctl start&lt;/pre&gt;
  &lt;p id=&quot;zLgK&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;3yIA&quot;&gt;После перезагрузки выполняем команду:&lt;/p&gt;
  &lt;pre id=&quot;k5DG&quot; data-lang=&quot;bash&quot;&gt;upsc ups@localhost&lt;/pre&gt;
  &lt;p id=&quot;vwpe&quot;&gt;и смотрим, показана ли информация о нашем ИБП:&lt;/p&gt;
  &lt;figure id=&quot;PplO&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3a/a7/3aa72fe8-2cfa-441f-a73c-664669031545.png&quot; width=&quot;1060&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pK00&quot;&gt;Проверяем, какие значения мы можем записывать&lt;/p&gt;
  &lt;pre id=&quot;xufr&quot; data-lang=&quot;bash&quot;&gt;upscmd -l ups@localhost&lt;/pre&gt;
  &lt;figure id=&quot;XwLK&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/88/07/88076aca-4d73-43b2-8850-a93b7746aa4f.png&quot; width=&quot;1060&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;zoHr&quot;&gt;В моем ИБП не оказалось возможности &lt;u&gt;аппаратно&lt;/u&gt; записать значения минимального времени работы (200 секунд) и заряда (50%), но оставлю эти команды тут:&lt;/p&gt;
  &lt;pre id=&quot;3sBZ&quot; data-lang=&quot;bash&quot;&gt;upsrw -s battery.runtime.low=200 ups@localhost
upsrw -s battery.charge.low=50 ups@localhost&lt;/pre&gt;
  &lt;blockquote id=&quot;rlyf&quot;&gt;После ввода каждой команды будет запрошен логин и пароль, используйте логин upsadmin и пароль, который вы указывали при редактировании /etc/nut/upsmon.conf и /etc/nut/upsd.users. После ввода команд система будет возвращать ОК, даже если изменения нельзя записать. &lt;br /&gt;Перезагружаем сервисы/сервер.&lt;/blockquote&gt;
  &lt;blockquote id=&quot;8FDM&quot;&gt;Эти команды не настраивают автоматическое отключение хоста, а задаются критические значения для самого ИБП. &lt;br /&gt;Так же, я заметил, что на моем ИБП нет возможности изменить параметр battery.charge.low. Рекомендую проверить изменения предыдущей командой, которая выводит ваши значения по ИБП.&lt;/blockquote&gt;
  &lt;p id=&quot;f9Ck&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;SgNU&quot;&gt;Однако, можно программно записать значения в &lt;code&gt;ups.conf&lt;/code&gt;, добавив мониторинг нагрузки через override:&lt;/p&gt;
  &lt;pre id=&quot;JoEA&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/ups.conf&lt;/pre&gt;
  &lt;pre id=&quot;QQH2&quot; data-lang=&quot;bash&quot;&gt;override.battery.charge.low = 50
override.battery.runtime.low = 200&lt;/pre&gt;
  &lt;p id=&quot;VxFg&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;N5oB&quot;&gt;Тогда содержимое &lt;code&gt;ups.conf&lt;/code&gt; будет выглядеть так:&lt;/p&gt;
  &lt;pre id=&quot;daYE&quot; data-lang=&quot;bash&quot;&gt;pollinterval = 15
maxretry = 3

offdelay = 300
ondelay = 30

[ups]
   driver = usbhid-ups
   port = auto
   desc = &amp;quot;CyberPower UT850EG&amp;quot;
   vendorid = 0764
   productid = 0501
   serial = &amp;quot;&amp;quot;
   override.battery.charge.low = 50
   override.battery.runtime.low = 200&lt;/pre&gt;
  &lt;p id=&quot;AzmW&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;P53x&quot;&gt;После внесения изменений проверяем той же командой:&lt;/p&gt;
  &lt;pre id=&quot;lV2D&quot; data-lang=&quot;bash&quot;&gt;upsc ups@localhost&lt;/pre&gt;
  &lt;figure id=&quot;l3uz&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/eb/baeb3aa6-3020-483b-8f1d-49940c51c42f.png&quot; width=&quot;868&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Qz0W&quot;&gt;И видим, что конфиг применился.&lt;/p&gt;
  &lt;p id=&quot;we1c&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;gy67&quot;&gt;Как это вообще все работает? &lt;/h3&gt;
  &lt;blockquote id=&quot;324l&quot;&gt;Да я сам не сразу понял. &lt;/blockquote&gt;
  &lt;p id=&quot;vmJg&quot;&gt;Порядок приоритетов работы системы:&lt;/p&gt;
  &lt;p id=&quot;9mZI&quot;&gt;1. Сначала проверяются override параметры:&lt;/p&gt;
  &lt;ul id=&quot;Xv9W&quot;&gt;
    &lt;li id=&quot;gDlq&quot;&gt;override.battery.charge.low (50%)&lt;/li&gt;
    &lt;li id=&quot;qVMY&quot;&gt;override.battery.runtime.low (200 секунд)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;XbH1&quot;&gt;2. Потом срабатывают таймеры из upssched.conf:&lt;/p&gt;
  &lt;ul id=&quot;8sXA&quot;&gt;
    &lt;li id=&quot;aFlh&quot;&gt;AT ONBATT запускает таймер на 120 секунд&lt;/li&gt;
    &lt;li id=&quot;zUfe&quot;&gt;AT LOWBATT может прервать процесс раньше&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Ga0t&quot;&gt;3. В конце учитываются временные задержки:&lt;/p&gt;
  &lt;ul id=&quot;tYR7&quot;&gt;
    &lt;li id=&quot;bQiB&quot;&gt;offdelay (300 секунд) - должно быть ≥ времени таймера&lt;/li&gt;
    &lt;li id=&quot;lFhy&quot;&gt;ondelay (30 секунд)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;zFWM&quot;&gt;Рекомендации по согласованию значений:&lt;/p&gt;
  &lt;ol id=&quot;MKou&quot;&gt;
    &lt;li id=&quot;UMxe&quot;&gt;override.battery.runtime.low ≤ offdelay&lt;/li&gt;
    &lt;li id=&quot;6m8Z&quot;&gt;таймер в AT ONBATT ≤ override.battery.runtime.low&lt;/li&gt;
    &lt;li id=&quot;1Iw8&quot;&gt;override.battery.charge.low &amp;lt; override.battery.runtime.low&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;5h7L&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;zVGZ&quot;&gt;Создание и настройка LXC контейнера для мониторинга ИБП&lt;/h3&gt;
  &lt;p id=&quot;X9Fo&quot;&gt;В принципе, на стороне сервера уже все настроено и сервер будет отключаться в соответствии с настройками NUT, но для удобства можно настроить веб страничку с данными об ИБП. Я это сделал в отдельном LXC контейнере.&lt;/p&gt;
  &lt;p id=&quot;lP6W&quot;&gt;Характеристики: 1 ядро, 128мб ОЗУ, 2гб диск, ubuntu 24.04, автозапуск контейнера при загрузке. &lt;/p&gt;
  &lt;figure id=&quot;y7vF&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://kvvhost.ru/wp-content/uploads/2024/07/lxc.png&quot; width=&quot;361&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FiDe&quot;&gt;Первым делом, после запуска контейнера, заходим в его консоль и выполняем обновление:&lt;/p&gt;
  &lt;pre id=&quot;km7Q&quot; data-lang=&quot;bash&quot;&gt;apt update &amp;amp;&amp;amp; apt upgrade -y&lt;/pre&gt;
  &lt;p id=&quot;h8Xh&quot;&gt;Затем ставим openssh-server. &lt;/p&gt;
  &lt;pre id=&quot;cZjE&quot; data-lang=&quot;bash&quot;&gt;apt install openssh-server -y&lt;/pre&gt;
  &lt;p id=&quot;xfSG&quot;&gt;Далее изменим конфиг&lt;/p&gt;
  &lt;pre id=&quot;rAhl&quot; data-lang=&quot;bash&quot;&gt;nano /etc/ssh/sshd_config&lt;/pre&gt;
  &lt;p id=&quot;BRLW&quot;&gt;Нужно раскомментировать или добавить следующие строчки:&lt;/p&gt;
  &lt;pre id=&quot;X10K&quot; data-lang=&quot;bash&quot;&gt;PasswordAuthentication yes
PermitRootLogin yes&lt;/pre&gt;
  &lt;p id=&quot;L2aQ&quot;&gt;Сохраняем и перезапускаем openssh сервер:&lt;/p&gt;
  &lt;pre id=&quot;HY6a&quot; data-lang=&quot;bash&quot;&gt;systemctl restart ssh&lt;/pre&gt;
  &lt;p id=&quot;557Z&quot;&gt;Установим веб-сервер Apache, nut-cgi и nut клиент:&lt;/p&gt;
  &lt;pre id=&quot;WTzP&quot; data-lang=&quot;bash&quot;&gt;apt install apache2 nut-cgi nut-client -y&lt;/pre&gt;
  &lt;p id=&quot;WK32&quot;&gt;Сразу сделаем резервные копии всех редактируемых конфигов:&lt;/p&gt;
  &lt;pre id=&quot;sHVc&quot; data-lang=&quot;bash&quot;&gt;cp /etc/nut/nut.conf /etc/nut/nut.example.conf
cp /etc/nut/hosts.conf /etc/nut/hosts.example.conf
cp /etc/nut/upsset.conf /etc/nut/upsset.example.conf
cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf&lt;/pre&gt;
  &lt;p id=&quot;oMdC&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;PXqv&quot;&gt;Редактируем /etc/nut/nut.conf:&lt;/p&gt;
  &lt;pre id=&quot;M9zS&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/nut.conf&lt;/pre&gt;
  &lt;p id=&quot;sClP&quot;&gt;Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;Bgsj&quot; data-lang=&quot;bash&quot;&gt;MODE=netclient&lt;/pre&gt;
  &lt;p id=&quot;EM8d&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;1zIb&quot;&gt;Далее редактируем /etc/nut/hosts.conf:&lt;/p&gt;
  &lt;pre id=&quot;zq1H&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/hosts.conf&lt;/pre&gt;
  &lt;p id=&quot;idI3&quot;&gt;Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;a3BI&quot; data-lang=&quot;bash&quot;&gt;MONITOR ups@xxx.xxx.xxx.xxx &amp;quot;CyberPower UT850IEG&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;ODCO&quot;&gt;где xxx.xxx.xxx.xxx это ip адрес вашего сервера Proxmox&lt;/p&gt;
  &lt;p id=&quot;r1Yi&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;jYZ5&quot;&gt;Редактируем/etc/nut/upsset.conf:&lt;/p&gt;
  &lt;pre id=&quot;3Wfm&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/upsset.conf&lt;/pre&gt;
  &lt;p id=&quot;jaBw&quot;&gt;Удаляем все и добавляем:&lt;/p&gt;
  &lt;pre id=&quot;z9kF&quot; data-lang=&quot;bash&quot;&gt;I_HAVE_SECURED_MY_CGI_DIRECTORY&lt;/pre&gt;
  &lt;p id=&quot;lHPJ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;1vtd&quot;&gt;Редактируем /etc/nut/upsmon.conf:&lt;/p&gt;
  &lt;pre id=&quot;p3tD&quot; data-lang=&quot;bash&quot;&gt;nano /etc/nut/upsmon.conf&lt;/pre&gt;
  &lt;p id=&quot;cfCY&quot;&gt;Добавляем вначале:&lt;/p&gt;
  &lt;pre id=&quot;XUqx&quot; data-lang=&quot;bash&quot;&gt;RUN_AS_USER root
MONITOR ups@xxx.xxx.xxx.xxx 1 upsuser ******* slave&lt;/pre&gt;
  &lt;p id=&quot;oXwS&quot;&gt;где xxx.xxx.xxx.xxx это ip адрес вашего сервера Proxmox, а ******** это пароль юзера upsuser, настроенного на сервере с proxmox.&lt;/p&gt;
  &lt;p id=&quot;HHEV&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;xTZk&quot;&gt;Далее вводим команду:&lt;/p&gt;
  &lt;pre id=&quot;He0W&quot; data-lang=&quot;bash&quot;&gt;sudo a2enmod cgi&lt;/pre&gt;
  &lt;p id=&quot;nJUD&quot;&gt;И перезапускаем веб сервер:&lt;/p&gt;
  &lt;pre id=&quot;gUg7&quot; data-lang=&quot;bash&quot;&gt;sudo systemctl restart apache2&lt;/pre&gt;
  &lt;p id=&quot;EZjy&quot;&gt;Теперь можно перейти по адресу &lt;a href=&quot;http://xxx.xxx.xxx.xxx/cgi-bin/nut/upsstats.cgi&quot; target=&quot;_blank&quot;&gt;http://xxx.xxx.xxx.xxx/cgi-bin/nut/upsstats.cgi&lt;/a&gt; где xxx.xxx.xxx.xxx это ip вашего lxc контейнера и мониторить статус ИБП. В моем случае это выглядит так:&lt;/p&gt;
  &lt;figure id=&quot;kkju&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f0/2b/f02bb1a6-bd1d-457b-b02f-65a527aa74cd.png&quot; width=&quot;839&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;xlc4&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/08/ba086f40-e39f-4c69-98df-1057e095f36d.png&quot; width=&quot;830&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;yhH4&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/92/d7/92d7ade1-2eeb-4431-a167-db6346e39c2a.png&quot; width=&quot;872&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;p0De&quot;&gt;Добавление ИБП в Synology&lt;/h3&gt;
  &lt;p id=&quot;sLaz&quot;&gt;Чтобы все работало, нужно настроить Synology с помощью IP-адреса сервера NUT.&lt;/p&gt;
  &lt;p id=&quot;eVeQ&quot;&gt;1. Включить функцию &lt;code&gt;UPS support.&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;krju&quot;&gt;2. Выбрать &lt;code&gt;Тип ИБП&lt;/code&gt; - &lt;code&gt;Сервер ИБП Synology.&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;5709&quot;&gt;3. Настроить время - совет, ниже, чем на самом хосте.&lt;/p&gt;
  &lt;p id=&quot;5t6W&quot;&gt;Указать IP адрес вашего Proxmox.&lt;/p&gt;
  &lt;figure id=&quot;QBLJ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bc/ec/bcec725f-c195-4a98-9dcd-9db06a4a7437.png&quot; width=&quot;2044&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;PySt&quot;&gt;Напоминаю, что также необходимо было настроить файл ups.conf на сервере NUT, чтобы ИБП назывался «ups». Он не может называться как-то иначе. В противном случае Synology откажется подключаться.&lt;/blockquote&gt;
  &lt;blockquote id=&quot;iFoj&quot;&gt;Вам также нужно было создать пользователя на сервере NUT (в uspd.users) с именем «admin» и паролем «secret». Я безуспешно пытался подключить Synology к серверу NUT, используя менее очевидное имя пользователя и сложный пароль, но безрезультатно.&lt;/blockquote&gt;
  &lt;p id=&quot;vHjx&quot;&gt;Это не такая серьёзная проблема с точки зрения безопасности, как может показаться, поскольку пользователь «admin» имеет доступ к ИБП только для чтения. Я подтвердил это с помощью:&lt;/p&gt;
  &lt;pre id=&quot;monG&quot; data-lang=&quot;bash&quot;&gt;upscmd -l ups@localhost&lt;/pre&gt;
  &lt;figure id=&quot;jDED&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/64/25/6425aded-27dc-4f8b-94ad-966971b11fad.png&quot; width=&quot;1124&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qOa4&quot;&gt;Очевидно, что мы не хотим, чтобы любой злоумышленник в сети L3 мог отключить ИБП с помощью простых учётных данных.&lt;/p&gt;
  &lt;pre id=&quot;yabP&quot; data-lang=&quot;bash&quot;&gt;upscmd -u admin -p secret ups@localhost shutdown.stayoff&lt;/pre&gt;
  &lt;figure id=&quot;NFLY&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1e/7b/1e7bd5eb-3fcc-4313-a9b3-06d815856975.png&quot; width=&quot;1126&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;R94E&quot;&gt;Созданная выше учётная запись суперпользователя может выполнять все эти опасные команды, но встроенная учётная запись Synology не может.&lt;/p&gt;
  &lt;p id=&quot;N8Y9&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;zsok&quot;&gt;upd. 02.05.2025&lt;/p&gt;
  &lt;blockquote id=&quot;OGLO&quot;&gt;Благодаря подписчику переработал конфиги и скрипт, а так же протестировал их работу.&lt;/blockquote&gt;
  &lt;h3 id=&quot;Um9q&quot;&gt;Тестируем аварийное отключение&lt;/h3&gt;
  &lt;p id=&quot;5krl&quot;&gt;В самом DSM я выставил таймер на 40 секунд, а для Proxmox 120.&lt;/p&gt;
  &lt;p id=&quot;JW2e&quot;&gt;В первом тесте ИБП был без питания 26 секунд. Все системы продолжили работу.&lt;/p&gt;
  &lt;p id=&quot;ZCvX&quot;&gt;Во втором тесте ИБП был без питания 86 секунд. DSM самостоятельно завершил работу и возобновил после подачи питания. Proxmox при этом считал 120 секунд и продолжил работу.&lt;/p&gt;
  &lt;figure id=&quot;AR5J&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/70/9d/709d3842-6a56-44c7-ae82-a0371d7ac8ae.png&quot; width=&quot;1590&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;NaC5&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/17/da/17da3550-1361-4561-8e94-19200afbfbd1.png&quot; width=&quot;1564&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IBd8&quot;&gt;Третьим тестом будет полное отключение Proxmox спустя 120 секунд&lt;/p&gt;
  &lt;blockquote id=&quot;rD9N&quot;&gt;По итогам тестов я выяснил, что аккумулятор в ИБП разряжается до критического состояния с заданными ему максимальными значениями, поэтому занизил их, так как для меня нет необходимости тащить систему на резервном питании, дожидаясь восстановления. &lt;br /&gt;ИБП все же не продовый, а скорее для домашнего использования, чем и является мой хост.&lt;br /&gt;Основной приоритет - безопасное завершение работы.&lt;/blockquote&gt;
  &lt;p id=&quot;d57d&quot;&gt;В 04:32:55 было отключение электричества&lt;/p&gt;
  &lt;p id=&quot;LHUx&quot;&gt;В 04:34:25 прошло 90 секунд и proxmox начал останавливать все процессы&lt;/p&gt;
  &lt;figure id=&quot;iUfc&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c0/09/c009e103-aae2-445e-880f-dc803c0798da.png&quot; width=&quot;1910&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;zyW5&quot;&gt;В 04:38:41 все процессы были остановлены и система была отключена&lt;/p&gt;
  &lt;figure id=&quot;3K34&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c6/0f/c60f1ffd-a5c8-475d-be0a-15f315edcf28.png&quot; width=&quot;1808&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9eW7&quot;&gt;Мои финальные параметры в конфигах с таймерами остались такими:&lt;/p&gt;
  &lt;pre id=&quot;FVp9&quot; data-lang=&quot;bash&quot;&gt;override.battery.runtime.low = 120
override.battery.charge.low = 30
AT ONBATT * START-TIMER shutdown_proxmox 90
offdelay = 300&lt;/pre&gt;
  &lt;p id=&quot;sLD3&quot;&gt;А что получилось у вас? Делитесь в комментариях.&lt;/p&gt;
  &lt;p id=&quot;sRiE&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Pez1&quot;&gt;Мне помогли:&lt;/p&gt;
  &lt;p id=&quot;rx3Q&quot;&gt;&lt;a href=&quot;https://kvvhost.ru/2024/07/04/nut-proxmox/&quot; target=&quot;_blank&quot;&gt;https://kvvhost.ru/2024/07/04/nut-proxmox/&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;xUzA&quot;&gt;&lt;a href=&quot;https://blog.zanshindojo.org/nut/&quot; target=&quot;_blank&quot;&gt;https://blog.zanshindojo.org/nut/&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>fonwa:transmission_with_proxmox</id><link rel="alternate" type="text/html" href="https://teletype.in/@fonwa/transmission_with_proxmox?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fonwa"></link><title>Сервер Transmission в Proxmox</title><published>2025-01-28T20:13:45.401Z</published><updated>2025-11-06T20:36:45.510Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/87/52/87521406-0de2-4558-8e08-daebb6064aeb.png"></media:thumbnail><category term="proxmox" label="Proxmox"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/8a/46/8a46a25c-9569-4fc8-b47d-754dcda05508.png&quot;&gt;Тут я хочу описать способ создания сервера ВМ для штатной торрентокачалки, на мой взгляд, одной из самых удобных. Изначально я познакомился с Transmission благодаря Keenetic и загружал всё на подключенный к роутеру диск. Мне стало интересно, как его можно развернуть самостоятельно на хосте Proxmox с остальными ВМ и снять эту задачу с Keenetic.</summary><content type="html">
  &lt;p id=&quot;UOpH&quot;&gt;Тут я хочу описать способ создания сервера ВМ для штатной торрентокачалки, на мой взгляд, одной из самых удобных. Изначально я познакомился с Transmission благодаря Keenetic и загружал всё на подключенный к роутеру диск. Мне стало интересно, как его можно развернуть самостоятельно на хосте Proxmox с остальными ВМ и снять эту задачу с Keenetic.&lt;/p&gt;
  &lt;p id=&quot;uVcp&quot;&gt;Transmission по умолчанию имеет простенький веб интерфейс, который мы затюним, а так же клиенты под большинство ОС.&lt;/p&gt;
  &lt;p id=&quot;0ULD&quot;&gt;Перед написанием этой статьи я так же пробовал выполнить трюк в LXC контейнере, где для:&lt;/p&gt;
  &lt;ul id=&quot;oVCq&quot;&gt;
    &lt;li id=&quot;UNKy&quot;&gt;Привелигированного контейнера не совсем безопасно для ядра;&lt;/li&gt;
    &lt;li id=&quot;L6EM&quot;&gt;В непривилегированном контейнере нельзя выполнять операции, требующие прямого доступа к ядру, в том числе монтирование, а если и обходить , то нужно учитывать особенности работы с ID-сдвигами (UID/GID mapping). Сначала нужно монтировать шару на хосте, а затем привязать её к контейнеру. Это добавляет дополнительный уровень сложности.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;357I&quot;&gt;В данном случае остается выбор ВМ. Изолированно от хоста. Просто разворачивается. Показываю с создания ВМ до самого конца. &lt;/p&gt;
  &lt;blockquote id=&quot;p7fc&quot;&gt;В этой статье не описано создание хоста, на который будут загружаться файлы, поэтому сетевой диск и пользователя, у которого будут права на запись по SMB нужно подготовить самостоятельно.&lt;/blockquote&gt;
  &lt;p id=&quot;KQUu&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;tlcq&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8a/46/8a46a25c-9569-4fc8-b47d-754dcda05508.png&quot; width=&quot;3600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ksHm&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;cfsb&quot;&gt;TL:DR&lt;/h2&gt;
  &lt;h3 id=&quot;fMnC&quot;&gt;Создание ВМ для Transmission&lt;/h3&gt;
  &lt;p id=&quot;Nclp&quot;&gt;Выбор образа, установка параметров, подключение к хосту.&lt;/p&gt;
  &lt;h3 id=&quot;M3Ka&quot;&gt;Установка и настройка Transmission&lt;/h3&gt;
  &lt;p id=&quot;lHHc&quot;&gt;Обновление списка пакетов, установка Transmission, CIFS, nano. Создание каталога downloads, добавление записи о монтировании в /etc/fstab, настройка параметров в settings.json.&lt;/p&gt;
  &lt;h3 id=&quot;4ZBB&quot;&gt;Тюнинг интерфейса Transmission&lt;/h3&gt;
  &lt;p id=&quot;7JFK&quot;&gt;Установка веб-интерфейса с GitHub, настройка параметров для работы через веб-интерфейс.&lt;/p&gt;
  &lt;h3 id=&quot;1hSz&quot;&gt;Описание переменных в settings.json&lt;/h3&gt;
  &lt;p id=&quot;Rc6c&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;TUeP&quot;&gt;Создаём ВМ для Transmission&lt;/h2&gt;
  &lt;p id=&quot;L5tx&quot;&gt;Находим линк для закачки iso образа в releases.ubuntu.com и копируем. Я выбрал &lt;a href=&quot;https://releases.ubuntu.com/releases/22.04/ubuntu-22.04.5-live-server-amd64.iso&quot; target=&quot;_blank&quot;&gt;ubuntu-22.04.5-live-server-amd64&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;CQgb&quot;&gt;Идем на наш хост и выбираем &lt;code&gt;local&lt;/code&gt; -&amp;gt; &lt;code&gt;ISO Images&lt;/code&gt; -&amp;gt; &lt;code&gt;Download from URL&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;M6bn&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/38/91/3891e37a-288d-48fb-bdf0-4aeab6497d9a.png&quot; width=&quot;1071&quot; /&gt;
    &lt;figcaption&gt;У меня этот образ ранее был загружен&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;tobm&quot;&gt;Вставляем ссылку из буфера в поле&lt;code&gt;URL&lt;/code&gt; и выбираем &lt;code&gt;Query URL&lt;/code&gt;. В &lt;code&gt;File name&lt;/code&gt; отобразится имя образа. Жмем &lt;code&gt;Download&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;je3t&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1d/76/1d7616d0-5298-4bd2-b2e0-58d9a4ade3ac.png&quot; width=&quot;608&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7y1R&quot;&gt;После загрузки образа выбираем &lt;code&gt;Create VM&lt;/code&gt; и создаем ВМ с минимально доступными параметрами по железу. &lt;/p&gt;
  &lt;figure id=&quot;39XN&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2f/52/2f52f721-a466-42b0-bc3e-64c965f82b13.png&quot; width=&quot;458&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;K3sm&quot;&gt;Задаем &lt;code&gt;Name&lt;/code&gt; в &lt;code&gt;General&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;Gb0i&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a7/84/a7843813-df14-4ca1-a24a-c5b8064547f7.png&quot; width=&quot;725&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IVxR&quot;&gt;В &lt;code&gt;OS&lt;/code&gt; находим загруженный образ, который ранее закинули в &lt;code&gt;local&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;AcK5&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0b/78/0b78db54-3995-4b44-a728-46c7d46fd16c.png&quot; width=&quot;725&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;4iPL&quot;&gt;Во вкладке &lt;code&gt;System&lt;/code&gt; оставляем параметры по умолчанию.&lt;/p&gt;
  &lt;figure id=&quot;dpt5&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/49/a4/49a4bf9e-8876-417f-a51d-53fa7e9cffe6.png&quot; width=&quot;727&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FpBb&quot;&gt;Во вкладке &lt;code&gt;Disks&lt;/code&gt; выделяем минимальный &lt;code&gt;Disk size&lt;/code&gt;  8 GiB и указываем &lt;code&gt;Storage&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;x5LH&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c4/42/c4426a48-7db8-472e-b1eb-6c065945e28f.png&quot; width=&quot;725&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Nr3C&quot;&gt;По &lt;code&gt;CPU&lt;/code&gt; и &lt;code&gt;Memory&lt;/code&gt;, по моим тестам, одновременно на 5 активных загрузок достаточно 2 cores и 2048 MiB. Больше не пробовал.&lt;/p&gt;
  &lt;figure id=&quot;1LlK&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/99/ce/99ce661f-1608-4b2d-b202-6750723d4ae8.png&quot; width=&quot;725&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;9K9n&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/78/4d/784d8437-bd7d-402a-aa2d-c4be56343d96.png&quot; width=&quot;726&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;rLv2&quot;&gt;В &lt;code&gt;Network&lt;/code&gt; снимаем маркер с &lt;code&gt;Firewall&lt;/code&gt; если он настроен на хосте, либо настраиваем самостоятельно под свои нужды.&lt;/p&gt;
  &lt;figure id=&quot;gpon&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/95/c7/95c7dfe9-a8a4-48bc-b469-663cf5dd4821.png&quot; width=&quot;726&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;tmOJ&quot;&gt;Общий конфиг ВМ может выглядеть так. Ставим маркер &lt;code&gt;Start after created&lt;/code&gt; и &lt;code&gt;Finish&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;tour&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2c/fe/2cfe581a-cd92-4cc1-8e78-141c67a176b6.png&quot; width=&quot;726&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dMRp&quot;&gt;Проходим в &lt;code&gt;Console&lt;/code&gt; и выполняем стандартную процедуру установки. На первом этапе я выбираю &lt;code&gt;English&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;yUyd&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/33/c4/33c4ce58-4434-402e-bd99-14dcbfb182fe.png&quot; width=&quot;2984&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;hU9J&quot;&gt;В &lt;code&gt;Installer update available&lt;/code&gt; выбираем &lt;code&gt;Continue without updating&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;XR6G&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3e/00/3e00fd67-7e6a-4e7e-8860-48e2375d962c.png&quot; width=&quot;1657&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;rwwo&quot;&gt;В &lt;code&gt;Keyboard configuration&lt;/code&gt; оставляем как есть -&amp;gt; &lt;code&gt;Done&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;szRx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b3/58/b358a6c7-23c3-47f1-b722-081b7839fe14.png&quot; width=&quot;1656&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5QEO&quot;&gt;В &lt;code&gt;Chose the type of installation&lt;/code&gt; оставляем по умолчанию &lt;code&gt;Ubuntu Server (minimized)&lt;/code&gt; -&amp;gt; &lt;code&gt;Done&lt;/code&gt;. &lt;/p&gt;
  &lt;figure id=&quot;vlqq&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bd/b8/bdb8eb6c-b140-4660-99c3-d33e6c8ab858.png&quot; width=&quot;1658&quot; /&gt;
    &lt;figcaption&gt;Сэкономим немного дискового пространства&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5Xtw&quot;&gt;Далее &lt;code&gt;Network configuration&lt;/code&gt;, ну тут уж сами. У меня раздаёт&lt;code&gt;DHCP&lt;/code&gt;. &lt;/p&gt;
  &lt;p id=&quot;dux3&quot;&gt;Позже задам статику на роутере.&lt;/p&gt;
  &lt;figure id=&quot;FLK5&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/62/82/628278ce-3be3-4708-8fdc-c45cc21a4273.png&quot; width=&quot;1656&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;jOFm&quot;&gt;В&lt;code&gt;Proxy configuration&lt;/code&gt; мне ничего не нужно, оставляю пустым.&lt;/p&gt;
  &lt;figure id=&quot;cnU3&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b6/2b/b62b7b7d-a250-45c7-b540-cc2ba9f1d566.png&quot; width=&quot;1656&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3hJT&quot;&gt;Ждем прогрузки зеркала в&lt;code&gt;Ubuntu archive mirror configuration&lt;/code&gt; -&amp;gt; &lt;code&gt;Done&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;9eVX&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7e/8b/7e8b5ed7-5396-4899-84da-4d5391494c1b.png&quot; width=&quot;1655&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;mdvC&quot;&gt;В &lt;code&gt;Guided storage configuration&lt;/code&gt; оставляю по умолчанию -&amp;gt; &lt;code&gt;Done&lt;/code&gt; -&amp;gt; &lt;code&gt;Done&lt;/code&gt; -&amp;gt; &lt;code&gt;Continue&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;3z2F&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/98/8a/988a6a4b-eba7-437c-b53d-41b15859d38a.png&quot; width=&quot;1657&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;pcXw&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e8/0c/e80c749a-2d02-4e33-ae90-cf744c97517b.png&quot; width=&quot;1653&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;9hjy&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bf/22/bf222624-d4ce-49a2-910e-c47562d70f0a.png&quot; width=&quot;1656&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gBWF&quot;&gt;В &lt;code&gt;Profile Configuration&lt;/code&gt; - указываем своё имя для входа, имя сервера и пароль.&lt;/p&gt;
  &lt;figure id=&quot;smVt&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/94/99/94990e6b-8ed4-4184-8cf6-24576d28e91d.png&quot; width=&quot;1654&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;WxAe&quot;&gt;В &lt;code&gt;Upgrade to Ubuntu Pro&lt;/code&gt; ничего не меняя, выбираем &lt;code&gt;Continue&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;nVyd&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e4/07/e4071526-10de-4b9f-9e81-52300d4439d6.png&quot; width=&quot;1657&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pbUF&quot;&gt;В &lt;code&gt;SSH Configuration&lt;/code&gt; я ставлю маркер на &lt;code&gt;Instal OpenSSH Server&lt;/code&gt; чтобы в дальнейшем подключаться через терминал, мне так удобнее, а как вам - решайте сами.&lt;/p&gt;
  &lt;figure id=&quot;cy2i&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b7/f1/b7f1ade0-264e-4c4e-ae92-02a2e4465d29.png&quot; width=&quot;1654&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9EuE&quot;&gt;В &lt;code&gt;Featured server snaps&lt;/code&gt; ничего не меняя, выбираем &lt;code&gt;Done&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;qyri&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/01/69/0169d267-3f7f-4e76-840c-93c535b0651b.png&quot; width=&quot;1653&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;TZno&quot;&gt;После завершения установки отправляем ВМ в перезагрузку -&amp;gt; &lt;code&gt;Reboot now&lt;/code&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;5AE7&quot;&gt;Так же может потребоваться нажать Enter, что якобы failed unmounting /cdrom. Отмонтировать для этого ничего не нужно.&lt;/blockquote&gt;
  &lt;figure id=&quot;WCyp&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b2/93/b293a734-7658-45c2-bf93-d0164cbbfcb8.png&quot; width=&quot;1659&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FjEO&quot;&gt;После загрузки авторизуемся в системе и проверяем, какой адрес был выдан хосту чтобы потом не возникло вопросов, почему по SSH не доступен или не выполняется &lt;code&gt;apt update&lt;/code&gt;. Выполняем &lt;code&gt;ip a&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;zYTa&quot;&gt;В сетевой карте ens18, где строка inet находим выданный адрес.&lt;/p&gt;
  &lt;figure id=&quot;nzfb&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/45/84/458450f1-19f5-465a-bbe4-36e7b2683222.png&quot; width=&quot;1186&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;NjEL&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;5nKw&quot;&gt;Установка и настройка Transmission&lt;/h2&gt;
  &lt;p id=&quot;ID3T&quot;&gt;Далее я подключаюсь к свежеустановленному хосту по SSH и начинаю установку пакетов. &lt;/p&gt;
  &lt;blockquote id=&quot;9XyI&quot;&gt;Напоминаю, что основная цель этого хоста загружать торренты по SMB на примонтированный диск, поэтому нужно заранее создать пользователя на хосте с файловой шарой, у которого будут права на запись в назначенную сетевую папку.&lt;/blockquote&gt;
  &lt;p id=&quot;KG3H&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;YqV4&quot; data-lang=&quot;bash&quot;&gt;# Обновляем список пакетов
sudo apt update
# Устанавливаем Transmission, CIFS для монтирования по SMB, nano (по умолчанию в minimized отсутствует)
sudo apt install transmission-cli transmission-daemon transmission-common cifs-utils nano -y
# Создаем каталог downloads в mnt, в которую будем монтировать папку
sudo mkdir -p /mnt/downloads
# Открываем /etc/fstab для добавления записи о монтировании:
sudo nano /etc/fstab&lt;/pre&gt;
  &lt;p id=&quot;HF2p&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;avy7&quot;&gt;Добавляем в конец файла и меняем под себя&lt;/p&gt;
  &lt;blockquote id=&quot;vGw9&quot;&gt;Список длинный и прокручивается. Выдели триплкликом ЛКМ ниже.&lt;/blockquote&gt;
  &lt;pre id=&quot;t45m&quot; data-lang=&quot;bash&quot;&gt;//192.168.1.x/downloads /mnt/downloads cifs username=transmission,password=YoUrPaSSw0rd,uid=fonwa,gid=fonwa,file_mode=0777,dir_mode=0777,iocharset=utf8,_netdev 0 0&lt;/pre&gt;
  &lt;p id=&quot;DVjE&quot;&gt;Пояснение:&lt;/p&gt;
  &lt;ul id=&quot;rCgF&quot;&gt;
    &lt;li id=&quot;Fz5p&quot;&gt;//192.168.1.x/downloads — путь к SMB-ресурсу на целевом хосте, куда будут загружаться файлы.&lt;/li&gt;
    &lt;li id=&quot;dJbI&quot;&gt;/mnt/torrents — папка на только что созданном сервере Ubuntu, куда будет монтироваться сетевое хранилище.&lt;/li&gt;
    &lt;li id=&quot;PrBy&quot;&gt;username=transmission,password=YoUrPaSSw0rd — учетные данные для доступа к SMB-ресурсу.&lt;/li&gt;
    &lt;li id=&quot;Ky31&quot;&gt;uid=fonwa,gid=fonwa — задаёт владельцем и группой для всех файлов в этой папке пользователя fonwa.&lt;/li&gt;
    &lt;li id=&quot;y6OX&quot;&gt;file_mode=0777,dir_mode=0777 — устанавливает права на файлы и каталоги, чтобы они были доступны для записи.&lt;/li&gt;
    &lt;li id=&quot;w1Yk&quot;&gt;iocharset=utf8 — кодировка.&lt;/li&gt;
    &lt;li id=&quot;3ORR&quot;&gt;&lt;code&gt;_netdev&lt;/code&gt; указывает, что это сетевое устройство, и монтирование должно происходить после запуска сети.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;OZJs&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/38/02/3802067f-9d2b-4cfa-9689-9dbdaefcf4bb.png&quot; width=&quot;1494&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;m6Nz&quot;&gt;Сохраняем изменения и закрываем файл: &lt;code&gt;Ctrl+X&lt;/code&gt;, &lt;code&gt;Y&lt;/code&gt;, &lt;code&gt;Enter&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;GMJI&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;ZS2t&quot; data-lang=&quot;bash&quot;&gt;# Применяем настройки монтирования
sudo mount -a
# Проверяем, что диск смонтирован правильно
df -h&lt;/pre&gt;
  &lt;figure id=&quot;Uqon&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/79/dd/79dd76b0-ef5c-4490-99b6-249fbbfca998.png&quot; width=&quot;592&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XTzm&quot;&gt;Убедитесь, что у папки /mnt/torrents есть права для пользователя fonwa (поскольку именно этот пользователь будет использовать Transmission):&lt;/p&gt;
  &lt;pre id=&quot;vq90&quot; data-lang=&quot;bash&quot;&gt;ls -ld /mnt/downloads/&lt;/pre&gt;
  &lt;figure id=&quot;A2RL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/64/9a/649adea3-0849-4e26-9a74-d54b8591e709.png&quot; width=&quot;478&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;AiOw&quot;&gt;Вывод должен показывать, что владельцем папки является fonwa, и группа тоже должна быть fonwa.&lt;/blockquote&gt;
  &lt;p id=&quot;cENz&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Iu9H&quot;&gt;Теперь нужно настроить Transmission так, чтобы он использовал смонтированную папку /mnt/torrents для сохранения скачиваемых торрентов.&lt;/p&gt;
  &lt;pre id=&quot;72EC&quot; data-lang=&quot;bash&quot;&gt;# Останавливаем сервис transmission-daemon
sudo systemctl stop transmission-daemon&lt;/pre&gt;
  &lt;p id=&quot;cm6Y&quot;&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;GcRv&quot;&gt;Перед внесением изменений в settings.json, демон должен быть закрыт и остановлен, что мы и сделали выше, в противном случае параметры будут возвращены в предыдущее состояние.&lt;/blockquote&gt;
  &lt;pre id=&quot;SIj0&quot; data-lang=&quot;bash&quot;&gt;# Открываем файл конфигурации Transmission:
sudo nano /etc/transmission-daemon/settings.json&lt;/pre&gt;
  &lt;p id=&quot;9JxK&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;KsHQ&quot;&gt;Далее меняем параметры. Я лишь опишу некоторые из них, необходимые для первоначального запуска и показать, что всё работает.&lt;/p&gt;
  &lt;p id=&quot;hEFn&quot;&gt;1. Найдите параметр &amp;quot;download-dir&amp;quot; и замените его на путь к смонтированной папке:&lt;/p&gt;
  &lt;ul id=&quot;AZq1&quot;&gt;
    &lt;li id=&quot;GNTG&quot;&gt;&lt;code&gt;&amp;quot;download-dir&amp;quot;: &amp;quot;/mnt/downloads&amp;quot;,&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;VzQ5&quot;&gt;2. Отключаем &lt;code&gt;whitelist&lt;/code&gt;, иначе на WEB морду не пустит:&lt;/p&gt;
  &lt;ul id=&quot;kcGr&quot;&gt;
    &lt;li id=&quot;Ucp3&quot;&gt;&lt;code&gt;&amp;quot;rpc-whitelist-enabled&amp;quot;: false,&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;9cm4&quot;&gt;3. Выставляем логин/пароль с которыми будем заходить на WEB GUI, по умолчанию transmission/transmission&lt;/p&gt;
  &lt;blockquote id=&quot;sTRP&quot;&gt;rpc-password шифрует пароль после сохранения конфига, не удивляемся длинному шифру&lt;/blockquote&gt;
  &lt;ul id=&quot;YoKA&quot;&gt;
    &lt;li id=&quot;A8cB&quot;&gt;&lt;code&gt;&amp;quot;rpc-password&amp;quot;: &amp;quot;transmission&amp;quot;,&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;OrhT&quot;&gt;&lt;code&gt;&amp;quot;rpc-username&amp;quot;: &amp;quot;transmission&amp;quot;,&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;sAm0&quot;&gt;Сохраняем изменения и закрываем файл: &lt;code&gt;Ctrl+X&lt;/code&gt;, &lt;code&gt;Y&lt;/code&gt;, &lt;code&gt;Enter&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;BdH9&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;rGqI&quot; data-lang=&quot;bash&quot;&gt;# Запускаем сервис transmission-daemon
sudo systemctl start transmission-daemon
# Проверяем, что сервис активен
sudo systemctl status transmission-daemon&lt;/pre&gt;
  &lt;p id=&quot;I5Hn&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;piJr&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8d/87/8d878675-ac44-40c4-b628-9e079c94b28d.png&quot; width=&quot;893&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qUAF&quot;&gt;Открываем веб-интерфейс Transmission. Он обычно доступен на порту 9091, вводим в браузере:&lt;/p&gt;
  &lt;p id=&quot;mSOu&quot;&gt;&lt;a href=&quot;http://192.168.1.X:9091&quot; target=&quot;_blank&quot;&gt;http://192.168.1.X:9091&lt;/a&gt; и введите свои логин/пароль, указанные в &lt;code&gt;settings.json&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;fcR4&quot;&gt;На этом этапе мы увидим скудный интерфейс Transmission.&lt;/p&gt;
  &lt;figure id=&quot;yMJs&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5e/67/5e678d73-1c35-4aaf-807d-41c3affa1b15.png&quot; width=&quot;3600&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;Ke9t&quot;&gt;&lt;strong&gt;Настройка задержки монтирования&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;0Ojv&quot;&gt;Если сеть не успевает инициализироваться до попытки монтирования, контейнер продолжал работу, а хост с сетевой папкой перезагрузился, создадим сервис для монтирования:&lt;/p&gt;
  &lt;pre id=&quot;NRTu&quot; data-lang=&quot;bash&quot;&gt;# Создаем файл сервиса 
sudo nano /etc/systemd/system/mnt-downloads.mount&lt;/pre&gt;
  &lt;p id=&quot;DU9v&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;E6QV&quot;&gt;Добавляем в него содержимое и меняем под свои данные:&lt;/p&gt;
  &lt;pre id=&quot;05Kq&quot; data-lang=&quot;bash&quot;&gt;[Unit]
Description=Mount CIFS Share 
Requires=network-online.target 
After=network-online.target

[Mount] 
What=//192.168.1.x/downloads 
Where=/mnt/downloads 
Type=cifs
Options=username=transmission,password=YoUrPaSSw0rd,uid=fonwa,gid=fonwa,file_mode=0777,dir_mode=0777,iocharset=utf8,_netdev 

[Install] 
WantedBy=multi-user.target&lt;/pre&gt;
  &lt;p id=&quot;uDIH&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;58pY&quot; data-lang=&quot;bash&quot;&gt;# Включаем и запускаем сервис
sudo systemctl enable mnt-downloads.mount 
sudo systemctl start mnt-downloads.mount&lt;/pre&gt;
  &lt;p id=&quot;0VuJ&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;zToj&quot;&gt;Тюним интерфейс Transmission&lt;/h2&gt;
  &lt;p id=&quot;rp9T&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;76XX&quot; data-lang=&quot;bash&quot;&gt;# Переходим во временный каталог, откуда будем устанавливать веб-интерфейс
cd /var/tmp/
# Загружаем последнюю версию Transmission Web Control с GitHub
wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control.sh --no-check-certificate
# Запускаем скрипт
sudo bash install-tr-control.sh&lt;/pre&gt;
  &lt;figure id=&quot;GcA0&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/e2/bae22b59-c9fc-41ec-a213-04b5317b02ec.png&quot; width=&quot;806&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Pf9Q&quot;&gt;Ставим папку по умолчанию, нажав 6 и скопировав путь ниже:&lt;/p&gt;
  &lt;p id=&quot;88oI&quot;&gt;&lt;code&gt;/usr/share/transmission&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;vqDf&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;LrL9&quot;&gt;Устанавливаем последнюю версию, нажав 1&lt;/p&gt;
  &lt;figure id=&quot;6KLG&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cc/a1/cca1177f-ba87-4d84-ac57-abb86e8a5dee.png&quot; width=&quot;1221&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dqyb&quot;&gt;После установки открываем веб-интерфейс по тому же адресу&lt;/p&gt;
  &lt;p id=&quot;XUg0&quot;&gt;   http://&amp;lt;IP-адрес вашего хоста&amp;gt;:9091&lt;/p&gt;
  &lt;p id=&quot;vWWZ&quot;&gt;Поздравляю. Вы установили Transmission с человеческим WEB интерфейсом, если придется зайти на него через браузер. &lt;/p&gt;
  &lt;figure id=&quot;IQ2a&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/74/ce/74cea455-a9ea-4521-b389-b40030f9c66a.png&quot; width=&quot;3600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;L7tI&quot;&gt;Так же можно:&lt;/p&gt;
  &lt;ul id=&quot;0pim&quot;&gt;
    &lt;li id=&quot;362y&quot;&gt;Интуитивно менять настройки через WEB GUI;&lt;/li&gt;
    &lt;li id=&quot;RtQv&quot;&gt;Переключаться между десктопной и мобильной версиями;&lt;/li&gt;
    &lt;li id=&quot;rRXH&quot;&gt;Пробросить порты в наружу чтобы ставить на загрузку извне.&lt;br /&gt;   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ChOc&quot;&gt;Попробуем добавить рандомную magnet ссылку на скачивание.&lt;/p&gt;
  &lt;figure id=&quot;mDPa&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/33/62/33620d8c-f17e-4e6d-8579-337e6541e4d9.png&quot; width=&quot;1254&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;JOMT&quot;&gt;Как видно, загрузка успешно началась, а это значит, что все выше выполнили корректно и по пути не возникло никаких ошибок. Вы молодцы.&lt;/p&gt;
  &lt;figure id=&quot;TTms&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8a/46/8a46a25c-9569-4fc8-b47d-754dcda05508.png&quot; width=&quot;3600&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;5PV5&quot;&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;P8On&quot;&gt;upd. 06.11.2025&lt;/h3&gt;
  &lt;p id=&quot;wAtr&quot;&gt;Дополнение:&lt;/p&gt;
  &lt;ol id=&quot;YY8P&quot;&gt;
    &lt;li id=&quot;uXX5&quot;&gt;Монтирование CIFS восстанавливается само при обращении;&lt;/li&gt;
    &lt;li id=&quot;k350&quot;&gt;Система не виснет при старте, если сеть недоступна;&lt;/li&gt;
    &lt;li id=&quot;eGLy&quot;&gt;Пароль хранится отдельно в /etc/cifs-credentials;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;c1HV&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;b5Fx&quot;&gt;Вынести учётные данные в защищённый файл.&lt;/p&gt;
  &lt;pre id=&quot;6DHp&quot; data-lang=&quot;bash&quot;&gt;# Вынести учётные данные в защищённый файл
sudo nano /etc/cifs-credentials&lt;/pre&gt;
  &lt;p id=&quot;bGL2&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;qxnP&quot;&gt;Изменить данные под себя&lt;/p&gt;
  &lt;pre id=&quot;bGL2&quot; data-lang=&quot;bash&quot;&gt;username=fonwa
password=yourpassword
domain=WORKGROUP # если домена нет, удалить строку&lt;/pre&gt;
  &lt;p id=&quot;Hh5p&quot;&gt;Сохранить и выйти&lt;/p&gt;
  &lt;p id=&quot;hDYu&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;aEFo&quot; data-lang=&quot;bash&quot;&gt;# Задать права
sudo chmod 600 /etc/cifs-credentials
sudo chown root:root /etc/cifs-credentials&lt;/pre&gt;
  &lt;p id=&quot;dvHZ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;ZXqv&quot;&gt;Отредактировать уже существующий &lt;code&gt;mnt-downloads.mount&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;nysk&quot;&gt;sudo nano /etc/systemd/system/mnt-downloads.mount&lt;/pre&gt;
  &lt;p id=&quot;y2iZ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;JNHC&quot;&gt;Изменить под себя IP, name и имя папки, если отличается&lt;/p&gt;
  &lt;pre id=&quot;ALwC&quot; data-lang=&quot;bash&quot;&gt;[Unit]
Description=Mount CIFS Share /mnt/downloads
After=network-online.target
Requires=network-online.target

[Mount]
What=//192.168.1.x/downloads
Where=/mnt/downloads
Type=cifs
Options=credentials=/etc/cifs-credentials,uid=fonwa,gid=fonwa,file_mode=0777,dir_mode=0777,iocharset=utf8,_netdev&lt;/pre&gt;
  &lt;p id=&quot;kTpd&quot;&gt;Сохранить и выйти&lt;/p&gt;
  &lt;p id=&quot;DvoA&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Hpav&quot;&gt;Создать еще 1 systemd юнит &lt;code&gt;mnt-downloads.automount&lt;/code&gt; для автомонтирования&lt;/p&gt;
  &lt;pre id=&quot;UqG5&quot;&gt;sudo nano /etc/systemd/system/mnt-downloads.automount&lt;/pre&gt;
  &lt;p id=&quot;snnt&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;2Op6&quot; data-lang=&quot;bash&quot;&gt;[Unit]
Description=Automount trigger for /mnt/downloads
After=network-online.target
Requires=network-online.target

[Automount]
Where=/mnt/downloads
TimeoutIdleSec=600

[Install]
WantedBy=multi-user.target&lt;/pre&gt;
  &lt;p id=&quot;I6pJ&quot;&gt;Сохранить и выйти&lt;/p&gt;
  &lt;p id=&quot;VoTN&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;nHSn&quot;&gt;Удалить или закомментировать последнюю запись в /etc/fstab.&lt;/p&gt;
  &lt;blockquote id=&quot;UWBa&quot;&gt;Никаких дубликатов //192.168.1.x/downloads быть не должно. Это будет мешать работе systemd.&lt;/blockquote&gt;
  &lt;pre id=&quot;AfaN&quot; data-lang=&quot;bash&quot;&gt;sudo nano /etc/fstab&lt;/pre&gt;
  &lt;p id=&quot;EORH&quot;&gt;Сохранить и выйти&lt;/p&gt;
  &lt;p id=&quot;TFax&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;GoyM&quot;&gt;Перезагрузить конфигурацию и активировать&lt;/p&gt;
  &lt;pre id=&quot;s5GB&quot; data-lang=&quot;bash&quot;&gt;sudo systemctl daemon-reload
sudo systemctl enable --now mnt-downloads.automount&lt;/pre&gt;
  &lt;p id=&quot;0fxU&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;OWch&quot;&gt;Проверить работу:&lt;/p&gt;
  &lt;pre id=&quot;olbR&quot; data-lang=&quot;bash&quot;&gt;ls /mnt/downloads # вызовет автоматическое монтирование
mount | grep downloads # убедиться, что точка активна
# Временно отключить SMB сервис и запустить через некоторое время
# Убедиться, что автомонтирование отрабатывает самостоятельно&lt;/pre&gt;
  &lt;p id=&quot;GCsm&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;mnyk&quot;&gt;Переменные в settings.json&lt;/h2&gt;
  &lt;p id=&quot;864A&quot;&gt;Файл /etc/transmission-daemon/settings.json содержит все настройки для Transmission, включая параметры для работы веб-интерфейса, настроек сети, пути загрузки и другие. Я расшифрую основные параметры этого конфигурационного файла, чтобы вы могли настроить его под свои нужды.&lt;/p&gt;
  &lt;h3 id=&quot;10bG&quot;&gt;Основные параметры конфигурации&lt;/h3&gt;
  &lt;p id=&quot;iiNh&quot;&gt;&lt;strong&gt;1. rpc-username&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Usas&quot;&gt;- Описание: Устанавливает имя пользователя для аутентификации на веб-интерфейсе Transmission. Если не требуется аутентификация, оставьте пустым..&lt;/p&gt;
  &lt;p id=&quot;VFt7&quot;&gt;- Пример: &lt;code&gt;rpc-username&amp;quot;: &amp;quot;fonwa&amp;quot;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;SacX&quot;&gt;&lt;strong&gt;2. rpc-password&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Rzqh&quot;&gt;- Описание: Пароль для веб-интерфейса Transmission.&lt;/p&gt;
  &lt;p id=&quot;994N&quot;&gt;- Пример: &lt;code&gt;rpc-password&amp;quot;: &amp;quot;YoUrPaSSw0rd&amp;quot;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;l0MO&quot;&gt;- Описание: Пароль для пользователя, указанного в rpc-username. Пароль сохраняется в виде зашифрованной строки (с использованием хэширования). Не рекомендуется ставить слишком простой пароль, особенно если сервер доступен из внешней сети.&lt;/p&gt;
  &lt;p id=&quot;19YO&quot;&gt;&lt;strong&gt;3. rpc-port&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;l3Cc&quot;&gt;- Описание: Это порт, через который вы будете подключаться к веб-интерфейсу. Обычно используется порт 9091, но вы можете изменить его на любой другой, если требуется.&lt;/p&gt;
  &lt;p id=&quot;n1xF&quot;&gt;- Пример:&lt;code&gt;rpc-port&amp;quot;: 9091&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;CkGc&quot;&gt;&lt;strong&gt;4. rpc-bind-address&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;fqQq&quot;&gt;- Описание: Указывает, на какой IP-адрес веб-интерфейс должен слушать. Если значение установлено в 0.0.0.0, веб-интерфейс будет доступен на всех интерфейсах сервера. Если вы хотите ограничить доступ только локальной сети или конкретному интерфейсу, укажите IP этого интерфейса.&lt;/p&gt;
  &lt;p id=&quot;7cgA&quot;&gt;- Пример: &lt;code&gt;&amp;quot;rpc-bind-address&amp;quot;: &amp;quot;0.0.0.0&amp;quot;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;T77z&quot;&gt;&lt;strong&gt;5. rpc-authentication-required&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;cYNH&quot;&gt;- Описание: Указывает, требуется ли ввод имени пользователя и пароля для доступа к веб-интерфейсу. Если установлено в false, веб-интерфейс будет доступен без авторизаци.&lt;/p&gt;
  &lt;p id=&quot;gHks&quot;&gt;- Пример: &lt;code&gt;&amp;quot;rpc-authentication-required&amp;quot;: true&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Wv44&quot;&gt;&lt;strong&gt;6. rpc-whitelist&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;OUad&quot;&gt;- &lt;strong&gt;Описание:&lt;/strong&gt; Указывает, какие IP-адреса могут получить доступ к веб-интерфейсу. Используйте * для указания диапазонов (например, 192.168.1.* для разрешения всем в локальной сети).&lt;/p&gt;
  &lt;p id=&quot;m5Qr&quot;&gt;- Пример: &lt;code&gt;rpc-whitelist&amp;quot;: [&amp;quot;127.0.0.1&amp;quot;, &amp;quot;192.168.1.*&amp;quot;]&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;DHYQ&quot;&gt;- Описание: Указывает, какие IP-адреса могут получить доступ к веб-интерфейсу. Используйте * для указания диапазонов (например, 192.168.1.* для разрешения всем в локальной сети).&lt;/p&gt;
  &lt;p id=&quot;DDJy&quot;&gt;&lt;strong&gt;7. rpc-whitelist-enabled&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;kG8C&quot;&gt;- Описание: Если установлено в true, Transmission будет проверять белый список rpc-whitelist. Если в белом списке не указан IP, доступ будет заблокирован.&lt;/p&gt;
  &lt;p id=&quot;G9b9&quot;&gt;- Пример: &lt;code&gt;&amp;quot;rpc-whitelist-enabled&amp;quot;: true&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;65vJ&quot;&gt;&lt;strong&gt;8. download-dir&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;9iUv&quot;&gt;- Описание: Папка для сохранения загруженных файлов.&lt;/p&gt;
  &lt;p id=&quot;qOl4&quot;&gt;- Пример: &lt;code&gt;&amp;quot;download-dir&amp;quot;: &amp;quot;/mnt/omv_share&amp;quot;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;v4RR&quot;&gt;- Описание: Указывает, где будет храниться контент, загружаемый через Transmission. Убедитесь, что у пользователя, под которым работает Transmission, есть права на запись в эту директорию.&lt;/p&gt;
  &lt;p id=&quot;oc0m&quot;&gt;&lt;strong&gt;9. incomplete-dir&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;K63s&quot;&gt;- Описание: Указывает место для хранения неполных файлов до завершения загрузки. Если параметр не установлен, все файлы загружаются в директорию, указанную в download-dir.&lt;/p&gt;
  &lt;p id=&quot;KpPT&quot;&gt;- Приме&lt;strong&gt;р: &lt;/strong&gt;&lt;code&gt;incomplete-dir&amp;quot;: &amp;quot;/mnt/omv_share/incomplete&amp;quot;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;mNbG&quot;&gt;&lt;strong&gt;10. incomplete-dir-enabled&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;1Lod&quot;&gt;- Описание: Если установлено в true, файлы, находящиеся на стадии загрузки, будут сохраняться в директории, указанной в incomplete-dir&lt;/p&gt;
  &lt;p id=&quot;z5rx&quot;&gt;- Пример: &lt;code&gt;&amp;quot;incomplete-dir-enabled&amp;quot;: true&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;eCay&quot;&gt;- Описание: Если установлено в true, файлы, находящиеся на стадии загрузки, будут сохраняться в директории, указанной в incomplete-dir.&lt;/p&gt;
  &lt;p id=&quot;QNWR&quot;&gt;&lt;strong&gt;11. download-queue-size&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;sDez&quot;&gt;- Описание: Определяет максимальное количество загрузок, которые могут быть активными одновременно. Если вы запускаете больше загрузок, чем указано, они будут ставиться в очередь.&lt;/p&gt;
  &lt;p id=&quot;zLG7&quot;&gt;- Пример: &lt;code&gt;&amp;quot;download-queue-size&amp;quot;: 5&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;XuHR&quot;&gt;&lt;strong&gt;12. upload-queue-size&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;o9Bw&quot;&gt;- Описание: Определяет максимальное количество раздач, которые могут быть активными одновременно. Если вы начинаете больше раздач, чем указано, они будут ставиться в очередь.&lt;/p&gt;
  &lt;p id=&quot;YQ6r&quot;&gt;- Пример: &lt;code&gt;&amp;quot;upload-queue-size&amp;quot;: 10&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;94Pe&quot;&gt;&lt;strong&gt;13. peer-port&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;62H4&quot;&gt;- Описание: Указывает порт для P2P-соединений. Если вы хотите, чтобы Transmission работал с определенным портом, укажите его здесь.&lt;/p&gt;
  &lt;p id=&quot;eo7T&quot;&gt;- Пример: &lt;code&gt;&amp;quot;peer-port&amp;quot;: 51413&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;c9ti&quot;&gt;&lt;strong&gt;14. peer-port-random-high&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;vbxx&quot;&gt;- Описание: Верхний предел диапазона для случайного выбора порта для P2P-соединений.&lt;/p&gt;
  &lt;p id=&quot;XPKE&quot;&gt;- Пример: &lt;code&gt;&amp;quot;peer-port-random-high&amp;quot;: 65535&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;lszA&quot;&gt;&lt;strong&gt;15. peer-port-random-low&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Q0UQ&quot;&gt;- Описание: Нижний предел диапазона для случайного выбора порта для P2P-соединений.&lt;/p&gt;
  &lt;p id=&quot;tAhq&quot;&gt;- Пример: &lt;code&gt;&amp;quot;peer-port-random-low&amp;quot;: 49152&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;AK23&quot;&gt;&lt;strong&gt;16. ratio-limit&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;7nTm&quot;&gt;- Описание: Если соотношение раздачи к загрузке превышает это значение, Transmission завершит торрент.&lt;/p&gt;
  &lt;p id=&quot;7dtJ&quot;&gt;- Пример: &lt;code&gt;ratio-limit&amp;quot;: 2.0&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Rmhp&quot;&gt;&lt;strong&gt;17. ratio-limit-enabled&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;tCrK&quot;&gt;- Описание: Если установлено в true, соотношение раздачи/загрузки будет учитываться при завершении торрент-сессий.&lt;/p&gt;
  &lt;p id=&quot;eO2z&quot;&gt;- Пример: &lt;code&gt;&amp;quot;ratio-limit-enabled&amp;quot;: true&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;tF9n&quot;&gt;- Описание: Если установлено в true, соотношение раздачи/загрузки будет &lt;/p&gt;
  &lt;p id=&quot;DWiG&quot;&gt;&lt;strong&gt;18. blocklist-enabled&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;N2Lr&quot;&gt;- Описание: Если установлено в true, Transmission будет использовать блок-лист для блокировки нежелательных IP-адресов.&lt;/p&gt;
  &lt;p id=&quot;ND1b&quot;&gt;- Пример: &lt;code&gt;&amp;quot;blocklist-enabled&amp;quot;: false&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;wxWe&quot;&gt;&lt;strong&gt;19. blocklist-url&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ddBy&quot;&gt;- Описание: Указывает URL для загрузки блок-листа IP-адресов. Transmission будет скачивать и использовать его для блокировки вредоносных или нежелательных пиров.&lt;/p&gt;
  &lt;p id=&quot;xZzM&quot;&gt;- Пример: &lt;code&gt;&amp;quot;blocklist-url&amp;quot;: &amp;quot;&lt;a href=&quot;http://www.example.com/blocklist&quot; target=&quot;_blank&quot;&gt;http://www.example.com/blocklist&lt;/a&gt;&amp;quot;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;vQQg&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;TKF6&quot;&gt;Мне помогли:&lt;/p&gt;
  &lt;p id=&quot;HcL2&quot;&gt;&lt;a href=&quot;https://evs.msk.ru/transmission-on-debian/&quot; target=&quot;_blank&quot;&gt;https://evs.msk.ru/transmission-on-debian/&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;7lIz&quot;&gt;&lt;a href=&quot;https://tweenpath.net/installing-transmission-torrent-client-debian/&quot; target=&quot;_blank&quot;&gt;https://tweenpath.net/installing-transmission-torrent-client-debian/&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;PFGK&quot;&gt;&lt;a href=&quot;https://habr.com/ru/articles/658463/&quot; target=&quot;_blank&quot;&gt;https://habr.com/ru/articles/658463/&lt;/a&gt;&lt;/p&gt;

</content></entry></feed>