mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-02-18 22:12:40 +00:00
apply corrections
This commit is contained in:
parent
9fc1140d05
commit
72f94fdec0
1 changed files with 49 additions and 22 deletions
|
|
@ -3,11 +3,15 @@
|
||||||
В попередньому гайді серії про децентралізований Git-хостинг Radicle, було розглянуто приклад налаштування публічного сіда для поширення персональних репозиторіїв в оверлейному режимі з політикою "Selective":
|
В попередньому гайді серії про децентралізований Git-хостинг Radicle, було розглянуто приклад налаштування публічного сіда для поширення персональних репозиторіїв в оверлейному режимі з політикою "Selective":
|
||||||
=> radicle-multi-network-seed-deployment.gmi Розгортання сіда Radicle в мульти-мережному середовищі
|
=> radicle-multi-network-seed-deployment.gmi Розгортання сіда Radicle в мульти-мережному середовищі
|
||||||
|
|
||||||
Варіанти Веб-сервісу можуть різнитися, в залежності від сфери використання: локальний хост в браузері, десктоп-застосунок або ж публічний сервіс.
|
Варіанти Веб-сервісу можуть різнитися, в залежності від сфери використання:
|
||||||
|
|
||||||
У даному матеріалі - буде розглянуто розгортання саме публічного Веб-інтерфейсу для користувачів оверлейних мереж Yggdrasil і Mycelium (та можливо Tor і I2P) в яких немає прямого доступу до Інтернет і/або встановленого клієнтського вузла Radicle. Тобто, мотивація - зробити сідуючий сервер доступним для локальних користувачів, які бажають переглядати репозиторії "всередині" оверлейної мережі анонімно та забирати код через протокол HTTP звичною командою `git clone`.
|
* локальний хост в браузері
|
||||||
|
* десктоп-застосунок
|
||||||
|
* публічний сервіс
|
||||||
|
|
||||||
Веб-інфраструктура Radicle ділиться на дві основні частини: бекенд JSON/API (за яку відповідає пакунок radicle-httpd) і асинхронний фронтенд (на базі технологій HTML і JavaScript). Обидва рішення є частиною репозиторію radicle-explorer.
|
У даному матеріалі описане розгортання публічного Веб-інтерфейсу для користувачів оверлейних IPv6 мереж Yggdrasil і Mycelium. Мотивація - зробити сідуючий сервер доступним для локальних користувачів, які бажають переглядати репозиторії "всередині" оверлейної мережі та мати можливість забирати код як з `rad clone` так і через шлюз HTTP звичною командою `git clone`.
|
||||||
|
|
||||||
|
Веб-інфраструктура Radicle ділиться на дві основні частини: бекенд JSON/API (за яку відповідає пакунок radicle-httpd) і асинхронний фронтенд (на базі технологій HTML і JavaScript). Обидва рішення є частиною репозиторію `radicle-explorer`.
|
||||||
|
|
||||||
## Отримання початкового коду
|
## Отримання початкового коду
|
||||||
|
|
||||||
|
|
@ -17,21 +21,21 @@
|
||||||
su radicle
|
su radicle
|
||||||
```
|
```
|
||||||
|
|
||||||
Оскільки на моєму сервері немає Інтернет-інтерфейсу як такого, але вже є підключений до глобальної мережі (засобами Tor over Yggdrasil) radicle-node, я буду тягнути вихідний код засобами команди `rad` а не `git` (для якого в моєму випадку потрібен проксі). Це заодно дозволить звикнути до нової обгортки Radicle і скористатись перевагами пірингового обміну без прив'язки до конкретної мережі:
|
Оскільки на моєму сервері немає Інтернет-інтерфейсу як такого, але вже є підключений до глобальної мережі (засобами Tor over Yggdrasil) `radicle-node`, я буду тягнути вихідний код засобами команди `rad` а не `git` (для якого в моєму випадку знадобився б вихідний проксі). Це за одно дозволить звикнути до нової обгортки Radicle і скористатись перевагами пірингового обміну без прив'язки до конкретної мережі:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
rad clone rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5 radicle-explorer
|
rad clone rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5 radicle-explorer
|
||||||
```
|
```
|
||||||
|
|
||||||
Якщо ви все-таки збираєте клієнт на ПК, без локального вузла Radicle:
|
Якщо таки збираєте клієнт без локального вузла Radicle:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
git clone https://iris.radicle.xyz/z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git radicle-explorer
|
git clone https://iris.radicle.xyz/z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git radicle-explorer
|
||||||
```
|
```
|
||||||
|
|
||||||
## Веб-API (radicle-httpd)
|
## Бекенд JSON/API (radicle-httpd)
|
||||||
|
|
||||||
Інструкції з розгортання Web UI, також описані в офіційній документації:
|
Інструкції з розгортання описані в офіційній документації:
|
||||||
=> https://radicle.xyz/guides/seeder#running-the-http-daemon Radicle Seeder Guide: Running the HTTP Daemon
|
=> https://radicle.xyz/guides/seeder#running-the-http-daemon Radicle Seeder Guide: Running the HTTP Daemon
|
||||||
|
|
||||||
Якщо коротко, то робимо наступне:
|
Якщо коротко, то робимо наступне:
|
||||||
|
|
@ -41,7 +45,7 @@ cd radicle-explorer/radicle-httpd
|
||||||
cargo build --release
|
cargo build --release
|
||||||
```
|
```
|
||||||
|
|
||||||
Копіюємо отриманий бінарник `target/release/radicle-httpd` до `/usr/local/bin` на сервері і переконуємось що користувач `radicle` має відповідні права на виконання:
|
Копіюємо отриманий бінарник `target/release/radicle-httpd` до `/usr/local/bin` на сервері і переконуємось що користувач `radicle` має відповідні права на його виконання:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
sudo chown radicle:radicle /usr/local/bin/radicle-httpd
|
sudo chown radicle:radicle /usr/local/bin/radicle-httpd
|
||||||
|
|
@ -80,18 +84,18 @@ WantedBy=multi-user.target
|
||||||
sudo systemctl enable --now radicle-httpd
|
sudo systemctl enable --now radicle-httpd
|
||||||
```
|
```
|
||||||
|
|
||||||
=> https://seed.radicle.xyz/raw/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/570a7eb141b6ba001713c46345d79b6fead1ca15/systemd/radicle-httpd.service Приклад конфігурації в офіційному репозиторії
|
=> https://seed.radicle.xyz/raw/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/570a7eb141b6ba001713c46345d79b6fead1ca15/systemd/radicle-httpd.service Приклад конфігурації systemd в офіційному репозиторії
|
||||||
|
|
||||||
### Nginx
|
### Nginx
|
||||||
|
|
||||||
Сервіс вище "слухатиме" на локальному сокеті `[::1]:8788`, на який потрібно перекинути публічний проксі Nginx:
|
Сервіс вище - "слухатиме" на локальному сокеті `[::1]:8788`, на який потрібно перекинути публічний проксі Nginx для актуальних мереж:
|
||||||
|
|
||||||
``` /etc/nginx/sites-available/default
|
``` /etc/nginx/sites-available/default
|
||||||
server {
|
server {
|
||||||
listen [202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8788;
|
listen [202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8788;
|
||||||
listen [505:6847:c778:61a1:5c6d:e802:d291:8191]:8788;
|
listen [505:6847:c778:61a1:5c6d:e802:d291:8191]:8788;
|
||||||
|
|
||||||
# поки не використовується, але згодом створю для нього піддомени Alfis DNS
|
# поки не використовується, але згодом створю для нього Alfis DNS
|
||||||
# server_name _;
|
# server_name _;
|
||||||
|
|
||||||
access_log /var/log/nginx/radicle.access.log;
|
access_log /var/log/nginx/radicle.access.log;
|
||||||
|
|
@ -107,7 +111,7 @@ server {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* для оверлейних мереж HTTPS звичайно не використовується, тому приклад налаштування спрощено
|
* для мереж Yggdrasil і Mycelium - HTTPs звичайно не використовується, тому приклад налаштування спрощено
|
||||||
|
|
||||||
Застосовуємо оновлення конфігурації:
|
Застосовуємо оновлення конфігурації:
|
||||||
|
|
||||||
|
|
@ -129,24 +133,28 @@ sudo ufw allow from 0400::/7 to 505:6847:c778:61a1:5c6d:e802:d291:8191 port 8788
|
||||||
=> http://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8788
|
=> http://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8788
|
||||||
=> http://[505:6847:c778:61a1:5c6d:e802:d291:8191]:8788
|
=> http://[505:6847:c778:61a1:5c6d:e802:d291:8191]:8788
|
||||||
|
|
||||||
## Веб-інтерфейс (radicle-explorer)
|
По аналогії, на бекенд можна легко причепити тунелі I2P і Tor (чого не скажеш про Веб-експлорер).
|
||||||
|
|
||||||
По суті, це статичний Веб-клієнт на базі HTML/JavaScript, який потрібно зібрати засобами пакетного менеджера `npm` і скопіювати отримані статичні файли до публічного простору Nginx: `/var/www/radicle`. Хто далекий від Node.Js - вказаний в документації запуск `npm start` на публічному сервері не використовується і тим паче не проксується.
|
## Фронтенд (radicle-explorer)
|
||||||
|
|
||||||
|
По суті, це статичний Веб-клієнт на базі HTML/JavaScript що звертається до вказаного в налаштуваннях бекенду. Він збирається засобами пакетного менеджера `npm`, після чого статичні файли копіюються до публічного простору Nginx: `/var/www/radicle`.
|
||||||
|
|
||||||
### Налаштування підключення до бекенду
|
### Налаштування підключення до бекенду
|
||||||
|
|
||||||
Перед тим, як збирати оптимізований білд, важливо спочатку вказати актуальні налаштування підключення до серверів JSON/API. Робиться це у файлі `config/default.json`, який залінковується на `config/production.json`. Після збірки, ці налаштування буде вбудовано в компонент `build/assets/components-xxx.js`
|
Перед тим, як збирати оптимізований білд, важливо спочатку вказати актуальні налаштування підключення до серверів JSON/API - власних або сторонніх. Робиться це у файлі `config/default.json`. Після збірки, налаштування будуть "вбудовані" в компонент `build/assets/components-xxx.js` і при оновленнях цього конфігу, особисто я перезбираю клієнт видаливши попередню теку `build`.
|
||||||
|
|
||||||
У своїй конфігурації, я поки використовую два інтерфейси Yggdrasil і Mycelium свого сіда, налаштованого у попередньому гайді. По аналогії, до масиву об'єктів `preferredSeeds` додаються альтернативні DNS, тунелі I2P або приховані сервіси Tor:
|
У своїй конфігурації, я поки використовую два інтерфейси: Yggdrasil і Mycelium свого сіда. По аналогії, до масиву об'єктів `preferredSeeds` додаються й альтернативні DNS, тунелі I2P або приховані сервіси Tor.
|
||||||
|
|
||||||
|
Важливим є той факт, що поточна версія `radicle-explorer` ніяк не проксує через бекенд `preferredSeeds` і тому якщо в клієнта не встановлено роутер Mycelium, то перебуваючи на хості Yggdrasil - він не зможе відкрити сід `0400::/7` з меню `0200::/7`. Більше того, там є баг, який при відсутності зв'язку з сідом буде зависати на його сесії, допоки руками не почистити Локальне сховище. Навожу приклад міксованого з'єднання, хоча рекомендую на практиці користуватись одним сімейством адрес для одного фронтенду.
|
||||||
|
|
||||||
``` config/default.json
|
``` config/default.json
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"fallbackPublicExplorer": "https://app.radicle.xyz/nodes/$host/$rid$path",
|
"fallbackPublicExplorer": "https://app.radicle.xyz/nodes/$host/$rid$path",
|
||||||
"requiredApiVersion": "~0.18.0",
|
"requiredApiVersion": "~0.18.0",
|
||||||
"defaultHttpdPort": 443,
|
"defaultHttpdPort": 8788,
|
||||||
"defaultLocalHttpdPort": 8080,
|
"defaultLocalHttpdPort": 8788,
|
||||||
"defaultHttpdScheme": "https"
|
"defaultHttpdScheme": "http"
|
||||||
},
|
},
|
||||||
"source": {
|
"source": {
|
||||||
"commitsPerPage": 30
|
"commitsPerPage": 30
|
||||||
|
|
@ -159,10 +167,20 @@ sudo ufw allow from 0400::/7 to 505:6847:c778:61a1:5c6d:e802:d291:8191 port 8788
|
||||||
"port": 8788,
|
"port": 8788,
|
||||||
"scheme": "http"
|
"scheme": "http"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"hostname": "ygg.ua.srv",
|
||||||
|
"port": 8788,
|
||||||
|
"scheme": "http"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"hostname": "[505:6847:c778:61a1:5c6d:e802:d291:8191]",
|
"hostname": "[505:6847:c778:61a1:5c6d:e802:d291:8191]",
|
||||||
"port": 8788,
|
"port": 8788,
|
||||||
"scheme": "http"
|
"scheme": "http"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hostname": "myc.ua.srv",
|
||||||
|
"port": 8788,
|
||||||
|
"scheme": "http"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -192,7 +210,7 @@ sudo chown www-data:www-data /var/www/radicle
|
||||||
|
|
||||||
### Nginx
|
### Nginx
|
||||||
|
|
||||||
Тут все просто: вказуємо актуальний шлях до статики `/var/www/radicle`:
|
Тут все просто: вказуємо актуальний шлях до статики `/var/www/radicle` з адресацією усіх запитів на `index.html`:
|
||||||
|
|
||||||
``` /etc/nginx/sites-available/default
|
``` /etc/nginx/sites-available/default
|
||||||
server {
|
server {
|
||||||
|
|
@ -225,7 +243,16 @@ sudo ufw allow from 0400::/7 to 505:6847:c778:61a1:5c6d:e802:d291:8191 port 8780
|
||||||
|
|
||||||
### Тестування фронтенду
|
### Тестування фронтенду
|
||||||
|
|
||||||
В рамках цього прикладу, перевірити роботу бекенду API, можна за адресами:
|
В рамках цього прикладу, перевірити роботу можна за адресами:
|
||||||
|
|
||||||
=> http://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8780
|
=> http://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8780
|
||||||
=> http://[505:6847:c778:61a1:5c6d:e802:d291:8191]:8780
|
=> http://[505:6847:c778:61a1:5c6d:e802:d291:8191]:8780
|
||||||
|
|
||||||
|
### Помічені проблеми
|
||||||
|
|
||||||
|
Окрім вище згаданих проблем (з міксуванням декількох мереж в рамках спільного для всіх експлорера) можу виділити ще наступні:
|
||||||
|
|
||||||
|
* схоже, що реалізація заточена під використання DNS: наприклад в Yggdrasil прийнято користуватись IPv6, але у такому випадку будуть проблеми при прямому переході за посиланням на такі сіди (при навігації засобами JS воно як-ні-як працює) - мабуть, тут як завжди не передбачена проблема з кодуванням квадратних дужок
|
||||||
|
* порт в налаштуваннях сіда чомусь ігнорується, тому з віджета не можливо отримати правильний приклад команди `git clone`; якщо ви повісите `80` порт на піддомен, то проблему можна обійти, хоча це важко назвати рішенням
|
||||||
|
|
||||||
|
Підсумовуючи, саме Веб-експлорер я вважаю сирим для публікації його для широкого загалу, хоча JSON/API та вузол Radicle - виглядають цілком собі готовими до продакшну. Фронтенд я б все-таки поставив на локалхост і підключився до віддаленого сіда, налаштувавши потрібні мені псевдоніми в `/etc/hosts`. Свій інстанс триматиму публічно лише для відкритого тестування цього продукту в рамках подальшої розробки.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue