add environmental out-proxy config example

This commit is contained in:
postscriptum 2026-02-26 23:54:57 +02:00
parent dc12ef0976
commit ede9dad81b

View file

@ -133,6 +133,7 @@ ExecStart=/usr/local/bin/kellnr start --registry-data-dir /home/kellnr \
# в мене використовується багатомережний origin # в мене використовується багатомережний origin
# --origin-host=.ua.srv \ # --origin-host=.ua.srv \
# --origin-port=8180 \ # --origin-port=8180 \
# деталізація журналів
-l warn -l warn
Environment="NO_COLOR=1" 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 setsebool -P httpd_can_network_connect 1
semanage port -a -t http_port_t -p tcp 8180 semanage port -a -t http_port_t -p tcp 8180
``` ```
* а дані профілю - розмістити в канонічних теках `/var/lib/kellnr` і `/var/log/kellnr` відповідно (з правами `kellnr:kellnr`)
Керування сервісом відбувається за класикою: Керування сервісом відбувається класично:
* `systemctl restart kellnr` - (пере) запуск * `systemctl restart kellnr` - (пере) запуск
* `systemctl enable 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 ``` /etc/nginx/sites-available/default
server { server {