Files
SiMengWebSite_Notes/docs/notes/ops/blockchain/blockchain-deployment.md

226 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 区块链网络部署指南~(≧∇≦)ノ
description: 详细介绍区块链网络的搭建和部署过程
createTime: 2025/09/28 20:15:00
permalink: /ops/blockchain/deployment/
---
# 区块链网络部署指南~(≧∇≦)ノ
嗨~今天我们要一起学习如何搭建和部署一个区块链网络哦!是不是听起来很厉害呢?其实只要按照步骤一步步来,你也可以成为区块链部署小能手的~(๑˘ᴗ˘๑)
## 准备工作 🏗️
在开始部署之前,让我们先准备好所需的环境和工具吧:
```bash
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装必要的依赖
sudo apt install -y git curl wget docker.io docker-compose
# 启动Docker服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 添加当前用户到docker组避免每次使用sudo
# 注意:添加后需要重新登录才能生效哦~
sudo usermod -aG docker $USER
```
## 选择区块链平台 🌈
市面上有很多不同的区块链平台,我们可以根据项目需求来选择:
- **以太坊**最流行的智能合约平台适合开发DApp
- **Hyperledger Fabric**:企业级联盟链解决方案
- **Polygon**以太坊的Layer 2扩展解决方案
- **BSC**:币安智能链,高性能的智能合约平台
今天我们将以以太坊私有链为例来演示部署过程哦~
## 部署以太坊私有链 🔗
### 1. 安装Geth客户端
Geth是以太坊的官方Go语言客户端我们需要先安装它
```bash
# 下载Geth安装包
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.10-7a0c19f6.tar.gz
# 解压安装包
tar -xvf geth-linux-amd64-1.13.10-7a0c19f6.tar.gz
# 移动geth可执行文件到系统路径
sudo mv geth-linux-amd64-1.13.10-7a0c19f6/geth /usr/local/bin/
# 验证安装是否成功
geth version
```
### 2. 创建创世区块配置文件
创世区块是区块链的第一个区块,我们需要创建一个配置文件来定义它的参数:
```bash
# 创建一个名为genesis.json的文件
nano genesis.json
```
将以下内容复制到文件中:
```json
{
"config": {
"chainId": 12345,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"arrowGlacierBlock": 0,
"grayGlacierBlock": 0,
"mergeForkIdTransition": 0,
"terminalTotalDifficulty": 0,
"terminalTotalDifficultyPassed": true,
"shanghaiTime": 0,
"cancunTime": 0
},
"difficulty": "0x400",
"gasLimit": "0x1000000",
"alloc": {
"0x71C7656EC7ab88b098defB751B7401B5f6d8976F": {
"balance": "0x100000000000000000000000000000000"
}
}
}
```
### 3. 初始化区块链
现在我们可以使用创世区块配置文件来初始化我们的私有链了:
```bash
# 创建一个目录来存储区块链数据
mkdir -p ~/ethereum-private-chain/data
# 使用genesis.json初始化区块链
geth --datadir ~/ethereum-private-chain/data init genesis.json
```
### 4. 启动区块链节点
初始化完成后,我们可以启动我们的区块链节点了:
```bash
# 启动区块链节点
# --networkid 要与创世区块配置中的chainId一致
# --nodiscover 禁用节点发现机制,只允许手动添加节点
# --http 启用HTTP-RPC接口
# --http.addr 设置HTTP-RPC接口监听地址
# --http.api 启用的API模块
geth --datadir ~/ethereum-private-chain/data --networkid 12345 --nodiscover --http --http.addr "0.0.0.0" --http.api "eth,net,web3,personal,miner" console
```
### 5. 开始挖矿
在Geth控制台中我们可以开始挖矿来生成新区块
```javascript
// 设置挖矿账户
miner.setEtherbase(eth.accounts[0])
// 开始挖矿
miner.start(1)
// 查看挖矿状态
eth.blockNumber
// 查看账户余额
eth.getBalance(eth.accounts[0])
// 停止挖矿
// miner.stop()
```
### 6. 添加其他节点(可选)
如果需要搭建多节点的区块链网络,我们可以将其他节点连接到我们的主节点:
```javascript
// 在主节点上获取节点信息
admin.nodeInfo.enode
// 在其他节点的Geth控制台中添加主节点
admin.addPeer("enode://主节点的enode信息@主节点IP:30303")
// 查看已连接的节点
admin.peers
```
## 部署智能合约 🚀
区块链网络搭建完成后,我们可以部署一个简单的智能合约来测试它:
```javascript
// 在Geth控制台中编写一个简单的智能合约
var helloWorldContract = eth.contract([
{"constant":true,"inputs":[],"name":"greeting","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},
{"constant":false,"inputs":[{"name":"_greeting","type":"string"}],"name":"setGreeting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},
{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}
]);
// 编译合约代码
var helloWorldCompiled = eth.compile.solidity('pragma solidity ^0.8.0; contract HelloWorld { string public greeting; constructor() { greeting = "Hello, Blockchain!"; } function setGreeting(string memory _greeting) public { greeting = _greeting; } }');
// 部署合约
var helloWorld = helloWorldContract.new({
from: eth.accounts[0],
data: helloWorldCompiled.HelloWorld.code,
gas: 1000000
});
// 查看合约地址
helloWorld.address
// 调用合约函数
helloWorld.greeting.call()
helloWorld.setGreeting("Hello, Ethereum!", {from: eth.accounts[0]})
helloWorld.greeting.call()
```
## 监控与维护 📊
区块链网络部署完成后,我们需要定期进行监控和维护:
- **节点状态监控**:检查节点是否正常运行,区块高度是否在增长
- **网络连接监控**:监控节点之间的连接状态
- **资源使用监控**监控服务器的CPU、内存、磁盘和网络使用情况
- **日志分析**:定期查看区块链节点的日志,及时发现和解决问题
## 安全注意事项 🔒
在部署区块链网络时,安全是非常重要的:
- 不要在生产环境中使用默认的配置参数
- 定期更新节点软件到最新版本
- 使用防火墙限制对节点的访问
- 妥善保管私钥和密码
- 考虑使用多重签名机制来保护重要操作
## 小练习 🏋️‍♀️
现在轮到你自己动手实践了!试着按照上面的步骤部署一个以太坊私有链,然后创建一个简单的智能合约并部署到链上吧~相信自己,你一定可以做到的!(๑•̀ㅂ•́)و✧
## 写在最后~💌
今天我们学习了如何部署一个区块链网络,从准备环境到部署智能合约,每一步都很重要哦~虽然看起来步骤很多,但只要耐心地一步步来,你一定能成功的!如果你在部署过程中遇到了问题,不要灰心,可以查阅相关文档或者向社区寻求帮助。
希望这篇指南能对你有所帮助,让我们一起在区块链的世界里快乐地探索吧!(づ ̄ 3 ̄)づ