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

Создание децентрализованного сайта на 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
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство