forked from cerc-io/stack-orchestrator
163 lines
4.9 KiB
Markdown
163 lines
4.9 KiB
Markdown
|
# MobyMask Watcher P2P Network - Web App
|
||
|
|
||
|
Instructions to setup and deploy the MobyMask app locally, pointed to a watcher on the p2p network
|
||
|
|
||
|
## Prerequisites
|
||
|
|
||
|
* Laconic Stack Orchestrator ([installation](/README.md#install))
|
||
|
* Watcher GQL endpoint
|
||
|
|
||
|
## Setup
|
||
|
|
||
|
Build the container images:
|
||
|
|
||
|
```bash
|
||
|
laconic-so --stack mobymask-v2 build-containers --include cerc/react-peer,cerc/mobymask-ui
|
||
|
```
|
||
|
|
||
|
Check that the required images are created in the local image registry:
|
||
|
|
||
|
```bash
|
||
|
docker image ls
|
||
|
|
||
|
# Expected output:
|
||
|
|
||
|
# REPOSITORY TAG IMAGE ID CREATED SIZE
|
||
|
# cerc/react-peer local d66b144dbb53 4 days ago 868MB
|
||
|
# cerc/mobymask-ui local e456bf9937ec 4 days ago 1.67GB
|
||
|
# .
|
||
|
# .
|
||
|
```
|
||
|
|
||
|
## Deploy
|
||
|
|
||
|
### Configuration
|
||
|
|
||
|
Create an env file `mobymask-app.env`:
|
||
|
|
||
|
```bash
|
||
|
touch mobymask-app.env
|
||
|
```
|
||
|
|
||
|
Add the following contents to `mobymask-app.env`:
|
||
|
|
||
|
```bash
|
||
|
# Watcher endpoint used by the app for GQL queries
|
||
|
CERC_APP_WATCHER_URL="http://127.0.0.1:3001"
|
||
|
|
||
|
|
||
|
# DO NOT CHANGE THESE VALUES
|
||
|
CERC_DEPLOYED_CONTRACT="0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9"
|
||
|
CERC_RELAY_NODES=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1", "/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm", "/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"]
|
||
|
```
|
||
|
|
||
|
Replace `CERC_APP_WATCHER_URL` with the watcher's endpoint (eg. `https://mobymask.example.com`)
|
||
|
|
||
|
### Deploy the stack
|
||
|
|
||
|
```bash
|
||
|
laconic-so --stack mobymask-v2 deploy --cluster mm_v2 --include mobymask-app --env-file mobymask-app.env up lxdao-mobymask-app
|
||
|
|
||
|
# Expected output (ignore the "The X variable is not set. Defaulting to a blank string." warnings):
|
||
|
|
||
|
# [+] Running 4/4
|
||
|
# ✔ Network mm_v2_default Created 0.1s
|
||
|
# ✔ Volume "mm_v2_peers_ids" Created 0.0s
|
||
|
# ✔ Volume "mm_v2_mobymask_deployment" Created 0.0s
|
||
|
# ✔ Container mm_v2-lxdao-mobymask-app-1 Started 1.1s
|
||
|
```
|
||
|
|
||
|
This will run the `lxdao-mobymask-app` (at `http://localhost:3004`) pointed to `CERC_APP_WATCHER_URL` for GQL queries
|
||
|
|
||
|
To monitor the running container:
|
||
|
|
||
|
```bash
|
||
|
# With status
|
||
|
docker ps
|
||
|
|
||
|
# Expected output:
|
||
|
|
||
|
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||
|
# f1369dbae1c9 cerc/mobymask-ui:local "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:3004->80/tcp mm_v2-lxdao-mobymask-app-1
|
||
|
|
||
|
# Check logs for a container
|
||
|
docker logs -f mm_v2-lxdao-mobymask-app-1
|
||
|
|
||
|
# Expected output:
|
||
|
|
||
|
# .
|
||
|
# .
|
||
|
# .
|
||
|
# Available on:
|
||
|
# http://127.0.0.1:80
|
||
|
# http://192.168.0.2:80
|
||
|
# Hit CTRL-C to stop the server
|
||
|
```
|
||
|
|
||
|
Note: For opening an invite link on this deployed app, replace the URL part before `/#` with `http://localhost:3004`
|
||
|
For example: `http://localhost:3004/#/members?invitation=XYZ`
|
||
|
|
||
|
In order to host the app using a public domain, configure your website with SSL and `https` traffic reverse proxied to port `3004`.
|
||
|
|
||
|
For example, a Nginx configuration for domain `my-mobymask-app.example.com` would look something like:
|
||
|
|
||
|
```bash
|
||
|
server {
|
||
|
server_name my-mobymask-app.example.com;
|
||
|
|
||
|
location / {
|
||
|
proxy_pass http://localhost:3004;
|
||
|
proxy_set_header Host $host;
|
||
|
proxy_set_header X-Real-IP $remote_addr;
|
||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
|
}
|
||
|
|
||
|
listen [::]:443 ssl;
|
||
|
listen 443 ssl;
|
||
|
ssl_certificate /etc/letsencrypt/live/my-mobymask-app.example.com/fullchain.pem;
|
||
|
ssl_certificate_key /etc/letsencrypt/live/my-mobymask-app.example.com/privkey.pem;
|
||
|
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||
|
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||
|
}
|
||
|
|
||
|
server {
|
||
|
if ($host = my-mobymask-app.example.com) {
|
||
|
return 301 https://$host$request_uri;
|
||
|
} # managed by Certbot
|
||
|
|
||
|
server_name my-mobymask-app.example.com;
|
||
|
listen 80;
|
||
|
return 404; # managed by Certbot
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Clean up
|
||
|
|
||
|
Stop all services running in the background:
|
||
|
|
||
|
```bash
|
||
|
laconic-so --stack mobymask-v2 deploy --cluster mm_v2 --include mobymask-app down
|
||
|
|
||
|
# Expected output:
|
||
|
|
||
|
# [+] Running 2/2
|
||
|
# ✔ Container mm_v2-lxdao-mobymask-app-1 Removed 10.6s
|
||
|
# ✔ Network mm_v2_default Removed 0.5s
|
||
|
```
|
||
|
|
||
|
Clear volumes created by this stack:
|
||
|
|
||
|
```bash
|
||
|
# List all relevant volumes
|
||
|
docker volume ls -q --filter "name=mm_v2"
|
||
|
|
||
|
# Expected output:
|
||
|
|
||
|
# mm_v2_mobymask_deployment
|
||
|
# mm_v2_peers_ids
|
||
|
|
||
|
# Remove all the listed volumes
|
||
|
docker volume rm $(docker volume ls -q --filter "name=mm_v2")
|
||
|
```
|