Skip to content

add gh action deployment guide, custom domains guide, and overhaul docs landing page #1999

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 39 commits into from
Mar 28, 2025
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
d45ee53
initial commit of deployment guide
2color Feb 21, 2025
66edf20
edit description
2color Feb 25, 2025
3bf0198
Update docs/install/deploy-github-action.md
2color Mar 3, 2025
2230c2d
Update docs/install/deploy-github-action.md
2color Mar 7, 2025
856ae50
break off dnslink and custom domains into separate guide
2color Mar 7, 2025
a21e573
move guide to guides
2color Mar 7, 2025
a4e3f78
progress and edits
2color Mar 14, 2025
31ea50a
edits and improvements
2color Mar 14, 2025
14f368b
fix: typo
2color Mar 14, 2025
24f7178
fix: broken urls
2color Mar 14, 2025
63573cf
fix: typos
2color Mar 14, 2025
8a6b170
fix: broken links
2color Mar 14, 2025
067482a
Merge branch 'main' into add-website-guide
2color Mar 14, 2025
2b396bb
small refinement
2color Mar 14, 2025
d3f6b68
fix: url to public utilities
2color Mar 14, 2025
4dcb49e
Apply suggestions from code review
2color Mar 19, 2025
d40058d
Apply suggestions from code review
2color Mar 19, 2025
aceaf77
feat: add kubo and cluster versions to header
2color Mar 21, 2025
32a24a4
refinement
2color Mar 21, 2025
8b190a6
chore: add note about service worker gateway
2color Mar 21, 2025
82d4ddb
Update docs/how-to/websites-on-ipfs/custom-domains.md
2color Mar 21, 2025
df25f24
update opener
2color Mar 21, 2025
b321563
add link to custom domains guide from dnslink
2color Mar 21, 2025
4c72dbb
clean up sidebar
2color Mar 21, 2025
b9c8f22
refine custom domain page
2color Mar 21, 2025
2340e88
remove broken link
2color Mar 21, 2025
b7e7caf
fix: typo
2color Mar 21, 2025
408f2d1
Apply suggestions from code review
2color Mar 24, 2025
e2f3c33
add next.js tips to static site generators
2color Mar 25, 2025
03300a3
refine wordpress section
2color Mar 25, 2025
02f874c
fix: link
2color Mar 25, 2025
3b2eb55
fix: typos
2color Mar 25, 2025
18d2228
fix: linting rules
2color Mar 25, 2025
208b13b
final edits
2color Mar 27, 2025
a0a515a
final polish
2color Mar 27, 2025
9481811
more edits and fixes
2color Mar 27, 2025
eb51b25
typos
2color Mar 27, 2025
8bf3247
fix: broken link
2color Mar 27, 2025
60758ed
broken link
2color Mar 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/styles/pln-ignore.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ arbol('s)
arg
auditable
audius
astro
auspinner
bit[ss]wap
bitswap
blockchain
blockchains
blockstore
bool
Expand Down Expand Up @@ -136,6 +138,7 @@ merkle
merkleize
merklizing
merkleizing
merkleizes
merkleized
merkleization
metadata('s)
Expand Down Expand Up @@ -219,6 +222,7 @@ sneakernets
stackparse
stdout
storj
storacha
Someguy
subcommand
substring
Expand All @@ -245,6 +249,7 @@ userspace
vpns
vscode
vue
Vuepress
wantlist
wantlists
web
Expand Down
8 changes: 3 additions & 5 deletions docs/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,8 @@ module.exports = {
sidebarDepth: 1,
collapsable: false,
children: [
['/quickstart/publish','Publish with IPFS (UI)'],
['/quickstart/publish_cli', 'Publish with IPFS (command line)' ],
['/quickstart/retrieve','Retrieve with IPFS'],
['/how-to/websites-on-ipfs/deploy-github-action', 'Deploy to IPFS with GitHub Actions' ],
]
},
{
Expand All @@ -124,9 +123,8 @@ module.exports = {
sidebarDepth: 1,
collapsable: false,
children: [
['/quickstart/publish','Publish with IPFS (UI)'],
['/quickstart/publish_cli', 'Publish with IPFS (command line)' ],
['/quickstart/retrieve','Retrieve with IPFS'],
['/how-to/websites-on-ipfs/deploy-github-action', 'Deploy to IPFS with GitHub Actions' ],

]
},
Expand Down Expand Up @@ -243,10 +241,10 @@ module.exports = {
sidebarDepth: 1,
collapsable: true,
children: [
'/how-to/websites-on-ipfs/deploy-github-action',
'/how-to/websites-on-ipfs/single-page-website',
'/how-to/websites-on-ipfs/multipage-website',
'/how-to/websites-on-ipfs/link-a-domain',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💭 maybe we need to rework link-a-domain to link /how-to/websites-on-ipfs/custom-domains ?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIUC, by reworking, do you mean:

  • remove link-a-domain page and link from sidebar
  • add redirect to /how-to/websites-on-ipfs/custom-domains
  • incorporate any still relevant knowledge from link-a-domain (most of it is outdated) into /how-to/websites-on-ipfs/custom-domains
  • Add new custom domains page to the sidebar here

WDYT?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@2color yes, exactly. remove link-a-domain, incorporate things to custom-domains and add it to sidebar + link to it from the end of https://docs.ipfs.tech/concepts/dnslink/ as well.

'/how-to/websites-on-ipfs/introducing-fleek',
'/how-to/websites-on-ipfs/static-site-generators',
'/how-to/websites-on-ipfs/redirects-and-custom-404s'
]
Expand Down
27 changes: 11 additions & 16 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,26 @@ description: The home page for developer documentation for IPFS, the InterPlanet

# Welcome to the IPFS docs

The InterPlanetary File System (IPFS) is a set of composable, peer-to-peer protocols for addressing, routing, and transferring [content-addressed](concepts/glossary.md#content-addressing) data in a decentralized file system. Many popular Web3 projects are built on IPFS - see the [ecosystem directory](https://ecosystem.ipfs.tech) for a list of some of these projects.
The InterPlanetary File System (IPFS) is a set of composable, peer-to-peer protocols for addressing, routing, and transferring [content-addressed](concepts/glossary.md#content-addressing) data in a decentralized file system. Many popular projects are built on IPFS - see the [ecosystem directory](https://ecosystem.ipfs.tech) for a list of some of these projects.

## Get started

You can quickly [store and retrieve data](#store-and-retrieve-data) and [interact with the network via a simple GUI app or a standard browser](#interact-with-the-network). If you'd rather develop applications, learn how to build IPFS-native apps or use standard HTTP in the [Build](#build) section.
You can quickly [retrieve data](#retrieve-data) and [provide data](#provide-data) to the IPFS network, and [interact with the network](#interact-with-the-network) using a simple GUI app or a standard browser. If you'd rather develop applications, learn how to build IPFS-native apps or use standard HTTP in the [Build](#build) section.

:::callout
New to IPFS? Start with
[the 3-page Basic Concepts](./concepts/README.md#learn-the-basics).
:::
### Retrieve data

### Store and retrieve data
Quickly retrieve data from the IPFS network, no programming required:

Quickly store data and retrieve data, no complex applications or programming required:
- Fetch data via it's <VueCustomTooltip label="An address used to point to data in IPFS, based on the content itself, as opposed to the location." underlined multiline is-medium>[content identifier (CID)](concepts/glossary.md#cid)</VueCustomTooltip> [using an IPFS gateway](./quickstart/retrieve.md).

- Publish content to the IPFS network with a pinning service by following this [quickstart guide](./quickstart/publish.md).
- Fetch data via it's <VueCustomTooltip label="An address used to point to data in IPFS, based on the content itself, as opposed to the location." underlined multiline is-medium>content identifier (CID)</VueCustomTooltip> [using an IPFS gateway](./quickstart/retrieve.md#fetching-the-cid-with-an-ipfs-gateway).
- For long-term storage, use [Filecoin](https://docs.filecoin.io/), the peer-to-peer network with built-in economic incentives that stores data on IPFS.
### Provide data

### Interact with the network
Provide data to the IPFS network with IPFS Desktop or a pinning service:

You can quickly interact the IPFS network using a simple GUI or a standard browser:
- [Install IPFS Desktop which bundles an IPFS node (Kubo) and a UI to manage files, peers, and explore content on IPFS](./install/ipfs-desktop.md).
- [Publish content to the IPFS network with IPFS Desktop](./how-to/desktop-app.md).
- [Deploy static sites to the IPFS network with a GitHub Action](./how-to/websites-on-ipfs/deploy-github-action.md).

- For a simple, easy-to-use GUI application that bundles an IPFS node, file manager, peer manager, and content explorer, use [IPFS Desktop](./install/ipfs-desktop.md).
- Interact with the network using any Brave, Chrome, Edge, Firefox, Opera, and any other Chromium-based web browser using the [IPFS Companion browser extension](./install/ipfs-companion.md).

### Build

Expand All @@ -39,8 +34,8 @@ You can build apps that leverage IPFS implementations, or use HTTP instead:

Build an IPFS-native app using one of the many IPFS <VueCustomTooltip label="Software, written in any programming language, with functionality to process and transmit content-addressed data. Some implementations are optimized for specific use cases or devices, or use different subsystems to handle content-addressed data. There are multiple specifications in IPFS for handling content-addressed data, and not all implementations implement them." underlined multiline is-medium>implementations</VueCustomTooltip> and tools built by and for Web3 users:

- If you are familiar with JavaScript, checkout the [IPFS in web apps guide](./how-to/ipfs-in-web-apps.md), which covers how to use [Helia](https://github.com/ipfs/helia) and related libraries to build IPFS-native apps.
- To develop IPFS applications using Go and/or interact with IPFS from the terminal, use the [IPFS Kubo implementation in Go](./install/command-line.md).
- If you'd rather use JavaScript, try the [IPFS Helia implementation in JavaScript](https://github.com/ipfs/helia).
- Try any of the [many other tools and implementations](./concepts/ipfs-implementations.md), which are written in different languages and tailored to specific needs and use cases.

#### Using HTTP
Expand Down
36 changes: 36 additions & 0 deletions docs/how-to/websites-on-ipfs/custom-domains.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: Custom domains and DNSLink
description: Guide on how to configure custom domains and DNSLink for your IPFS deployments.
---

# Custom domains and DNSLink

By default, when you deploy a static web application to IPFS, it will be addressed with a CID. Since CIDs are long and hard to remember, they're not very user-friendly, for example, `https://bafybeifhgtpm6kmbyqszbardceszvkv5rsi3dodtuufpcfskzggekcfl2y.ipfs.inbrowser.link/` or `https://bafybeifhgtpm6kmbyqszbardceszvkv5rsi3dodtuufpcfskzggekcfl2y.ipfs.dweb.link/`.

To make your app easier to access, you can optionally configure a custom domain for your app, depending on how you want users to access your app.

This guide will walk you through the process of configuring a custom domain for your app, and how to configure DNSLink to signal the CID for your app.

### CID Signaling with DNSLink

[DNSLink](../../concepts/dnslink.md) is a standard way to map human-readable domain names (DNS) to CIDs. For example, for the IPFS Docs, `docs.ipfs.tech`, the DNSLink record is a TXT record at `_dnslink.docs.ipfs.tech` with the value `dnslink=/ipfs/bafybeicv5tbyeahgm4pyskd2nverwsqxpiqloikqrufvof7vausglw6avm` (the CID will likely be different once you read this guide).

The main benefit of DNSLink is that it allows users to determine the latest CID for a given domain name, while leaving it up to the user how to retrieve the deployment addressed by the CID. For example, a user might have a local IPFS node, and want to access the latest deployment of your app, they can do so by resolving the DNSLink record and fetching the content from their local node. `http://localhost:8080/ipns/docs.ipfs.tech` will serve the CID found in the DNSLink record.

When a DNSLink record is present, any IPFS gateway (local or public) can take the DNS name and resolve it to the CID, and serve the content, for example, both `https://inbrowser.link/ipns/docs.ipfs.tech` and `https://dweb.link/ipns/docs.ipfs.tech` will serve the same site, albeit with different origins.

If you run your own IPFS node, such as [IPFS Desktop](../../install/ipfs-desktop.md) or [Kubo](../../install/command-line.md), and load the site from a local gateway at `http://localhost:8080/ipns/docs.ipfs.tech`, you benefit from the resilience and censorship resistance of the IPFS network, because it's content addressed (addressed by CID) rather than being tied to a canonical origin. As long as there's at least one reachable provider for the CID, and use a trusted [DNS over HTTPS resolver](https://github.com/ipfs/kubo/blob/master/docs/config.md#dnsresolvers), you can access the site.

Loading the site this way ties the website's cookies, storage, and Web API permissions to the [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin) of a specific gateway. When using public gateways, the user experience can vary depending on the gateway's origin, which may impact app functionality, including cookies, storage, and CORS access to external APIs. That is why a local gateway is advantageous, as it does not depend on external domains or origins.

## Access via a custom domain

In the previous section, we discussed how DNSLink can be used to signal the CID for a domain name, while leaving it up to the user how to retrieve the content, be it a local node, service worker gateway or any other [public recursive gateway](https://docs.ipfs.tech/concepts/ipfs-gateway/#recursive-vs-non-recursive-gateways). In this instance, the user provides the domain name as input, instead of the CID.

To provide access to the app directly via the custom domain, you have the following options:

1. Self-host both the IPFS provider (e.g. [Kubo](https://github.com/ipfs/kubo)) and the HTTP gateway (e.g. [Kubo](https://github.com/ipfs/kubo) or [Rainbow](https://github.com/ipfs/rainbow/)). Deploy an IPFS Gateway that supports DNSLink resolution and point the `CNAME`/`A` DNS record for your custom domain to it and update the `TXT` record on `_dnslink` subdomain to match CID of your website. Set up CI automation to update TXT record every time your CID changes. You will likely want to also configure TLS with a reverse proxy like Caddy or use a CDN like Cloudflare for TLS termination.
2. Use a service like Fleek
3. Deploy the site to a web hosting service like Cloudflare/GitHub Pages, and point the CNAME/A record for your custom domain to it, essentially getting the benefits of both IPFS and traditional web hosting.

Access via a custom domain is useful if you want to serve your app via a domain name that you own, for example, `app.example.com`.
Loading