从零到一:Ubuntu 20.04上部署超级账本Fabric 2.4.4全栈开发环境

张开发
2026/5/21 16:02:49 15 分钟阅读
从零到一:Ubuntu 20.04上部署超级账本Fabric 2.4.4全栈开发环境
1. 环境准备从零开始的Ubuntu 20.04配置刚接触区块链开发时最头疼的就是环境搭建。我在第一次尝试部署Fabric时光是解决依赖问题就花了整整两天。这次咱们用Ubuntu 20.04作为基础系统我会把每个环节的坑都提前标出来。先来个全家福这些工具一个都不能少ssh远程连接必备后期调试容器时会频繁使用curl就像网络世界的瑞士军刀下载文件、测试API都靠它git没有它怎么克隆Fabric源码记得配置好全局用户名和邮箱gcc编译链码时的幕后英雄vim别笑在服务器上改配置时你会感谢这个选择国内开发者记得先换源不然apt-get update能卡到天荒地老。我习惯用阿里云镜像执行这两个命令就行sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo apt-get update安装基础工具可以一条命令搞定sudo apt-get install -y ssh curl git gcc vim make net-tools有个小技巧安装完成后立即用ssh-keygen生成密钥对把公钥添加到GitHub。后面克隆Fabric源码时就不会被卡住了。2. Go语言环境区块链开发的基石Fabric的链码和很多工具都是用Go写的这里推荐安装1.17.x版本。太新的版本可能会有兼容性问题我去年用1.19就踩过坑。下载和解压一步到位wget https://golang.google.cn/dl/go1.17.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.17.linux-amd64.tar.gz配置环境变量是重点很多人在这里出错。建议直接修改~/.bashrc而不是~/.profile因为前者在每次打开终端时都会加载echo export PATH$PATH:/usr/local/go/bin ~/.bashrc echo export GOPATH$HOME/go ~/.bashrc echo export GOROOT/usr/local/go ~/.bashrc source ~/.bashrc验证安装时别只看版本号还要测试能否编译程序mkdir -p ~/go/src/test cd ~/go/src/test cat hello.go EOF package main import fmt func main() { fmt.Println(Hello, Fabric!) } EOF go run hello.go如果看到输出说明Go环境真的准备好了。记得重启终端让所有配置生效。3. Docker全家桶容器化部署的关键Fabric网络的所有节点都运行在Docker容器里这里有两个重点安装Docker CE不是老旧的docker.io和配置镜像加速。先卸载旧版本避免冲突sudo apt-get remove docker docker-engine docker.io containerd runc官方推荐的一键安装脚本其实最好用curl -fsSL https://get.docker.com | sudo sh把当前用户加入docker组非常重要否则每次都要sudosudo usermod -aG docker $USER newgrp docker # 立即生效不需要重启配置阿里云镜像加速放在/etc/docker/daemon.json{ registry-mirrors: [https://你的ID.mirror.aliyuncs.com] }重启服务后一定要验证sudo systemctl restart docker docker run --rm hello-world # 应该能看到欢迎信息安装docker-compose时建议用官方最新版但要注意和Docker版本的兼容性sudo curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose4. Fabric 2.4.4实战从源码到运行终于到重头戏了首先创建工作目录注意路径要和GOPATH对应mkdir -p $GOPATH/src/github.com/hyperledger cd $GOPATH/src/github.com/hyperledger克隆源码时推荐指定版本号避免使用master分支git clone -b release-2.4 https://github.com/hyperledger/fabric.git cd fabric运行bootstrap.sh脚本时会下载两个关键组件二进制工具cryptogen、configtxgen等Docker镜像peer、orderer等基础服务./scripts/bootstrap.sh这个过程中最可能遇到的问题是网络超时。如果失败可以手动下载对应的镜像docker pull hyperledger/fabric-peer:2.4.4 docker pull hyperledger/fabric-orderer:2.4.4启动测试网络时我强烈建议加上couchdb选项因为它是Fabric最常用的状态数据库cd test-network ./network.sh up createChannel -ca -s couchdb看到所有容器都正常运行时可以用这个命令检查docker ps --format table {{.Names}}\t{{.Status}}\t{{.Ports}}链码部署是最后的考验这个命令会编译并启动链码容器./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go验证链码是否正常工作peer chaincode query -C mychannel -n basic -c {Args:[GetAllAssets]}如果返回了初始数据恭喜你现在可以访问http://localhost:5984/_utils 查看CouchDB的Web界面账号admin/adminpw所有区块链数据都直观地展示在这里。5. 常见问题排查手册我在多个项目部署中总结的这些错误你可能也会遇到问题1Go命令找不到症状go version报错command not found解决检查echo $PATH是否包含/usr/local/go/bin确认.bashrc已加载问题2Docker权限不足症状Got permission denied while trying to connect to the Docker daemon解决执行newgrp docker并确认当前用户在docker组中groups $USER问题3bootstrap.sh卡住症状长时间停留在Downloading fabric binaries...解决手动下载https://github.com/hyperledger/fabric/releases 对应的二进制包问题4链码实例化失败症状Error: failed to invoke chaincode name:basic解决检查peer日志docker logs peer0.org1.example.com通常是依赖下载超时对于网络问题可以尝试设置Go模块代理go env -w GOPROXYhttps://goproxy.cn,direct如果CouchDB无法访问检查防火墙设置sudo ufw allow 5984/tcp最后提醒所有服务停止后想完全清理环境可以运行./network.sh down docker system prune -a6. 开发环境优化技巧经过基础部署后这些技巧能让你的开发效率翻倍技巧1定制化脚本把常用命令写成脚本比如start_fabric.sh#!/bin/bash cd $GOPATH/src/github.com/hyperledger/fabric/test-network ./network.sh up createChannel -ca -s couchdb ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go技巧2日志监控实时查看peer节点日志docker logs -f peer0.org1.example.com技巧3快速重启修改链码后不需要重建整个网络peer lifecycle chaincode package basic.tar.gz --path ../asset-transfer-basic/chaincode-go --lang golang --label basic_1.0 peer lifecycle chaincode install basic.tar.gz技巧4端口转发本地开发时访问容器内服务ssh -L 5984:localhost:5984 your_ubuntu_server技巧5VS Code远程开发安装Remote-SSH扩展后可以直接在本地IDE中修改服务器上的代码配合Docker插件还能管理容器。记得定期清理无用镜像节省空间docker image prune -a --filter until24h

更多文章