201 lines
5.7 KiB
Markdown
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
|
|
``` |