diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml new file mode 100644 index 0000000000..681ecd963b --- /dev/null +++ b/docker-compose/docker-compose.yml @@ -0,0 +1,9 @@ +version: "3" +name: pybitmessage +services: + bootstrap: + image: pybitmessage/bootstrap:latest + build: .. + env_file: .env + deploy: + replicas: $THREADS diff --git a/docker-compose/start-loadbalancer.sh b/docker-compose/start-loadbalancer.sh new file mode 100755 index 0000000000..32d5c1523f --- /dev/null +++ b/docker-compose/start-loadbalancer.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +apt -y install curl jq ipvsadm libyajl2 + +EXTIP=$(curl -s telnetmyip.com|jq -r .ip) +if [ ! -e .env ]; then + THREADS=$(nproc --all) + PASSWORD=$(tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo) + cat > .env << EOF +THREADS=$THREADS +PASSWORD=$PASSWORD +EOF +else + . .env +fi + +ipvsadm -C +ipvsadm -A -t ${EXTIP}:8444 -s rr +ipvsadm -A -t ${EXTIP}:8080 -s rr + +docker compose up -d + +CF=/etc/collectd/collectd.conf.d/curl_json.conf.new +CF_LIVE=/etc/collectd/collectd.conf.d/curl_json.conf + +echo "LoadPlugin curl_json" > $CF +echo "" >> $CF + +for i in `seq 1 $THREADS`; do + cont="pybitmessage-bootstrap-${i}" + IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $cont 2>/dev/null) + [ -z "$IP" ] && continue + echo "Adding $IP" + ipvsadm -a -t ${EXTIP}:8444 -r ${IP}:8444 -m + ipvsadm -a -t ${EXTIP}:8080 -r ${IP}:8444 -m + INSTANCE=$(echo $cont|tr - _) + cat >> $CF << EOF + + Plugin "pybitmessagestatus" + Instance "$INSTANCE" + User "api" + Password "$PASSWORD" + Post "{\"jsonrpc\":\"2.0\",\"id\":\"id\",\"method\":\"clientStatus\",\"params\":[]}" + + Type "gauge" + Instance "networkconnections" + + + Type "counter" + Instance "numberofpubkeysprocessed" + + + Type "counter" + Instance "numberofmessagesprocessed" + + + Type "counter" + Instance "numberofbroadcastsprocessed" + + +EOF +done +echo "" >> $CF + +if ! cmp -s $CF $CF_LIVE; then + mv $CF $CF_LIVE + systemctl restart collectd +fi + +ipvsadm -l -n diff --git a/packages/docker/launcher.sh b/packages/docker/launcher.sh index c0e4885586..1a876fec23 100755 --- a/packages/docker/launcher.sh +++ b/packages/docker/launcher.sh @@ -3,13 +3,15 @@ # Setup the environment for docker container APIUSER=${USER:-api} APIPASS=${PASSWORD:-$(tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo)} +IP=$(hostname -i) echo "\napiusername: $APIUSER\napipassword: $APIPASS" -sed -i -e "s|\(apiinterface = \).*|\10\.0\.0\.0|g" \ +sed -i -e "s|\(apiinterface = \).*|\1$IP|g" \ -e "s|\(apivariant = \).*|\1json|g" \ -e "s|\(apiusername = \).*|\1$APIUSER|g" \ -e "s|\(apipassword = \).*|\1$APIPASS|g" \ + -e "s|\(bind = \).*|\1$IP|g" \ -e "s|apinotifypath = .*||g" ${BITMESSAGE_HOME}/keys.dat # Run