В IPFS можно запустить статичный сайт который будет доступен и напрямую и по IPNS. У сайта будет нормальное доменное имя благодаря использованию DNS. Доменное имя можно использовать для доступа к сайту напрямую, через глобальный и локальный шлюз.
Условия:
- На нашем сервере установлен IPFS
- У нас есть домен и доступно редактирование DNS записей
Имя домена может содержать только один тире подряд из за этой строки:
const DomainRegexpStr = "^([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,}$"
Она проверяет правильность имени домена. Ограничения на домен будут работать пока не примут Pull request "Use more comprehensive hostname regex pattern".
Один сайт
-
В каталоге сайта должен быть минимальный набор:
- Индексный файл "index.html" (если его не будет то IPFS покажет содержимое каталога)
- Инструкция для поисковых систем "robots.txt" (я про него вспомнил когда роботы пришли на разведку и я увидел ошибки в консоли IPFS)
- Иконка сайта "favicon.ico" (его браузеры автоматом запрашивают если другой не задан)
-
В конфиге меняем строку
"Gateway": "/ip6/127.0.0.1/tcp/8080", на "Gateway": "/ip6/0.0.0.0/tcp/80",
Тем самым мы открываем шлюз в интернет.
-
Запускаем демон.
>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
Несколько сайтов
Для этого:
- Складываем каталоги сайтов в один, шарим и привязываем корневой каталог сайтов к ID.
-
Добавляем в 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.
Сайт для теста: ivan386.tk
Источники
- ipfs command reference
- Межпланетная файловая система IPFS
- Почему Интернету нужен IPFS, пока ещё не поздно
- Работа в IPFS с человеческим лицом
- PAC Functions
ссылка на оригинал статьи https://habrahabr.ru/post/316468/
Добавить комментарий