您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么使用docker和docker-compose在EOS本地Testnet上开发
## 前言
区块链技术正在重塑现代互联网基础设施,而EOS作为高性能区块链平台,凭借其高吞吐量和低延迟特性成为DApp开发的热门选择。本文将详细介绍如何利用Docker和Docker Compose搭建本地EOS测试网络(Testnet),为开发者提供完整的本地开发环境解决方案。
通过容器化技术,我们可以快速部署可复现的开发环境,避免复杂的依赖管理和环境配置问题。本文适合有一定Linux基础和区块链概念的开发者,内容涵盖从基础环境搭建到智能合约部署的全流程。
## 一、环境准备
### 1.1 系统要求
- 操作系统:Ubuntu 20.04 LTS或更高版本(推荐)
- 内存:至少8GB RAM(16GB更佳)
- 存储:至少50GB可用空间
- Docker:20.10.0或更高版本
- Docker Compose:1.29.0或更高版本
### 1.2 安装Docker和Docker Compose
```bash
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo \
"deb [arch=amd64 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
# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world
# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
一个完整的EOS测试网络需要以下组件:
我们采用以下结构:
+-----------------------+
| Docker Network |
+-----------+-----------+
|
+-----------v-----------+ +-----------+
| 主节点(nodeos) <----> MongoDB |
+-----------+-----------+ +-----------+
|
+-----------v-----------+
| API节点(nodeos) |
+-----------------------+
mkdir -p eos-testnet/{config,data,contracts,scripts}
cd eos-testnet
version: '3.8'
services:
nodeos:
image: eosio/eos:v2.1.0
container_name: nodeos
command: nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::producer_plugin --plugin eosio::http_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:8888 --access-control-allow-origin=* --contracts-console --http-validate-host=false --verbose-http-errors
ports:
- "8888:8888"
- "9876:9876"
volumes:
- ./data:/mnt/dev/data
- ./config:/mnt/dev/config
- ./contracts:/mnt/dev/contracts
- ./scripts:/mnt/dev/scripts
stop_signal: SIGKILL
keosd:
image: eosio/eos:v2.1.0
container_name: keosd
command: keosd --http-server-address=0.0.0.0:8900
ports:
- "8900:8900"
volumes:
- ./wallet:/root/eosio-wallet
在config
目录下创建config.ini
:
# config/config.ini
chain-state-db-size-mb = 1024
reversible-blocks-db-size-mb = 340
contracts-console = true
# 生产者配置
producer-name = eosio
enable-stale-production = true
# 插件配置
plugin = eosio::chain_api_plugin
plugin = eosio::history_api_plugin
plugin = eosio::producer_plugin
plugin = eosio::http_plugin
# HTTP配置
http-server-address = 0.0.0.0:8888
access-control-allow-origin = *
http-validate-host = false
verbose-http-errors = true
# P2P配置
p2p-listen-endpoint = 0.0.0.0:9876
p2p-peer-address = localhost:9876
docker-compose up -d
docker-compose ps
docker logs -f nodeos
docker exec -it keosd bash -c "cleos wallet create --to-console"
docker exec -it keosd bash -c "cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
docker exec -it nodeos bash -c "cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"
docker exec -it nodeos bash -c "cleos create account eosio alice EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"
docker exec -it nodeos bash -c "cleos create account eosio bob EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"
docker exec -it nodeos bash -c "cleos set contract eosio.token /contracts/eosio.token --abi eosio.token.abi -p eosio.token@active"
docker exec -it nodeos bash -c "cleos push action eosio.token create '[ \"eosio\", \"1000000000.0000 SYS\" ]' -p eosio.token@active"
docker exec -it nodeos bash -c "cleos push action eosio.token issue '[ \"alice\", \"1000.0000 SYS\", \"memo\" ]' -p eosio@active"
docker exec -it nodeos bash -c "cleos push action eosio.token transfer '[ \"alice\", \"bob\", \"100.0000 SYS\", \"memo\" ]' -p alice@active"
创建scripts/init_chain.sh
:
#!/bin/bash
# 创建钱包
cleos wallet create --to-console > wallet.txt
cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
# 创建系统账户
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio alice EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio bob EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
# 部署合约
cleos set contract eosio.token /contracts/eosio.token --abi eosio.token.abi -p eosio.token@active
# 创建和发行代币
cleos push action eosio.token create '[ "eosio", "1000000000.0000 SYS" ]' -p eosio.token@active
cleos push action eosio.token issue '[ "alice", "1000.0000 SYS", "memo" ]' -p eosio@active
.PHONY: start stop restart clean init
start:
docker-compose up -d
stop:
docker-compose down
restart: stop start
clean:
docker-compose down -v
rm -rf data/* wallet/*
init:
docker exec -it nodeos bash -c "/mnt/dev/scripts/init_chain.sh"
修改config.ini
:
plugin = eosio::history_plugin
plugin = eosio::history_api_plugin
filter-on = *
history-endpoint = 0.0.0.0:8080
# 在docker-compose.yml中添加
mongodb:
image: mongo:4.4
container_name: mongodb
ports:
- "27017:27017"
volumes:
- ./mongodb_data:/data/db
# 修改nodeos配置
nodeos:
environment:
- EOSIO_MONGODB_URI=mongodb://mongodb:27017/eosmain
depends_on:
- mongodb
# 添加生产者节点
producer1:
image: eosio/eos:v2.1.0
command: nodeos -e -p producer1 --plugin eosio::chain_api_plugin --plugin eosio::producer_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:8889 --p2p-listen-endpoint=0.0.0.0:9877 --p2p-peer-address=nodeos:9876
ports:
- "8889:8889"
- "9877:9877"
volumes:
- ./data_producer1:/mnt/dev/data
- ./config_producer1:/mnt/dev/config
区块不同步:
合约部署失败:
API访问问题:
# 查看实时日志
docker logs -f nodeos
# 过滤特定日志
docker logs nodeos | grep "produced block"
# 查看错误日志
docker logs nodeos | grep -i error
# 在docker-compose.yml中配置资源限制
nodeos:
deploy:
resources:
limits:
cpus: '2'
memory: 8G
reservations:
memory: 4G
# config.ini中调整数据库参数
chain-state-db-size-mb = 4096
reversible-blocks-db-size-mb = 1024
# 调整网络参数
net-threads = 4
sync-fetch-span = 100
# .gitlab-ci.yml示例
stages:
- test
- deploy
eos_test:
stage: test
image: docker:latest
services:
- docker:dind
script:
- docker-compose up -d
- docker exec nodeos /mnt/dev/scripts/run_tests.sh
deploy_testnet:
stage: deploy
only:
- master
script:
- docker-compose -f docker-compose.prod.yml up -d
# 添加Prometheus和Grafana
monitoring:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- ./monitoring/grafana:/var/lib/grafana
通过本文的指导,您已经成功使用Docker和Docker Compose搭建了完整的EOS本地测试网络环境。这种容器化的方法不仅简化了部署流程,还提高了开发环境的可移植性和一致性。
在实际开发中,您可以根据项目需求进一步扩展此基础架构,例如添加更多节点、集成CI/CD管道或实现自动化测试。EOS区块链开发虽然有一定的学习曲线,但通过本地测试网络的实践,您将能够更快地掌握核心概念和开发技巧。
建议定期备份钱包和重要数据,并关注EOSIO官方文档获取最新更新和安全建议。祝您在EOS区块链开发之旅中取得成功! “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。