The idea is to setup mirrors of this wiki across dn42, using anycast to provide redundancy and load-balancing. The local webserver is monitored with a simple shell script (below) working in conjuction with ExaBGP, announcing/withdrawing the assigned route if the service is up/down.

Checklist:

  • Install gollum.
  • Clone the dn42 wiki repo:

    git clone ssh://[email protected]/dn42/wiki /home/wiki.dn42/

  • Generate a CSR and send to [email protected]. Wait for a reply containing internal.dn42/wiki.dn42 certificates.

  • Start two gollum instances, read-only and editing on 127.0.0.1:

    gollum --css /home/wiki.dn42/custom.css --gollum-path /home/wiki.dn42/public_html/ --host 127.0.0.1  --port 4568 --no-edit```
    
    
    #####gollum-watchdog.sh:
    
    
    #!/bin/bash
    
    URL=( "http://172.23.0.80" "https://172.23.0.80" )
    
    VALIDATE_KEYWORD='gollum'
    ROUTE='172.23.0.80/28'
    NEXTHOP='172.22.177.72'
    
    INTERVAL=60
    
    ###########################
    
    RUN_STATE=0
    
    check_urls() {
    	for url in "${URL[@]}"; do
    		curl --insecure -L -o - ${url} | egrep -q "${VALIDATE_KEYWORD}" || {
    			return 1
    		}
    	done
    	return 0
    }
    
    while [ 1 ]; do
    	if [ ${RUN_STATE} -eq 0 ]; then
    		check_urls && {
    			RUN_STATE=1
    			echo "announce route ${ROUTE} next-hop ${NEXTHOP}"
    		}
    	else
    		check_urls || {
    			RUN_STATE=0
    			echo "withdraw route ${ROUTE} next-hop ${NEXTHOP}"
    		}
    	fi
    
    	sleep ${INTERVAL}
    
    done
    
    exit 0