docs: add operator guide docs (#963)

This commit is contained in:
Hanno Cornelius 2022-05-20 14:48:34 +02:00 committed by GitHub
parent 984f3179a7
commit 35045d9d97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 601 additions and 0 deletions

35
docs/operators/README.md Normal file
View File

@ -0,0 +1,35 @@
# The nwaku guide for operators
*If you're eager to get started, check out our [quickstart guide](./quickstart.md).*
Nwaku is a client implementation in Nim of the [Waku v2 family of protocols](https://rfc.vac.dev/spec/10/) for peer-to-peer communication.
The protocols are designed to be secure, privacy-preserving, censorship-resistant and able to run in resource restricted environments.
Moreover, we've taken a modular approach so that node operators can choose which protocols they want to support
based on their own motivations and availability of resources.
We call this concept ["adaptive nodes"](https://rfc.vac.dev/spec/30/),
implying that a Waku v2 network can consist of heterogeneous nodes contributing at different levels to the network.
Nwaku (formerly `nim-waku`) aims to be a lightweight and robust Waku v2 client.
It serves as the reference implementation for researchers,
who extend the client in parallel to spec development.
As such, it is first in line to support innovative and new Waku v2 protocols,
but configurable enough to serve the adaptive needs of a various operators.
We are also developing a set of operator-focused tools to monitor and maintain a running nwaku node.
This guide provides step-by-step tutorials covering how to build and configure your own nwaku node,
connect to an existing Waku v2 network
and use existing tools for monitoring and maintaining a running node.
## Helpful resources
<!-- TODO -->
## Getting in touch or reporting an issue
For an inquiry, or if you would like to propose new features, feel free to [open a general issue](https://github.com/status-im/nwaku/issues/new/).
For bug reports, please [tag your issue with the `bug` label](https://github.com/status-im/nwaku/issues/new/).
If you believe the reported issue requires critical attention, please [use the `critical` label](https://github.com/status-im/nwaku/issues/new?labels=critical,bug) to assist with triaging.
To get help, or participate in the conversation, join the [Vac Discord](https://discord.gg/KNj3ctuZvZ) server.

View File

@ -0,0 +1,59 @@
# Build nwaku
Nwaku can be built on Linux and macOS.
Windows support is experimental.
## Installing dependencies
Cloning and building nwaku requires the usual developer tools,
such as a C compiler, Make, Bash and Git.
### Linux
On common Linux distributions the dependencies can be installed with
```sh
# Debian and Ubuntu
sudo apt-get install build-essential git
# Fedora
dnf install @development-tools
# Archlinux, using an AUR manager
yourAURmanager -S base-devel
```
### macOS
Assuming you use [Homebrew](https://brew.sh/) to manage packages
```sh
brew install cmake
```
## Building nwaku
### 1. Clone the nwaku repository
```sh
git clone https://github.com/status-im/nwaku
cd nwaku
```
### 2. Make the `wakunode2` target
```sh
# The first `make` invocation will update all Git submodules.
# You'll run `make update` after each `git pull`, in the future, to keep those submodules up to date.
make wakunode2
```
This will create a `wakunode2` binary in the `./build/` directory.
> **Note:** Building `wakunode2` requires 2GB of RAM.
The build will fail on systems not fulfilling this requirement.
> Setting up a `wakunode2` on the smallest [digital ocean](https://docs.digitalocean.com/products/droplets/how-to/) droplet, you can either
> * compile on a stronger droplet featuring the same CPU architecture and downgrade after compiling, or
> * activate swap on the smallest droplet, or
> * use Docker.

View File

@ -0,0 +1,30 @@
# Use DNS discovery to connect to existing nodes
> **Note:** This page describes using DNS to discover other peers
and is unrelated to the [domain name configuration](./configure-domain.md) for your nwaku node.
A node can discover other nodes to connect to using [DNS-based discovery](../../tutorial/dns-disc.md).
The following command line options are available:
```
--dns-discovery Enable DNS Discovery
--dns-discovery-url URL for DNS node list in format 'enrtree://<key>@<fqdn>'
--dns-discovery-name-server DNS name server IPs to query. Argument may be repeated.
```
- `--dns-discovery` is used to enable DNS discovery on the node.
Waku DNS discovery is disabled by default.
- `--dns-discovery-url` is mandatory if DNS discovery is enabled.
It contains the URL for the node list.
The URL must be in the format `enrtree://<key>@<fqdn>` where `<fqdn>` is the fully qualified domain name and `<key>` is the base32 encoding of the compressed 32-byte public key that signed the list at that location.
- `--dns-discovery-name-server` is optional and contains the IP(s) of the DNS name servers to query.
If left unspecified, the Cloudflare servers `1.1.1.1` and `1.0.0.1` will be used by default.
A node will attempt connection to all discovered nodes.
This can be used, for example, to connect to one of the existing fleets.
Current URLs for the published fleet lists:
- production fleet: `enrtree://ANTL4SLG2COUILKAPE7EF2BYNL2SHSHVCHLRD5J7ZJLN5R3PRJD2Y@prod.waku.nodes.status.im`
- test fleet: `enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.waku.nodes.status.im`
See the [separate tutorial](../../tutorial/dns-disc.md) for a complete guide to DNS discovery.

View File

@ -0,0 +1,16 @@
# Configure a domain name
> **Note:** This page describes configuring a domain name that resolves to your node's IP
and is unrelated to [DNS discovery](./configure-dns-disc.md),
by which a node may discover the listening addresses of other peers using DNS.
It is possible to configure an IPv4 DNS domain name that resolves to the node's public IPv4 address.
```shell
wakunode2 --dns4-domain-name=mynode.example.com
```
This allows for the node's publically announced `multiaddrs` to use the `/dns4` scheme.
In addition, nodes with domain name and [secure websocket configured](./configure-websocket.md),
will generate a discoverable ENR containing the `/wss` multiaddr with `/dns4` domain name.
This is necessary to verify domain certificates when connecting to this node over secure websocket.

View File

@ -0,0 +1,54 @@
# Generate and configure a node key
By default a node will generate a new, random key pair each time it boots,
resulting in a different public libp2p `multiaddrs` after each restart.
To maintain consistent addressing across restarts,
it is possible to configure the node with a previously generated private key using the `--nodekey` option.
```shell
wakunode2 --nodekey=<64_char_hex>
```
This option takes a [Secp256k1](https://en.bitcoin.it/wiki/Secp256k1) private key in 64 char hexstring format.
To generate such a key on Linux systems,
use the openssl `rand` command to generate a pseudo-random 32 byte hexstring.
```sh
openssl rand -hex 32
```
Example output:
```sh
$ openssl rand -hex 32
6a29e767c96a2a380bb66b9a6ffcd6eb54049e14d796a1d866307b8beb7aee58
```
where the key `6a29e767c96a2a380bb66b9a6ffcd6eb54049e14d796a1d866307b8beb7aee58` can be used as `nodekey`.
To create a reusable keyfile on Linux using `openssl`,
use the `ecparam` command coupled with some standard utilities
whenever you want to extract the 32 byte private key in hex format.
```sh
# Generate keyfile
openssl ecparam -genkey -name secp256k1 -out my_private_key.pem
# Extract 32 byte private key
openssl ec -in my_private_key.pem -outform DER | tail -c +8 | head -c 32| xxd -p -c 32
```
Example output:
```sh
read EC key
writing EC key
0c687bb8a7984c770b566eae08520c67f53d302f24b8d4e5e47cc479a1e1ce23
```
where the key `0c687bb8a7984c770b566eae08520c67f53d302f24b8d4e5e47cc479a1e1ce23` can be used as `nodekey`.
```sh
wakunode2 --nodekey=0c687bb8a7984c770b566eae08520c67f53d302f24b8d4e5e47cc479a1e1ce23
```

View File

@ -0,0 +1,56 @@
# Configure store protocol
Store protocol is enabled by default on a nwaku node.
This is controlled by the `--store` CLI option.
```sh
# Disable store protocol on startup
./build/wakunode2 --store:false
```
Note that this only mounts the `store` protocol,
meaning your node will indicate to other peers that it supports `store`.
It does not yet allow your node to either retrieve historical messages as a client
or store and serve historical messages itself.
## Configuring a store client
Ensure that `store` is enabled (this is `true` by default) and provide at least one store service node address with the `--storenode` CLI option.
See the following example, using the peer at `/dns4/node-01.ac-cn-hongkong-c.wakuv2.test.statusim.net/tcp/30303/p2p/16Uiu2HAkvWiyFsgRhuJEb9JfjYxEkoHLgnUQmr1N5mKWnYjxYRVm` as store service node.
```sh
./build/wakunode2 \
--store:true \
--storenode:/dns4/node-01.ac-cn-hongkong-c.wakuv2.test.statusim.net/tcp/30303/p2p/16Uiu2HAkvWiyFsgRhuJEb9JfjYxEkoHLgnUQmr1N5mKWnYjxYRVm
```
Your node can now send queries to retrieve historical messages
from the configured store service node.
One way to trigger such queries is asking your node for historical messages using the [Waku v2 JSON RPC API](https://rfc.vac.dev/spec/16/).
## Configuring a store service node
To store historical messages on your node which can be served to store clients the `--persist-messages` CLI option must be enabled.
By default a node would store up to the latest `50 000` messages.
This is configurable using the `--store-capacity` option.
A node that has a `--db-path` set will backup historical messages to a local database at the DB path
and persist these messages even after a restart.
```sh
./build/wakunode2 \
--store:true \
--persist-messages:true \
--db-path:/mnt/nwaku/data/db1/ \
--store-capacity:150000
```
### How much resources should I allocate?
Currently store service nodes use an in-memory key-value store as primary storage with the disk-based database only used for backups.
Most Waku messages average a size of 1KB - 2KB,
implying a minimum memory requirement of at least ~250MB
for a medium capacity store of 100k messages.
Note, however, that the allowable maximum size for Waku messages is up to 1MB.
We are working on a disk-only and hybrid store to lower the memory requirement.
It will soon also be possible to configure store capacity on maximum store size or number of days' history to keep.

View File

@ -0,0 +1,35 @@
# Configure websocket transport
Websocket is currently the only Waku transport supported by browser nodes using [js-waku](https://github.com/status-im/js-waku).
Setting up websocket enables your node to directly serve browser peers.
A valid certificate is necessary to serve browser nodes,
you can use [`letsencrypt`](https://letsencrypt.org/):
```shell
sudo letsencrypt -d <your.domain.name>
```
You will need the `privkey.pem` and `fullchain.pem` files.
To enable secure websocket, pass the generated files to `wakunode2`:
Note, the default port for websocket is 8000.
```shell
wakunode2 --websocket-secure-support=true --websocket-secure-key-path="<letsencrypt cert dir>/privkey.pem" --websocket-secure-cert-path="<letsencrypt cert dir>/fullchain.pem"
```
## Self-signed certificates
Self-signed certificates are not recommended for production setups because:
- Browsers do not accept self-signed certificates
- Browsers do not display an error when rejecting a certificate for websocket.
However, they can be used for local testing purposes:
```shell
mkdir -p ./ssl_dir/
openssl req -x509 -newkey rsa:4096 -keyout ./ssl_dir/key.pem -out ./ssl_dir/cert.pem -sha256 -nodes
wakunode2 --websocket-secure-support=true --websocket-secure-key-path="./ssl_dir/key.pem" --websocket-secure-cert-path="./ssl_dir/cert.pem"
```

View File

@ -0,0 +1,11 @@
# Configure a nwaku node
Nwaku can be configured to serve the adaptive needs of different operators.
This page serves as an index of tutorials explaining how to configure your nwaku node for different use cases.
1. [Connect to other peers](./connect.md)
1. [Configure a domain name](./configure-domain.md)
1. [Use DNS discovery to connect to existing nodes](./configure-dns-disc.md)
1. [Configure store protocol](./configure-store.md)
1. [Generate and configure a node key](./configure-key.md)
1. [Configure websocket transport](./configure-websocket.md)

View File

@ -0,0 +1,60 @@
# Connect to other peers
*Note that this tutorial describes how to **configure** a node to connect to other peers before runnning the node.
For connecting a running node to existing peers,
see the [JSON-RPC API](https://rfc.vac.dev/spec/16/).*
There are currently three options.
Note that each of these options can be used in combination with any of the other two.
In other words, it is possible to configure a node to connect
to a static list of peers and
to discover such peer lists using DNS discovery and
discover and connect to random peers using discovery v5 with a bootstrap node.
## Option 1: Configure peers statically
Static peers can be provided to a nwaku node on startup using the `--staticnode` CLI parameter.
The `--staticnode` option can be repeated for each peer you want to connect to on startup.
```sh
./build/wakunode2 \
--staticnode:<libp2p-multiaddr-peer1> \
--staticnode:<libp2p-multiaddr-peer2>
```
As an example, consider a nwaku node that connects to two known peers
on the same local host (with IP `0.0.0.0`)
with TCP ports `60002` and `60003`,
and peer IDs `16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H` and `16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ` respectively.
```sh
./build/wakunode2 \
--staticnode:/ip4/0.0.0.0/tcp/60002/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H \
--staticnode:/ip4/0.0.0.0/tcp/60003/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ
```
## Option 2: Discover peers using DNS discovery
A node can discover other nodes to connect to using DNS-based discovery.
For a quickstart guide on how to configure DNS discovery,
see [this tutorial](./configure-dns-disc.md).
There is also a [more comprehensive tutorial](../../tutorial/dns-disc.md) for advanced users.
## Option 3: Discover peers using Waku Discovery v5
<!-- TODO: add link to a separate discv5 config tutorial here -->
Enable Discovery v5 using the `--discv5-discovery` option.
It is possible to configure bootstrap entries for the Discovery v5 routing table
using the `--discv5-bootstrap-node` option repeatedly.
```sh
./build/wakunode2 \
--discv5-discovery:true \
--discv5-bootstrap-node:<discv5-enr-bootstrap-entry1> \
--discv5-bootstrap-node:<discv5-enr-bootstrap-entry2>
```
Note that if Discovery v5 is enabled and used in conjunction with DNS-based discovery,
the nwaku node will attempt to bootstrap the Discovery v5 routing table with ENRs extracted from the peers discovered via DNS.

View File

@ -0,0 +1,217 @@
# Running nwaku
Nwaku binaries can be [built](./build.md) and run on Linux and macOS.
Windows support is experimental.
```sh
# Run with default configuration
./build/wakunode2
# See available command line options
./build/wakunode2 --help
```
## Default configuration
By default a nwaku node will:
- generate a new private key and libp2p identities after every restart.
See [this tutorial](./configure-key.md) if you want to generate and configure a persistent private key.
- listen for incoming libp2p connections on the default TCP port (`60000`)
- enable `relay` protocol
- subscribe to the default pubsub topic, namely `/waku/2/default-waku/proto`
- enable `store` protocol, but only as a client.
This implies that the nwaku node will not persist any historical messages itself,
but can query `store` service peers who do so.
To configure `store` as a service node,
see [this tutorial](./configure-store.md).
> **Note:** The `filter` and `lightpush` protocols are _not_ enabled by default.
Consult the [configuration guide](./configure.md) on how to configure your nwaku node to run these protocols.
Some typical non-default configurations are explained below.
For more advanced configuration, see the [configuration guide](./configure.md).
Different ways to connect to other nodes are expanded upon in our [connection guide](./connect.md).
## Finding your listening address(es)
Find the log entry beginning with `Listening on`.
It should be printed at INFO level when you start your node
and contains a list of all publically announced listening addresses for the nwaku node.
For example
```
INF 2022-05-11 16:42:30.591+02:00 Listening on topics="wakunode" tid=6661 file=wakunode2.nim:941 full=[/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H][/ip4/0.0.0.0/tcp/8000/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H]
```
indicates that your node is listening on the TCP transport address
```
/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H
```
and websocket address
```
/ip4/0.0.0.0/tcp/8000/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H
```
You can also query a running node for its listening addresses
using a [`get_waku_v2_debug_v1_info` JSON-RPC API](https://rfc.vac.dev/spec/16/#get_waku_v2_debug_v1_info) call.
For example
```sh
curl -d '{"jsonrpc":"2.0","id":"id","method":"get_waku_v2_debug_v1_info", "params":[]}' --header "Content-Type: application/json" http://localhost:8545
```
returns a response similar to
```json
{
"jsonrpc": "2.0",
"id": "id",
"result": {
"listenAddresses": [
"/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmLU5Nwng9dWFZwM2DgJ5QGcUuDnefJyHJiXUCVaprhgL4"
],
"enrUri": "enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw"
}
}
```
## Finding your discoverable ENR address(es)
A nwaku node can encode its addressing information in an [Ethereum Node Record (ENR)](https://eips.ethereum.org/EIPS/eip-778) according to [`31/WAKU2-ENR`](https://rfc.vac.dev/spec/31/).
These ENR are most often used for discovery purposes.
### ENR for DNS discovery
Find the log entry beginning with `DNS: discoverable ENR`.
It should be printed at INFO level when you start your node with [DNS discovery enabled](./configure-dns-disc.md)
and contains an ENR that can be added to node lists discoverable via DNS.
For example
```
INF 2022-05-20 11:52:48.772+02:00 DNS: discoverable ENR topics="wakunode" tid=5182 file=wakunode2.nim:941 enr=enr:-Iu4QBZs5huNuEAjI9WA0HOAjzpmp39vKJAtYRG3HXH86-i3HGcxMgupIkyDBmBq9qJ2wFfgMiW8AUzUxTFMAzfJM5MBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQN0EcrUbHrL_O_kNXDlBvcO1I4yZUdNk7VZI5GsXaWgvYN0Y3CC6mCFd2FrdTID
```
indicates that your node addresses are encoded in the ENR
```
enr=enr:-Iu4QBZs5huNuEAjI9WA0HOAjzpmp39vKJAtYRG3HXH86-i3HGcxMgupIkyDBmBq9qJ2wFfgMiW8AUzUxTFMAzfJM5MBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQN0EcrUbHrL_O_kNXDlBvcO1I4yZUdNk7VZI5GsXaWgvYN0Y3CC6mCFd2FrdTID
```
### ENR for Discovery v5
Find the log entry beginning with `Discv5: discoverable ENR`.
It should be printed at INFO level when you start your node with [Waku Discovery v5 enabled](https://rfc.vac.dev/spec/33/)
and contains the ENR that will be discoverable by other peers.
For example
```
INF 2022-05-20 11:52:48.775+02:00 Discv5: discoverable ENR topics="wakunode" tid=5182 file=wakunode2.nim:905 enr=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw
```
indicates that your node addresses are encoded in the ENR
```
enr=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw
```
## Typical configuration (relay node)
The typical configuration for a nwaku node is to run the `relay` protocol,
subscribed to the default pubsub topic `/waku/2/default-waku/proto`,
and connecting to one or more existing peers.
We assume below that running nodes also participate in Discovery v5
to continually discover and connect to random peers for a more robust mesh.
### Connecting to known peer(s)
A typical run configuration for a nwaku node is to connect to existing peers with known listening addresses using the `--staticnode` option.
The `--staticnode` option can be repeated for each peer you want to connect to on startup.
This is also useful if you want to run several nwaku instances locally
and therefore know the listening addresses of all peers.
As an example, consider a nwaku node that connects to two known peers
on the same local host (with IP `0.0.0.0`)
with TCP ports `60002` and `60003`,
and peer IDs `16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H` and `16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ` respectively.
The Discovery v5 routing table can similarly be bootstrapped using a static ENR.
We include an example below.
```sh
./build/wakunode2 \
--ports-shift:1 \
--staticnode:/ip4/0.0.0.0/tcp/60002/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H \
--staticnode:/ip4/0.0.0.0/tcp/60003/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ \
--discv5-discovery:true \
--discv5-bootstrap-node:enr:-JK4QM2ylZVUhVPqXrqhWWi38V46bF2XZXPSHh_D7f2PmUHbIw-4DidCBnBnm-IbxtjXOFbdMMgpHUv4dYVH6TgnkucBgmlkgnY0gmowhCJ6_HaJc2VjcDI1NmsxoQM06FsT6EJ57mzR_wiLu2Bz1dER2nUFSCpaFzCccQtnhYN0Y3CCdl-DdWRwgiMohXdha3UyDw
```
> **Tip:** `--ports-shift` shifts all configured ports forward by the configured amount.
This is another useful option when running several nwaku instances on a single machine
and would like to avoid port clashes without manually configuring each port.
### Connecting to the `wakuv2.prod` network
*See [this explainer](https://github.com/status-im/nwaku/blob/6ebe26ad0587d56a87a879d89b7328f67f048911/docs/contributors/waku-fleets.md) on the different networks and Waku v2 fleets.*
You can use DNS discovery to bootstrap connection to the existing production network.
Discovery v5 will attempt to extract the ENRs of the discovered nodes as bootstrap entries to the routing table.
```sh
./build/wakunode2 \
--ports-shift:1 \
--dns-discovery:true \
--dns-discovery-url:enrtree://ANTL4SLG2COUILKAPE7EF2BYNL2SHSHVCHLRD5J7ZJLN5R3PRJD2Y@prod.waku.nodes.status.im \
--discv5-discovery:true
```
### Connecting to the `wakuv2.test` network
*See [this explainer](https://github.com/status-im/nwaku/blob/6ebe26ad0587d56a87a879d89b7328f67f048911/docs/contributors/waku-fleets.md) on the different networks and Waku v2 fleets.*
You can use DNS discovery to bootstrap connection to the existing test network.
Discovery v5 will attempt to extract the ENRs of the discovered nodes as bootstrap entries to the routing table.
```sh
./build/wakunode2 \
--ports-shift:1 \
--dns-discovery:true \
--dns-discovery-url:enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.waku.nodes.status.im \
--discv5-discovery:true
```
## Typical configuration (relay and store service node)
Often nwaku nodes choose to also store historical messages
from where it can be queried by other peers who may have been temporarily offline.
For example, a typical configuration for such a store service node,
[connecting to the `wakuv2.test`](#connecting-to-the-wakuv2test-fleet) fleet on startup,
appears below.
```sh
./build/wakunode2 \
--ports-shift:1 \
--store:true \
--persist-messages:true \
--db-path:/mnt/nwaku/data/db1/ \
--store-capacity:150000 \
--dns-discovery:true \
--dns-discovery-url:enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.waku.nodes.status.im \
--discv5-discovery:true
```
See our [store configuration tutorial](./configure-store.md) for more.
## Interact with a running nwaku node
A running nwaku node can be interacted with using the [Waku v2 JSON RPC API](https://rfc.vac.dev/spec/16/).
> **Note:** Private and Admin API functionality are disabled by default.
To configure a nwaku node with these enabled,
use the `--rpc-admin:true` and `--rpc-private:true` CLI options.

View File

@ -0,0 +1,28 @@
# Quickstart: running a nwaku node
This guide explains how to build and run a nwaku node
for the most common use cases.
For a more advanced configuration see our [configuration guides](./how-to/configure.md)
## 1. Build
[Build the nwaku node](./how-to/build.md)
or download a precompiled binary from our [releases page](https://github.com/status-im/nwaku/releases).
Docker images are published to [statusteam/nim-waku](https://hub.docker.com/r/statusteam/nim-waku/tags) on DockerHub.
<!-- TODO: more advanced explanation on finding and using docker images -->
## 2. Run
[Run the nwaku node](./how-to/run.md) using a default or common configuration
or [configure](./how-to/configure.md) the node for more advanced use cases.
[Connect](./how-to/connect.md) the nwaku node to other peers to start communicating.
## 3. Interact
A running nwaku node can be interacted with using the [Waku v2 JSON RPC API](https://rfc.vac.dev/spec/16/).
> **Note:** Private and Admin API functionality are disabled by default.
To configure a nwaku node with these enabled,
use the `--rpc-admin:true` and `--rpc-private:true` CLI options.