From 1dd2cccca84dd9ea5229939bb47569fc9c029d4f Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Wed, 21 Jan 2026 23:10:25 +0100 Subject: [PATCH] chore: add Shipyard fleek migration blog post (#722) * chore: add Shipyard fleek migration blog post link to ipshipyard.com/blog/2026-ipfs-self-hosting-migration/ * chore: inline Shipyard fleek migration as full blog post cross-posted from ipshipyard.com instead of linking out, per review feedback on PR #722 * Apply suggestions from Mosh Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com> * chore: add canonicalUrl to Shipyard cross-posts --------- Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com> --- src/_blog/2026-01-fleek-migration.md | 82 ++++++++++++++++++ src/_blog/bybit-hack.md | 1 + src/_blog/shipyard-2024.md | 1 + src/_blog/shipyard-hello-world.md | 1 + .../2026-fleek-migration-pr-comment.jpg | Bin 0 -> 31479 bytes 5 files changed, 85 insertions(+) create mode 100644 src/_blog/2026-01-fleek-migration.md create mode 100644 src/assets/2026-fleek-migration-pr-comment.jpg diff --git a/src/_blog/2026-01-fleek-migration.md b/src/_blog/2026-01-fleek-migration.md new file mode 100644 index 00000000..93e51ce6 --- /dev/null +++ b/src/_blog/2026-01-fleek-migration.md @@ -0,0 +1,82 @@ +--- +title: "How to Migrate IPFS Websites from Fleek to Modular Infrastructure" +description: "A how-to guide for future-proofing your content-addressed website hosting." +author: Marcin Rataj +date: 2026-01-06 +permalink: '/2026-fleek-migration/' +canonicalUrl: https://ipshipyard.com/blog/2026-ipfs-self-hosting-migration/ +header_image: '/2022-ipfs-gateways-1.png' +tags: + - kubo + - gateways + - fleek + - websites +--- + +_Cross-posted from the [Shipyard blog](https://ipshipyard.com/blog/2026-ipfs-self-hosting-migration/)._ + +This is a practical guide to hosting websites on both HTTP and IPFS using modular, swappable components. When Fleek announced it was discontinuing hosting, we migrated 15+ IPFS Project websites to a setup designed to survive any single provider shutting down. Whether you're moving off Fleek or just want more resilient hosting, this guide covers the approach and the tools we used. + +## What Changed + +Sites including [ipfs.tech](https://ipfs.tech), [docs.ipfs.tech](https://docs.ipfs.tech), [blog.ipfs.tech](https://blog.ipfs.tech), and [specs.ipfs.tech](https://specs.ipfs.tech) now use: + +- **[GitHub Pages](https://docs.github.com/en/pages)** for Web2 HTTPS hosting (we already use GitHub for code, so no new third-party dependencies) +- **[Kubo](https://github.com/ipfs/kubo)** for CID and CAR creation (we control [content-addressing](https://docs.ipfs.tech/concepts/content-addressing/), making content portable across any provider) +- **[IPFS Cluster](https://ipfscluster.io/)** for long-term pinning and serving content to IPFS network (self-hosted by Shipyard; [pinning services](https://docs.ipfs.tech/how-to/work-with-pinning-services/) work equally well) +- **[DNSLink](https://docs.ipfs.tech/concepts/dnslink/)** for mapping CIDs to human-readable URLs (decouples naming from content location; automated via [dnslink-action](https://github.com/ipshipyard/dnslink-action)) + +All sites now have redundant hosting: traditional HTTP via GitHub Pages and content-addressed access via [IPFS Desktop](https://docs.ipfs.tech/install/ipfs-desktop/) with [IPFS Companion](https://docs.ipfs.tech/install/ipfs-companion/) and third-party [public IPFS gateways](https://ipfs.github.io/public-gateway-checker/). + +## Third-Party Services Come and Go + +Fleek Hosting was a turn-key solution that combined HTTP CDN with TLS, IPFS pinning, IPFS gateway, DNSLink, IPNS, ENS, and GitHub Actions CI integration in one platform. [Fleek is pivoting to AI](https://web.archive.org/web/20260108212232/https://www.fleek.sh/blog/2026-outlook) and [discontinuing its hosting services on January 31, 2026](https://github.com/ipshipyard/waterworks-community/issues/23). + +The IPFS service landscape is always evolving. Some providers have shut down or changed focus: [nft.storage transitioned operations](https://web.archive.org/web/20250915005638/https://nft.storage/blog/nft-storage-operation-transitions-in-2025), [Infura deprecated its IPFS public API and gateway](https://web.archive.org/web/20230206190257/blog.infura.io/post/ipfs-public-api-and-gateway-deprecation), and [Scaleway shut down IPFS pinning](https://web.archive.org/web/20251130221548/https://labs.scaleway.com/en/ipfs-pinning/). At the same time, new options have emerged: [Storacha](https://storacha.network/) launched as a successor to web3.storage, Shipyard [took over Cloudflare's public IPFS gateways](https://web.archive.org/web/20251112005234/https://blog.cloudflare.com/cloudflares-public-ipfs-gateways-and-supporting-interplanetary-shipyard/), and pinning services like [Pinata](https://pinata.cloud/) and [Filebase](https://filebase.com/) continue to grow. This isn't a criticism of any particular service. Commercial offerings evolve based on business realities. The lesson: design your setup so that no single provider change requires starting over. + +## Modularity as the Future-Proof Approach + +IPFS is [built for robustness](https://specs.ipfs.tech/architecture/principles/#robustness): strict about verification outcomes, tolerant about methods. A hosting strategy should follow the same principle. + +Decouple Web2 hosting from IPFS content-addressing. Keep each component independent: + +- **HTTP**: GitHub Pages, Cloudflare Pages, or a self-hosted server +- **IPFS**: pinning/storage service, self-hosted Kubo/IPFS Cluster, or both +- **DNS**: Cloudflare, Gandi, DNSimple, Route53, or any provider with a management API + +DNS serves both layers: HTTP needs A/AAAA records and TLS certificates, IPFS needs TXT records for DNSLink to map domains to CIDs. + +The key: control CID and CAR creation. Creating the CAR locally means no lock-in to any provider. Pick content providers that accept the CAR. If one shuts down, upload the same CAR elsewhere. HTTP hosting and DNS stay untouched. + +Compare this to an all-in-one platform. When it shuts down, everything needs rebuilding. + +Two standards make this work: [CAR files](https://docs.ipfs.tech/concepts/glossary/#car) for portable content and [DNSLink](https://docs.ipfs.tech/concepts/dnslink/) for human-readable addressing. Switching providers requires no pipeline changes. + +## Our Setup + +We use our own [IPFS Cluster](https://ipfscluster.io/) instance since Shipyard already runs IPFS infrastructure. For most projects, a [third-party pinning service](https://docs.ipfs.tech/how-to/work-with-pinning-services/#use-a-third-party-pinning-service) works just as well with less operational overhead. + +Our CI/CD uses two GitHub Actions: + +- [ipshipyard/ipfs-deploy-action](https://github.com/ipshipyard/ipfs-deploy-action) creates a CID, exports the website DAG as a CAR file, uploads to IPFS Cluster or other pinning services, and provides PR preview links +- [ipshipyard/dnslink-action](https://github.com/ipshipyard/dnslink-action) automatically updates DNSLink TXT records when the CID changes + +![ipshipyard/ipfs-deploy-action posts a comment on each PR with gateway preview links and CID commit status](../assets/2026-fleek-migration-pr-comment.jpg) + +For security, we use a sandboxed DNS zone pattern: CI credentials can only modify DNSLink TXT records, not other DNS entries. If credentials leak, the blast radius is limited to the `_dnslink` subdomain. See the [dnslink-action security documentation](https://github.com/ipshipyard/dnslink-action?tab=readme-ov-file#security-sandboxed-dnslink-domain) for details. + +## Getting Started + +Already have HTTP hosting? Just add IPFS and DNSLink. Migrating from Fleek? Pick all three. + +1. **HTTP**: [GitHub Pages](https://docs.github.com/en/pages) and [Cloudflare Pages](https://pages.cloudflare.com/) are simple and maintenance free. For all-in-one self-hosted HTTP+IPFS, see [Setup a DNSLink Gateway with Kubo and Caddy](https://docs.ipfs.tech/how-to/websites-on-ipfs/dnslink-gateway/) +2. **IPFS**: Choose a [pinning service](https://docs.ipfs.tech/how-to/work-with-pinning-services/#use-a-third-party-pinning-service) or run your own node. Follow [Deploy static apps to IPFS with GitHub Actions](https://docs.ipfs.tech/how-to/websites-on-ipfs/deploy-github-action/) +3. **DNS**: See [Automate DNSLink updates with GitHub Actions](https://docs.ipfs.tech/how-to/websites-on-ipfs/dnslink-action/) for TXT record automation, or use [OctoDNS](https://github.com/octodns/octodns) for more providers + +The [ipfs-deploy-action](https://github.com/marketplace/actions/deploy-to-ipfs) creates the CID and exports the site as a CAR file. This makes content portable across any provider that accepts CARs. The [dnslink-action](https://github.com/marketplace/actions/dnslink-action) links CID to DNS, allowing [IPFS-enabled browsers](https://docs.ipfs.tech/install/ipfs-companion/) to load content over IPFS. + +## Conclusion + +Third-party services will continue to come and go. The takeaway: separate your concerns and use standards-based tooling. Keep HTTP hosting independent from IPFS content-addressing, create CARs in your own CI rather than someone else's cloud service so you can switch providers, and automate DNSLink updates so they're not tied to any particular service. When one component needs replacing, swap it out without rebuilding everything. This modularity is the robustness that IPFS enables. + +All the tools we used are open source and documented. If you have questions, open an issue in the respective repositories or reach out in the [IPFS community forums](https://discuss.ipfs.tech/). diff --git a/src/_blog/bybit-hack.md b/src/_blog/bybit-hack.md index acf8fec3..ac2df589 100644 --- a/src/_blog/bybit-hack.md +++ b/src/_blog/bybit-hack.md @@ -1,6 +1,7 @@ --- date: 2025-02-28 permalink: /2025-could-ipfs-prevent-bybit-hack/ +canonicalUrl: https://ipshipyard.com/blog/2025-could-ipfs-prevent-bybit-hack/ title: 'Could IPFS Have Prevented the Bybit Hack?' description: 'The Bybit hack revealed several security failures, this post examines whether IPFS could have helped prevent the hack and practical solutions for dapp developers.' author: Daniel Norman, Marcin Rataj diff --git a/src/_blog/shipyard-2024.md b/src/_blog/shipyard-2024.md index 21fc8e93..8d079443 100644 --- a/src/_blog/shipyard-2024.md +++ b/src/_blog/shipyard-2024.md @@ -1,6 +1,7 @@ --- date: 2024-11-25 permalink: /2024-shipyard-improving-ipfs-on-the-web/ +canonicalUrl: https://ipshipyard.com/blog/2024-shipyard-improving-ipfs-on-the-web/ title: 'IPFS on the Web in 2024: Update From Interplanetary Shipyard' description: 'Update from Interplanetary Shipyard on our efforts to make IPFS work on the Web.' author: Daniel Norman diff --git a/src/_blog/shipyard-hello-world.md b/src/_blog/shipyard-hello-world.md index 0cb57f34..505af8ae 100644 --- a/src/_blog/shipyard-hello-world.md +++ b/src/_blog/shipyard-hello-world.md @@ -6,6 +6,7 @@ author: Adin Schmahmann date: 2024-04-08 permalink: '/shipyard-hello-world/' +canonicalUrl: https://ipshipyard.com/blog/shipyard-hello-world/ header_image: '/shipyard-hello-world.png' tags: - 'ipfs' diff --git a/src/assets/2026-fleek-migration-pr-comment.jpg b/src/assets/2026-fleek-migration-pr-comment.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd91a5f4d37c10db2ac9a46eabce21a9ad0131dd GIT binary patch literal 31479 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 V25F_Z`S`NJm~+uv%<1os{{tws&*}gG literal 0 HcmV?d00001