Add new Ansible roles and configuration for the edge proxy and private network architecture: ## New Roles: - **edge-traefik**: Edge reverse proxy that routes to private clients - Dynamic routing configuration for multiple clients - SSL termination at the edge - Routes traffic to private IPs (10.0.0.x) - **nat-gateway**: NAT/gateway configuration for edge server - IP forwarding and masquerading - Allows private network clients to access internet - iptables rules for Docker integration - **diun**: Docker Image Update Notifier - Monitors containers for available updates - Email notifications via Mailgun - Per-client configuration - **kuma**: Uptime monitoring integration - Registers HTTP monitors for client services - Automated monitor creation via API - Checks Authentik, Nextcloud, Collabora endpoints ## New Playbooks: - **setup-edge.yml**: Configure edge server with proxy and NAT ## Configuration: - **host_vars**: Per-client Ansible configuration (valk, white) - SSH bastion configuration for private IPs - Client-specific secrets file references This enables the scalable multi-tenant architecture where: - Edge server has public IP and routes traffic - Client servers use private IPs only (cost savings) - All traffic flows through edge proxy with SSL termination 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
58 lines
1.4 KiB
Django/Jinja
58 lines
1.4 KiB
Django/Jinja
---
|
|
# Diun configuration for {{ inventory_hostname }}
|
|
# Documentation: https://crazymax.dev/diun/
|
|
|
|
db:
|
|
path: /data/diun.db
|
|
|
|
watch:
|
|
workers: {{ diun_watch_workers }}
|
|
schedule: "{{ diun_schedule }}"
|
|
firstCheckNotif: false
|
|
|
|
defaults:
|
|
watchRepo: true
|
|
notifyOn:
|
|
- new
|
|
- update
|
|
|
|
providers:
|
|
docker:
|
|
watchByDefault: {{ diun_watch_all | lower }}
|
|
{% if diun_exclude_containers | length > 0 %}
|
|
excludeContainers:
|
|
{% for container in diun_exclude_containers %}
|
|
- {{ container }}
|
|
{% endfor %}
|
|
{% endif %}
|
|
|
|
notif:
|
|
{% if diun_notif_enabled and diun_notif_type == 'webhook' and diun_webhook_endpoint %}
|
|
webhook:
|
|
endpoint: {{ diun_webhook_endpoint }}
|
|
method: {{ diun_webhook_method }}
|
|
timeout: 10s
|
|
{% if diun_webhook_headers | length > 0 %}
|
|
headers:
|
|
{% for key, value in diun_webhook_headers.items() %}
|
|
{{ key }}: {{ value }}
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
{% if diun_slack_webhook_url %}
|
|
slack:
|
|
webhookURL: {{ diun_slack_webhook_url }}
|
|
{% endif %}
|
|
|
|
{% if diun_email_enabled and diun_smtp_username_final is defined and diun_smtp_password_final is defined and diun_smtp_password_final != '' %}
|
|
mail:
|
|
host: {{ diun_smtp_host }}
|
|
port: {{ diun_smtp_port }}
|
|
ssl: false
|
|
insecureSkipVerify: false
|
|
username: {{ diun_smtp_username_final }}
|
|
password: {{ diun_smtp_password_final }}
|
|
from: {{ diun_smtp_from }}
|
|
to: {{ diun_smtp_to }}
|
|
{% endif %}
|