From ede9dad81bcef30f2cad2be76db9fa613b3c2010 Mon Sep 17 00:00:00 2001 From: postscriptum Date: Thu, 26 Feb 2026 23:54:57 +0200 Subject: [PATCH] add environmental out-proxy config example --- .../uk/rust-crates-mirroring-with-kellnr.gmi | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/public/uk/rust-crates-mirroring-with-kellnr.gmi b/public/uk/rust-crates-mirroring-with-kellnr.gmi index dfdd3a2..6c0da41 100644 --- a/public/uk/rust-crates-mirroring-with-kellnr.gmi +++ b/public/uk/rust-crates-mirroring-with-kellnr.gmi @@ -133,6 +133,7 @@ ExecStart=/usr/local/bin/kellnr start --registry-data-dir /home/kellnr \ # в мене використовується багатомережний origin # --origin-host=.ua.srv \ # --origin-port=8180 \ + # деталізація журналів -l warn Environment="NO_COLOR=1" @@ -159,8 +160,9 @@ ufw allow from 0400::/7 to 505:6847:c778:61a1:5c6d:e802:d291:8191 port 8180 prot setsebool -P httpd_can_network_connect 1 semanage port -a -t http_port_t -p tcp 8180 ``` +* а дані профілю - розмістити в канонічних теках `/var/lib/kellnr` і `/var/log/kellnr` відповідно (з правами `kellnr:kellnr`) -Керування сервісом відбувається за класикою: +Керування сервісом відбувається класично: * `systemctl restart kellnr` - (пере) запуск * `systemctl enable kellnr` - авто-старт з системою @@ -174,9 +176,36 @@ semanage port -a -t http_port_t -p tcp 8180 ### Налаштування вихідного проксі -> Рішення нижче виявилось робочим частково: наприклад, завантажити крейт (cargo install) не виде, тільки підтягнути до ного залежності (cargo update). Також цей сценарій чомусь не зберігає кешовані файли, тільки наповнює індекс в БД. Тому від описаного нижче способу я відмовився бо він потребує доопрацювання вибіркових шляхів API через `/etc/hosts` та [config.json](https://github.com/rust-lang/crates.io-index/blob/master/config.json) або рішення програмними засобами. +На моєму сервері немає Інтернет-інтерфейсу і я не можу забрати пакунки з crates.io напряму. Kellnr також поки не підтримує обгортку сокетів програмно, тому я створив відповідний тікет і згодом отримав відповідь з порадою використовувати змінні оточення (які підтримуються імплементацією https://crates.io/crates/reqwest) +=> https://github.com/kellnr/kellnr/issues/1096#issuecomment-3968553238 -На моєму сервері немає Інтернет-інтерфейсу, тому я не можу забрати пакунки з crates.io напряму. Схоже, що Kellnr також поки не підтримує таку функціональність, тому я створив відповідний тікет #1096 і згодом знайшов тимчасове рішення у зв'язці з Nginx - засобами якого я "підставляю" потрібні заголовки згідно до URI: +Змінні оточення звичайно вказуються через `export` або префіксом команди `kellnr`: + +``` bash +HTTP_PROXY=http://[::1]:8118 \ +HTTPS_PROXY=http://[::1]:8118 \ +NO_PROXY=localhost,127.0.0.1,::1,202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148,505:6847:c778:61a1:5c6d:e802:d291:8191 \ + /usr/local/bin/kellnr +``` + +Я користуюсь systemd і його фрагмент `[Service]` виглядає так: + +``` /etc/systemd/system/kellnr.service +[Service] +Environment="HTTP_PROXY=http://[::1]:8118" +Environment="HTTPS_PROXY=http://[::1]:8118" +Environment="NO_PROXY=localhost,127.0.0.1,::1,202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148,505:6847:c778:61a1:5c6d:e802:d291:8191" +``` +* таким чином, будь-який запит здійснений процесом `kellnr` - буде перенаправлено через відповідний проксі, окрім запитів на мережі, вказані в `NO_PROXY` (у мене там адреси сервера Yggdrasil і Mycelium бо процес направлятиме на них деякі службові запити API) + +#### Проксування засобами Nginx + +Рішення нижче виявилось робочим лише частково: наприклад, завантажити крейт (`cargo install`) не вийде, тільки підтягнути до нього залежності (`cargo update`). Також цей сценарій чомусь не зберігає кешовані файли, тільки наповнює індекс в БД. + +Тому від описаного нижче способу я згодом відмовився бо він потребує доопрацювання вибіркових шляхів API через `/etc/hosts` і додаткових правил для config.json: +=> https://github.com/rust-lang/crates.io-index/blob/master/config.json + +Коротше, цей спосіб - костиль, при чому кривий, але я лишу його для історії, якщо вам з якихось причин не підходить спосіб зі змінними оточення або потрібен тюнінг окремих URI. ``` /etc/nginx/sites-available/default server {