diff --git a/.env.example b/.env.example index 475e44cb3..efbaf54ca 100644 --- a/.env.example +++ b/.env.example @@ -1,18 +1,21 @@ # This is an example .env file with default passwords and private keys. # Do not use this in production or with any public-facing ports! -DELA_PROXY_URL=http://172.19.44.254:8080 +BACKEND_HOST=backend # name of the 'backend' container +BACKEND_PORT=5000 # port of the 'backend' container +COMPOSE_FILE=./docker-compose/docker-compose.yml # Docker Compose configuration file to use +DATABASE_HOST=db # name of the PostgreSQL container +DATABASE_PASSWORD=Ohw0phoa # choose any PostgreSQL password +DATABASE_PORT=5432 # port of the PostgreSQL container DATABASE_USERNAME=dvoting -DATABASE_PASSWORD=Ohw0phoa # choose any PostgreSQL password -DATABASE_HOST=db -DATABASE_PORT=5432 -DB_PATH=dvoting # LMDB database path -FRONT_END_URL=http://127.0.0.1:3000 # the automated frontend tests expect this value do not change it -BACKEND_HOST=backend -BACKEND_PORT=5000 -SESSION_SECRET=kaibaaF9 # choose any secret +DB_PATH=dvoting # LMDB database path +DELA_PROXY_URL=http://172.19.44.254:8080 # IP and port of one of the DELA containers +FRONT_END_URL=http://127.0.0.1:3000 # the automated frontend tests expect this value do not change it +NODEPORT=2000 # DELA node port # For public-facing services and production, this key needs to be changed! PRIVATE_KEY=6aadf480d068ac896330b726802abd0da2a5f3824f791fe8dbd4cd555e80b809 +PROXYPORT=8080 # DELA proxy port PUBLIC_KEY=3e5fcaed4c5d79a8eccceeb087ee0a13b8f91d917ed62017a9cd28e13b228389 -PROXYPORT=8080 -NODEPORT=2000 # DELA node port - +REACT_APP_DEV_LOGIN=true # debugging admin login /!\ disable in production /!\ +REACT_APP_RANDOMIZE_VOTE_ID=true # randomize voter ID for debugging /!\ disable in production /!\ +REACT_APP_SCIPER_ADMIN=123456 # debugging admin ID /!\ disable in production /!\ +SESSION_SECRET=kaibaaF9 # choose any secret diff --git a/README.docker.md b/README.docker.md index 23f8ff29e..dce48973d 100644 --- a/README.docker.md +++ b/README.docker.md @@ -8,96 +8,66 @@ The files related to the Docker environment can be found in * `Dockerfiles/` (Dockerfiles) * `scripts/` (helper scripts) -You also need to either create a `.env` file in the project's root -or point to another environment file using the `--env-file` flag -when running `docker compose`. +### Setup -The environment file needs to contain +It is recommended to use the `run_docker.sh` helper script for setting up and +tearing down the environment as it handles all the necessary intermediary steps +to have a working D-Voting application. -``` -DELA_PROXY_URL=http://172.19.44.254:8080 -DATABASE_USERNAME=dvoting -DATABASE_PASSWORD=XXX # choose any PostgreSQL password -DATABASE_HOST=db -DATABASE_PORT=5432 -DB_PATH=dvoting # LMDB database path -FRONT_END_URL=http://127.0.0.1:3000 # the automated frontend tests expect this value do not change it -BACKEND_HOST=backend -BACKEND_PORT=5000 -SESSION_SECRET=XXX # choose any secret -PUBLIC_KEY=XXX # public key of pre-generated key pair -PRIVATE_KEY=XXX # private key of pre-generated key pair -PROXYPORT=8080 -NODEPORT=2000 # DELA node port -``` +This script needs to be executed at the project's root. -For the `PUBLIC_KEY` and `PRIVATE_KEY`, you need to run the following commands: +To set up the environment: -```bash -cd web/backend -npm ci -npm run keygen +``` +./scripts/run_docker.sh ``` -And then copy the two lines to the `.env` file. - -There are two Docker Compose file you may use: +This will run the subcommands: -* `docker-compose/docker-compose.yml` for the preprod version, or -* `docker-compose/docker-compose.debug.yml` for the development/debugging version +- `setup` which will build the images and start the containers +- `init_dela` which will initialize the DELA network +- `local_admin` which will add local admin accounts for testing and debugging +- `local_login` which will set a local cookie that allows for interacting w/ the API via command-line +- `add_proxies` which will set up the DELA node proxies -You run +Each of these subcommands can also be run by invoking the script w/ the subcommand: ``` -export COMPOSE_FILE= +./scripts/run_docker.sh ``` -The preprod version will create an environment without any debugging tools that's as close as possible to a real environment. -It is meant to be used to test the `main` branch before deploying it to production. Use the development/debugging version -for setting up your local development environment. +/!\ The `init_dela` subcommand must only be run exactly **once**. -Run +To tear down the environment: ``` -docker compose build -docker compose up +./scripts/run_docker.sh teardown ``` -to set up the environment. - -/!\ Any subsequent `docker compose` commands must be run with `COMPOSE_FILE` being -set to the Docker Compose file that defines the current environment. - -Use +This will: -``` -docker compose down -``` +- remove the local cookie +- stop and remove the containers and their attached volumes +- remove the images -to shut off, and +/!\ This command is meant to reset your environment. If you want to stop one or more +containers, use the appropriate `docker compose` commands (see below for using the correct `docker-compose.yml`). -``` -docker compose down -v -``` +### Docker environment -to delete the volumes and reset your instance. +There are two Docker Compose file you may use: -## Post-install commands +* `docker-compose/docker-compose.yml` (recommended, default in `.env.example` and `run_docker.sh`), or +* `docker-compose/docker-compose.debug.yml`, which contains some additional debugging tools -To set up the DELA network, go to `scripts/` and run +To run `docker compose` commands w/ the right `docker-compose.yml`, you need to either run ``` -./init_dela.sh +export COMPOSE_FILE= ``` -/!\ This script uses `docker compose` as well, so make sure that the `COMPOSE_FILE` variable is -set to the right value. - -To set up the permissions, run +or ``` -docker compose exec backend npx cli addAdmin --sciper XXX -docker compose down && docker compose up -d +source .env ``` - -to add yourself as admin and clear the cached permissions. diff --git a/scripts/init_dela.sh b/scripts/init_dela.sh deleted file mode 100755 index 0caac2ba4..000000000 --- a/scripts/init_dela.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -MEMBERS=""; - -if [ -z "$COMPOSE_FILE" ]; then - echo "'COMPOSE_FILE' variable not set"; - exit 1; -fi - - - -# share the certificate -echo "[1/4] add nodes to network"; -for container in dela-worker-1 dela-worker-2 dela-worker-3; do - TOKEN_ARGS=$(docker compose exec dela-worker-0 /bin/bash -c 'LLVL=error dvoting --config /data/node minogrpc token'); - echo "generated token for $container"; - docker compose exec "$container" dvoting --config /data/node minogrpc join --address //dela-worker-0:2000 $TOKEN_ARGS; - echo "$container joined network"; -done - -# create a new chain with the nodes -echo "[2/4] create a new chain"; -for container in dela-worker-0 dela-worker-1 dela-worker-2 dela-worker-3; do - # add node to the chain - MEMBERS="$MEMBERS --member $(docker compose exec $container /bin/bash -c 'LLVL=error dvoting --config /data/node ordering export')"; -done -docker compose exec dela-worker-0 dvoting --config /data/node ordering setup $MEMBERS; -echo "created new chain"; - -# authorize the signer to handle the access contract on each node -echo "[3/4] allow nodes to access contracts on each other"; -for signer in dela-worker-0 dela-worker-1 dela-worker-2 dela-worker-3; do - IDENTITY=$(docker compose exec "$signer" crypto bls signer read --path /data/node/private.key --format BASE64_PUBKEY); - for node in dela-worker-0 dela-worker-1 dela-worker-2 dela-worker-3; do - docker compose exec "$node" dvoting --config /data/node access add --identity "$IDENTITY"; - echo "$node allowed $signer to access contract on it"; - done -done - -# update the access contract -echo "[4/4] grant permissions to update contract"; -for container in dela-worker-0 dela-worker-1 dela-worker-2 dela-worker-3; do - IDENTITY=$(docker compose exec "$container" crypto bls signer read --path /data/node/private.key --format BASE64_PUBKEY); - docker compose exec dela-worker-0 dvoting --config /data/node pool add\ - --key /data/node/private.key\ - --args go.dedis.ch/dela.ContractArg\ - --args go.dedis.ch/dela.Access\ - --args access:grant_id\ - --args 45564f54\ - --args access:grant_contract\ - --args go.dedis.ch/dela.Evoting \ - --args access:grant_command\ - --args all\ - --args access:identity\ - --args $IDENTITY\ - --args access:command\ - --args GRANT - echo "$container has been granted permission to update contract"; -done