# 准备

所需组件构建完成,可参考 组件构建

注意

建议您在部署到主网上之前在 calibration 网络中测试您的配置。

# 软件依赖

在运行 Venus 之前,您需要安装这些 (opens new window)软件。(注:和 lotus 的软件依赖相同)

# 启动 sophon-auth

$ nohup ./sophon-auth run > auth.log 2>&1 &

提示

sophon-auth 的默认配置文件位于 ~/.sophon-auth/config.toml

:::

port

sophon-auth默认端口为 8989,下面其他组件使用参数--auth-url,填写的相关参数就是这个端口号与相应 ip。

# 使用 MySQL (可选)

支持 MySQL 5.7 及以上版本,并创建好组件所需的数据库。可替代默认的 Badger 键值数据库。

# 创建数据库
create database sophon_auth default charset utf8;

要使用 MySQL 数据库,请修改配置中的 db 部分。

$ vim ~/.sophon-auth/config.toml

# Data source configuration item
[db]
# support: badger (default), mysql 
# the mysql DDL is in the script package 
type = "mysql" 
# The following parameters apply to MySQL
DSN = "<USER>:<PASSWORD>@(127.0.0.1:3306)/venus_auth?parseTime=true&loc=Local&charset=utf8mb4&collation=utf8mb4_unicode_ci&readTimeout=10s&writeTimeout=10s"
# conns 1500 concurrent
maxOpenConns = 64
maxIdleConns = 128
maxLifeTime = "120s"
maxIdleTime = "30s"

重启 sophon-auth 使配置生效。

$ ps -ef | grep auth
$ kill <VENUS_AUTH_PID>
$ nohup ./sophon-auth run > auth.log 2>&1 &

# 生成user 及 token

sophon-auth 管理着其他 venus 模块使用的jwt (opens new window)令牌,以便它们在网络上安全地相互通信。

提示

venus 集群中 token 的理论知识可参考 venus 集群 token 认证体系 (opens new window)

为链服务组件生成 token 需要先生成用户。

生成admin权限token,用于链服务使用。后面venus,sophon-gateway,sophon-messsager,sophon-miner,sophon-co5个组件都需要使用本次生成的token。

# 先生成用户
$ ./sophon-auth user add <USERNAME>

# 为用户生成token,权限是admin
$ ./sophon-auth token gen --perm admin <USERNAME>
<SHARED_ADMIN_AUTH_TOKEN>

user 绑定矿工 (miner),一个 user 可以有多个矿工。

$ ./sophon-auth user miner add <USER> <MINER_ID>

# 查看user列表
$ ./sophon-auth user list

如user的state不是enabled的话,需要设置 user 可用,否则在其他组件请求 user 列表时请求不到。

# 设置用户可用
$ ./sophon-auth user update --name=<USER> --state=1
 update user success

# 启动 sophon-gateway

下载并编译sophon-gateway的源代码。

$ git clone https://github.com/ipfs-force-community/sophon-gateway.git
$ cd sophon-gateway
$ git checkout <RELEASE_TAG>
$ make deps
$ make

提示

如果遇到以下编译错误,先执行 go get github.com/google/flatbuffers@v1.12.1

github.com/dgraph-io/badger/v3@v3.2011.1/fb/BlockOffset.go:6:2: missing go.sum entry for module providing package github.com/google/flatbuffers/go (imported by github.com/dgraph-io/badger/v3/table); to add:
        go get github.com/dgraph-io/badger/v3/table@v3.2011.1

启动 sophon-gateway

$ ./sophon-gateway --listen /ip4/0.0.0.0/tcp/45132 run \
# Use either a http or https url
--auth-url <http://VENUS_AUTH_IP_ADDRESS:PORT> \
--auth-token <SHARED_ADMIN_AUTH_TOKEN> \
> sophon-gateway.log 2>&1 &

# 启动 venus daemon

获取网络快照。

# mainnet网:
aria2c -x5 https://forest-archive.chainsafe.dev/latest/mainnet -o snapshot.car

