2022-11-29 17:22:35 +01:00
|
|
|
ENV_VARS += DOCKER_HOST_IFACE DOCKER_HOST_INET4 DOCKER_INTERNAL_DOCKER_HOST
|
2022-12-05 20:29:00 +01:00
|
|
|
MAKECMDARGS += host-exec stack-host-exec host-exec:% host-exec@% host-run host-run:% host-run@%
|
2022-11-29 17:22:35 +01:00
|
|
|
SETUP_LETSENCRYPT ?=
|
2022-12-10 18:58:25 +01:00
|
|
|
host ?= host/consul host/fabio host/registrator
|
2022-11-29 17:22:35 +01:00
|
|
|
|
|
|
|
# target bootstrap-stack-host: Fire host-certbot host-ssl-certs
|
|
|
|
.PHONY: bootstrap-stack-host
|
2022-12-10 18:58:25 +01:00
|
|
|
bootstrap-stack-host: $(if $(SETUP_CERTBOT),host-certbot) host-ssl-certs
|
2022-11-29 17:22:35 +01:00
|
|
|
|
|
|
|
# target host: Fire stack-host-up
|
|
|
|
.PHONY: host
|
|
|
|
host: stack-host-up
|
|
|
|
|
|
|
|
# target host-%; Fire target stack-host-%
|
|
|
|
.PHONY: host-%
|
|
|
|
host-%: stack-host-%;
|
|
|
|
|
|
|
|
# target host-ssl-certs: Create invalid ${DOMAIN} certificate files with openssl
|
|
|
|
.PHONY: host-ssl-certs
|
|
|
|
host-ssl-certs:
|
2022-12-10 18:58:25 +01:00
|
|
|
$(RUN) docker run --rm \
|
|
|
|
-e DOMAIN='$(DOMAIN)' \
|
|
|
|
--mount source=$(HOST_DOCKER_VOLUME),target=/host \
|
|
|
|
alpine sh -c "mkdir -p /host/htpasswd && chmod 700 /host/htpasswd \
|
|
|
|
; mkdir -p /host/certs && chmod 0700 /host/certs \
|
|
|
|
; [ -f /host/htpasswd/default.htpasswd ] \
|
|
|
|
|| echo "default:{PLAIN}$(shell head -c 15 /dev/random |base64)" > /host/htpasswd/default.htpasswd \
|
|
|
|
; for domain in ${DOMAIN}; do \
|
2022-12-19 03:48:40 +01:00
|
|
|
[ -f /host/live/\$${domain}/privkey.pem ] \
|
2022-12-10 18:58:25 +01:00
|
|
|
&& openssl x509 -in /host/live/\$${domain}/fullchain.pem -noout -issuer 2>/dev/null |grep -iqv staging \
|
|
|
|
&& cp -L /host/live/\$${domain}/fullchain.pem /host/certs/\$${domain}-cert.pem \
|
|
|
|
&& cp -L /host/live/\$${domain}/privkey.pem /host/certs/\$${domain}-key.pem \
|
2022-12-19 03:48:40 +01:00
|
|
|
; if [ ! -f /host/certs/\$${domain}-key.pem ]; then \
|
2022-12-10 18:58:25 +01:00
|
|
|
apk --no-cache add openssl \
|
2022-12-19 03:48:40 +01:00
|
|
|
&& openssl genrsa -out /host/certs/\$${domain}-key.pem 2048 \
|
2022-12-10 18:58:25 +01:00
|
|
|
&& openssl req -key /host/certs/\$${domain}-key.pem -out /host/certs/\$${domain}-cert.pem \
|
|
|
|
-addext extendedKeyUsage=serverAuth \
|
|
|
|
-addext subjectAltName=DNS:\$${domain},DNS:*.\$${domain} \
|
|
|
|
-subj \"/C=/ST=/L=/O=/CN=\$${domain}\" \
|
|
|
|
-x509 -days 365 \
|
|
|
|
; fi \
|
|
|
|
; done \
|
|
|
|
"
|
2022-11-29 17:22:35 +01:00
|
|
|
|
|
|
|
# target host-certbot: Create ${DOMAIN} certificate files with letsencrypt
|
|
|
|
.PHONY: host-certbot
|
|
|
|
host-certbot: host-docker-build-certbot
|
2022-12-10 18:58:25 +01:00
|
|
|
$(foreach domain,$(DOMAIN), \
|
|
|
|
$(RUN) docker run --rm \
|
|
|
|
-e DOMAIN=$(domain) \
|
|
|
|
--mount source=$(HOST_DOCKER_VOLUME),target=/etc/letsencrypt/ \
|
|
|
|
--mount source=$(HOST_DOCKER_VOLUME),target=/var/log/letsencrypt/ \
|
|
|
|
--network host \
|
|
|
|
$(HOST_DOCKER_REPOSITORY)/certbot \
|
|
|
|
--dns-standalone-address=0.0.0.0 \
|
|
|
|
--dns-standalone-port=53 \
|
|
|
|
--non-interactive --agree-tos --email hostmaster@$(domain) certonly \
|
|
|
|
--preferred-challenges dns --authenticator dns-standalone \
|
|
|
|
-d $(domain) \
|
|
|
|
-d *.$(domain) \
|
|
|
|
&& \
|
|
|
|
) true
|
2022-11-29 17:22:35 +01:00
|
|
|
|
|
|
|
# target host-certbot-certificates: List letsencrypt certificates
|
|
|
|
.PHONY: host-certbot-certificates
|
|
|
|
host-certbot-certificates: host-docker-build-certbot
|
|
|
|
docker run --rm --mount source=$(HOST_DOCKER_VOLUME),target=/etc/letsencrypt/ $(HOST_DOCKER_REPOSITORY)/certbot certificates
|
|
|
|
|
|
|
|
# target host-certbot-renew: Renew letsencrypt certificates
|
|
|
|
.PHONY: host-certbot-renew
|
|
|
|
host-certbot-renew: host-docker-build-certbot
|
|
|
|
docker run --rm --mount source=$(HOST_DOCKER_VOLUME),target=/etc/letsencrypt/ --network host $(HOST_DOCKER_REPOSITORY)/certbot renew
|
|
|
|
|
|
|
|
# target host-certbot-staging: Create staging ${DOMAIN} certificate files with letsencrypt
|
|
|
|
.PHONY: host-certbot-staging
|
|
|
|
host-certbot-staging: host-docker-build-certbot
|
2022-12-10 18:58:25 +01:00
|
|
|
$(foreach domain,$(DOMAIN), \
|
|
|
|
$(RUN) docker run --rm \
|
|
|
|
-e DOMAIN=$(domain) \
|
|
|
|
--mount source=$(HOST_DOCKER_VOLUME),target=/etc/letsencrypt/ \
|
|
|
|
--mount source=$(HOST_DOCKER_VOLUME),target=/var/log/letsencrypt/ \
|
|
|
|
--network host \
|
|
|
|
$(HOST_DOCKER_REPOSITORY)/certbot \
|
|
|
|
--dns-standalone-address=0.0.0.0 \
|
|
|
|
--dns-standalone-port=53 \
|
|
|
|
--non-interactive --agree-tos --email hostmaster@$(domain) certonly \
|
|
|
|
--preferred-challenges dns --authenticator dns-standalone \
|
|
|
|
--staging \
|
|
|
|
-d $(domain) \
|
|
|
|
-d *.$(domain) \
|
|
|
|
&& \
|
|
|
|
) true
|
2022-11-29 17:22:35 +01:00
|
|
|
|
|
|
|
# target host-docker-build-%: Build % docker
|
|
|
|
.PHONY: host-docker-build-%
|
|
|
|
host-docker-build-%:
|
|
|
|
$(call docker-build,docker/$*,host/$*:$(DOCKER_IMAGE_TAG))
|
|
|
|
|
|
|
|
# target host-docker-rebuild-%: Rebuild % docker
|
|
|
|
.PHONY: host-docker-rebuild-%
|
|
|
|
host-docker-rebuild-%:
|
|
|
|
$(call make,host-docker-build-$* DOCKER_BUILD_CACHE=false)
|