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

Основные шаги
- Подготовить файлы сайта
- Разместить файлы в IPFS (локально или через провайдера)
- Привязать Web3‑домен (ENS) к IPFS‑хешу
- Открыть сайт: .link или IPFS‑включённый браузер
1. Подготовьте файлы сайта
Подготовьте статические файлы (index.html, css, js, изображения) в одной папке. Вы можете создать сайт с нуля или скачать шаблон.
Если вы используете готовый шаблон, скачайте ZIP и распакуйте в папку с каждой отдельной страницей и ресурсом.
- Перейдите на сайт с шаблонами и скачайте понравившийся шаблон.
- Распакуйте ZIP в папку проекта.
Советы по структуре:
- Всегда должен быть файл index.html в корне сайта.
- Путь к статическим ресурсам должен быть относительным (чтобы CID одинаково включал все файлы).
- Минимизируйте внешние зависимости, особенно внешние API, которые могут ломать сайт при оффлайне.
2. Разместите файлы в IPFS
IPFS позволяет хранить файлы распределённо. У вас есть два пути:
- Запустить собственный IPFS‑ноду (доступно бесплатно, но ваша машина должна быть в сети для распространения контента).
- Использовать провайдеров (Fleek, Piñata, Infura и др.) для хостинга и пиновки контента — их узлы будут обеспечивать доступность.
Важное отличие: IPFS адресует по содержимому (CID). При изменении файлов CID меняется — нужно обновлять запись в ENS.
Загрузка на локальную IPFS ноду
- Установите IPFS Desktop или go‑ipfs (доступно на официальном сайте IPFS). Можно также использовать расширение IPFS Companion в браузере Brave.
- Откройте дашборд IPFS и используйте кнопку Import для загрузки папки с сайтом. После загрузки вы получите CID (хеш).
Альтернативно через CLI:
ipfs add -r ./путь/к/папкеЗапомните CID, он понадобится при связывании с ENS или при публикации через провайдер.
Примечание: если вы используете собственную ноду, убедитесь, что она «запинена» на публичном пине (например, через сервис пиновки) или что другие узлы её получают — иначе сайт будет недоступен, если ваша машина оффлайн.
Загрузка через Fleek (GitHub → Fleek → IPFS)
Fleek позволяет автоматизировать развёртывание сайтов из GitHub в IPFS. Процесс обычно такой:
- Подготовьте репозиторий 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 на адрес вашего репозитория.
- На Fleek: Add New Site → подключитесь к GitHub → выберите репозиторий с сайтом → выберите Deploy Location: IPFS → Deploy.
- После деплоя Fleek выдаст CID и URL, а также опционально будет автоматически обновлять деплой при пуше в репозиторий.
Преимущества Fleek: автоматические билды, интеграция с GitHub, pinning и CDN‑оптимизация для IPFS. Минусы: некоторые функции платные.
3. Привяжите Web3‑домен (ENS) к IPFS‑хешу
После получения CID у вас есть адрес контента. Чтобы пользователи могли заходить по удобному домену, запишите CID в ENS (contenthash).
Для демонстрации в примере использован домен elgwaro.eth.
Связывание ENS с IPFS
- Откройте ENS на сайте (или в дашборде ENS в Ethereum‑кошельке) и выберите ваш домен.
- Перейдите в раздел Records и нажмите Edit Records.
- В поле Other / Contenthash вставьте IPFS‑CID (или ссылку вида /ipfs/
) и сохраните.
- Подтвердите транзакцию через кошелёк (MetaMask, WalletConnect и др.). Этот шаг требует газа — комиссия зависит от загруженности сети.
Когда транзакция подтверждена, ваш домен будет указывать на содержимое IPFS.
Привязка на Fleek
Если сайт развернут через Fleek, то Fleek может помочь автоматически установить contenthash.
- В панели Fleek откройте сайт и нажмите Add Custom Domain.
- Выберите ENS Info → Add ENS → введите домен → Verify → Set Content Hash. Подтвердите транзакцию в кошельке.
Важно: кошелёк, которым вы подписываете транзакцию, должен быть контролёром домена ENS (т.е. иметь соответствующие права). В противном случае операция не удастся.
4. Доступ к сайту
После того как contenthash установлен, сайт доступен по адресу <вашдомен>.link (например, elgwaro.eth.link). В некоторых браузерах с поддержкой IPFS (Brave, Opera с расширением) можно открыть домен прямо как elgwaro.eth.
Советы по тестированию:
- Откройте .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)
- Внести изменения в локальной папке.
- Пройти тесты и собрать статические артефакты.
- Закоммитить и запушить в GitHub.
- CI/CD деплоит на Fleek (или вручную: загрузить в IPFS и получить новый CID).
- Обновить contenthash в ENS → подписать транзакцию кошельком владельца домена.
- Проверить доступность через .link и в Brave.
Критерии приёмки
- Новый CID записан в ENS и подтверждён транзакцией.
- Сайт в браузере открывается без ошибок 404 и ресурсы загружаются.
- Резервная пиновка подтверждена (если используется пиновка).
Инцидентный план и откат
Проблема: сайт стал недоступен после обновления contenthash.
Шаги восстановления:
- Проверить статус транзакции в блокчейне. Если неподтверждена — ждать или переподписать.
- Вернуться к предыдущему CID и записать его в ENS (быстрый откат, требуется подпись контроллера).
- Убедиться, что предыдущий CID запинен (провайдеры пиновки) и доступен.
- Проанализировать причину (ошибка сборки, сломанный путь) и исправить локально.
Безопасность и конфиденциальность
- Не храните приватные данные в 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, а также чек‑лист для голосовой проверки безопасности перед выпуском.
Похожие материалы
Как исправить ошибку NSIS в Windows 11
Исправить ошибку Local Adapter Low Energy Controller
Как остановить случайные выключения Windows 10
Как исправить ошибку CMUSBDAC.sys в Windows 10
Ошибка «Отмена изменений» в Windows — как исправить