# calibnet网络:
aria2c -x5 https://forest-archive.chainsafe.dev/latest/calibnet -o snapshot.car

启动 venus 进程进行链同步。使用 --network 来指定 venus 连接的网络。

$ ./venus daemon 
--network=calibrationnet \
--auth-url=<http://VENUS_AUTH_IP_ADDRESS:PORT> \
--auth-token=<SHARED_ADMIN_AUTH_TOKEN> \
--import-snapshot snapshot.car

# 节点磁盘数据合并

当节点系统磁盘空间不足时,需要重新导入快照文件,以保证venus节点的稳定运行。具体操作方法如下: 1、停止venus进程运行,可以用 kill <venus_pid> 方法停止进程运行; 2、移除老的 badgechainversion 文件,并备份文件;

cd ~/.venus/
mkdir backup
mv badger chain version backup/

3、导入新的快照文件,并开始同步;同步完成后,就可以把 ~/.venus/backup 删除。

./venus daemon 
--network=calibrationnet \
--auth-url=<http://VENUS_AUTH_IP_ADDRESS:PORT> \
--auth-token=<SHARED_ADMIN_AUTH_TOKEN> \
--import-snapshot snapshot.car

# venus 监听远程访问

默认情况下,venus进程只响应本地访问。更改以下配置以允许从其他地址访问。

vim ~/.venus/config.json

apiAddress/ip4/127.0.0.1/tcp/3453 更改为 /ip4/0.0.0.0/tcp/3453。此修改重启后生效

{
	"api": {"apiAddress": "/ip4/0.0.0.0/tcp/3453"}
}

重启 Venus daemon

$ ps -ef | grep venus
$ kill -9 <VENUS_PID>
$ venus daemon \
--network=calibrationnet \
--auth-url=<http://VENUS_AUTH_IP_ADDRESS:PORT> \
--auth-token=<SHARED_ADMIN_AUTH_TOKEN> \
--import-snapshot snapshot.car

在其他机器上执行 telnet 验证配置生效:

telnet <VENUS_IP_ADDRESS> <PORT>

可以使用 tail -f venus.log./venus sync status./venus chain head多种办法检查同步过程中是否有任何错误。

# 查看`Timestamp`如果是当前时间,说明节点同步完成。
$ ./venus chain head
{
	"Height": 769959,
	"ParentWeight": "14246387999",
	"Cids": [
		{
			"/": "bafy2bzacebuy3bxoxy7h2rlhttwvnte27ebpcro6kfew7ce3fojgghpctlchm"
		},
		{
			"/": "bafy2bzaceawzuc6l3dnj3jbnqc5xynfz6ak3kzad4iejnmu7owaon2iygmqfq"
		}
	],
	"Timestamp": "2023-07-27 10:32:30"
}

# 启动sophon-co(可选)

$ sophon-co --listen 0.0.0.0:6666 run \
--auth <SHARED_ADMIN_AUTH_TOKEN:http://VENUS_AUTH_IP_ADDRESS:PORT \
--node <SHARED_ADMIN_AUTH_TOKEN:/ip4/VENUS_DAEMON_IP_ADDRESS/tcp/VENUS_DAEMON_PORT/ws>
--node <SHARED_ADMIN_AUTH_TOKEN:/ip4/VENUS_DAEMON_IP_ADDRESS/tcp/VENUS_DAEMON_PORT/ws>

如果启动多个节点,可以通过 --node 来指定多个节点选择最优链信息,返回给请求组件。

查看 sophon-co 下的所有节点,以及调度的优先级:

./sophon-co --listen 0.0.0.0:6666 weight list
#Address                        Weight  Priority
#/ip4/10.10.66.141/tcp/3453/ws  1       2

# 启动 sophon-messager

如果没有指定与数据库相关的参数,sophon-messager 将默认使用 sqlite3 数据库。

选择mysql数据库的话,首先需要创建数据库。

# 创建数据库
$ create database sophon_messager default charset utf8;

