适用对象:完全没跑过 OP Stack/L2 的新手 目标:用 Docker 在一台 Ubuntu 服务器上把 GIWA Testnet 节点跑起来,并提供稳定的本地 RPC 网络:GIWA Testnet(基于 OP Stack,结算到 Ethereum Sepolia)
参考资料与来源:
官方文档与入门页(持续更新):GIWA Docs(Get Started、工具与节点服务商列表)。(GIWA Documentation)
官方节点仓库(Docker Compose、一键环境):giwa-io/node。(GitHub)
GIWA 常用参数与网络信息(来自独立测评与社区贴):Boxmining 文章、X 社区补充。(boxmining.com)
结算层(L1)说明与 OP Stack 运行方式(用于理解依赖):Optimism 官方教程/资料。(docs.optimism.io)
Sepolia/OP Sepolia 的链参数与 RPC 参考:Chainlist、Alchemy(用作你 L1 RPC 的候选)。(chainlist.org)
系统建议:Ubuntu 20.04/22.04/24.04(均可) 最低配置:4 核 CPU / 8 GB 内存 / 500 GB NVMe SSD 推荐配置:8+ 核 / 16+ GB / 1TB+ NVMe(生产更稳) 这些规格与 GIWA 官方与仓库 README 的建议一致。(GitHub)
开放端口(默认):8545、8546、30303、9545、7300(如被占用后文教你改)。该端口组合参考多份社区教程与官方仓库映射。(Medium)
若你已有其他 ETH/OP 类节点在跑,请优先准备独立机器或按下文修改所有端口,避免冲突。
# 1) 系统更新与常用工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git wget jq lz4 make gcc pkg-config \
libc6 libssl-dev libleveldb-dev ca-certificates \
unzip tar tmux htop ncdu
# 2) (可选)使用 screen/tmux 保持会话不断线
tmux new -s giwa
# 或:screen -S giwa
上述工具用于拉仓库、看日志、解压/压缩与排障,Medium 教程也采用相近依赖集。(Medium)
# 安装 docker 与 compose 插件
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
sudo apt update -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证
docker --version
docker compose version
sudo systemctl enable --now docker
GIWA 官方仓库使用 Docker Compose 启停组件;如果你更熟悉源码构建,也可参考 OP Stack 官方的“from source”教程,但对新手不建议。(GitHub)
# 任选放置目录
mkdir -p ~/giwa && cd ~/giwa
# 克隆官方仓库
git clone https://github.com/giwa-io/node
cd node
# 查看关键文件(环境与 Compose)
ls -lah .env.sepolia docker-compose.yaml README.md
这个仓库就是“跑起 GIWA 节点需要的一切”,包含 .env.sepolia 与 docker-compose.yaml。(GitHub)
GIWA 基于 OP Stack,结算到 Ethereum Sepolia。因此你必须提供可用的 L1 端点(ETH Sepolia 的 RPC 与 Beacon)。在 README 的 Quick Start 中,要求设置:
OP_NODE_L1_ETH_RPC=<你的 L1 Sepolia RPC>OP_NODE_L1_BEACON=<你的 L1 Beacon 端点>(GitHub)
如何获得 L1 RPC/Beacon:
自建 Sepolia 全节点(成本较高,略)可以参考我之前的教程,自搜索一下;
使用服务商:zan、Ankr、QuickNode、Alchemy/Infura/其他(拿到 HTTPS RPC 即可)。
L1 RPC 我从 zan.top 获得

Beacon 我从drpc.org 获得

