6

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

 3 years ago
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.
neoserver,ios ssh client

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

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

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

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

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

J3Uf6ze.jpg!mobile

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 文件,这个就是我们的公钥。

3iI3Mfi.jpg!mobile

创建 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 服务。

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

YR3MNjZ.jpg!mobile

3.2 通过 ssh 连接

通过ssh命令连接:

ssh -p 26122 root@localhost

ayUVVzu.jpg!mobile

3.3 查看文件夹是否挂载

进入 contract 目录:

cd ~/study_area/contracts

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

zeYB3ar.jpg!mobile

accounts 文件夹同理。

4 容器 Web 化

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

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

imAbqqe.jpg!mobile

然后我们再按照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

yE3i6jI.jpg!mobile

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

部署刚才下载好的合约:

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

eIJbE3r.jpg!mobile

5.2 查看用户私钥

http://ip:8081
cd ~/study_area/accounts/ecdsa
  1. 查看账户对应私钥:
cat 0xff1b462499a7759adeb5ff0d37b2f6815ba2d27a.pem

2YRFNbr.jpg!mobile

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

  2. 加载刚才录入的账户

loadAccount account/ecdsa/0x2784d6ca6fdb8a96aa924b06978ea5af2d810240.pem

YRfY7bj.jpg!mobile

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

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

vim [地址].pem

i 命令输入:

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

wq 保存退出。

rArauq6.jpg!mobile

6 Docker 常用命令

下载镜像:

docker pull [镜像名称]

创建容器:

docker run [镜像名称]

查看当前运行的容器:

docker ps

查看所有容器:

docker ps -a

查看所有镜像:

docker image ls

删除镜像:

docker image rm [镜像id]

删除容器:

docker rm [容器id]

RB3UJfu.jpg!mobile

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

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

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

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

J3Uf6ze.jpg!mobile

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 文件,这个就是我们的公钥。

3iI3Mfi.jpg!mobile

创建 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 服务。

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

YR3MNjZ.jpg!mobile

3.2 通过 ssh 连接

通过ssh命令连接:

ssh -p 26122 root@localhost

ayUVVzu.jpg!mobile

3.3 查看文件夹是否挂载

进入 contract 目录:

cd ~/study_area/contracts

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

zeYB3ar.jpg!mobile

accounts 文件夹同理。

4 容器 Web 化

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

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

imAbqqe.jpg!mobile

然后我们再按照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

yE3i6jI.jpg!mobile

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

部署刚才下载好的合约:

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

eIJbE3r.jpg!mobile

5.2 查看用户私钥

http://ip:8081
cd ~/study_area/accounts/ecdsa
  1. 查看账户对应私钥:
cat 0xff1b462499a7759adeb5ff0d37b2f6815ba2d27a.pem

2YRFNbr.jpg!mobile

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

  2. 加载刚才录入的账户

loadAccount account/ecdsa/0x2784d6ca6fdb8a96aa924b06978ea5af2d810240.pem

YRfY7bj.jpg!mobile

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

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

vim [地址].pem

i 命令输入:

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

wq 保存退出。

rArauq6.jpg!mobile

6 Docker 常用命令

下载镜像:

docker pull [镜像名称]

创建容器:

docker run [镜像名称]

查看当前运行的容器:

docker ps

查看所有容器:

docker ps -a

查看所有镜像:

docker image ls

删除镜像:

docker image rm [镜像id]

删除容器:

docker rm [容器id]

RB3UJfu.jpg!mobile

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK