Files
nym/documentation/docs/src/explorers/mixnet-explorer.md
T

201 lines
5.7 KiB
Markdown

# Mixnet Explorer
The Nym Network Explorer lets you explore the Nym network. We have open-sourced the explorer so that anyone can run an instance of it, further decentralising the network!
### Prerequisites
- `git`
```
sudo apt update
sudo apt install git
```
Verify `git` is installed with:
```
git version
# Should return: git version X.Y.Z
```
- (Debian/Ubuntu) `pkg-config`, `build-essential`, `libssl-dev`, `curl`, `jq`
```
sudo apt update
sudo apt install pkg-config build-essential libssl-dev curl jq
```
- `NodeJS` (use `nvm install` to automatically install the correct version) and `npm`
- `Rust & cargo >= {{minimum_rust_version}}`
We recommend using the [Rust shell script installer](https://www.rust-lang.org/tools/install). Installing cargo from your package manager (e.g. `apt`) is not recommended as the packaged versions are usually too old.
If you really don't want to use the shell script installer, the [Rust installation docs](https://forge.rust-lang.org/infra/other-installation-methods.html) contain instructions for many platforms.
### Local Development
Complete the steps in the [building nym](../binaries/building-nym.md) section, before `cd`-ing into `nym/explorer`.
Start a development server with hot reloading running on `http://localhost:3000` with the following commands from inside the `explorer` directory:
```
nvm install # install relevant nodejs and npm versions
npm install
npm run start
```
`eslint` and `prettier` are already configured.
You can lint the code by running:
```
npm run lint
```
> This command will only **show** linting errors and will not fix them!
To fix all linting errors automatically run:
```
npm run lint:fix
```
Please see the development docs in `explorer/docs` for more information on the structure and design of this app.
### Deployment
Complete the steps in the [building nym](../binaries/building-nym.md) section, before `cd`-ing into `nym/explorer`.
> The Network Explorer should be run on a machine with at least 4GB of RAM - the build process might fail if run on a less powerful machine.
#### Building the Explorer UI
Build the UI with these commands from within the `explorer` directory:
```
nvm install # install relevant nodejs and npm versions
npm install
npm run build
```
The output will be in the `dist` directory.
This can then be either served directly from the `nym` directory, or from its own directory if you wish. See the template nginx config below for more on how to host this.
#### Building the Explorer API
The Explorer API was built in the previous step with `cargo build`.
### Automating the explorer with systemd
You will most likely want to automate the Explorer-API restarting if your server reboots. Below is a systemd unit file to place at `/etc/systemd/system/nym-explorer-api.service`:
```ini
[Unit]
Description=Nym Explorer API (1.1.0)
StartLimitIntervalSec=350
StartLimitBurst=10
[Service]
User=nym
Type=simple
Environment="API_STATE_FILE=/home/nym/network-explorer/explorer-api-state.json"
Environment="GEO_IP_SERVICE_API_KEY=c69155d0-25f6-11ec-80bc-75e5dbd322c3"
ExecStart=explorer/api/location
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
```
Proceed to start it with:
```
systemctl daemon-reload # to pickup the new unit file
systemctl enable nymd # to enable the service
systemctl start nymd # to actually start the service
journalctl -f # to monitor system logs showing the service start
```
### Installing and configuring nginx for HTTPS
#### Setup
[Nginx](https://www.nginx.com/resources/glossary/nginx/#:~:text=NGINX%20is%20open%20source%20software,%2C%20media%20streaming%2C%20and%20more.&text=In%20addition%20to%20its%20HTTP,%2C%20TCP%2C%20and%20UDP%20servers.) is an open source software used for operating high-performance web servers. It allows us to set up reverse proxying on our validator server to improve performance and security.
Install `nginx` and allow the 'Nginx Full' rule in your firewall:
```
sudo ufw allow 'Nginx Full'
```
Check nginx is running via systemctl:
```
systemctl status nginx
```
Which should return:
```
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-04-20 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process
```
#### Configuration
Replace the default nginx configuration at `/etc/nginx/sites-available/` with:
```
server {
listen 80;
listen [::]:80;
server_name domain;
root html_location;
location / {
try_files /$uri /$uri/index.html /index.html =404;
}
location /api {
proxy_pass http://127.0.0.1:8000;
rewrite /api/(.*) /$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
Followed by:
```
sudo apt install certbot nginx python3
certbot --nginx -d nym-validator.yourdomain.com -m you@yourdomain.com --agree-tos --noninteractive --redirect
```
```admonish caution
If using a VPS running Ubuntu 20: replace `certbot nginx python3` with `python3-certbot-nginx`
```
### Configure your firewall
The following commands will allow you to set up a firewall using `ufw`.
```
# check if you have ufw installed
ufw version
# if it is not installed, install with
sudo apt install ufw -y
# enable ufw
sudo ufw enable
# check the status of the firewall
sudo ufw status
```
Now open the ports:
```
sudo ufw allow 22,80,443/tcp
# check the status of the firewall
sudo ufw status
```