Файловая система ipfs

Файловая система ipfs

2024-08-30 · 3 мин. для прочтения
blog computer-science

Файловая система ipfs.

Содержание

1 Общая информация

  • IPFS состоит из следующих уровней:
  • уровень имён: пользователи могут выбирать глобальные имена (привязка к DNS при помощи записей TXT);
  • уровень файлов: файловая система с изменяемыми файлами и снимками;
  • уровень объектов: неизменяемые объекты (могут или храниться в распределённой хеш-таблице (если маленькие), или скачиваться как в торрентах);
  • уровень обмена данными: протокол BitSwap;
  • уровень маршрутизации: как узлам добираться друг до друга;
  • сетевой уровень: по каким протоколам узлам связываться между собой;
  • уровень подлинности узлов (identity): чтобы нельзя было дублировать слишком много узлов (узлы с заданным номером), нарушая целостность сети.
  • Сайт: https://ipfs.tech/
  • Репозиторий описания: https://github.com/ipfs/ipfs

2 Установка

2.1 Gentoo

  • В portage присутствует реализация kubo:
    emerge net-p2p/kubo
    

3 Каталоги

  • Каталог по умолчанию для системного демона:
    /var/lib/ipfs/.ipfs
    
  • Конфигурационный файл:
    $IPFS_PATH/config
    
  • Конфигурационный файл для системного демона:
    /var/lib/ipfs/.ipfs/config
    
  • Конфигурационный файл для пользовательского демона:
    ~/.ipfs/config
    

4 Права доступа

  • Добавьте пользователя в группу ipfs:
    sudo gpasswd -a <user> ipfs
    

5 Web-консоль

  • Подключиться к web-консоли:
    http://localhost:5001/webui/
    
  • Настройки IPFS можно менять в webui.
  • Локальный IPFS-шлюз:
    http://localhost:8080/ipfs/
    

6 Команды

6.1 Редактирование настроек

  • Общая команда редактирования:
    ipfs config edit
    

7 Запуск

7.1 Системный демон

  • Инициализируйте файловую систему ipfs:
    su -s /bin/sh -c "ipfs init -e" ipfs
    
  • Запуск системного демона:
    sudo systemctl enable --now ipfs.service
    

7.2 Системный демон в другом каталоге

  • Я для унификации я хочу поместить каталог ipfs в /data/ipfs.
  • Создайте каталог:
    mkdir -p /data/ipfs
    chown ipfs:ipfs /data/ipfs
    
  • Можно либо подменить переменную окружения, как в запуске под пользователем, либо подмонтировать необходимый каталог в /var/lib/ipfs.
  • Создайте подтом для ipfs:
    mkdir -p /fs
    mount /dev/nvme0n1p4 /fs
    cd /fs
    btrfs subvolume create @ipfs
    cd /
    umount /fs
    
  • Добавьте в /etc/fstab:
    /dev/nvme0n1p4 /data/ipfs btrfs relatime,discard=async,autodefrag,compress=zstd,subvol=@ipfs 0 0
    /data/ipfs /var/lib/ipfs btrfs bind 0 0
    
  • Подмонтируйте:
    mount /data/ipfs
    mount /var/lib/ipfs
    
  • Инициализируйте файловую систему ipfs:
    sudo -u ipfs ipfs init -e
    
  • Запуск демона:
    sudo systemctl enable --now ipfs.service
    

7.3 Пользовательский демон

  • Инициализируйте файловую систему ipfs:
    ipfs init -e
    
  • Запуск пользовательского демона:
    sudo systemctl enable --now ipfs@username.service
    

7.4 Пользовательский демон в другом каталоге

  • Инициализируйте файловую систему ipfs в каталоге /data/ipfs:
    sudo mkdir -p /data/ipfs/
    sudo chown -R username /data/ipfs/
    IPFS_PATH=/data/ipfs/ ipfs init -e
    
  • Создайте переопределение для сервиса systemd:
    sudo systemctl edit ipfs@username.service
    
  • Отредактируйте файл /etc/systemd/system/ipfs@username.service.d/override.conf:
    [Service]
    Environment=IPFS_PATH=/data/ipfs
    
  • Запуск пользовательского демона:
    sudo systemctl enable --now ipfs@username.service
    

8 Первичная настройка

  • Проверьте работу ipfs, откройте в броузере:
    http://localhost:8080/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
    

8.1 CORS

  • Cross-origin Resource Sharing (CORS) есть механизм безопасности браузера, который предотвращает доступ неавторизованных скриптов к ресурсам из разных доменов.
  • Можно настроить свой узел, чтобы разрешить обработку запросов из других доменов, установив соответствующие заголовки в конфигурации узла:
    sudo -u ipfs ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://ip_вашего сервера:5001", "http://127.0.0.1:5001", "https://webui.ipfs.io"]'
    sudo -u ipfs ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
    
  • Или прописать wildcard:
    sudo -u ipfs ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
    sudo -u ipfs ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
    

9 Ресурсы

10 Плагины

10.1 IPFS Companion

Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Работаю профессором на кафедре теории вероятностей и кибербезопасности Российского университета дружбы народов им. Патриса Лумумбы. Научные интересы относятся к области теоретической физики и математического моделирования.