狗哥区块链与AI精品内容集@NonceGeek

2025年03月28日更新 75 人订阅
原价: ¥ 20 限时优惠
专栏简介 「造」最关键的是什么?| Hackathon 漫游指南(贰) Why Hackathon?| Hackathon 漫游指南(壹) 设计「众人维护」的 BuidlerBoard | BeWater.xyz Movement 白皮书中文版 Rebuidl RSS 生产因素与反生产因素 | 独立黑客创业手册(陆) 组织 | 独立黑客创业手册(伍) 生产 | 独立黑客创业手册(肆) 销售 | 独立黑客创业手册(叄) 最优先的能力 | 独立黑客创业手册(贰) 为什么从独立黑客开始 | 独立黑客创业手册(壹) Aptos Token Object V2 | Move dApp 极速入门(贰拾肆) 可編程交易塊 | Move dApp 極速入門(貳拾叁) Aptos 密鑰輪換 | Move dApp 極速入門(貳拾貳) Aptos 对象模型 | Move dApp 极速入门(贰拾壹) Aptos Moveflow SDK使用指南 | Move dApp 极速入门(贰拾) Sui 上简单 Swap 的实现 | Move dApp 极速入门(拾玖) 用 Elixir 交互 Aptos | Move dApp 极速入门(拾捌) Sui 链上数据查询 | Move dApp 极速入门(拾柒) SUI 合约测试攻略 | Move dApp 极速入门(拾陆) Sui 数据类型详解 | Move dApp 极速入门(拾伍) Airdropper Contract in Aptos | Move dApp 极速入门(拾肆) Sandwich合约源码解析 | Move dApp 极速入门(拾叁) Sui 极速上手 | Move dApp 极速入门(拾贰) scaffold-aptos 脚手架 | Move dApp 极速入门(拾壹) 对 DID Document 的思考 | Move dApp 极速入门(九) DID中地址聚合器的实现 | Move dApp 极速入门(八) 值的存取应用3.0 | Web3.0 dApp 开发(五) 合约数据类型综述 | Move dApp 极速入门(四) 操作资源 | Move dApp 极速入门(三) 第一个 Move dApp | Move dApp 极速入门(二) Hello Move | Move dApp极速入门(一) Staker | Web3.0 dApp 开发(九) Token 自动售卖机 | Web3.0 dApp 开发(七) SVG NFT 全面实践 | Web3.0 dApp 开发(六) 值的存取应用2.0 | Web3.0 dApp 开发(四) 值的存取应用1.0 | Web3.0 dApp开发(三) Scaffold-eth 快速上手 | Web3.0 dApp 开发(二) eth.build 快速上手 | Web3.0 dApp 开发(一) 1 小时理解比特币系统 【NonceGeek Workshop 0x01总结】基于链上数据生成游戏地图 Remix 完全本地化部署 NFT:实体与虚拟载体的主与辅 | 狗哥的元宇宙思辨(一) Web3Camp 内容大全@NonceGeek 用 Python 创建一条 Pow 区块链(上) 区块链与共识机制演变史 基于 Etherscan 实现 Blockchain Syncer 【论文分享】去中心化社会:寻找 Web3 的灵魂(上) 【论文分享】去中心化社会:寻找 Web3 的灵魂(下) Ted Yin | 2021 年的区块链基础设施将是什么? 0. 公链、联盟链与分布式未来(全文) 基于 Infura 与 Web3py 部署调用 Hello 合约全过程 | 以太坊开发极速入门 太上中的基因设计与Binary | 函数式与区块链(一) 理解以太坊合约数据读取过程 | 函数式与区块链(二) Hello, Ink! | 用 Rust 写智能合约(一) Mapping 数据结构 | 用 Rust 写智能合约(二) 用 Rust 程序和 Webase 交互 | Rust 学习笔记(四) 用 Sqlite 存储 WeId | Rust 学习笔记(五) 链上注册WeId与错误处理 | Rust 学习笔记(六) WeId 链上创建与本地存储的完整闭环 | Rust 学习笔记(七) 以太坊上的核心开发者 Austin | 以太坊上的最佳开发实践 1. FISCO BCOS 开发环境节点搭建全攻略 伪代码简述 ECDSA 签名过程 | 联盟链开发 WeIdentity 源码分析 | 狗哥解码 WeIdentity 源码分析 | 狗哥解码 FISCO BCOS 介绍 | 联盟链开发 给Remix升个级 | 联盟链开发 2. 控制台的安装与使用 3. 【实验】补全一个区块链应用 4. 控制台的Web化 5. Web化控制台2.0:打造团队共用区块链学习平台 6. 使用脚手架快速搭建 Java DApp 【视频+文字】分布式思维 Rebuidl RSS (EN)