若你对 OP Stack 原理好奇,可查阅 Optimism 官方“Using Docker 跑 OP/OP Sepolia 节点”与“from source”文档,能帮助你理解 op-node 与执行/共识的协作。(docs.optimism.io)
# 用你熟悉的编辑器修改
nano .env.sepolia
把以下两行改成你自己的 L1 端点(必填):
OP_NODE_L1_ETH_RPC=https://<你的-sepolia-rpc>
OP_NODE_L1_BEACON=https://<你的-beacon-endpoint>
Docker Compose 会加载
.env/指定 env 文件的变量,这也是 Compose 的通用做法。(Docker Documentation)
查询8545/8546/30303/9545/7300这些端口是否被用
sudo ss -lntup | grep -E ':(8545|8546|30303|9545|7300)\b'
有输出=端口已被占用;会显示协议、监听地址:端口、
pid/program。无输出=这些端口目前都空闲。
(可选备选:sudo lsof -nP -iTCP -sTCP:LISTEN | grep -E ':(8545|8546|30303|9545|7300)\b')
如果你的 8545/8546/30303/9545/7300 已被其他进程占用,可在 docker-compose.yaml 中把宿主机端口整体平移到新段(例如 18xxx/31xxx)。示例命令(可选):
# 仅示例,把常见映射一次性改到 18xxx/31xxx/19xxx/17xxx 段
sed -i 's/"8545:8545"/"18545:8545"/' docker-compose.yaml
sed -i 's/"8546:8546"/"18546:8546"/' docker-compose.yaml
sed -i 's/"30303:30303"/"31303:30303"/' docker-compose.yaml
sed -i 's#"30303:30303/udp"#"31303:30303/udp"#' docker-compose.yaml
sed -i 's/"9545:9545"/"19545:9545"/' docker-compose.yaml
sed -i 's/"7300:7300"/"17300:7300"/' docker-compose.yaml
这个“批量改端口”的思路来自社区文章做法与官方仓库端口映射。若你不确定,建议只改宿主机侧端口,容器内保持默认,避免容器内部互联被破坏。(Medium)
# 构建镜像(并行更快)
docker compose build --parallel
# 启动(指定使用 .env.sepolia)
NETWORK_ENV=.env.sepolia docker compose up -d
以上启动方式与仓库 README 完全一致。(GitHub)
# 全量看
docker compose logs -fn 200
# 分别看执行/共识(名称以 compose 为准)
docker compose logs -f consensus
docker compose logs -f execution
健康判断:
日志应能看到从 L1(Sepolia)拉取/跟随的提示、与 L2 同步推进;
容器无频繁重启(
Restarting)、无持续 4xx/5xx 拉取失败;RPC 探活(见下一节)。 这些检查与官方 README 的排障建议一致。(GitHub)
1)查询区块号(HTTP RPC)
# 请把 127.0.0.1:8545 换为你的宿主机IP与端口(如你改了端口)
curl -s -X POST http://127.0.0.1:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
能返回形如 {"jsonrpc":"2.0","id":1,"result":"0x..."} 说明 HTTP RPC 正常。
2)在钱包添加 GIWA Testnet 网络
Network Name:GIWA Sepolia
RPC URL:
https://sepolia-rpc.giwa.io(公共网关;你也可以填自己的本地 RPC)Chain ID:91342
Currency Symbol:ETH 这组参数来自社区实测与测评文,便于你对齐自建节点与官方公共网关。(boxmining.com)
测试转账/合约时需要 Test ETH。你可以使用 GIWA 官方挂载的水龙头(由节点服务商提供):
GIWA Sepolia Faucet(Nodit 提供):支持 GIWA Testnet 领水。(faucet.lambda256.io)
如果 Faucet 忙碌,稍后再试;或在社区频道寻找临时补给。
Q1:必须要有 L1 Beacon 吗? 是的。按照仓库 README 的 Quick Start,OP_NODE_L1_ETH_RPC 与 OP_NODE_L1_BEACON 都是必填。缺一不可。(GitHub)
Q2:我的端口被占用怎么办? 按上文批量替换宿主机端口即可;或换一台干净机器。注意,只改宿主机端口映射即可,不要随意改容器内服务端口,避免组件通讯失联。(Medium)
Q3:为什么需要 Sepolia(L1)? GIWA 基于 OP Stack,op-node 需跟随 L1(Sepolia)头信息并完成数据可用性/提交流程;这也是几乎所有 OP 系链(含 Boba/Celo L2 等)共同点。(docs.optimism.io)
Q4:我能用其他实现(如 Reth for OP)吗? 可以,但这属进阶路径。Reth 针对 OP Stack 的运行文档有说明,对新手不建议直接上,后续可再折腾。(reth.rs)
Q5:有没有托管式节点服务? GIWA 文档里提供了节点服务商清单(如 Nodit 等),适合想少管运维的人。(GIWA Documentation)
查看资源占用:
平滑停止与清理:
# 停止
docker compose down
# 完整清理(包含数据卷)
docker compose down -v && rm -rf ./execution_data
这些指令与官方仓库 README 的停止/清理流程一致。清理前请确认不再需要本地索引数据。(GitHub)
强烈建议放在反代后面并限制访问(如 Nginx + Basic Auth/IP 白名单/Cloudflare Tunnel)再开放 8545。生产环境切记:
只开必要方法(
eth_call/eth_getLogs…),禁止personal_、miner_等敏感方法;打好防火墙策略(
ufw/iptables),限制来源网段;开启系统与 Docker 的自动更新,监控日志与磁盘。
MetaMask 添加 GIWA Sepolia;
切到你的 本地 RPC(或暂用官方公共网关);
用 Faucet 领到 Test ETH 后,发一笔小额转账或部署最简单的合约(Hardhat/Foundry 均可,GIWA 提供了 Hardhat 开发文档)。(GIWA Documentation)
GIWA:Get Started / 文档首页 / 节点服务商(官方)(GIWA Documentation)
giwa-io/node 仓库(Docker Compose、环境变量、硬件与排障)(GitHub)
GIWA 网络参数(社区汇总):RPC、Chain ID、钱包添加方法等(用于交叉核验)(boxmining.com)
Optimism 官方:用 Docker 跑节点 / 源码构建 / 创建 L2(了解 OP Stack 背景)(docs.optimism.io)
Sepolia(以太坊测试网)资料:RPC/链参数/服务商(L1 依赖)(chainlist.org)
GIWA Faucet(Nodit 提供):GIWA Testnet 领水入口(faucet.lambda256.io)
可以加一个“TLS 证书信任(可选)”小节,把这段 override 当成修复 x509 报错的标准做法写进教程。给你现成文案与命令:
如果 consensus(op-node)连接 L1 RPC 时出现 tls: failed to verify certificate: x509: certificate signed by unknown authority, 在同目录新增一个 docker-compose.override.yaml,把宿主机的系统 CA 证书只读挂载进容器:
cat > docker-compose.override.yaml <<'YAML'
services:
consensus:
volumes:
- /etc/ssl/certs:/etc/ssl/certs:ro
YAML
说明:
这会把宿主机的
/etc/ssl/certs(Debian/Ubuntu 的系统 CA 目录)映射到容器同路径,Go 程序(op-node)即可加载系统信任链。大多数 Linux 发行版(含 Alpine)默认也在
/etc/ssl/certs查找信任链。若你的镜像只找单文件,也可挂载:/etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro
这是不改镜像的最简修复;如需根治,可在镜像内安装
ca-certificates包。
应用:
docker compose down
docker compose up -d # 与主 compose 同目录时,override 会被自动加载
# 或显式指定:
# docker compose -f docker-compose.yaml -f docker-compose.override.yaml up -d
验证:
# 查看共识层日志无 x509 报错
docker compose logs --tail=100 consensus | grep -iE 'x509|tls|certificate|failed|error' || echo "OK"
# 可选:容器内直接 curl 你的 L1 RPC(应返回 0xaa36a7)
docker compose exec consensus sh -lc \
"curl -sS -H 'content-type: application/json' \
-d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_chainId\",\"params\":[]}' \
https://ethereum-sepolia-rpc.publicnode.com"
取消此修复:删除或重命名 docker-compose.override.yaml,再 docker compose up -d 即可。
照着本教程完成:拉仓库 → 配 L1 RPC/Beacon →(必要时)改宿主机端口 → 构建与启动 → 验证 RPC → 领水测试,即可拥有一套稳定的 GIWA Testnet 本地节点,后续你可以把它接入自家 DApp、索引器或分析任务。若你想进一步减少运维负担,也可以直接采用官方文档中列出的托管式节点服务。(GIWA Documentation)
—— 完 ——