启动 sophon-messager。请注意,--auth-url--node-url--auth-token 是为了让 sophon-messager 了解其他 venus 模块的存在并进行自身的身份验证。

$ nohup ./sophon-messager run \
--auth-url=<http://VENUS_AUTH_IP_ADDRESS:PORT> \
--node-url /ip4/<VENUS_DAEMON_IP_ADDRESS>/tcp/3453 \
--gateway-url=/ip4/<IP_ADDRESS_OF_VENUS_GATEWAY>/tcp/45132 \
--auth-token <SHARED_ADMIN_AUTH_TOKEN> \
--db-type mysql \
--mysql-dsn "<USER>:<PASSWORD>@(127.0.0.1:3306)/sophon_messager?parseTime=true&loc=Local&readTimeout=10s&writeTimeout=10s" \
> msg.log 2>&1 &

# 启动 sophon-miner

# 初始化 sophon-miner

选择mysql数据库的话,首先需要创建数据库。

# 创建数据库
$ create database sophon_miner default charset utf8;

初始化。

$ ./sophon-miner init \
--auth-api <http://VENUS_AUTH_IP_ADDRESS:PORT> \
--token <SHARED_ADMIN_AUTH_TOKEN> \
--gateway-api /ip4/<VENUS_GATEWAY_IP_ADDRESS>/tcp/45132 \
--api /ip4/<VENUS_DAEMON_IP_ADDRESS>/tcp/3453 \
--slash-filter mysql \
--mysql-conn "<USER>:<PASSWORD>@(127.0.0.1:3306)/sophon_miner?parseTime=true&loc=Local&readTimeout=10s&writeTimeout=10s" 

# 启动 sophon-miner

$ nohup ./sophon-miner run > miner.log 2>& 1 &

sophon-miner 启动后会从 sophon-auth 请求矿工列表,并对每个矿工执行出块的必要检查,如:钱包服务,WinningPoSt 服务是否正常等。检查矿工列表:

$ ./sophon-miner address list 
[
        {
                "Addr": "f031429",
                "Id": "1f06d7b9-9fb2-497e-80f5-68f06b0a4b5f",
                "Name": "200-21"
        }
]

如果列表中没有在 sophon-auth 中配置的矿工,则需要从 sophon-auth 检查配置是否正确

  • 检查venus-miner 初始化配置的 auth-token 对应的 user是激活状态,即 state=enabled
$ ./sophon-auth user list
name: ***
state: enabled
  • 检查 sophon-miner 初始化配置的 auth-token 对应的 user下成功添加了此矿工。
./sophon-auth user list
name: ***
miners: [***,***,...]

提示

miners 列表有此矿工为正确。

修改成功后执行下列命令重新拉取:

$ ./sophon-miner address update

如果想要暂时终止或开始列表中某个矿工的出块,可通过下列命令执行。通常用于某个矿工出问题或集群迁移时使用。

$ ./sophon-miner address start <MINER_ID>
$ ./sophon-miner address stop <MINER_ID>

# 配置链服务统一入口

因为链服务组件比较多,当下游组件想要链接同一个链服务的多个链服务组件时,配置会比较繁琐,并且需要提供多个链服务的入口。 可以使用 sophon-gateway 代理其他链服务的请求,对外提供一个统一的链服务入口。参考[部署统一链服务入口]。(https://sophon.venus-fil.io/zh/operation/sophon-gateway.html#%E4%BD%BF%E7%94%A8-gateway-%E4%BB%A3%E7%90%86%E5%AF%B9%E5%85%B6%E4%BB%96%E7%BA%BF%E4%B8%8A%E7%BB%84%E4%BB%B6%E7%9A%84%E8%AF%B7%E6%B1%82)

# 启动 droplet(可选)

droplet 可以作为链服务组件之一来进行部署,具体部署文档请参考文档 (opens new window)

# 下一步

接下来请按照这个文档加入到你刚刚部署的智子服务吧!

# 问题?

欢迎来Slack (opens new window)上找我们反馈!