

5. Web化控制台2.0:打造团队共用区块链学习平台
source link: https://learnblockchain.cn/article/2153
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

今天的实践完成,就可以和团队的小伙伴一同丝滑地学起区块链了
我们先来回顾一下过去的文章:
首先我们先学习了如何搭建节点:
然后我们学习了控制台的安装与使用:
再然后我们实现了控制台的 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
2)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
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
文件,这个就是我们的公钥。
创建 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
服务。
执行成功后会返回容器编号:
3.2 通过 ssh 连接
通过ssh命令连接:
ssh -p 26122 root@localhost
3.3 查看文件夹是否挂载
进入 contract 目录:
cd ~/study_area/contracts
如果这个文件夹下的内容和console文件夹下的contracts文件夹内容一样,就说明挂载成功了。
accounts 文件夹同理。
4 容器 Web 化
和4. 控制台的Web化同理,只是这次我们执行的是 ssh
命令:
ttyd -p 8081 ssh -p 26122 root@localhost -t "cd /root/study_area;bash --login"
然后我们再按照4. 控制台的Web化中提到的方式加上鉴权即可。
5 与控制台配合进行区块链学习
5.1 下载Github 上的合约仓库
-
用浏览器访问
http://ip:8081
-
进入合约目录
cd ~/study_area/contracts/solidity
- 下载合约仓库
git clone https://github.com/WeLightProject/Contract-Study.git
- 用浏览器访问
http://ip:8080
部署刚才下载好的合约:
deployByCNS contracts/solidity/Contract-Study/HelloWorld.sol HelloWorld:1.0
5.2 查看用户私钥
http://ip:8081
cd ~/study_area/accounts/ecdsa
- 查看账户对应私钥:
cat 0xff1b462499a7759adeb5ff0d37b2f6815ba2d27a.pem
-
用浏览器访问
http://ip:8081
-
加载刚才录入的账户
loadAccount account/ecdsa/0x2784d6ca6fdb8a96aa924b06978ea5af2d810240.pem
5.3 导入已知私钥与公钥的用户
用 vim 在 ecdsa
目录下新建私钥文件:
vim [地址].pem
i
命令输入:
-----BEGIN PRIVATE KEY----- MEcCAQAwEAYHKoZIzj0CAQYFK4EEAAoEMDAuAgEBBCAjKpm08oDC+4UzihRd7oJ5 BNw1v3s4Po1O3ZrbDy1EDKAHBgUrgQQACg== -----END PRIVATE KEY-----
wq
保存退出。
6 Docker 常用命令
下载镜像:
docker pull [镜像名称]
创建容器:
docker run [镜像名称]
查看当前运行的容器:
docker ps
查看所有容器:
docker ps -a
查看所有镜像:
docker image ls
删除镜像:
docker image rm [镜像id]
删除容器:
docker rm [容器id]
我们先来回顾一下过去的文章:
首先我们先学习了如何搭建节点:
然后我们学习了控制台的安装与使用:
再然后我们实现了控制台的 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
2)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
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
文件,这个就是我们的公钥。
创建 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
服务。
执行成功后会返回容器编号:
3.2 通过 ssh 连接
通过ssh命令连接:
ssh -p 26122 root@localhost
3.3 查看文件夹是否挂载
进入 contract 目录:
cd ~/study_area/contracts
如果这个文件夹下的内容和console文件夹下的contracts文件夹内容一样,就说明挂载成功了。
accounts 文件夹同理。
4 容器 Web 化
和4. 控制台的Web化同理,只是这次我们执行的是 ssh
命令:
ttyd -p 8081 ssh -p 26122 root@localhost -t "cd /root/study_area;bash --login"
然后我们再按照4. 控制台的Web化中提到的方式加上鉴权即可。
5 与控制台配合进行区块链学习
5.1 下载Github 上的合约仓库
-
用浏览器访问
http://ip:8081
-
进入合约目录
cd ~/study_area/contracts/solidity
- 下载合约仓库
git clone https://github.com/WeLightProject/Contract-Study.git
- 用浏览器访问
http://ip:8080
部署刚才下载好的合约:
deployByCNS contracts/solidity/Contract-Study/HelloWorld.sol HelloWorld:1.0
5.2 查看用户私钥
http://ip:8081
cd ~/study_area/accounts/ecdsa
- 查看账户对应私钥:
cat 0xff1b462499a7759adeb5ff0d37b2f6815ba2d27a.pem
-
用浏览器访问
http://ip:8081
-
加载刚才录入的账户
loadAccount account/ecdsa/0x2784d6ca6fdb8a96aa924b06978ea5af2d810240.pem
5.3 导入已知私钥与公钥的用户
用 vim 在 ecdsa
目录下新建私钥文件:
vim [地址].pem
i
命令输入:
-----BEGIN PRIVATE KEY----- MEcCAQAwEAYHKoZIzj0CAQYFK4EEAAoEMDAuAgEBBCAjKpm08oDC+4UzihRd7oJ5 BNw1v3s4Po1O3ZrbDy1EDKAHBgUrgQQACg== -----END PRIVATE KEY-----
wq
保存退出。
6 Docker 常用命令
下载镜像:
docker pull [镜像名称]
创建容器:
docker run [镜像名称]
查看当前运行的容器:
docker ps
查看所有容器:
docker ps -a
查看所有镜像:
docker image ls
删除镜像:
docker image rm [镜像id]
删除容器:
docker rm [容器id]
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
- 发表于 12分钟前
- 阅读 ( 32 )
- 学分 ( 0 )
- 分类:FISCO BCOS
- 专栏: FISCO BCOS 联盟链开发基础
Recommend
-
154
上次那篇我是如何重构整个研发项目,促进自动化运维DevOps的落地?中提到restful接口重构具体详细内容没有写出来,今天补上。 前言 随着互联网高速发展,公司对项目开发周期不断缩短,我们面对各种需求,使用原有对接方式,各端已经很难快速应对各种需求,更难以
-
70
据国外媒体报道,在中国最大的一些城市里,各个餐馆正努力满足顾客通过手机应用订餐的海量需求。这直接导致没有桌椅和服务员的共享厨房市场繁荣起来。一家名为熊猫星厨( Panda Selected
-
15
问与答 - @ottawa8821 - 有一台台式机和笔记本一台显示器台式机和笔记本分别插在显示器上有什么方案可以让一套键鼠在切换两台设备的时候共用吗????
-
24
Matrix 精选 Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。 文章代表作者个人观点,少数...
-
18
-
9
在 C 和 C# 编程语言中, 结构体(Struct) 是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据。在 C 语言中还有一种和结构体非常类似的语法,叫 共用体(Union) ,有时也被直译为...
-
11
nginx多域名共用80端口 ...
-
12
#《C语言高级专题第5部分-4.5.数组&字符串&结构体&共用体&枚举》 第一部分、章节目录 4.5.1.程序中内存从哪里来1 4.5.2.程序中内存从哪里来2 4.5.3.程序中内存从哪里来2 4.5.4.程序中...
-
8
使用 lock 共用靜態物件 vs 每次新建物件之效能比較-黑暗執行緒前天提到 JScript.NET 跑 Eval() 在多緒執行出錯崩潰的案例,問題根源在當初覺得反覆編譯 JScript 建立組件並建立物件...
-
40
前言 v2ray的vless出现的有段时间了,其中的tcp+xtls方案还是蛮有趣的,这次通过nginx的sni来实现trojan、v2ray与nginx共用443端口的方案,话不多说开始了。 准备工作 1、VPS一台,CentOS 7的操作系统(其他系统也是可以的),本次使用的是vult...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK