Гид по технологиям

Создание децентрализованного сайта на IPFS и ENS

8 min read Web3 Обновлено 02 Jan 2026
Децентрализованный сайт на IPFS и ENS
Децентрализованный сайт на IPFS и ENS

О чём это руководство

Это практическое руководство — для разработчиков и технических руководителей, которые хотят разместить статический сайт в децентрализованной сети. Здесь вы найдёте короткие определения терминов, подробные шаги, чек‑листы для ролей, рекомендации по безопасности и восстановлению, а также альтернативные подходы.

Короткие определения:

  • IPFS: распределённая файловая система для хранения и выдачи контента по CID (контент‑хеш).
  • ENS: Ethereum Name Service — система доменных имён для Web3 (пример: example.eth).
  • CID: идентификатор содержимого в IPFS (content identifier).
  • Content hash: запись в ENS, указывающая на ресурс в IPFS.

MacBook с открытым сайтом


Основные шаги

  1. Подготовить файлы сайта
  2. Разместить файлы в IPFS (локально или через провайдера)
  3. Привязать Web3‑домен (ENS) к IPFS‑хешу
  4. Открыть сайт: .link или IPFS‑включённый браузер

1. Подготовьте файлы сайта

Подготовьте статические файлы (index.html, css, js, изображения) в одной папке. Вы можете создать сайт с нуля или скачать шаблон.

Если вы используете готовый шаблон, скачайте ZIP и распакуйте в папку с каждой отдельной страницей и ресурсом.

  1. Перейдите на сайт с шаблонами и скачайте понравившийся шаблон.
  2. Распакуйте ZIP в папку проекта.

Шаблон Free CSS распакован в папку проекта

Советы по структуре:

  • Всегда должен быть файл index.html в корне сайта.
  • Путь к статическим ресурсам должен быть относительным (чтобы CID одинаково включал все файлы).
  • Минимизируйте внешние зависимости, особенно внешние API, которые могут ломать сайт при оффлайне.

2. Разместите файлы в IPFS

IPFS позволяет хранить файлы распределённо. У вас есть два пути:

  • Запустить собственный IPFS‑ноду (доступно бесплатно, но ваша машина должна быть в сети для распространения контента).
  • Использовать провайдеров (Fleek, Piñata, Infura и др.) для хостинга и пиновки контента — их узлы будут обеспечивать доступность.

Важное отличие: IPFS адресует по содержимому (CID). При изменении файлов CID меняется — нужно обновлять запись в ENS.

Загрузка на локальную IPFS ноду

  1. Установите IPFS Desktop или go‑ipfs (доступно на официальном сайте IPFS). Можно также использовать расширение IPFS Companion в браузере Brave.
  2. Откройте дашборд IPFS и используйте кнопку Import для загрузки папки с сайтом. После загрузки вы получите CID (хеш).

Загрузка файлов сайта в IPFS через дашборд

Альтернативно через CLI:

ipfs add -r ./путь/к/папке

Запомните CID, он понадобится при связывании с ENS или при публикации через провайдер.

Примечание: если вы используете собственную ноду, убедитесь, что она «запинена» на публичном пине (например, через сервис пиновки) или что другие узлы её получают — иначе сайт будет недоступен, если ваша машина оффлайн.

Загрузка через Fleek (GitHub → Fleek → IPFS)

Fleek позволяет автоматизировать развёртывание сайтов из GitHub в IPFS. Процесс обычно такой:

  1. Подготовьте репозиторий GitHub с файлами сайта (локально инициализируйте git, затем push в репозиторий).

Пример команд (выполняется в каталоге сайта):

cd desktop/dWeb
git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/yourusername/dWeb.git
git push -u origin main

Внимание: в примере замените URL на адрес вашего репозитория.

Создание репозитория GitHub и загрузка файлов

  1. На Fleek: Add New Site → подключитесь к GitHub → выберите репозиторий с сайтом → выберите Deploy Location: IPFS → Deploy.

Добавление сайта в Fleek и выбор репозитория

  1. После деплоя Fleek выдаст CID и URL, а также опционально будет автоматически обновлять деплой при пуше в репозиторий.

Авторизация Fleek для доступа к репозиторию GitHub

Выбор параметров деплоя на Fleek и развертывание в IPFS

Выбор фреймворка в Fleek

Преимущества Fleek: автоматические билды, интеграция с GitHub, pinning и CDN‑оптимизация для IPFS. Минусы: некоторые функции платные.

