Setting up Cosmovisor
Utilize cosmovisor for the ease in upgrades
Setting up Cosmovisor is relatively straightforward. However, it does expect certain environment variables and folder structure to be set.
Cosmovisor allows you to download binaries ahead of time for chain upgrades, meaning that you can do zero (or close to zero) downtime chain upgrades. It's also useful if your local timezone means that a chain upgrade will fall at a bad time.
Rather than having to do stressful ops tasks late at night, it's always better if you can automate them away, and that's what Cosmovisor tries to do.
First, go and get Cosmovisor (recommended approach):
go get github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor
# or, with go >= 1.15 you can do. This is the most common:
# If required you can target a specific version:
Your installation can be confirmed with:
This will return something like:
You can also build from source; cosmovisor is in the main
cosmos-sdkrepo on Github, so you can use Git tags to target a specific version. This example uses a tag,
v0.42.7that refers to the Cosmos SDK, as Cosmovisor-specific tags did not exist before August 2021. The first of these was
cosmovisor/v0.1.0, and the second is the current release,
git clone https://github.com/cosmos/cosmos-sdk
git checkout v0.42.7
cp cosmovisor/cosmovisor $GOPATH/bin/cosmovisor
.profilefile, usually located at
Then source your profile to have access to these variables:
You can confirm success like so:
It should return
Cosmovisor expects a certain folder structure as shown below. You can install the linux utility
treeto produce a similar output to check on your own server.
├── current -> genesis or upgrades/<name>
│ └── bin
│ └── $DAEMON_NAME
Don't worry about
current- that is simply a symlink used by Cosmovisor. The other folders will need setting up, but this is easy:
mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
mkdir -p $DAEMON_HOME/cosmovisor/upgrades
Cosmovisor needs to know which binary to use at genesis. We put this in
First, find the location of the binary you want to use:
Then use the path returned to copy it to the directory Cosmovisor expects. Let's assume the previous command returned
cp /home/<your-user>/go/bin/starsd $DAEMON_HOME/cosmovisor/genesis/bin
Once you're done, check the folder structure looks correct using a tool like
Commands sent to Cosmovisor are sent to the underlying binary. For example,
cosmovisor versionis the same as typing
Nevertheless, just as we would manage
starsdusing a process manager, we would like to make sure Cosmovisor is automatically restarted if something happens, for example an error or reboot.
First, create the service file:
sudo nano /etc/systemd/system/cosmovisor.service
Change the contents of the below to match your setup -
cosmovisoris likely at
~/go/bin/cosmovisorregardless of which installation path you took above, but it's worth checking.
Finally, enable the service and start it.
sudo -S systemctl daemon-reload
sudo -S systemctl enable cosmovisor
sudo systemctl start cosmovisor
Check it is running using:
sudo systemctl status cosmovisor
If you need to monitor the service after launch, you can view the logs using:
journalctl -u cosmovisor -f