# Setup and maintenance voting node guide (via multisig)
This tutorial explains how to setup voting node using Symbol Bootstrap and multisig account. It's not offline guide version and requires to paste at least one cosigner private key on node.
## Setup multisig account
Setup multisig - for example 2 of 3. Remember to backup all keys (multisig account and cosigners).
## Verify your server
Default images require CPU that support AVX and AVX2 flags. To verify flags supported by CPU run
```
cat /proc/cpuinfo
```
## Install required software
1. Install Ubuntu 22.04
2. Create non-root user (https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-ubuntu-20-04)
```
adduser symbolnode
groups symbolnode
usermod -aG sudo symbolnode
```
3. Switch to created user
```
su - symbolnode
```
4. Install docker (https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04)
```
## Docker installation
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
## Add symbolnode user to docker group
sudo usermod -aG docker ${USER}
exit
su - symbolnode
groups
```
5. Install docker-compose (https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04)
```
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
```
6. Install nodejs and npm (https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04)
```
## Install nodejs
sudo apt update
sudo apt install nodejs
node -v
## Install npm
sudo apt install npm
## If installed npm version is >= 14 then it's OK. If not you can install specific version by:
## Install npm v14
sudo npm install -g n
sudo n v14
exit
su - symbolnode
```
7. Install Symbol bootstrap
```
sudo npm install -g symbol-bootstrap
```
## Setup and start node
1. Create node directory
```
mkdir node
cd node
```
2. Setup node configuration via wizard
```
symbol-bootstrap wizard
> Mainnet node
> Dual node
> Sensitive information. Choose YES (Y)
> Enter password to encrypt keys in preset
> Main account -> Enter a private key for your multisig account, check and confirm main account address
> Transport account -> If you have already put it. If not generate new account (I assume you don't have at first time).
> VRF account -> If you have already put it. If not generate new account (I assume you don't have at first time).
> Remote account -> If you have already put it. If not generate new account (I assume you don't have at first time).
> HTTP Setup ->
- If you own domain select Automatic (lets encrypt)
- If you don't own domain select None
> Enter domain if you have it, if not enter IP address
> Enter friendly name
> Encryption -> ENCRYPT ALL (main key will be encrypted on server. I assume this is not a problem since it's multisig.)
> Voting node -> YES
```
Backup your remote, transport and VRF keys. You can also decrypt preset file (to check keys) using command:
```
symbol-bootstrap decrypt --source custom-preset.yml --destination custom-preset-decrypted.yml
```
3. Start node
```
symbol-bootstrap start -c custom-preset.yml -d
```
(and enter password)
4. Link keys
```
symbol-bootstrap link --useKnownRestGateways
```
(you will be asked for cosigner key - put just one cosigner and announce transaction)
## Node maintenance
- remember to run all commands from `node` directory
- remember always switch to non-root user after login
```
su - symbolnode
```
1. restart node
```
symbol-bootstrap stop
symbol-bootstrap start -c custom-preset.yml -d
```
2. renew node certificates (once per year) - https://github.com/fboucquez/symbol-bootstrap/blob/main/docs/renewCertificates.md
```
symbol-bootstrap stop
symbol-bootstrap renewCertificates
symbol-bootstrap start -c custom-preset.yml --upgrade -d
```
3. renew voting keys (when voting keys are near to expire) - https://github.com/fboucquez/symbol-bootstrap/blob/main/docs/updateVotingKeys.md
```
symbol-bootstrap stop
symbol-bootstrap updateVotingKeys
symbol-bootstrap start -c custom-preset.yml --upgrade -d
symbol-bootstrap link --useKnownRestGateways
```
4. upgrading bootstrap and node
```
## Upgrade Bootstrap version
sudo npm install -g symbol-bootstrap
symbol-bootstrap stop
## Backup target dir (optional)
cp -a target/ /some/backup/path/
## Start with upgrade flag
symbol-bootstrap start -c custom-preset.yml --upgrade -d
```
4. In case of data corruption sometimes my be needed to resync from scratch
```
symbol-bootstrap stop
symbol-bootstrap resetData
symbol-bootstrap start -c custom-preset.yml -d
```