5. Web化控制台2.0:打造团队共用区块链学习平台

  • 李大狗
  • 发布于 2021-02-19 15:44
  • 阅读 4447

今天的实践完成,就可以和团队的小伙伴一同丝滑地学起区块链了

我们先来回顾一下过去的文章:

首先我们先学习了如何搭建节点:

1. FISCO BCOS 开发环境节点搭建全攻略

然后我们学习了控制台的安装与使用:

2. 控制台的安装与使用

再然后我们实现了控制台的 Web 化:

4. 控制台的Web化

但是仅仅将控制台 Web 化还是不够的,因为我们还需要进行导入导出账户、上传下载合约等多种操作。那么,我们有没有办法让用户不用登陆服务器,只在浏览器中就能实现这些操作,然后又保证用户的操作和服务器是安全隔离的呢?

我们可以通过这样的方式实现:基于 Docker 技术在我们的服务器上搭建一个容器(Container),这个容器中是一个轻量的Ubuntu操作系统,然后这个容器挂载了控制台放置合约的 Contracts 文件夹与放置账户的 Accounts 文件夹。最后我们将我们的容器 Web 化,这样我们的区块链云学习环境1.0就算真正搭建好了,可以和团队的小伙伴一起愉快地玩耍了。

1 准备工作

1.1 安装 Docker

安装screen

apt install screen

进入screen

screen -S install_docker

获取get-docker脚本:

curl -fsSL test.docker.com -o get-docker.sh

安装docker

sudo sh get-docker.sh --mirror Aliyun

docker换源:

sudo vim /etc/docker/daemon.json

写入:

{
  "registry-mirrors" : [
    "http://ovfftd6p.mirror.aliyuncs.com",
    "http://registry.docker-cn.com",
    "http://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "insecure-registries" : [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
  ],
  "debug" : true,
  "experimental" : true
}

重启docker服务:

sudo service docker restart

1.2 获取需要挂载到容器中的文件夹的绝对路径

到 console 的目录下:

$ pwd
/Users/liaohua/fisco/console

image-20210219103811062

contracts 文件夹绝对路径:

[console绝对路径]/contracts

accounts 文件夹绝对路径:

[console绝对路径]/account

1.3 创建 ssh keys 与 ssh_key 文件夹

我们之后会通过 ssh 的方式在宿主机和容器间建立连接。

创建ssh keys:

$ ssh-keygen -t rsa -b 4096 -C "你的邮箱地址"

~/.ssh文件夹下会生成id_rsa.pub文件,这个就是我们的公钥。

image-20210219105542238

创建ssh_keys文件夹:

mkdir ssh_keys

复制公钥到ssh_keys文件夹:

cp ~/.ssh/id_rsa.pub ~/ssh_keys/authorized_keys

获取ssh_keys文件夹的绝对路径。

2 拉取镜像

通过docker pull 命令拉取镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/leeduckgo/blockchain-study:2.1

3 生成容器

3.1 生成容器

其中,「ssh_keys 文件夹绝对路径」在 1.3 中得到,「accounts 文件夹绝对路径」与「contracts 文件夹绝对路径」在 1.2 中得到。

