fix(deploy): passe de DuckDNS à deSEC, filtré par l'école
Le filtrage du réseau de l'école bloque duckdns.org, site et API, depuis les postes comme depuis la VM : sans API, pas de défi DNS-01. deSEC (dedyn.io) répond depuis les deux. - Domaine enervision-g3.dedyn.io ; provision-host.sh publie par l'API deSEC l'enregistrement du domaine et son joker vers la VM. - make tls-desec remplace tls-duckdns. acme.sh recopie le jeton dans acme/account.conf : le dossier est retiré aux autres comptes. - deploy.yml ne demande un certificat qu'à un .env déjà réaligné sur le domaine deSEC, pour ne pas faire échouer un déploiement en cours de migration.
This commit is contained in:
@@ -73,7 +73,7 @@ DEMO_NOW ?= 2024-12-31T00:00:00Z
|
||||
migrate migrate-test bootstrap-admin services-up demo-data demo-data-force \
|
||||
ml-lint ml-typecheck ml-test ml-check ml-train ml-score mlflow-up detect-alerts recommendations \
|
||||
airflow-lint airflow-test airflow-check airflow-up airflow-down airflow-logs \
|
||||
tls-selfsigned tls-acme tls-renew tls-duckdns front-up stack-up stack-down stack-logs \
|
||||
tls-selfsigned tls-acme tls-renew tls-desec front-up stack-up stack-down stack-logs \
|
||||
e2e-install e2e-prepare e2e load-smoke load-test load-stress load-limits \
|
||||
db-ensure-supervision monitoring-up monitoring-down monitoring-logs monitoring-check
|
||||
|
||||
@@ -236,20 +236,21 @@ tls-renew: ## Renouvelle les certificats Let's Encrypt et recharge le proxy
|
||||
$(COMPOSE_PROD) exec proxy nginx -s reload
|
||||
|
||||
# Pourquoi : la VM n'a qu'une IP privée, que Let's Encrypt ne joint pas ; le défi DNS-01 passe
|
||||
# par l'API DuckDNS (ADR 0018). Le jeton transite par l'environnement, jamais par `argv`.
|
||||
# par l'API deSEC (ADR 0018). Le jeton transite par l'environnement, jamais par `argv`.
|
||||
ACME_SH := neilpang/acme.sh:3.1.6
|
||||
DUCKDNS_TOKEN_FILE ?= $(abspath $(CURDIR)/../duckdns.token)
|
||||
acme-sh = docker run --rm --user "$$(id -u):$$(id -g)" -e DuckDNS_Token -e AUTO_UPGRADE=0 \
|
||||
DESEC_TOKEN_FILE ?= $(abspath $(CURDIR)/../desec.token)
|
||||
acme-sh = docker run --rm --user "$$(id -u):$$(id -g)" -e DEDYN_TOKEN -e AUTO_UPGRADE=0 \
|
||||
-v "$(CURDIR)/infra/proxy/acme:/acme.sh" -v "$(CURDIR)/infra/proxy/tls:/tls" $(ACME_SH)
|
||||
|
||||
# acme.sh sort en 2 quand le certificat n'est pas encore à renouveler : rejouable à chaque déploiement.
|
||||
tls-duckdns: ## Certificat Let's Encrypt par DNS-01 DuckDNS, renouvelé seulement à échéance
|
||||
@case "$(PUBLIC_HOST)" in *.duckdns.org) ;; *) echo "PUBLIC_HOST=$(PUBLIC_HOST) n'est pas un nom DuckDNS"; exit 1 ;; esac
|
||||
@test -r "$(DUCKDNS_TOKEN_FILE)" || { echo "Jeton DuckDNS illisible : $(DUCKDNS_TOKEN_FILE)"; exit 1; }
|
||||
@mkdir -p infra/proxy/acme
|
||||
@DuckDNS_Token="$$(cat "$(DUCKDNS_TOKEN_FILE)")"; export DuckDNS_Token; \
|
||||
$(acme-sh) --issue --server letsencrypt --dns dns_duckdns -d "$(PUBLIC_HOST)"; \
|
||||
code=$$?; [ $$code -eq 0 ] || [ $$code -eq 2 ] || exit $$code
|
||||
# acme.sh sort en 2 quand le certificat n'est pas encore à renouveler, et recopie le jeton dans
|
||||
# acme/account.conf : d'où le chmod, qui le soustrait aux autres comptes de la machine.
|
||||
tls-desec: ## Certificat Let's Encrypt par DNS-01 deSEC, renouvelé seulement à échéance
|
||||
@case "$(PUBLIC_HOST)" in *.dedyn.io) ;; *) echo "PUBLIC_HOST=$(PUBLIC_HOST) n'est pas un nom deSEC"; exit 1 ;; esac
|
||||
@test -r "$(DESEC_TOKEN_FILE)" || { echo "Jeton deSEC illisible : $(DESEC_TOKEN_FILE)"; exit 1; }
|
||||
@mkdir -p infra/proxy/acme && chmod 700 infra/proxy/acme
|
||||
@DEDYN_TOKEN="$$(tr -d '[:space:]' < "$(DESEC_TOKEN_FILE)")"; export DEDYN_TOKEN; \
|
||||
$(acme-sh) --issue --server letsencrypt --dns dns_desec -d "$(PUBLIC_HOST)"; \
|
||||
code=$$?; chmod -R go-rwx infra/proxy/acme; [ $$code -eq 0 ] || [ $$code -eq 2 ] || exit $$code
|
||||
@$(acme-sh) --install-cert --ecc -d "$(PUBLIC_HOST)" \
|
||||
--fullchain-file /tls/fullchain.pem --key-file /tls/privkey.pem
|
||||
@$(COMPOSE_PROD) exec -T proxy nginx -s reload 2>/dev/null \
|
||||
|
||||
Reference in New Issue
Block a user