acme_forward: send services' ACME challenges to Traefik on ops
All checks were successful
deploy / ansible (push) Successful in 6m25s
All checks were successful
deploy / ansible (push) Successful in 6m25s
The XMPP certificate covers xmpp.asxp.io and conference.asxp.io, which point at asxpio-services, so Let's Encrypt validates them there. A small nginx on port 80 passes /.well-known/acme-challenge/ over the VPC to Traefik, which holds all certificates, and answers 404 to the rest. Assisted-by: Claude:opus-5-5
This commit is contained in:
parent
700161ffd0
commit
4865efd078
5 changed files with 50 additions and 0 deletions
8
ansible/inventory/group_vars/all/xmpp_cert.yaml
Normal file
8
ansible/inventory/group_vars/all/xmpp_cert.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
# The XMPP certificate is issued by Traefik on asxpio-ops (HTTP challenge;
|
||||
# services forwards its challenges there, role acme_forward) and pushed to
|
||||
# ejabberd on asxpio-services on every renewal (role xmpp_cert_sync).
|
||||
xmpp_cert_main: xmpp.asxp.io
|
||||
xmpp_cert_sans: [asxp.io, conference.asxp.io]
|
||||
# renovate: datasource=docker depName=nginx
|
||||
acme_forward_nginx_version: "1.31.8-alpine-slim"
|
||||
14
ansible/roles/acme_forward/tasks/main.yaml
Normal file
14
ansible/roles/acme_forward/tasks/main.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
# Port 80 on asxpio-services exists only for Let's Encrypt: HTTP challenges
|
||||
# for names pointing here (xmpp., conference.) go to Traefik on ops, which
|
||||
# holds the certificates. Anything else gets a 404.
|
||||
- name: Deploy the ACME challenge forwarder
|
||||
ansible.builtin.include_role:
|
||||
name: docker_service
|
||||
vars:
|
||||
service_name: acme-forward
|
||||
service_base_path: "{{ services_base_path }}/acme-forward"
|
||||
service_templates:
|
||||
- { src: docker-compose.yml.j2, dest: docker-compose.yml }
|
||||
- { src: nginx.conf.j2, dest: nginx.conf }
|
||||
health_check_port: 80
|
||||
11
ansible/roles/acme_forward/templates/docker-compose.yml.j2
Normal file
11
ansible/roles/acme_forward/templates/docker-compose.yml.j2
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
# Managed by Ansible (role acme_forward).
|
||||
services:
|
||||
acme-forward:
|
||||
image: nginx:{{ acme_forward_nginx_version }}
|
||||
container_name: acme-forward
|
||||
ports:
|
||||
- "80:80"
|
||||
volumes:
|
||||
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
||||
restart: unless-stopped
|
||||
mem_limit: 32m
|
||||
16
ansible/roles/acme_forward/templates/nginx.conf.j2
Normal file
16
ansible/roles/acme_forward/templates/nginx.conf.j2
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# Managed by Ansible (role acme_forward).
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
server_tokens off;
|
||||
access_log off;
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
proxy_pass http://{{ asxpio_ops_vpc_ip }};
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 404;
|
||||
}
|
||||
}
|
||||
|
|
@ -35,6 +35,7 @@
|
|||
- { role: sillytavern, tags: [sillytavern] }
|
||||
- { role: minecraft, tags: [minecraft] }
|
||||
- { role: xmpp, tags: [xmpp] }
|
||||
- { role: acme_forward, tags: [acme_forward, xmpp] }
|
||||
- { role: xray, tags: [xray] }
|
||||
|
||||
# Late: restarting Forgejo briefly cuts the runner off from its job log
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue