From fa3c0902e35cce83c4a2e1de8cd64abf19f10a4a Mon Sep 17 00:00:00 2001 From: Peter Surda Date: Wed, 28 Feb 2024 07:40:08 +0800 Subject: [PATCH 1/4] Add code to run bootstrap server --- docker-compose/docker-compose.yml | 10 ++++++++++ docker-compose/start-loadbalancer.sh | 24 ++++++++++++++++++++++++ packages/docker/launcher.sh | 4 +++- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 docker-compose/docker-compose.yml create mode 100755 docker-compose/start-loadbalancer.sh diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml new file mode 100644 index 0000000000..2cc1a1c3b7 --- /dev/null +++ b/docker-compose/docker-compose.yml @@ -0,0 +1,10 @@ +version: "3" +name: pybitmessage +services: + bootstrap: + image: pybitmessage/bootstrap:latest + build: .. + ports: + - 127.0.0.1::8444 + deploy: + replicas: $THREADS diff --git a/docker-compose/start-loadbalancer.sh b/docker-compose/start-loadbalancer.sh new file mode 100755 index 0000000000..7e76307664 --- /dev/null +++ b/docker-compose/start-loadbalancer.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +apt -y install curl jq ipvsadm + +EXTIP=$(curl -s telnetmyip.com|jq -r .ip) +THREADS=$(nproc --all) +echo "THREADS=$THREADS" > .env + +ipvsadm -C +ipvsadm -A -t ${EXTIP}:8444 -s rr +ipvsadm -A -t ${EXTIP}:8080 -s rr + +docker compose up -d + +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 +done + +ipvsadm -l 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 From 96a4f66ebbe2d66bfa6b06341c5939fbd0ae7ea7 Mon Sep 17 00:00:00 2001 From: Peter Surda Date: Wed, 28 Feb 2024 22:46:37 +0800 Subject: [PATCH 2/4] Bootstrap config upgrade - only IPVS for access, no docker's portforwarding - generate random password - generate config for collectd's curl_json --- docker-compose/docker-compose.yml | 3 +- docker-compose/start-loadbalancer.sh | 62 +++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 2cc1a1c3b7..681ecd963b 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -4,7 +4,6 @@ services: bootstrap: image: pybitmessage/bootstrap:latest build: .. - ports: - - 127.0.0.1::8444 + env_file: .env deploy: replicas: $THREADS diff --git a/docker-compose/start-loadbalancer.sh b/docker-compose/start-loadbalancer.sh index 7e76307664..82c4a84cbe 100755 --- a/docker-compose/start-loadbalancer.sh +++ b/docker-compose/start-loadbalancer.sh @@ -1,10 +1,19 @@ #!/bin/bash -apt -y install curl jq ipvsadm +apt -y install curl jq ipvsadm libyajl2 EXTIP=$(curl -s telnetmyip.com|jq -r .ip) -THREADS=$(nproc --all) -echo "THREADS=$THREADS" > .env +if [ ! -e .env ]; then + THREADS=$(nproc --all) + PASSWORD=$(tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo) + cat > .env << EOF +THREADS=$THREADS +USER=pybitmessage +PASSWORD=$PASSWORD +EOF +else + . .env +fi ipvsadm -C ipvsadm -A -t ${EXTIP}:8444 -s rr @@ -12,13 +21,46 @@ ipvsadm -A -t ${EXTIP}:8080 -s rr docker compose up -d +CF=/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 + 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 "pybitmessage" + 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 +systemctl restart collectd -ipvsadm -l +ipvsadm -l -n From ffa898130dba4c7e436dcb5d406eb41f59b3baf9 Mon Sep 17 00:00:00 2001 From: Peter Surda Date: Wed, 28 Feb 2024 23:00:23 +0800 Subject: [PATCH 3/4] Change bootstrap api user - from `pybitmessage` to `api`` --- docker-compose/start-loadbalancer.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker-compose/start-loadbalancer.sh b/docker-compose/start-loadbalancer.sh index 82c4a84cbe..b847bccbc2 100755 --- a/docker-compose/start-loadbalancer.sh +++ b/docker-compose/start-loadbalancer.sh @@ -8,7 +8,6 @@ if [ ! -e .env ]; then PASSWORD=$(tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo) cat > .env << EOF THREADS=$THREADS -USER=pybitmessage PASSWORD=$PASSWORD EOF else @@ -38,7 +37,7 @@ for i in `seq 1 $THREADS`; do Plugin "pybitmessagestatus" Instance "$INSTANCE" - User "pybitmessage" + User "api" Password "$PASSWORD" Post "{\"jsonrpc\":\"2.0\",\"id\":\"id\",\"method\":\"clientStatus\",\"params\":[]}" From ac4b4ecba277d9725abb3f0ec47fb7f521300e5e Mon Sep 17 00:00:00 2001 From: Peter Surda Date: Thu, 29 Feb 2024 07:38:06 +0800 Subject: [PATCH 4/4] Make bootstrap collectd restart conditional - only restart if the config file changes --- docker-compose/start-loadbalancer.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docker-compose/start-loadbalancer.sh b/docker-compose/start-loadbalancer.sh index b847bccbc2..32d5c1523f 100755 --- a/docker-compose/start-loadbalancer.sh +++ b/docker-compose/start-loadbalancer.sh @@ -20,7 +20,8 @@ ipvsadm -A -t ${EXTIP}:8080 -s rr docker compose up -d -CF=/etc/collectd/collectd.conf.d/curl_json.conf +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 @@ -60,6 +61,10 @@ for i in `seq 1 $THREADS`; do EOF done echo "" >> $CF -systemctl restart collectd + +if ! cmp -s $CF $CF_LIVE; then + mv $CF $CF_LIVE + systemctl restart collectd +fi ipvsadm -l -n