Рубрики
Интернет

Запуск ноды IPFS на своём сервере

IPFS is the Distributed Web

A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.

IPFS (InterPlanetary File System, межпланетная файловая система) — контентно-адресуемый, одноранговый гипермедийный протокол связи. Узлы IPFS-сети формируют распределенную файловую систему. IPFS является проектом с открытым исходным кодом, разработанным Protocol Labs при содействии open-source сообщества.

Официальный сайт: ipfs.io


Эта чудесная штука, нечто среднее между торрентами (bittorrent),  файлообменником (dc), репозиторием (git), блокчейном (blockchain) и вебом (http). Позволяет мгновенно опубликовать любой файл, откуда угодно и куда угодно, через Интернет, посредством распределённой сети. И соответственно, получить доступ к опубликованным файлам (и каталогам) как из самой сети так и через обычный веб, посредством специальных шлюзов. При это один и тот же файл нельзя опубликовать дважды, т.е. создать дубль, т.к. адресом файла (его названием) является мультихэш от содержимого. И конечно, вся сеть зашифрована и практически не поддаётся цензуре.

Установка и настройка IPFS ноды на сервере под ОС Debian 9

Данная статья не является единственным или наиболее верным руководством. Настоятельно рекомендую ознакомиться с официальной документацией: https://ipfs.io/docs

Установка IPFS

Начать следует с загрузки архива скриптов установки и обновления: https://dist.ipfs.io/#ipfs-update

cd /opt/
wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-amd64.tar.gz
tar -xvzf ipfs-update_v1.5.2_linux-amd64.tar.gz
cd ipfs-update/
./ipfs-update install latest

Упростим дальнейший ввод команд, добавив псевдоним. Таким образом мы обеспечим выполнение утилиты ipfs от пользователя www-data (наиболее подходящего для этого):
nano ~/.bashrc

alias ipfs='sudo -u www-data ipfs'

alias ipfs='sudo -u www-data ipfs'

Настройка IPFS

Настройка не сложная, но понимать её нужно. Файл конфигурации лежит здесь: /var/www/.ipfs/config

Выполним первичную инициализацию:
ipfs init
Зададим максимальный объём хранилища:
ipfs config --json Datastore.StorageMax '"10GB"'
Адрес API для доступа к веб интерфейсу:
ipfs config --json Addresses.API '"/ip4/0.0.0.0/tcp/5001"'
Адрес шлюза для доступа к сети:
ipfs config --json Addresses.Gateway '"/ip4/0.0.0.0/tcp/8080"'
Разрешённые заголовки API:
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
Адреса с которых разрешено администрирование:
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://АДРЕС-СЕРВЕРА:5001", "http://localhost", "http://127.0.0.1"]' ОСТОРОЖНО! Не открывайте наружу!
Пользовательский X-заголовок:
ipfs config --json API.HTTPHeaders.X-Special-Header '["so special :)"]'
Тоже самое, только для шлюза:
ipfs config --json Gateway.HTTPHeaders.X-Special-Header '["so special :)"]'
Экспериментальная опция, позволяющая не копировать публикуемые файлы во внутреннее хранилище:
ipfs config --json Experimental.FilestoreEnabled true

Запуск IPFS

Создадим сервис для легкого и автоматического запуска демона IPFS: nano /etc/systemd/system/ipfs.service

[Unit]
Description=IPFS daemon
After=network.target

[Service]
ExecStart=/usr/local/bin/ipfs daemon
ExecStop=/usr/bin/pkill ipfs
Restart=on-failure
User=www-data

[Install]
WantedBy=default.target

Обновим информацию о сервисах:
systemctl daemon-reload
Запустим новый сервис:
service ipfs start
Проверим его состояние:
service ipfs status
Если всё ОК, то включим автозагрузку:
systemctl enable ipfs.service

Примеры использования IPFS

Опубликовать один конкретный файл, без дублирования во внутреннюю библиотеку IPFS:
ipfs add --nocopy ./folder/music.mp3
Опубликовать каталог со всем содержимым (рекурсивно), с дублированием (копированием) во внутреннюю библиотеку IPFS:
ipfs add --recursive ./folder/
Узнать мультихэш файла, без публикации его в сеть:
ipfs add --only-hash -q ./folder/pic.jpg
Опубликовать можно не только файлы или каталоги, но и просто текст:
echo "Hello world!" | ipfs add
Закрепить локально (скопировать себе) объект, опубликованный в другом месте:
ipfs pin add -r=false QmQAWnaRR2S57jyMX5EykqcFwF2jwadXMq2RuTpzFa6Tuq
Получить содержимое объекта:
ipfs cat QmfHTUfG6hexg2D3Dgatx1CxyKVyrKQqeJ2ge7DVuvJHqp
Ссылка для получения объекта (файла, директории) через специальный, распределённый, открытый шлюз:
https://gateway.ipfs.io/ipfs/QmfHTUfG6hexg2D3Dgatx1CxyKVyrKQqeJ2ge7DVuvJHqp

Что ещё можно делать с IPFS

what if I told you
А что, если я скажу тебе… Это лишь верхушка айсберга!…
https://cloudflare-ipfs.com/ipfs/QmPDgUhqWE4WqRqAHHtjUTkTjWRiSKGtAHtf8YWcqUiUvA/example#/ipfs/QmXoi5QCbT83obqqoUFwq1hM7EbS2LVnNgNNiDe9LDnMbP

Автор: Илья Балдуев

Специалист ИТ, веб программист, фотограф, блоггер. Добрый, но злопамятный. Верный, но не Хатико. Честный, не всегда. Упрямый, но ленивый.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *