- PVSM.RU - https://www.pvsm.ru -
В InterPlanetary File System можно запустить статичный сайт который будет доступен и напрямую и по IPNS. У сайта будет нормальное доменное имя благодаря использованию DNS. Доменное имя можно использовать для доступа к сайту напрямую, через глобальный и локальный шлюз.
Условия:
Имя домена может содержать только один тире подряд из за этой строки:
const DomainRegexpStr = "^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$"
Она проверяет правильность имени домена. Ограничения на домен будут работать пока не примут Pull request "Use more comprehensive hostname regex pattern" [2].
В каталоге сайта должен быть минимальный набор:
В настройках [11] меняем строку
"Gateway": "/ip6/127.0.0.1/tcp/8080",
на
"Gateway": "/ip6/0.0.0.0/tcp/80",
Редактирование настроек доступно в веб интерфейсе http://127.0.0.1:5001/webui#config [12](он будет доступен после запуска клиента командой ipfs daemon
) либо в файле ~/.ipfs/config
После редактирования настроек клиент необходимо перезапустить.
Так мы откроем доступ к шлюзу из интернета.
Запускаем клиент.
>ipfs daemon
Публикуем каталог с содержимым сайта
ipfs add -r [путь до каталога]
>ipfs add -r ..ivan386.github.io
18.17 KB / ? [-------------------------------------=------------------------------
added QmP2FJJXBjeVqm5DgJ4Q4ZjC5G9A3e74FRTFMV43kHP5p8 ivan386.github.io/favicon.ico
...
80.25 KB / ? [--------------------------------------------------------------------
added QmXzx3rvzdRhLXPtzayG7abQzpyeH3JsyXWNt8CFqKy3Yv ivan386.github.io/index.html
...
added QmUsr9A8ggX79UKfQRTRCFX6FU9HrrWstHNyED5ygqgShA ivan386.github.io
Последним будет нужный нам мультихеш корневого каталога
Привязываем мультихеш каталога к ID
ipfs name publish [мультихеш каталога]
>ipfs name publish QmNjE3iwCqY7729972CHRdFp3bGPosWoFHJ9YsTzea5icT
Published to QmVBRmftY9ytHZ1z39b65gtEMY8Tq4Ri8AtmQeqULXPnm5: QmNjE3iwCqY7729972CHRdFp3bGPosWoFHJ9YsTzea5icT
Здесь в ответе первым идёт ID
Заходим в панель управления DNS добавляем запись TXT
@ TXT dnslink=/ipns/<наш id>
@ TXT dnslink=/ipns/QmVBRmftY9ytHZ1z39b65gtEMY8Tq4Ri8AtmQeqULXPnm5
Через некоторое время (когда произойдёт обновление DNS) контент станет доступен по адресу сайта и на шлюзе по адресу <адрес шлюза>/ipns/<имя домена>
Так мы опубликовали один сайт.
Проверить правильную работу домена можно командой:
ipfs name resolve -r <имя домена>
>ipfs name resolve -r ipfs.io
/ipfs/QmaYRrBpZQRjonxBpBBSLvYmy893ySPpXpHCakhomaQtkU
Бывает что нужно опубликовать несколько разных сайтов.
Для этого:
Добавляем в DNS TXT запись каждого каталога dnslink.
@ TXT dnslink=/ipns/<наш id>/<имя каталога сайта>
@ TXT dnslink=/ipns/QmVBRmftY9ytHZ1z39b65gtEMY8Tq4Ri8AtmQeqULXPnm5/magnet-converter
Можно ссылаться на другой домен у которого задан dnslink.
@ TXT dnslink=/ipns/<имя другого домена>[/<путь к файлу или каталогу>]
@ TXT dnslink=/ipns/ipfs.io
В dnslink можно аналогично указать мультихеш на каталог или файл.
@ TXT dnslink=/ipfs/<мультихеш>[/<путь к файлу или каталогу>]
на каталог
@ TXT dnslink=/ipfs/Qmce1EkrLpAV4gPxE75c68PhDWFCmEsedWkYVNNVU6Ut1S
или
@ TXT dnslink=/ipfs/QmUsr9A8ggX79UKfQRTRCFX6FU9HrrWstHNyED5ygqgShA/magnet-converter
@ TXT dnslink=/ipfs/QmXzx3rvzdRhLXPtzayG7abQzpyeH3JsyXWNt8CFqKy3Yv
или
@ TXT dnslink=/ipfs/Qmce1EkrLpAV4gPxE75c68PhDWFCmEsedWkYVNNVU6Ut1S/index.html
Это будут перманентные ссылки.
Для того чтобы пользователи автоматически подключались к сайту через локальный шлюз я предлагаю добавить A DNS запись.
this-is-ipfs-site-use-local-gate A 127.0.0.1
Это позволит пользователю подключить простой proxy.pac который загрузит сайт через локальный шлюз.
function FindProxyForURL(url, host) {
if ( shExpMatch(url, "http:*") && dnsResolve("this-is-ipfs-site-use-local-gate."+host) == "127.0.0.1" ){
return "PROXY 127.0.0.1:8080; DIRECT"
}
return "DIRECT"
}
Можно использовать IPFS
_dnslink TXT dnslink=/ipns/<наш id>/<имя каталога сайта>
@ CNAME gateway.ipfs.io
Но не все DNS хостинги позволят задать CNAME корневому домену.
В данном случае наш IPFS клиент может работать с настройками по умолчанию. Как только кто то обратится к нашему сайту IPFS клиент на сервере gateway.ipfs.io скопирует от нас содержимое сайта и передаст через шлюз. Данный вариант удобен если ваш сервер за NAT. Но не забываем о том что у глобального шлюза тоже бывают перегрузки.
Вот так просто мы делаем свой сайт доступным более современным способом. Теперь он доступен не только напрямую но также и в децентрализованной сети IPFS.
Сайт для теста: ivan386.tk [14]
Через глобальный шлюз: ipfs.io/ipns/ivan386.tk [15]
Через локальный шлюз: 127.0.0.1:8080/ipns/ivan386.tk [16]
Автор: ivan386
Источник [26]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/dns-2/215271
Ссылки в тексте:
[1] Image: https://habrahabr.ru/post/316468/
[2] "Use more comprehensive hostname regex pattern": https://github.com/jbenet/go-is-domain/pull/3
[3] Один сайт: #odin-sayt
[4] Проверка: #proverka
[5] Несколько сайтов: #neskolko-saytov
[6] Альтернативные способы: #alternativnye-sposoby
[7] Локальный шлюз: #lokalnyy-shlyuz
[8] Глобальный шлюз: #globalnyy-shlyuz
[9] Заключение: #zaklyuchenie
[10] Источники: #istochniki
[11] настройках: https://github.com/ipfs/examples/tree/master/examples/config
[12] http://127.0.0.1:5001/webui#config: http://127.0.0.1:5001/webui#config
[13] хостинг: https://www.reg.ru/?rlink=reflink-717
[14] ivan386.tk: http://ivan386.tk
[15] ipfs.io/ipns/ivan386.tk: http://ipfs.io/ipns/ivan386.tk
[16] 127.0.0.1:8080/ipns/ivan386.tk: http://127.0.0.1:8080/ipns/ivan386.tk
[17] IPFS for websites: https://github.com/ipfs/examples/tree/master/examples/websites
[18] ipfs dns: https://ipfs.io/docs/commands/#ipfs-dns
[19] ipfs name: https://ipfs.io/docs/commands/#ipfs-name
[20] Межпланетная файловая система IPFS: https://habrahabr.ru/post/314768/
[21] Почему Интернету нужен IPFS, пока ещё не поздно: https://habrahabr.ru/post/268275/
[22] Работа в IPFS с человеческим лицом: https://habrahabr.ru/post/310554/
[23] PAC Functions: http://findproxyforurl.com/pac-functions/
[24] Мультихеш: https://github.com/multiformats/multihash
[25] IPFS implementation in Go: https://github.com/ipfs/go-ipfs
[26] Источник: https://habrahabr.ru/post/316468/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.