# Quickstart for running nwaku on a DigitalOcean Droplet This guide explains how to run a nwaku node on a DigitalOcean Droplet. We enable the following protocols - 1. Relay 2. Store 3. DNS Discovery 4. Discv5 A Droplet is a simple virtual machine that runs in DigitalOcean's datacenters. Note that Droplets do cost money, the size described in the guide costs approximately $12 a month. The guide makes heavy use of the `doctl` cli to make it as UI agnostic as possible. There are similar steps to accomplish the same through DigitalOcean's cloud console, accessible [here](https://cloud.digitalocean.com/) ## Prerequisites 1. A DigitalOcean account. Upon signing up, you have $100 worth of credits to use. ## 1. Get the `doctl` binary Follow this [guide](https://docs.digitalocean.com/reference/doctl/how-to/install/) to install, and configure the `doctl` cli, which will help with setting up the Droplet. > Note: It is not required to set up the droplet that is mentioned in the `doctl` cli guide ## 2. Set up SSH credentials Run the following command - ```bash export DROPLET_SSH_KEY_PATH=~/.ssh/id_nwaku_droplet ssh-keygen -f $DROPLET_SSH_KEY_PATH ``` Press `enter` twice, i.e do NOT set a passphrase. Run the following command - ```bash export DROPLET_SSH_PUBLIC_KEY=$(cat "$DROPLET_SSH_KEY_PATH".pub) ``` *Alternatively*, if you would like to supply your own credentials, make sure that the public key is in the `DROPLET_SSH_PUBLIC_KEY` env variable. Lastly, add the ssh key to your DigitalOcean account - ```bash doctl compute ssh-key create nwaku-key --public-key="$DROPLET_SSH_PUBLIC_KEY" ``` ## 3. Select the region closest to you Run the following command to get the list of available regions - ```bash doctl compute region list | grep true ``` You should get an output similar to this - ```bash nyc1 New York 1 true sgp1 Singapore 1 true lon1 London 1 true nyc3 New York 3 true ams3 Amsterdam 3 true fra1 Frankfurt 1 true tor1 Toronto 1 true blr1 Bangalore 1 true sfo3 San Francisco 3 true ``` Choose the region closest to you, and run the following command - ```bash export DROPLET_REGION= ``` For example, if you live in NYC - ```bash export DROPLET_REGION=nyc1 ``` Note that it is *optional* to choose the datacenter closest to you. This is merely done for operational efficiency. ## 4. Select the OS distribution Run the following command to get the list of distributions - ```bash doctl compute image list-distribution ``` You should get an output similar to this - ```bash ID Name Type Distribution Slug Public Min Disk 78547182 1.5.8 x64 snapshot RancherOS rancheros true 15 106433672 7 x64 snapshot CentOS centos-7-x64 true 9 106434098 9 Stream x64 snapshot CentOS centos-stream-9-x64 true 10 106434191 8 Stream x64 snapshot CentOS centos-stream-8-x64 true 10 ... ``` Choose the distribution you are most comfortable with, and then run the following command ```bash export DROPLET_IMAGE= ``` For example, if you chose Debian 11 x64 - ```bash export DROPLET_IMAGE=debian-11-x64 ``` ## 5. Select the size of the Droplet Run the following command to get the list of Droplet sizes for the previously selected region - ```bash doctl compute size list ``` You should get an output similar to this - ```bash Slug Description Memory VCPUs Disk Price Monthly Price Hourly s-1vcpu-512mb-10gb Basic 512 1 10 4.00 0.005950 s-1vcpu-1gb Basic 1024 1 25 6.00 0.008930 s-1vcpu-1gb-amd Basic AMD 1024 1 25 7.00 0.010420 s-1vcpu-1gb-intel Basic Intel 1024 1 25 7.00 0.010420 s-1vcpu-2gb Basic 2048 1 50 12.00 0.017860 s-1vcpu-2gb-amd Basic AMD 2048 1 50 14.00 0.020830 s-1vcpu-2gb-intel Basic Intel 2048 1 50 14.00 0.020830 s-2vcpu-2gb Legacy Basic 2048 2 60 18.00 0.026790 ... ``` > Note: To compile the nwaku binary, a minimum of 2GB of RAM is required. You may choose a smaller Droplet, however, you would have to supply the binary in an alternate manner, i.e via the official release on Github, or compiling it on another machine and copying it over. Currently, we only supply binaries for macOS and Ubuntu. Choose the Droplet size that you are most comfortable with, and then run the following command - ```bash export DROPLET_SIZE= ``` For example, `s-1vcpu-2gb` is more than capable to handle the protocols we mentioned above - ```bash export DROPLET_SIZE=s-1vcpu-2gb ``` ## 6. Create the Droplet Run the following command to create the droplet - > Note: Droplet names must be valid hostnames, i.e they must only contain alphanumeric characters and hyphens (-) ```bash export DROPLET_NAME= export DROPLET_ID=$(doctl compute droplet create --region=$DROPLET_REGION --image=$DROPLET_IMAGE --size=$DROPLET_SIZE --enable-monitoring --format=ID --wait $DROPLET_NAME | sed -n '2 p') ``` For example, to create a droplet named `nwaku` - ```bash export DROPLET_NAME=nwaku export DROPLET_ID=$(doctl compute droplet create --region=$DROPLET_REGION --image=$DROPLET_IMAGE --size=$DROPLET_SIZE --enable-monitoring --format=ID --wait $DROPLET_NAME | sed -n '2 p') ``` ## 7. Create a Domain and attach it to the droplet (OPTIONAL) Follow this [guide](https://docs.digitalocean.com/products/networking/dns/how-to/add-domains/) to create a domain, and add it to the droplet appropriately. ## 8. SSH into the Droplet You can get the following details in the email that DigitalOcean sends upon successful creation of the Droplet - 1. username 2. password 3. public ipv4 address Since the public key we previously generated was automatically added to the authorized_keys list, we can run the following command to ssh into the Droplet - ```bash export DROPLET_USERNAME= export DROPLET_IP= ssh -i $DROPLET_SSH_KEY_PATH $DROPLET_USERNAME@$DROPLET_IP ``` For example, if the username was `root`, and the ipv4 address was `0.0.0.0`, ```bash export USERNAME=root export IP=0.0.0.0 ssh -i $DROPLET_SSH_KEY_PATH $DROPLET_USERNAME@$DROPLET_IP ``` Enter the password received in the email. ## 9. Build nwaku To build `nwaku`, follow this [guide](./how-to/build.md) OR To fetch the latest release from Github, navigate to https://github.com/status-im/nwaku/releases and download the latest tarball for your distribution. This [guide](https://www.itprotoday.com/development-techniques-and-management/how-install-targz-file-ubuntu-linux) describes how to install a tarball for your distribution. OR Run the following script to copy over the wakunode2 binary (from the host machine) - ```bash scp -i $DROPLET_SSH_KEY_PATH ./build/wakunode2 $DROPLET_USERNAME@$DROPLET_IP:~/wakunode2 ``` ## 10. Set up a terminal multiplexer of choice You may decide to use either `screen` or `tmux` to be able to reattach to the process after closing the ssh connection. Installation instructions for - 1. [screen](https://linuxhint.com/screen-linux/) 2. [tmux](https://linuxhint.com/install-tmux-ubuntu/) ## 10. Run nwaku First, start the `screen` or `tmux` session by following the instructions of the terminal multiplexer chosen previously - 1. [screen](https://linuxize.com/post/how-to-use-linux-screen/#starting-linux-screen) 2. [tmux](https://linuxize.com/post/getting-started-with-tmux/#starting-your-first-tmux-session) Run the following command to run `nwaku` - *Note the path to the wakunode2 binary* a. Add the parent directory of the wakunode2 binary to your environment: If you built it locally and copied it via scp - ```bash export WAKUNODE_DIR="$pwd" ``` OR If you compiled it on the Droplet - ```bash export WAKUNODE_DIR="$pwd"/build ``` b. Choose the fleet you wish to connect your node to: - waku prod: enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im - waku test: enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@test.waku.nodes.status.im ```bash export WAKU_FLEET= ``` c. Run `nwaku`: If you set up a domain previously - ```bash export DOMAIN_NAME= $WAKUNODE_DIR/wakunode2 \ --store:true \ --persist-messages \ --dns-discovery \ --dns-discovery-url:"$WAKU_FLEET" \ --dns4-domain-name:"$DOMAIN_NAME" \ --discv5-discovery:true ``` OR If you did not set up a domain - ```bash $WAKUNODE_DIR/wakunode2 \ --store:true \ --persist-messages \ --dns-discovery \ --dns-discovery-url:"$WAKU_FLEET" \ --discv5-discovery:true ``` You now have nwaku running! You can verify this by observing the logs. The logs should show that the node completed 7 steps of setup, and is actively discovering other nodes. You may now detach from stdout, by following instructions according to the terminal multiplexer chosen previously - 1. [screen](https://linuxize.com/post/how-to-use-linux-screen/#detach-from-linux-screen-session) 2. [tmux](https://linuxize.com/post/getting-started-with-tmux/#starting-your-first-tmux-session) To re-attach and observe the logs at a later date, follow these instructions - 1. [screen](https://linuxize.com/post/how-to-use-linux-screen/#reattach-to-a-linux-screen) 2. [tmux](https://linuxize.com/post/getting-started-with-tmux/#re-attaching-to-tmux-session) For alternative configurations, refer to this [guide](./how-to/configure.md)