跳转到主要内容
Cosmovisor 是专为基于 Cosmos SDK 的区块链设计的进程管理器,可简化二进制文件(链)升级的管理。本指南提供为 Injective 网络节点设置 Cosmovisor 的分步说明。
注意: 这些说明假设你已有现有的链二进制文件(例如 injectived),如果选择从源代码安装 Cosmovisor,还需要有可用的 Go 环境。请根据你的具体设置调整名称和路径。

目录

  1. 安装
  2. 环境变量
  3. 目录结构
  4. 运行 Cosmovisor
  5. 处理链升级
  6. 将 Cosmovisor 作为 Systemd 服务运行

安装

通过 Go 安装

如果你已安装 Go,可以使用以下命令安装 Cosmovisor:
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.5.0
提示: 确保你的 Go 二进制文件安装路径(通常是 $GOPATH/bin$HOME/go/bin)已添加到系统的 PATH 中。你可以通过运行以下命令验证安装:
which cosmovisor

环境变量

设置以下环境变量,以便 Cosmovisor 知道要运行哪个二进制文件以及在哪里找到它:
  • DAEMON_NAME
    你的链二进制文件的名称(例如 injectived)。
  • DAEMON_HOME
    你的节点的主目录(例如 ~/.injectived)。
你可以在 shell 的配置文件(如 ~/.bashrc~/.profile)中设置这些变量,或直接在终端会话中导出:
export DAEMON_NAME=injectived
export DAEMON_HOME=~/.injectived

目录结构

Cosmovisor 期望在你的节点主目录中有特定的文件夹结构:
  1. 创建 Genesis 目录 此目录保存初始(genesis)二进制文件。
    mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
    
  2. 复制当前二进制文件 将当前的链二进制文件(例如 injectived)放入 genesis 文件夹。确保文件名与 DAEMON_NAME 值匹配(见下一节)。
    cp $(which injectived) $DAEMON_HOME/cosmovisor/genesis/bin/injectived
    

运行 Cosmovisor

不要直接运行链的二进制文件,而是通过执行以下命令使用 Cosmovisor 启动节点:
cosmovisor run start
Cosmovisor 将:
  • $DAEMON_HOME/cosmovisor/genesis/bin(或相应的升级文件夹)中查找二进制文件。
  • 使用该二进制文件启动你的节点。
  • 监控任何链上升级信号,并在需要时自动切换二进制文件。

处理链升级

当链上宣布升级时,准备新的二进制文件以便 Cosmovisor 可以自动切换:
  1. 创建升级目录 使用链上提供的升级名称(例如 v1.14.0):
    mkdir -p $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
    
  2. 放置新的二进制文件 编译或下载新的二进制文件,然后将其复制到升级目录。确保二进制文件名称与 DAEMON_NAME 匹配。
    cp /path/to/new/injectived $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
    cp /path/to/new/libwasmvm.x86_64.so $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
    
提示: 如果你从 GitHub 下载了 injectived 二进制文件包,我们会将 libwasmvm.x86_64.so 复制到升级的 bin 目录。稍后会在 systemd 服务中添加环境变量,将此目录添加到 LD_LIBRARY_PATH
  1. 升级过程 当达到升级高度时,Cosmovisor 将检测到计划的升级并自动切换到相应升级文件夹中的二进制文件。

将 Cosmovisor 作为 Systemd 服务运行

对于生产环境,通常将节点作为 systemd 服务运行。以下是示例服务文件。
  1. 创建服务文件 创建一个文件(例如 /etc/systemd/system/injectived.service),内容如下。根据需要调整路径和 <your_username>
    [Unit]
    Description=Injective Daemon managed by Cosmovisor
    After=network-online.target
    
    [Service]
    User=<your_username>
    ExecStart=/home/<your_username>/go/bin/cosmovisor run start
    Restart=always
    RestartSec=3
    Environment="DAEMON_NAME=injectived"
    Environment="DAEMON_HOME=/home/<your_username>/.injectived"
    Environment="PATH=/usr/local/bin:/home/<your_username>/go/bin:$PATH"
    Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
    Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
    Environment="UNSAFE_SKIP_BACKUP=true"
    Environment="LD_LIBRARY_PATH=/home/<your_username>/.injectived/cosmovisor/current/bin"
    
    [Install]
    WantedBy=multi-user.target
    
  2. 启用并启动服务
    sudo systemctl daemon-reload
    sudo systemctl enable injectived.service
    sudo systemctl start injectived.service
    
  3. 检查日志 验证服务是否正常运行:
    journalctl -u injectived.service -f