3. Привяжите Web3‑домен (ENS) к IPFS‑хешу

После получения CID у вас есть адрес контента. Чтобы пользователи могли заходить по удобному домену, запишите CID в ENS (contenthash).

Для демонстрации в примере использован домен elgwaro.eth.

Связывание ENS с IPFS

  1. Откройте ENS на сайте (или в дашборде ENS в Ethereum‑кошельке) и выберите ваш домен.

Дашборд ENS с доменом

  1. Перейдите в раздел Records и нажмите Edit Records.

Редактирование записей ENS в разделе Records

  1. В поле Other / Contenthash вставьте IPFS‑CID (или ссылку вида /ipfs/) и сохраните.

Добавление IPFS CID в записи ENS

  1. Подтвердите транзакцию через кошелёк (MetaMask, WalletConnect и др.). Этот шаг требует газа — комиссия зависит от загруженности сети.

Авторизация транзакции изменения записей ENS в кошельке

Когда транзакция подтверждена, ваш домен будет указывать на содержимое IPFS.

Привязка на Fleek

Если сайт развернут через Fleek, то Fleek может помочь автоматически установить contenthash.

  1. В панели Fleek откройте сайт и нажмите Add Custom Domain.

Fleek — добавление пользовательского домена

  1. Выберите ENS Info → Add ENS → введите домен → Verify → Set Content Hash. Подтвердите транзакцию в кошельке.

Fleek — добавление ENS домена и проверка

Fleek — подтверждение ENS и установка content hash

Fleek — установка content hash для ENS домена

Важно: кошелёк, которым вы подписываете транзакцию, должен быть контролёром домена ENS (т.е. иметь соответствующие права). В противном случае операция не удастся.

4. Доступ к сайту

После того как contenthash установлен, сайт доступен по адресу <вашдомен>.link (например, elgwaro.eth.link). В некоторых браузерах с поддержкой IPFS (Brave, Opera с расширением) можно открыть домен прямо как elgwaro.eth.

ENS домен успешно привязан и сайт доступен

Развернутый децентрализованный сайт в браузере

Советы по тестированию:

  • Откройте .link в обычном браузере для проверки работы через шлюзы.
  • Проверьте доступность в Brave без .link.
  • Убедитесь, что все относительные пути указаны корректно.

Когда такой подход не подходит

  • Динамические приложения, требующие серверной логики (бэкенд, БД) — потребуется отдельный слой серверов или использование децентрализованных compute‑решений.
  • Очень большие файлы или частые обновления: частые изменения меняют CID и требуют постоянного обновления ENS и репиновки.
  • Необходимость строгого контроля доступа и аутентификации — IPFS по умолчанию даёт публичный доступ к контенту.

Альтернативные подходы

  • Arweave — перманентное хранения данных, оплата один раз за вечное хранение.
  • Filecoin + Textile/Powergate — распределённое и экономичное долгосрочное хранилище.
  • Decentralized hosting platforms с поддержкой SSR (например, специализированные Web3‑платформы) для динамики.

Роль‑ориентированные чек‑листы

Разработчик:

  • Подготовить статические файлы и проверить относительные пути.
  • Минимизировать внешние зависимости.
  • Добавить файл robots.txt и sitemap.xml при необходимости.

DevOps / инженер по развёртыванию:

  • Настроить CI/CD (GitHub Actions → Fleek или другой провайдер).
  • Настроить пиновку CID и проверить резервные узлы.
  • Документировать процесс обновления contenthash.

Продуктовый менеджер:

  • Решить политику обновлений: как часто будет меняться контент.
  • Определить SLA для доступности (планы пиновки/резервов).
  • Оценить затраты на провайдера и комиссии за транзакции.

SOP для обновления сайта (короткий playbook)

  1. Внести изменения в локальной папке.
  2. Пройти тесты и собрать статические артефакты.
  3. Закоммитить и запушить в GitHub.
  4. CI/CD деплоит на Fleek (или вручную: загрузить в IPFS и получить новый CID).
  5. Обновить contenthash в ENS → подписать транзакцию кошельком владельца домена.
  6. Проверить доступность через .link и в Brave.

Критерии приёмки

  • Новый CID записан в ENS и подтверждён транзакцией.
  • Сайт в браузере открывается без ошибок 404 и ресурсы загружаются.
  • Резервная пиновка подтверждена (если используется пиновка).

Инцидентный план и откат

