5. Web化控制台2.0:打造团队共用区块链学习平台
今天的实践完成,就可以和团队的小伙伴一同丝滑地学起区块链了
我们先来回顾一下过去的文章: > 首先我们先学习了如何搭建节点: > > [1. FISCO BCOS 开发环境节点搭建全攻略](https://learnblockchain.cn/article/1935) > > 然后我们学习了控制台的安装与使用: > > [2. 控制台的安装与使用](https://learnblockchain.cn/article/1959) > > 再然后我们实现了控制台的 Web 化: > > [4. 控制台的Web化](https://learnblockchain.cn/article/2099) 但是仅仅将控制台 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](https://img.learnblockchain.cn/2021/02/22_/292528941.jpg) 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](https://img.learnblockchain.cn/2021/02/22_/554973890.jpg) 创建`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](https://img.learnblockchain.cn/2021/02/22_/750073060.jpg) ### 3.2 通过 ssh 连接 通过ssh命令连接: ``` ssh -p 26122 root@localhost ``` ![image-20210219111929050](https://img.learnblockchain.cn/2021/02/22_/732397007.jpg) ### 3.3 查看文件夹是否挂载 进入 contract 目录: ``` cd ~/study_area/contracts ``` 如果这个文件夹下的内容和console文件夹下的contracts文件夹内容一样,就说明挂载成功了。 ![image-20210219112627095](https://img.learnblockchain.cn/2021/02/22_/569276339.jpg) accounts 文件夹同理。 ## 4 容器 Web 化 和[4. 控制台的Web化](https://learnblockchain.cn/article/2099)同理,只是这次我们执行的是`ssh `命令: ``` ttyd -p 8081 ssh -p 26122 root@localhost -t "cd /root/study_area;bash --login" ``` ![image-20210219113455821](https://img.learnblockchain.cn/2021/02/22_/954926527.jpg) 然后我们再按照[4. 控制台的Web化](https://learnblockchain.cn/article/2099)中提到的方式加上鉴权即可。 ## 5 与控制台配合进行区块链学习 ### 5.1 下载Github 上的合约仓库 1. 用浏览器访问`http://ip:8081` 2. 进入合约目录 ``` cd ~/study_area/contracts/solidity ``` 3. 下载合约仓库 ``` git clone https://github.com/WeLightProject/Contract-Study.git ``` ![image-20210219142310052](https://img.learnblockchain.cn/2021/02/22_/613721506.jpg) 4. 用浏览器访问`http://ip:8080` 部署刚才下载好的合约: ``` deployByCNS contracts/solidity/Contract-Study/HelloWorld.sol HelloWorld:1.0 ``` ![image-20210219142522175](https://img.learnblockchain.cn/2021/02/22_/118599292.jpg) ### 5.2 查看用户私钥 1. 用浏览器访问`http://ip:8081` 2. 进入账户目录: ``` cd ~/study_area/accounts/ecdsa ``` 3. 查看账户对应私钥: ``` cat 0xff1b462499a7759adeb5ff0d37b2f6815ba2d27a.pem ``` ![image-20210219142817421](https://img.learnblockchain.cn/2021/02/22_/371065803.jpg) 4. 用浏览器访问`http://ip:8081` 5. 加载刚才录入的账户 ``` loadAccount account/ecdsa/0x2784d6ca6fdb8a96aa924b06978ea5af2d810240.pem ``` ![image-20210219143550798](https://img.learnblockchain.cn/2021/02/22_/866644661.jpg) ### 5.3 导入已知私钥与公钥的用户 用 vim 在`ecdsa`目录下新建私钥文件: ``` vim [地址].pem ``` `i`命令输入: ``` -----BEGIN PRIVATE KEY----- MEcCAQAwEAYHKoZIzj0CAQYFK4EEAAoEMDAuAgEBBCAjKpm08oDC+4UzihRd7oJ5 BNw1v3s4Po1O3ZrbDy1EDKAHBgUrgQQACg== -----END PRIVATE KEY----- ``` `wq`保存退出。 ![image-20210219143310013](https://img.learnblockchain.cn/2021/02/22_/125710091.jpg) ## 6 Docker 常用命令 下载镜像: ``` docker pull [镜像名称] ``` 创建容器: ``` docker run [镜像名称] ``` 查看当前运行的容器: ``` docker ps ``` 查看所有容器: ``` docker ps -a ``` 查看所有镜像: ``` docker image ls ``` 删除镜像: ``` docker image rm [镜像id] ``` 删除容器: ``` docker rm [容器id] ``` --- ![slogan.jpeg](https://img.learnblockchain.cn/attachments/2020/05/2MLYUj8y5ec34769dcf2f.jpeg)
我们先来回顾一下过去的文章:
首先我们先学习了如何搭建节点:
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
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]
区块链技术网。
- 发表于 2021-02-19 15:44
- 阅读 ( 1022 )
- 学分 ( 21 )
- 分类:FISCO BCOS
- 专栏:狗哥区块链精品内容集
评论