在区块链开发领域,以太坊作为智能合约和去中心化应用(DApp)的主流平台,其开发环境的搭建是入门的第一步,Ubuntu作为开发者偏好的操作系统,凭借其开源特性和稳定的性能,成为搭建以太坊开发环境的理想选择,本文将详细介绍如何在Ubuntu系统中完成以太坊开发环境的完整搭建,涵盖依赖安装、客户端部署、工具配置及测试验证,助你快速迈出区块链开发的第一步。
打开终端(快捷键:Ctrl Alt T),更新系统包列表并安装必要依赖:
sudo apt update && sudo apt upgrade -y # 更新系统 sudo apt install -y build-essential git curl software-properties-common # 安装编译工具和Git
以太坊的官方客户端(如Geth)和开发工具(如Truffle)多基于Go语言开发,因此需先安装Go环境。

访问Go官网获取最新版本(以1.21.0为例):
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz # 解压到/usr/local echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc # 添加到PATH echo 'export GOPATH=$HOME/go' >> ~/.bashrc # 设置GOPATH(Go项目工作目录) source ~/.bashrc # 重新加载配置
go version # 查看Go版本(输出类似:go version go1.21.0 linux/amd64)
Geth(Go-Ethereum)是以太坊官方的Go语言客户端,支持节点运行、智能合约交互等功能。
git clone https://github.com/ethereum/go-ethereum.git # 克隆Geth源码 cd go-ethereum make geth # 编译Geth(耗时较长,耐心等待)
编译完成后,geth可执行文件位于build/bin/目录,可通过以下方式添加到系统PATH:
echo 'export PATH=$PATH:'$PWD'/build/bin' >> ~/.bashrc source ~/.bashrc
geth version # 查看Geth版本(输出包含commit信息和协议版本)
若需运行独立私有节点,可初始化一个创世区块:
geth --datadir ~/eth-data init genesis.json # 需提前准备genesis.json文件(可从以太坊官网获取或自定义)
Truffle用于编译、部署和测试智能合约,支持快速搭建DApp项目。
npm install -g truffle # 通过npm全局安装(需先安装Node.js,若未安装可执行:sudo apt install -y nodejs npm)
Ganache提供本地私有链环境,可快速生成测试账户和模拟交易,适合开发调试。

sudo snap install ganache --classic
访问Ganache官网下载最新版AppImage,赋予执行权限后运行:
chmod x ganache-*.AppImage ./ganache-*.AppImage
启动Geth开发节点(默认端口8545,提供HTTP-RPC接口):
geth --datadir ~/eth-data --dev --http --http.addr "0.0.0.0" --http.port 8545 --http.api "eth,web3,personal,miner"
参数说明:
--dev:启动开发模式(预分配100个测试账户,出块时间缩短至15秒) --http:开启HTTP-RPC服务 --http.addr "0.0.0.0":允许任意IP访问(开发环境使用,生产环境需限制为127.0.0.1) --http.api:开放的API接口列表使用curl测试RPC接口是否正常:
curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://127.0.0.1:8545
若返回区块号(如"0x0"),则节点运行正常。
使用Truffle创建测试项目:

mkdir eth-dapp && cd eth-dapp truffle init # 初始化Truffle项目
修改contracts/Storage.sol为测试合约:
pragma solidity ^0.8.0;
contract Storage {
uint256 public storedData;
function set(uint256 x) public {
storedData = x;
}
function get() public view returns (uint256) {
return storedData;
}
}
配置truffle-config.js,连接本地Geth节点:
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*", // 匹配任何网络ID
},
},
compilers: {
solc: {
version: "0.8.0", // 与合约版本一致
},
},
};
编译并部署合约:
truffle compile # 编译合约(生成build/contracts/Storage.json) truffle migrate # 部署合约(连接本地节点)
部署成功后,可在Ganache或Geth节点中查看到合约交易记录。
Geth编译失败:
go version确认; sudo apt install -y build-essential git。Truffle连接节点失败:
--http参数); truffle-config.js中的host和port与Geth配置一致。权限问题:
permission denied,可通过chmod赋予文件执行权限,或使用sudo操作(谨慎使用)。