#!/bin/bash # This script expects a mapping of services and ports in the SERVICES env var, # with one line per service containing "NAME PORT". # Other vars: # THRIMBLETRIMMER: Set non-empty to also serve thrimbletrimmer on /thrimbletrimmer # SEGMENTS: Set to path to segments dir to also serve segments dir on /segments # SSL: Set to path to file containing SSL cert and key, if any. generate_location() { # generate_location PATH URL # We indirect via a variable to prevent nginx from caching dns forever echo -e "\t\tlocation $1 { set \$name \"$2\"; proxy_pass \$name; }" } LOCATIONS=$( [ -n "$SERVICES" ] && echo "$SERVICES" | while read name port; do # restreamer is the catch-all [ "$name" == "restreamer" ] && generate_location / "http://restreamer:$port" # thrimshim takes any calls to thrimshim/ [ "$name" == "thrimshim" ] && generate_location /thrimshim "http://thrimshim:$port" # all services have metrics under /metrics/SERVICE, except for thrimebletrimmer generate_location "/metrics/$name" "http://$name:$port/metrics" done [ -n "$THRIMBLETRIMMER" ] && echo -e "\t\tlocation = / { return 301 /thrimbletrimmer/dashboard.html; }" && echo -e "\t\tlocation /thrimbletrimmer { }" [ -n "$SEGMENTS" ] && echo -e "\t\tlocation /segments/ { alias $SEGMENTS/; }" ) [ -n "$SSL" ] && SSL_CONF=$(cat <<EOF server { listen 443 ssl; ssl_certificate $SSL; ssl_certificate_key $SSL; ssl_session_cache shared:SSL:10m; gzip on; gzip_comp_level 9; absolute_redirect off; $LOCATIONS } EOF ) cat > /etc/nginx/nginx.conf <<EOF worker_processes auto; events { worker_connections 1024; } http { include /etc/nginx/mime.types; resolver 127.0.0.11 valid=10s; $SSL_CONF server { listen 80; gzip on; gzip_comp_level 9; absolute_redirect off; $LOCATIONS } } EOF