skip to content
Logo Warming Space

ipfsbed部署过程和经验总结(喂饭小白版)

/ 23 min read

附上原作者地址

本人的分享链接示例

IPFSBED 部署经验总结

一、Cloudflare Pages 部署方式是否还需要单独部署 IPFS 节点?

答案是:是的,您仍然需要一个 IPFS 节点。

让我们来解析一下 Cloudflare Pages 和 Debian 云服务器在 ipfsbed 架构中的角色:

1. Cloudflare Pages 的角色:应用托管 (前端 + 后端逻辑)

  • ipfsbed 项目本身是一个应用程序,它包含一个用户上传界面(前端)和一个处理上传请求的程序(后端逻辑)。
  • 当您使用 Cloudflare Pages 部署时,Cloudflare 会托管这个应用程序。用户通过浏览器访问 Cloudflare 的地址,看到的是 ipfsbed 的前端界面。
  • 当用户上传文件时,请求会被发送到运行在 Cloudflare 上的后端函数 (Cloudflare Functions)。
  • 关键点:这个后端函数本身不存储文件。它的唯一工作是作为一个“中转站”,接收到文件后,再通过 IPFS 的 API 接口,发送给一个真正的 IPFS 节点

2. Debian 云服务器的角色:IPFS 节点 (数据存储层)

  • 您在 Debian 服务器上部署的 go-ipfs 容器,就是那个真正的 IPFS 节点
  • 它负责接收 ipfsbed 后端函数发来的文件,将其“固定”(Pin)在自己的存储空间里,并将其宣告到整个 IPFS 网络中。
  • 没有这个节点,ipfsbed 上传的文件将无处可去,或者即使上传到某个临时节点,也会很快因为无人“固定”而从网络中消失。

两种方案对比

因此,即使您选择使用 Cloudflare Pages 来部署 ipfsbed 应用,您依然需要为它提供一个 IPFS 节点 API。您有两个选择:

方案使用您自己的 Debian 云服务器使用第三方 IPFS Pinning 服务 (如 Pinata, Infura)
工作原理Cloudflare 上的 ipfsbed 应用,将其接收到的文件,发送到您 Debian 服务器上 IPFS 节点的 API 地址。Cloudflare 上的 ipfsbed 应用,将其接收到的文件,发送到第三方服务商提供的 API 地址。
优点1. 完全控制:数据完全存储在您自己的服务器上。<br>2. 成本可控:除了服务器本身的费用,没有额外的存储或请求费用。1. 免维护:您不需要管理自己的服务器和 IPFS 节点。<br>2. 高可用:通常由专业团队维护,保证服务稳定。
缺点1. 需要维护:您需要自己负责服务器和 IPFS 节点的运行、更新和安全。<br>2. 单点故障:如果您的服务器宕机,图床就无法上传文件。1. 依赖第三方:您的数据由第三方公司存储。<br>2. 成本:有免费额度,但超出后需要按存储量和请求次数付费。
部署方式您需要按照之前的教程部署好 IPFS 节点,并为其 API 端口设置一个公网可访问的域名(反向代理),然后将这个 API 地址配置到 ipfsbed 中。您需要在第三方服务网站注册账户,获取 API 密钥,然后将服务商提供的 API 地址和密钥配置到 ipfsbed 中。

结论:

使用 Cloudflare Pages 部署 ipfsbed 是一种非常高效的方式,它可以为您提供稳定、快速的前端访问。但这并不能替代后端的 IPFS 存储节点。

您必须为 Cloudflare Pages 上运行的 ipfsbed 提供一个 IPFS API 终结点,这个终结点可以来自您自己用 Debian 服务器搭建的节点,也可以来自付费的第三方服务。

二、如何修改这两个部分的代码

