关键词:以太坊私有链、geth 安装、创世区块、单节点、多节点、Linux 节点、跨平台连接
网上关于以太坊私有链的教程大多雷同,只告诉你如何生成创世区块,却没告诉你如何真正用起这条链。本文从实战角度,带你一步步完成 Windows 单节点 → 多节点 → Linux 节点 ↔ Windows 节点 的完整闭环,保证读完即可动手实验,直接落地 DApp 调试或 DevOps 自动化测试环境。
环境准备
| 维度 | 推荐值 |
|---|---|
| 系统 | Windows 10/11 或 Ubuntu 20.04+ |
| Geth | 1.10.x+ |
| 网络 | 内网或开放 8545、30303、9545、30306 端口 |
| 工具 | Remix、OpenSSL、任意 Markdown 编辑器 |
Windows 单节点:10 分钟搭好可调式链
1. 下载安装 geth
前往官方 Github → 选取 Windows 可执行版 → 安装并把安装目录加入 PATH。
在 CMD 输入:
geth version看到版本号即代表成功。
⚠ 不要直接双击 geth.exe —— 它会默默同步主网区块,浪费上百 GB 空间。
2. 初始化创世区块(genesis)
新建文件夹 eth-single,创建 genesis.json:
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"gasLimit": "0x2fefd8",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}CMD 定位到该目录,执行:
geth --datadir nodedata0 init genesis.json成功输出:
Successfully wrote genesis state3. 启动节点
把复杂参数一次性写到 start0.cmd,双击即可:
geth --rpc --nodiscover --datadir "nodedata0" ^
--port 30303 --rpcapi "db,eth,net,web3" ^
--rpccorsdomain "*" --networkid 1001 --ipcdisable console 2>>geth.log见到 > 提示符即为 JavaScript Console 就绪,下面可以:
- 创建账户:
personal.newAccount('你的密码') - 启动挖矿:
miner.start() - 查看余额:
eth.getBalance(eth.accounts[0])
小科普:余额单位 = Wei,10^18 Wei = 1 ETH。405 * 10^18 Wei ≈ 405 ETH(测试币,值不了 T-money)。
Windows 多节点:跑起「小局域网」
1. 准备第 2 个节点
- 再次使用同一
genesis.json,保证账本一致性 - 端口必须不同:节点 1 端口
30303,节点 2 →30306 - RPC 端口:节点 1 →
8545,节点 2 →9545
启动命令 start1.cmd:
geth --rpc --rpcport 9545 --nodiscover --datadir "nodedata1" ^
--port 30306 --networkid 1001 --ipcdisable console 2>>geth.log2. 双向握手:admin.addPeer
- 节点 A:
admin.nodeInfo.enode,复制字符串。 - 节点 B 控制台输入:
admin.addPeer("enode://...ID...@[IP]:30306?discport=0")控制台打印 true 即成功。可在两边分别执行:
admin.peers.length // > 0Linux 节点 + Windows 远程:跨平台组合拳
1. Linux server 上跑节点
- 下载 geth 二进制 →
chmod +x→ 放到/usr/local/bin/ - 初始化:与 Windows 步骤一致,使用同一
genesis.json - 启动命令保存在
/usr/local/bin/start.sh:
#!/bin/bash
nohup geth --rpc --rpcaddr 0.0.0.0 --rpcport 8545 \
--nodiscover --datadir /root/privatechain/nodedata2 \
--port 30303 --networkid 1001 --ipcdisable \
console 2>>/var/log/geth.log &在 Windows 的 Remix 中设置 Custom - Web3 Provider -> http://<Linux-IP>:8545,即刻看到账户余额。
2. 外网互通「最后一公里」
公网服务器 → 路由器 → 内网本地节点,最简单的办法:
- 路由端口映射:把本地 30303 映射到公网 30303。
- 动态 DDNS:若公网 IP 不稳,花生壳内网穿透也能行。
没权限路由器?干脆让 Linux 节点做种子节点,把 Windows 节点通过 admin.addPeer() 连过去,避开 NAT 雷区。实战小技巧
- 一键重启脚本:把节点启动命令封装成 Shell / Batch,加开机自启。
- Block Explorer:实验阶段可用 etherparty/explorer 做点查询界面,穷举式调试效率飙升。
- 快照回滚:调试完毕
rm -rf nodedata*/geth再重新init,世纪难题 0.5 秒解决。
FAQ(5 组热门问题,拿来即用)
| 问答 | |
|---|---|
| Q1:提示 “Fatal: Failed to write genesis block”? | 多半是 --datadir 目录已包含旧数据,删掉 geth 文件夹再试。 |
Q2:miner.start() 后卡死? | 看 geth.log 是否出现 Generating DAG;首次挖矿约需要 1-3 分钟 DAG 生成。 |
| Q3:Remix 连不到节点? | 确认 –rpccorsdomain "*"、–rpcaddr 是否开放 0.0.0.0。若用 HTTPS 域名需改 SecureContect. |
| Q4:Peer 会很快掉线? | 双方防火墙没放行 30303/UDP,或节点藏在 NAT 后。admin.staticNodes 或公共种子节点可稳定网络。 |
| Q5:Linux 节点端口占用? | lsof -i:8545 看进程 ID,再用 kill -9 释放。 |
✨ 最终回顾
- ✅ Windows 单节点 → 账户、挖矿、调试全系可行
- ✅ Windows 多节点 → 自动发现关闭 → 手动握手
- ✅ Linux 节点 → 脚本化、远程访问、可部署容器
- ✅ 跨平台互通 → 打通内外网,DevOps 与 DApp 都可以跑
至此,真正的以太坊私有链 已经跳过「纸片教程」阶段,成为可持续迭代的测试网。祝好运,期待你发链上的第一个 NFT!