本教程适合于需要在外网访问受限的环境中安装 Forge CLI 并启动 Forge 链的用户。外网访问受限的是指安装和运行 Forge 链的机器只能访问局域网。正常情况下,要启动 Forge 链需要先安装 Forge CLI,然后用它来安装 Forge,这两步都需要访问外网。

怎么实现在局域网安装和部署 Forge 链呢?下面是搞定两个环节的基本做法。

在局域网安装 Forge CLI?

Forge CLI 的所有版本都是发布在 npm 官方的 package registry 上的,大部分有局域网的企业都会给自己做这个 registry 的镜像,比如淘宝的镜像是 https://registry.npm.taobao.org

在局域网中安装 Forge CLI 需要先请网络管理员建立一个可用的 npm registry 镜像,并且适当设置镜像的同步频率。这样安装 Forge CLI 的时候直接使用:npm install -g @arcblock/forge-cli --registry https://registry.domain.com

如何让 Forge CLI 永久性的使用自定义的 npm registry 配置项?Forge CLI 在 0.37.10 版本之后支持全局配置 npmRegistry 选项。

全局配置文件的位置一般在:~/.forgerc.yml,可以输入如下内容:

autoUpgrade: false
npmRegistry: http://registry.npm.taobao.org/

这里我们禁用掉自动更新的检查,以提高每次执行命令的速度,而 npmRegistry 配置项就是自定义的 npm registry 地址。

如果用户在 .npmrc 里面设置了自定义的 registry 选项,那么也会被读取并遵守,只不过 ~/.forgerc.yml 配置的优先级比 ~/.npmrc 配置的优先级更高些。

在局域网下载和安装 Forge?

Forge CLI 和 Forge 及各种 Forge 组件是分开发布的,安装完 Forge CLI 之后,需要执行 forge install 去安装 Forge 的各种组件,正常情况下 Forge Install 也需要从网络下载资源,幸好 Forge CLI 支持从本地磁盘加载已经提前下载好的 Forge Release 压缩包。

具体的做法如下:

准备 Forge Release 资源

https://releases.arcblockio.cn/forge_release.zip 里面打包了 Forge v0.37.2 的所有组件,先把下载到本地,然后通过 scp 之类的命令传输到服务器上,在服务器上解压到特定目录,比如 /home/work/,得到如下的目录结构:

❯ tree -L 2 /home/work/forge_release
/home/work/forge_release
└── 0.37.2
    ├── forge_centos_amd64.tgz
    ├── forge_darwin_amd64.tgz
    ├── forge_starter_centos_amd64.tgz
    ├── forge_starter_darwin_amd64.tgz
    ├── forge_swap_centos_amd64.tgz
    ├── forge_swap_darwin_amd64.tgz
    ├── forge_web_centos_amd64.tgz
    ├── forge_web_darwin_amd64.tgz
    ├── forge_workshop_centos_amd64.tgz
    ├── forge_workshop_darwin_amd64.tgz
    ├── simulator_centos_amd64.tgz
    └── simulator_darwin_amd64.tgz

配置 Forge CLI

修改 ~/.forgerc.yml,添加如下的行:

autoUpgrade: false
npmRegistry: http://registry.npm.taobao.org/
releaseDir: /home/work/forge_release

注意新增的 releaseDir 需要指向你解压到的目录。

安装并启动 Forge

准备工作到这里都做好了,接下来执行 forge install

ℹ Detected platform is: darwin
ℹ Using local releaseDir: /home/work/forge_release
ℹ Latest forge release version: v0.37.2

██████╗ ██╗   ██╗     █████╗ ██████╗  ██████╗██████╗ ██╗      ██████╗  ██████╗██╗  ██╗
██╔══██╗╚██╗ ██╔╝    ██╔══██╗██╔══██╗██╔════╝██╔══██╗██║     ██╔═══██╗██╔════╝██║ ██╔╝
██████╔╝ ╚████╔╝     ███████║██████╔╝██║     ██████╔╝██║     ██║   ██║██║     █████╔╝
██╔══██╗  ╚██╔╝      ██╔══██║██╔══██╗██║     ██╔══██╗██║     ██║   ██║██║     ██╔═██╗
██████╔╝   ██║       ██║  ██║██║  ██║╚██████╗██████╔╝███████╗╚██████╔╝╚██████╗██║  ██╗
╚═════╝    ╚═╝       ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝╚═════╝ ╚══════╝ ╚═════╝  ╚═════╝╚═╝  ╚═╝

✔ Release asset find /home/work/forge_release/0.35.0/forge_darwin_amd64.tgz
✔ Copied release asset /home/work/forge_release/0.35.0/forge_darwin_amd64.tgz
✔ Expand release asset /home/work/.forge_cli/tmp/forge_darwin_amd64.tgz to /home/work/.forge_cli/release/forge/0.35.0
✔ Extract forge config from /home/work/.forge_cli/release/forge/0.35.0/lib/forge-0.35.0/priv/forge_release.toml
✔ Forge config written to /home/work/.forge_chains/forge_default/forge_release.toml
✔ Release asset find /home/work/forge_release/0.35.0/simulator_darwin_amd64.tgz
✔ Copied release asset /home/work/forge_release/0.35.0/simulator_darwin_amd64.tgz
✔ Expand release asset /home/work/.forge_cli/tmp/simulator_darwin_amd64.tgz to /home/work/.forge_cli/release/simulator/0.35.0
✔ Release asset find /home/work/forge_release/0.35.0/forge_web_darwin_amd64.tgz
✔ Copied release asset /home/work/forge_release/0.35.0/forge_web_darwin_amd64.tgz
✔ Expand release asset /home/work/.forge_cli/tmp/forge_web_darwin_amd64.tgz to /home/work/.forge_cli/release/forge_web/0.35.0
✔ Release asset find /home/work/forge_release/0.35.0/forge_workshop_darwin_amd64.tgz
✔ Copied release asset /home/work/forge_release/0.35.0/forge_workshop_darwin_amd64.tgz
✔ Expand release asset /home/work/.forge_cli/tmp/forge_workshop_darwin_amd64.tgz to /home/work/.forge_cli/release/forge_workshop/0.35.0
✔ Congratulations! forge v0.37.2 installed successfully!

ℹ If you want to custom the config, run: forge config set

如果你想现在就启动 Forge 链,可以直接 forge start,启动完成之后执行 forge web open,就能打开 Forge 链节点的控制面板和区块浏览器。

软件版本的更新?

安装配置好之后怎么更新呢?对于 Forge CLI 则需要 npm registry 镜像能够同步官方镜像的版本,而 Forge 的版本需要手动去下载然后上传到局域网的机器上去。