Проблема: сайт стал недоступен после обновления contenthash.

Шаги восстановления:

  1. Проверить статус транзакции в блокчейне. Если неподтверждена — ждать или переподписать.
  2. Вернуться к предыдущему CID и записать его в ENS (быстрый откат, требуется подпись контроллера).
  3. Убедиться, что предыдущий CID запинен (провайдеры пиновки) и доступен.
  4. Проанализировать причину (ошибка сборки, сломанный путь) и исправить локально.

Безопасность и конфиденциальность

  • Не храните приватные данные в IPFS (данные публичны по CID). Для приватных ресурсов используйте шифрование и отдавайте дешифровку клиенту после аутентификации.
  • Контролируйте права на ENS: кто может менять contenthash — это ключ безопасности.
  • Храните seed-фразы и ключи в защищённых хранилищах.

Примечание по GDPR и приватности

  • Поскольку IPFS — публичная сеть, удаление данных затруднено. Для соответствия требованиям конфиденциальности избегайте размещения персональных данных в открытом IPFS без шифрования и процессов удаления.

Ментальные модели и практические эвристики

  • «CID = снимок содержимого»: любое изменение даёт новый CID.
  • ENS = указатель на снимок; ENS не хранит файлы, только ссылку.
  • Пины = гарантия доступности: без пинов CID могут исчезнуть, если никто его не хранит.

Сравнение по использованию (краткая матрица)

  • Локальная нода: бесплатно, но требует доступности вашей машины.
  • Fleek: автоматизация, интеграция с GitHub, удобство, часть функций платная.
  • Piñata/Infura: фокус на пиновке и API‑доступе, полезно для больших проектов.

Советы по миграции с Web2 на Web3

  • Начните с малых статических проектов (блог, документация, посадочная страница).
  • Автоматизируйте процесс: GitHub → CI → Fleek → ENS.
  • Документируйте изменения CID и транзакции — это упростит откат.

Факты и ограничения

  • IPFS адресует по содержимому, поэтому обновления контента изменяют идентификатор — планируйте процесс обновлений заранее.
  • Транзакции в ENS требуют газа; учтите это в бюджете при частых обновлениях.
  • Браузерная поддержка растёт: Brave и некоторые расширения обеспечивают удобный доступ без .link.

Короткий глоссарий

  • CID: идентификатор содержимого в IPFS.
  • Pin: «прикрепление» контента на узле для постоянной доступности.
  • Contenthash: запись в ENS, указывающая на ресурс в IPFS.
  • ENS: система доменных имён в экосистеме Ethereum.

Итог и рекомендации

Децентрализованный сайт — отличное решение для статического контента, для которого важна устойчивость к цензуре и распределённая доступность. Начните с простого проекта, автоматизируйте деплой через GitHub и Fleek, обеспечьте пиновку CID и защитите ENS‑контролёра. Для динамичных приложений рассматривайте гибридные архитектуры или альтернативные блокчейн‑сервисы.

Важное

  • Всегда проверяйте, какой кошелёк подписывает запись в ENS — это критический шаг для безопасности.
  • Для личных/конфиденциальных данных используйте шифрование, иначе данные будут общедоступны.

Краткое резюме

  • Подготовьте папку со статикой и index.html.
  • Разверните в IPFS через собственную ноду или провайдера.
  • Запишите CID в ENS через contenthash и подпишите транзакцию.
  • Доступ: <вашдомен>.link или напрямую в IPFS‑включённом браузере.

Спасибо: если нужно, могу предоставить шаблоны GitHub Actions для автоматического деплоя в Fleek, примеры записи contenthash через web3.js/ethers.js, а также чек‑лист для голосовой проверки безопасности перед выпуском.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как исправить ошибку NSIS в Windows 11
Windows

Как исправить ошибку NSIS в Windows 11

Исправить ошибку Local Adapter Low Energy Controller
Windows

Исправить ошибку Local Adapter Low Energy Controller

Как остановить случайные выключения Windows 10
Windows

Как остановить случайные выключения Windows 10

Как исправить ошибку CMUSBDAC.sys в Windows 10
Windows

Как исправить ошибку CMUSBDAC.sys в Windows 10

Ошибка «Отмена изменений» в Windows — как исправить
Windows

Ошибка «Отмена изменений» в Windows — как исправить

Исправление ошибки Windows 10 80072EE2
Windows

Исправление ошибки Windows 10 80072EE2