#!/bin/sh # script/run: build bin/sww with script/build and run discriminator and # rproxy on the host, with the settings in the environment, until rproxy # exits or the script is told to stop. rproxy listens on port 8080 unless # SWW_RPROXY_LISTEN_ADDR says otherwise, in front of the app at SWW_RPROXY_UPSTREAM_URL. # discriminator listens on port 8090 unless SWW_WAF_LISTEN_ADDR says otherwise, and # rproxy asks it there unless SWW_RPROXY_WAF_BACKEND says otherwise. Unless # SWW_WAF_STATE_DIR is set, the state files go in bin/state, beside the binary, # and unless SWW_WAF_RULES_DIR is set, the rule files are those of share/rules.d, # which the image ships. set -eu SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)" DISCRIMINATOR="" RPROXY="" # stop_both: stop what runs, and wait for it, so that discriminator writes its state # files. stop_both() { trap '' HUP INT TERM kill $DISCRIMINATOR $RPROXY 2>/dev/null || true wait || true } main() { "$SCRIPT_DIR/build" if [ -z "${SWW_WAF_STATE_DIR+set}" ]; then SWW_WAF_STATE_DIR="$ROOT/bin/state" export SWW_WAF_STATE_DIR mkdir -p "$SWW_WAF_STATE_DIR" fi if [ -z "${SWW_WAF_RULES_DIR+set}" ]; then SWW_WAF_RULES_DIR="$ROOT/share/rules.d" export SWW_WAF_RULES_DIR fi SWW_WAF_LISTEN_ADDR="${SWW_WAF_LISTEN_ADDR:-:8090}" SWW_RPROXY_WAF_BACKEND="${SWW_RPROXY_WAF_BACKEND:-http://127.0.0.1:${SWW_WAF_LISTEN_ADDR##*:}}" export SWW_WAF_LISTEN_ADDR SWW_RPROXY_WAF_BACKEND trap stop_both EXIT trap 'exit 1' HUP INT TERM "$ROOT/bin/sww" discriminator & DISCRIMINATOR=$! "$ROOT/bin/sww" rproxy & RPROXY=$! wait "$RPROXY" } main "$@"