可以依靠大模型进行修改。我是直接在 AI Studio 上问的 Gemini。

  • 提示词 1
    可以确定项目作者代码是可以正常使用,尽可能完整保留作者原来代码,如果代码中有提供了有用的网关,先不要删除,优先使用我提供的节点https://ipfs-api.123456.xyz(这里修改成你自己的),在我的节点无法使用时候再使用原作者提供节点。将修改后的内容,做一个注释,方便我后续修改的时候只改需要修改那些地方。修改github的代码static/file.js内容。我给你提供static/file.js的完整内容,为了防止格式错误,你直接帮我修改好。完整内容如下:“复制作者的代码”
  • 提示词 2
    可以确定项目作者代码是可以正常使用,尽可能完整保留作者原来代码,如果代码中有提供了有用的网关https://ipfs-gw.123456.xyz(这里修改成你自己的),先不要删除,优先使用我提供的网关,在我的网关无法使用时候再使用原作者提供网关。将修改后的内容,做一个注释,方便我后续修改的时候只改需要修改那些地方。修改github的代码static/common.js内容。我给你提static/common.js的完整内容,为了防止格式错误,你直接帮我修改好。完整内容如下:“复制作者的代码”

开始部署

一、使用 Cloudflare Pages 部署前端

您可以使用 Cloudflare Pages 轻松部署自己的 IPFSBED 实例:

  1. 在 GitHub 上 fork 此仓库。
  2. 登录您的 Cloudflare 控制面板并导航至 Pages。
  3. 点击 “创建项目” 并选择 “连接到 Git”。
  4. 选择您 fork 的仓库并配置构建设置:
    • 构建命令:留空
    • 构建输出目录:/(根目录)
  5. 在环境变量部分,如果要使用 URL 缩短功能,添加以下内容:
    • YOURLS_SIGNATURE:您的 YOURLS API 签名令牌(在 https://yourdomain.com/admin/tools.php 获取)
    • YOURLS_API_ENDPOINT:您的 YOURLS API 端点 URL(例如,https://yourdomain.com/yourls-api.php
  6. 点击 “保存并部署”。

部署后,您的 IPFSBED 实例将在 your-project-name.pages.dev 上可用。您还可以在 Cloudflare Pages 设置中配置自定义域名。

二、前端已部署,现在部署后端 IPFS

前端绑定了自定义域名 i.123456.xyz。在 Debian 云服务上部署 IPFS(后端)需要的步骤?

现在的架构是:前端应用 ipfsbed 部署在 Cloudflare Pages (i.123456.xyz),现在需要一个后端的 IPFS 节点(在您的 Debian 服务器上)来实际存储文件。

这个架构非常好,可以充分利用 Cloudflare 的全球 CDN 加速前端访问,同时您又能完全控制自己的后端数据。

请跟我按照以下步骤操作,为您的 Cloudflare Pages 应用配置一个专属的、稳定的 IPFS 后端。

第一步:规划并设置域名

这是最关键的一步。为了让 Cloudflare 上的应用能安全、稳定地和您服务器上的 IPFS 节点通信,我们需要为 IPFS 节点的两个核心功能(API 和网关)分别设置一个域名,并开启 HTTPS。

  1. 选择域名: 您需要两个新的子域名,全部指向您 Debian 云服务器的 IP 地址。我推荐以下名称:
    • API 域名: ipfs-api.123456.xyz (用于程序通信,比如上传文件)
    • 网关域名: ipfs-gw.123456.xyz (用于浏览器访问,比如查看图片)
  2. 解析域名
    • 登录您的域名 DNS 服务商(很可能也是 Cloudflare)。
    • 创建两条 A 记录
      • ipfs-api -> 指向您 Debian 云服务器的公网 IP 地址
      • ipfs-gw -> 指向您 Debian 云服务器的公网 IP 地址
    • 请确保这两条 A 记录的“云朵”(代理状态)是灰色的,即“仅 DNS”模式。

第二步:在 Debian 服务器上重新部署 IPFS 节点

为了更清晰地看到每一步的操作,建议使用命令行部署。

根据您的新要求(IP 为 123.456.78.90,部署目录为 /opt/ipfs),我为您准备了一个完整的、自动化的部署脚本。您只需要将这个脚本复制到服务器上执行即可。

这个脚本会完成以下所有事情:

  • 创建所需的目录 (/opt/ipfs)。
  • 停止并删除可能存在的旧 IPFS 容器,确保全新安装。
  • 使用临时的 IPFS 容器来初始化配置文件。
  • 自动修改配置文件,设置好 API、网关、CORS 跨域以及您的公网 IP。
  • 启动一个长期运行的、稳定的 IPFS 守护容器。

部署脚本

请将以下所有代码复制并保存为一个文件,例如 setup_ipfs.sh

#!/bin/bash
# --- 配置信息 ---
# 您的服务器公网IP地址
HOST_IP="123.456.78.90"
# IPFS数据和配置在主机上存储的根目录
IPFS_PATH="/opt/ipfs"
# 容器名称
CONTAINER_NAME="ipfs_node"
# 端口映射
API_PORT="11114"
GATEWAY_PORT="11104"
SWARM_PORT="4001"
# --- 脚本正文 ---
# 检查Docker是否安装
if ! [ -x "$(command -v docker)" ]; then
echo "错误: Docker 未安装。请先安装Docker再运行此脚本。" >&2
exit 1
fi
echo "--- 1. 准备主机目录 ---"
# 创建IPFS数据和临时文件的目录
sudo mkdir -p "${IPFS_PATH}/data"
sudo mkdir -p "${IPFS_PATH}/staging"
echo "目录 ${IPFS_PATH}/data 和 ${IPFS_PATH}/staging 已创建。"
echo "--- 2. 清理旧容器 (如果存在) ---"
# 停止并删除同名容器,忽略错误(如果容器不存在)
docker stop ${CONTAINER_NAME} >/dev/null 2>&1 || true
docker rm ${CONTAINER_NAME} >/dev/null 2>&1 || true
echo "旧容器已清理。"
echo "--- 3. 初始化IPFS并进行配置 ---"
# 检查是否已存在配置文件,如果不存在则进行初始化
if [ ! -f "${IPFS_PATH}/data/config" ]; then
echo "未找到配置文件,正在进行初始化..."
docker run --rm -v "${IPFS_PATH}/data:/data/ipfs" ipfs/go-ipfs:latest init --profile=server
else
echo "找到现有配置文件,跳过初始化。"
fi
# 使用临时容器修改配置
echo "正在配置 API 和 Gateway..."
docker run --rm -v "${IPFS_PATH}/data:/data/ipfs" ipfs/go-ipfs:latest config Addresses.API /ip4/0.0.0.0/tcp/${API_PORT}
docker run --rm -v "${IPFS_PATH}/data:/data/ipfs" ipfs/go-ipfs:latest config Addresses.Gateway /ip4/0.0.0.0/tcp/${GATEWAY_PORT}
echo "正在配置 Swarm 网络..."
docker run --rm -v "${IPFS_PATH}/data:/data/ipfs" ipfs/go-ipfs:latest config Addresses.Swarm --json '["/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic", "/ip4/0.0.0.0/udp/4001/quic-v1"]'
echo "正在宣告公网IP: ${HOST_IP}..."
docker run --rm -v "${IPFS_PATH}/data:/data/ipfs" ipfs/go-ipfs:latest config Addresses.Announce --json '["/ip4/'${HOST_IP}'/tcp/4001", "/ip4/'${HOST_IP}'/udp/4001/quic", "/ip4/'${HOST_IP}'/udp/4001/quic-v1"]'
echo "正在配置 CORS 跨域头..."
docker run --rm -v "${IPFS_PATH}/data:/data/ipfs" ipfs/go-ipfs:latest config API.HTTPHeaders.Access-Control-Allow-Origin --json '["*"]'
docker run --rm -v "${IPFS_PATH}/data:/data/ipfs" ipfs/go-ipfs:latest config API.HTTPHeaders.Access-Control-Allow-Methods --json '["PUT", "POST", "GET"]'
docker run --rm -v "${IPFS_PATH}/data:/data/ipfs" ipfs/go-ipfs:latest config API.HTTPHeaders.Access-Control-Allow-Credentials --json '["true"]'
echo "配置完成!"
echo "--- 4. 启动IPFS守护容器 ---"
docker run -d \
--name ${CONTAINER_NAME} \
--restart unless-stopped \
-p ${API_PORT}:${API_PORT} \
-p ${GATEWAY_PORT}:${GATEWAY_PORT} \
-p ${SWARM_PORT}:4001/tcp \
-p ${SWARM_PORT}:4001/udp \
-v "${IPFS_PATH}/staging:/export" \
-v "${IPFS_PATH}/data:/data/ipfs" \
ipfs/go-ipfs:latest daemon --enable-gc --enable-pubsub-experiment
echo "--- 部署完成! ---"
echo "IPFS容器 '${CONTAINER_NAME}' 已成功启动。"
echo "您可以通过 'docker logs ${CONTAINER_NAME}' 查看日志。"

如何使用脚本

  1. 连接服务器: 通过 SSH 登录到您的 Debian 云服务器。

  2. 保存脚本: 使用 vimnano 编辑器,创建一个新文件。

    Terminal window
    nano setup_ipfs.sh

    将上面提供的完整脚本代码粘贴进去,然后按 Ctrl+X,再按 YEnter 保存并退出。

  3. 授予执行权限

    Terminal window
    chmod +x setup_ipfs.sh
  4. 运行脚本: 使用 sudo 来执行此脚本,以确保有权限创建目录和运行 Docker。

    Terminal window
    sudo ./setup_ipfs.sh

脚本会自动执行所有步骤。

后续步骤提醒

IPFS 节点部署完成后,要让您的图床 i.123456.xyz 完全正常工作,您仍然需要

  1. 设置反向代理:像之前教程里一样,去 1Panel(或手动配置 Nginx)为 ipfs-api.123456.xyzipfs-gw.123456.xyz 这两个域名设置反向代理并配置 SSL 证书。
    • https://ipfs-api.123456.xyz -> http://127.0.0.1:11114
    • https://ipfs-gw.123456.xyz -> http://127.0.0.1:11104
  2. 更新 Cloudflare Pages 环境变量:确保 Cloudflare Pages 里的环境变量指向您刚刚设置好的带 HTTPS 的域名。

完成这些步骤后,您的整套服务就可以正常运行了。


修改代码并重新部署

直接将自己的节点地址写入项目代码中。

下面,我将为您提供一个纯网页操作的详细步骤。

使用 GitHub 网页端安全管理修改和更新的步骤

第一部分:首次设置您的专属配置

这个部分您只需要做一次。

步骤一:在 GitHub 上创建您的配置分支
  1. 打开浏览器,进入您 fork 后的 GitHub 仓库页面(例如 https://github.com/你的用户名/ipfsbed)。

  2. 在代码文件列表的左上方,您会看到一个显示当前分支名称的按钮(默认是 main)。点击这个按钮。

  3. 在弹出的输入框中,输入一个新的分支名称,例如 my-config

  4. 点击下方出现的 “Create branch: my-config from ‘main’” 选项。

    现在,您的浏览器页面会自动切换到这个全新的 my-config 分支。它一开始的内容和 main 分支完全一样。

步骤二:在新分支上直接修改代码
  1. 确认您在正确的分支上:确保页面上方的分支按钮显示的是 my-config
  2. 找到并编辑文件:导航到 static/file.js 文件,点击进入文件内容页面。
  3. 点击编辑按钮:在文件内容的右上角,找到一个铅笔形状的图标 ✏️,点击它进入在线编辑模式。
  4. 粘贴新代码:删除编辑器里的所有旧代码,将我们之前准备好的、修改后的 static/file.js 完整内容粘贴进去。
  5. 提交更改
    • 向下滚动页面,您会看到一个 “Commit changes” 的区域。
    • 您可以在描述框里写一些备注,比如“配置我的专属 IPFS 节点”。
    • 确保下方的选项是 “Commit directly to the my-config branch.”
    • 点击绿色的 “Commit changes” 按钮。
  6. 用同样的方式,修改 static/common.js 文件(如果在上一步已经修改过)。
步骤三:更新 Cloudflare Pages 的部署分支

这一步和之前一样,但至关重要。

  1. 进入您的 Cloudflare Pages 项目设置。
  2. 找到“构建和部署”(Builds & deployments)设置。
  3. 将“生产分支”(Production branch)从 main 更改为 my-config
  4. 保存。Cloudflare 将使用您这个包含了专属修改的分支来进行部署。

恭喜!至此,您的首次配置已全部在网页上完成,并且非常安全。


第二部分:未来如何安全地同步原作者的更新

当您看到原作者的项目有更新时,可以按以下纯网页流程来安全地获取更新。

  1. 更新主分支 (main)

    • 访问您 fork 的仓库主页。
    • 点击页面上方的 “Sync fork” 按钮,然后点击 “Update branch”
    • 这个操作会安全地把原作者的所有更新同步到您的 main 分支,但不会影响您正在线上部署的 my-config 分支。
  2. 创建“拉取请求”(Pull Request) 来合并更新

    • 点击仓库上方的 “Pull requests” 标签页。
    • 点击绿色的 “New pull request” 按钮。
    • 这是最关键的一步:您会看到两个分支选择框。
      • base 分支:选择 my-config (您要将代码合并这个分支)。
      • compare 分支:选择 main (您要从这个分支拉取更新)。
    • 设置好后,您会看到一个箭头清晰地表示 mainmy-config
    • 点击 “Create pull request”。标题和描述可以随便写,比如“同步上游更新”。
  3. 审查并合并“拉取请求”

    • 创建后,GitHub 会自动检查两个分支的代码差异。
    • 情况 A:无冲突
      • 页面会显示 “This branch has no conflicts with the base branch.”。
      • 您只需点击绿色的 “Merge pull request” -> “Confirm merge” 即可。
    • 情况 B:有冲突(例如作者也修改了 static/file.js
      • 页面会提示有冲突,并且“Merge”按钮是灰色的。
      • 会出现一个 “Resolve conflicts” 按钮,点击它。
      • GitHub 会打开一个特殊的编辑器,用 <<<<<<<=======>>>>>>> 标记出冲突的地方。
      • 您需要做的就是在这个编辑器里,手动删除这些标记,并将代码整理成您最终想要的样子(比如,保留您的专属节点配置,同时也保留作者对其他部分的修改)。
      • 修改完成后,点击页面右上角的 “Mark as resolved”,然后点击 “Commit merge”
      • 现在冲突就解决了,回到 Pull Request 页面,您就可以点击绿色的 “Merge pull request” 按钮了。
  4. 自动部署:当您成功合并了 Pull Request 后,就意味着您的 my-config 分支已经包含了所有最新代码。Cloudflare Pages 会立刻检测到这个更新,并自动为您重新部署网站。

部署到这一步还会遇到一个问题,就是需要在 Cloudflare 上修改 mainmy-config

  • 问题诊断:生产分支设置错误
  1. 修改已生效:您在 my-config 分支上的代码修改已经成功被 Cloudflare 检测到,并完成了一次预览部署 (Preview)。这是顶部的第一条记录,在 15 分钟前完成。
  2. 生产环境未更新:您的主域名 123456.xyz 对应的生产环境 (Production),绑定的仍然是 main 分支。请看截图中“制作”标签旁边清晰地写着 main 分支。

根本原因:您访问 i.123456.xyz 时,看到的是 main 分支的旧代码。而您修改后的新代码,只存在于一个单独的预览环境中,没有发布到主域名上。


最终解决方案:更改生产分支

这是解决问题的最后一步,也是最简单的一步。我们只需要告诉 Cloudflare,让您的主域名使用 my-config 分支的代码。

  1. 在您的 Cloudflare Pages 项目页面,点击顶部的 “设置 (Settings)” 标签页。
  2. 在设置页面中,点击左侧的 “构建和部署 (Builds & deployments)”
  3. 找到 “生产分支 (Production branch)” 这个设置项。您会看到它当前的值是 main
  4. 点击“编辑分支(Edit branch)”或类似的按钮,将它从 main 更改为 my-config
  5. 点击“保存 (Save)”

后续操作

保存之后,Cloudflare 会自动将 my-config 分支上最新的、已经构建好的部署正式发布到您的主域名 i.123456.xyz 上。这个过程通常很快,一两分钟内就会生效。

最终验证

请在 Cloudflare 显示更新完成后:

  1. 打开一个全新的浏览器“无痕/隐私模式”窗口
  2. 访问 https://i.123456.xyz,刷新页面,提示测速成功,上传和下载文件正常,代表服务部署成功。