docker run -d -p 26122:22 -p 8003:80 -v=[ssh_keys 文件夹绝对路径]:/root/.ssh -v=[accounts 文件夹绝对路径]:/root/study_area/accounts -v=[contracts 文件夹绝对路径]:/root/study_area/contracts --name blockchain-study registry.cn-hangzhou.aliyuncs.com/leeduckgo/blockchain-study:2.1 /usr/sbin/sshd -D

命令解析:

我们可以通过docker run --help命令查看docker run命令都有哪些参数。

-d:用后台的方式运行容器并打印容器id。

-p:端口映射,:前面是宿主机的端口,后面是容器的端口,如-p 26122:22指的是把容器的22端口(ssh端口)映射到宿主机的26122端口上。

-v:文件夹挂载,:前面是宿主机的文件夹路径,后面是容器的文件夹路径,如-v=/home/ubuntu/ssh_key:/root/.ssh就是把宿主机的/home/ubuntu/ssh_key路径挂载到容器的/root/.ssh路径下。

-name:容器名称。

registry.cn-hangzhou.aliyuncs.com/leeduckgo/blockchain-study:2.1:镜像名称。

/usr/sbin/sshd -D:启动镜像时候执行的命令,这里是开启ssh服务。

执行成功后会返回容器编号:

image-20210219111833519

3.2 通过 ssh 连接

通过ssh命令连接:

ssh -p 26122 root@localhost

image-20210219111929050

3.3 查看文件夹是否挂载

进入 contract 目录:

cd ~/study_area/contracts

如果这个文件夹下的内容和console文件夹下的contracts文件夹内容一样,就说明挂载成功了。

image-20210219112627095

accounts 文件夹同理。

4 容器 Web 化

4. 控制台的Web化同理,只是这次我们执行的是ssh命令:

ttyd -p 8081 ssh -p 26122 root@localhost -t "cd /root/study_area;bash --login"

image-20210219113455821

然后我们再按照4. 控制台的Web化中提到的方式加上鉴权即可。

5 与控制台配合进行区块链学习

5.1 下载Github 上的合约仓库

  1. 用浏览器访问http://ip:8081

  2. 进入合约目录

cd ~/study_area/contracts/solidity
  1. 下载合约仓库
git clone https://github.com/WeLightProject/Contract-Study.git

image-20210219142310052

  1. 用浏览器访问http://ip:8080

部署刚才下载好的合约:

deployByCNS contracts/solidity/Contract-Study/HelloWorld.sol HelloWorld:1.0

image-20210219142522175

5.2 查看用户私钥

  1. 用浏览器访问http://ip:8081
  2. 进入账户目录:
cd ~/study_area/accounts/ecdsa
  1. 查看账户对应私钥:
cat 0xff1b462499a7759adeb5ff0d37b2f6815ba2d27a.pem

image-20210219142817421

  1. 用浏览器访问http://ip:8081

  2. 加载刚才录入的账户

loadAccount account/ecdsa/0x2784d6ca6fdb8a96aa924b06978ea5af2d810240.pem

image-20210219143550798

5.3 导入已知私钥与公钥的用户

用 vim 在ecdsa目录下新建私钥文件:

vim [地址].pem

i命令输入:

-----BEGIN PRIVATE KEY-----
MEcCAQAwEAYHKoZIzj0CAQYFK4EEAAoEMDAuAgEBBCAjKpm08oDC+4UzihRd7oJ5
BNw1v3s4Po1O3ZrbDy1EDKAHBgUrgQQACg==
-----END PRIVATE KEY-----

wq保存退出。

image-20210219143310013

6 Docker 常用命令

下载镜像:

docker pull [镜像名称]

创建容器:

docker run [镜像名称]

查看当前运行的容器:

docker ps

查看所有容器:

docker ps -a

查看所有镜像:

docker image ls

删除镜像:

docker image rm [镜像id]

删除容器:

docker rm [容器id]

slogan.jpeg

点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论