| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | #!/bin/bashCONFIG_FILE=netmaker.envSCRIPT_DIR=$(dirname "$(realpath "$0")")# get and check the configif [ ! -f "$SCRIPT_DIR/$CONFIG_FILE" ]; then	echo "Config file missing"	exit 1fisource "$SCRIPT_DIR/$CONFIG_FILE"if [ -z "$NM_DOMAIN" ] || [ -z "$NM_EMAIL" ]; then	echo "Config not valid"	exit 1fi# TODO make sure this doesnt break, parse `certbot certificates` if yesCERT_DIR="$SCRIPT_DIR/letsencrypt/live/api.$NM_DOMAIN"echo "Setting up SSL certificates..."# preserve the env stateRESTART_CADDY=falseif [ -n "$(docker ps | grep caddy)" ]; then	echo "Caddy is running, stopping for now..."	RESTART_CADDY=true	docker-compose -f /root/docker-compose.yml stop caddyfiCERTBOT_PARAMS=$(cat <<EOFcertonly --standalone \	--non-interactive --agree-tos \	-m $NM_EMAIL \	-d api.$NM_DOMAIN \	-d broker.$NM_DOMAIN \	-d dashboard.$NM_DOMAIN \	-d turn.$NM_DOMAIN \	-d turnapi.$NM_DOMAIN \	-d netmaker-exporter.$NM_DOMAIN \	-d grafana.$NM_DOMAIN \	-d prometheus.$NM_DOMAINEOF)# generate an entrypoint for zerossl-certbotcat <<EOF >"$SCRIPT_DIR/certbot-entry.sh"#!/bin/sh# depsapk updateapk add bash curl# zerosslwget -qO zerossl-bot.sh "https://github.com/zerossl/zerossl-bot/raw/master/zerossl-bot.sh"chmod +x zerossl-bot.sh# request the certs./zerossl-bot.sh "$CERTBOT_PARAMS"EOFchmod +x "$SCRIPT_DIR/certbot-entry.sh"# request certssudo docker run -it --rm --name certbot \	-p 80:80 -p 443:443 \	-v "$SCRIPT_DIR/certbot-entry.sh:/opt/certbot/certbot-entry.sh" \	-v "$SCRIPT_DIR/letsencrypt:/etc/letsencrypt" \	--entrypoint "/opt/certbot/certbot-entry.sh" \	certbot/certbot# clean uprm "$SCRIPT_DIR/certbot-entry.sh"# check if successfulif [ ! -f "$CERT_DIR"/fullchain.pem ]; then	# fallback to letsencrypt-certbot	sudo docker run -it --rm --name certbot \		-p 80:80 -p 443:443 \		-v "$SCRIPT_DIR/letsencrypt:/etc/letsencrypt" \		certbot/certbot $CERTBOT_PARAMS	if [ ! -f "$CERT_DIR"/fullchain.pem ]; then		echo "Missing file: $CERT_DIR/fullchain.pem"		echo "SSL certificates failed"		exit 1	fifi# copy for mountingmkdir -p certscp -L "$CERT_DIR/fullchain.pem" "$SCRIPT_DIR/certs/fullchain.pem"cp -L "$CERT_DIR/privkey.pem" "$SCRIPT_DIR/certs/privkey.pem"echo "SSL certificates ready"# preserve the env stateif [ "$RESTART_CADDY" = true ]; then	echo "Starting Caddy..."	docker-compose -f /root/docker-compose.yml start caddyfi# install crontabln -sfn "$SCRIPT_DIR"/nm-certs.sh /etc/cron.monthly/nm-certs.sh
 |