Skip to content

Demo Server Guide

Carl Smith edited this page Aug 31, 2021 · 21 revisions

mFlow Demo Server build and install using Docker

Prep

  • Add token to githubtoken.txt (for downloading expression-evaluator)
    • requires token that has read access to packages on server repo
  • Edit dockerise.sh and update SERVER_BRANCH, WEB_APP_BRANCH and IMAGE_NAME

Build

cd docker
./dockerise.sh

Should take a while to run, will build a local image

Test locally

  • Edit run.sh
    • include correct SMTP_PASSWORD(from Bitwarden or your personal .env file)
    • Change test build to name of image created
  • Run it: ./run.sh

Upload to Docker hub

  • Login to docker hub (web site) to see the images in there:
    • msupplyfoundation - password in Bitwarden (Shared-Admin)
  • List local images to get the “image ID” and "tag name"
    docker image ls
  • Create tag:
    docker tag <image_id> <account-name>/<docker-repo>:<tag-name>
  • Push new tag:
    docker push <image_id> <account-name>/<docker-repo>:<tag-name>
    Image will upload to Docker hub

Example:

  • account-name: msupplyfoundation
  • docker-repo: mflow-demo
  • tag-name: front-demo-19-08-2021_back-demo-19-08-2021_pg-12_node-14
docker tag dbb2111d56e9 msupplyfoundation/mflow-demo:front-demo-19-08-2021_back-demo-19-08-2021_pg-12_node-14

docker push msupplyfoundation/mflow-demo:front-demo-19-08-2021_back-demo-19-08-2021_pg-12_node-14

Log in to demo server with ssh

  • Get key file from Bitwarden (openstack-irims-demo-keypair) and save locally (e.g. in ~/Documents/private/mflowkey.pem)

  • SSH login to server:

    export KEY_LOC='~/Documents/private/mflowkey.pem' (or your local location)
    sudo ssh -i $KEY_LOC [email protected]
  • View commit hashes of currently running images:
    sudo docker container ls

  • Stop all instances:
    sudo docker stop <hashes… >

  • Pull image from docker hub:
    sudo docker pull <full-image-name>

  • Run image:
    sudo docker run -dti -p 8000:3000 -e 'SMTP_PASSWORD=<password>' -e 'WEB_HOST=https://irims-demo.msupply.org:50000' --name mflow-demo-on-8000 msupplyfoundation/mflow-demo:front-demo-19-08-2021_back-demo-19-08-2021_pg-12_node-14
    This will launch one instance. To launch other instances in their own container, run the same command, but change:

    • name
    • port 8000
    • WEB_HOST url

    The system will be launched with “basic_snapshot” data. Upload and run a new snapshot as required

To restart an instance

  • Run sudo docker stop <name> (name from above, or can use container id)
  • Remove container: sudo docker rm <name>
  • Re-run as above. Note: this resets the container to initial state, including database reset. If you want to preserve existing data, you’ll need to take a snapshot first, then reload after restart.

Other image/container commands

  • List local images

sudo docker images

  • Remove all containers

sudo docker rm $(sudo docker ps -a -q)

  • Remove all images

sudo docker rmi -f $(sudo docker images -a -q)

  • Remove all images

sudo docker volume prune

Access command line within container:

You can access the command line of a particular container instance with the following:

sudo docker exec -ti <name-or-container-id> /bin/bash

From there the following commands might be useful:

  • view environment variables: printenv
  • check the server log: tail -n 100 /var/log/application_manager/server.log

Move files/folder to/from instance

Edit scripts in ./docker/demo_server/, then:

Upload demo server scripts

scp -r -i $KEY_LOC ./demo_server [email protected]:/home/ubuntu/

Download nginx config from demo server to local

scp -i $KEY_LOC [email protected]:/etc/nginx/sites-enabled/default ./demo_server/nginx_config

Upload nginx config back to demo server

# cannot directly replace default config, need to do it as sudo, so from within docker instance
sudo mv demo_server/nginx_config/default /etc/nginx/sites-enabled/

NGINX

Everything should be configured via default config. Cert bot was installed and should auto update certs (https://certbot.eff.org/lets-encrypt/ubuntubionic-nginx).

After changing config as per above, run

sudo service nginx restart

Logs are in /var/log/nginx

docker-compose

docker-compose will complain if directories are not present, create them if needed (they will persist when restarting image, even if docker-compose down was run)

mkdir app_snapshots_on_port_8000
mkdir app_postgres_on_port_8000

mkdir grafana_on_port_8001
# grafana user has to own the local directory that's mounted to volume
# https://community.grafana.com/t/new-docker-install-with-persistent-storage-permission-problem/10896/2
sudo chown 472 grafana_on_port_8001

mkdir app_snapshots_on_port_8002
mkdir app_postgres_on_port_8002

mkdir grafana_on_port_8003
sudo chown 472 grafana_on_port_8003

mkdir app_snapshots_on_port_8004
mkdir app_postgres_on_port_8004

mkdir grafana_on_port_8005
sudo chown 472 grafana_on_port_8005

mkdir app_snapshots_on_port_8006
mkdir app_postgres_on_port_8006

mkdir grafana_on_port_8007
sudo chown 472 grafana_on_port_8007

mkdir app_snapshots_on_port_8008
mkdir app_postgres_on_port_8008

mkdir grafana_on_port_8009
sudo chown 472 grafana_on_port_8009

Launching all

export TAG='front-demo-19-08-2021_back-demo-19-08-2021_pg-12_node-14'

# -d is for detached, if you want to see all output then start without -d
PORT_APP=8000 PORT_DASH=8001 sudo -E docker-compose --project-name 'mflow-on-8000' up -d

PORT_APP=8002 PORT_DASH=8003 sudo -E docker-compose --project-name 'mflow-on-8002' up -d
PORT_APP=8004 PORT_DASH=8005 sudo -E docker-compose --project-name 'mflow-on-8004' up -d
PORT_APP=8006 PORT_DASH=8007 sudo -E docker-compose --project-name 'mflow-on-8006' up -d
PORT_APP=8008 PORT_DASH=8009 sudo -E docker-compose --project-name 'mflow-on-8008' up -d

View logs

# don't need bash inside contiainer for this
sudo docker exec -ti mflow-on-8000_app_1 cat /var/log/application_manager/server.log
sudo docker exec -ti mflow-on-8000_app_1 cat /var/log/application_manager/graphile.log

Stop or remove

# to stop
sudo docker-compose --project-name 'mflow-on-8000' stop
# to remove (when new version is out)
sudo docker-compose --project-name 'mflow-on-8000' down