# blauwe-lucht/ansible-role-docker-webapps architecture

> Architecture diagram of the GitHub repository blauwe-lucht/ansible-role-docker-webapps, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/blauwe-lucht/ansible-role-docker-webapps
- Repository: https://github.com/blauwe-lucht/ansible-role-docker-webapps

## Overview

This Ansible role deploys multiple webapps behind an nginx reverse proxy on a Docker host. Its main workflow is to configure webapps and a domain, deploy the app and proxy containers, route site and test-subdomain traffic, and provide HTTPS using either Let’s Encrypt certificates with certbot renewal or self-signed certificates. The tree identifies the role’s task, template, and certificate files, but no source excerpts were supplied; relationships below are limited to capabilities and flows explicitly described in the README.

Main entry points: [`tasks/main.yml`](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/tasks/main.yml) (Role tasks), [`templates/docker-compose.yml.j2`](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/docker-compose.yml.j2) (Compose template), [`tasks/_ssl-site.yml`](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/tasks/_ssl-site.yml) (SSL site tasks), [`defaults/main.yml`](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/defaults/main.yml) (Role configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_deployment["Deployment"]
  node_role_config["Role configuration<br/>[main.yml]"]
  node_role_tasks["Role tasks<br/>[main.yml]"]
  node_compose_template["Compose template"]
  node_webapps["Webapp containers"]
end

subgraph group_routing["Proxy routing"]
  node_proxy["nginx proxy container"]
  node_nginx_sites["nginx site config<br/>[site-ssl.conf.j2]"]
  node_self_signed_site["Self-signed site config"]
end

subgraph group_certificates["TLS certificates"]
  node_ssl_site_tasks["SSL site tasks<br/>[_ssl-site.yml]"]
  node_cert_files["TLS support files"]
  node_certbot["certbot renewal container"]
end

node_operator(("Ansible operator"))
node_docker_host["Docker host"]
node_letsencrypt["Let's Encrypt"]
node_webapp_clients(("Webapp clients"))

node_operator -->|"runs role"| node_role_tasks
node_role_config -->|"configures"| node_role_tasks
node_role_tasks -->|"deploys containers"| node_docker_host
node_role_tasks -->|"generates compose"| node_compose_template
node_compose_template -->|"defines services"| node_webapps
node_compose_template -->|"defines proxy"| node_proxy
node_proxy -->|"forwards requests"| node_webapps
node_proxy -->|"uses site config"| node_nginx_sites
node_webapp_clients -->|"requests HTTPS"| node_proxy
node_role_tasks -->|"configures TLS"| node_ssl_site_tasks
node_ssl_site_tasks -->|"requests certificates"| node_letsencrypt
node_compose_template -->|"defines renewal"| node_certbot
node_certbot -->|"renews certificates"| node_letsencrypt
node_ssl_site_tasks -->|"uses self-signed TLS"| node_self_signed_site
node_ssl_site_tasks -.->|"uses TLS assets"| node_cert_files

click node_role_config "https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/defaults/main.yml"
click node_role_tasks "https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/tasks/main.yml"
click node_compose_template "https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/docker-compose.yml.j2"
click node_webapps "https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/docker-compose.yml.j2"
click node_proxy "https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/docker-compose.yml.j2"
click node_nginx_sites "https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/nginx/site-ssl.conf.j2"
click node_self_signed_site "https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/nginx/site-self-signed-ssl.conf.j2"
click node_ssl_site_tasks "https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/tasks/_ssl-site.yml"
click node_cert_files "https://github.com/blauwe-lucht/ansible-role-docker-webapps/tree/main/files/certbot"
click node_certbot "https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/docker-compose.yml.j2"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_role_config,node_role_tasks,node_compose_template,node_webapps,node_webapp_clients toneBlue
class node_proxy,node_nginx_sites,node_self_signed_site toneAmber
class node_ssl_site_tasks,node_cert_files,node_certbot toneMint
class node_operator,node_docker_host,node_letsencrypt toneIndigo
```

## Components

### Deployment

- [Role configuration](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/defaults/main.yml): `defaults/main.yml`
- [Role tasks](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/tasks/main.yml): `tasks/main.yml`
- [Compose template](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/docker-compose.yml.j2): `templates/docker-compose.yml.j2`
- [Webapp containers](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/docker-compose.yml.j2): `templates/docker-compose.yml.j2`

### Proxy routing

- [nginx proxy container](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/docker-compose.yml.j2): `templates/docker-compose.yml.j2`
- [nginx site config](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/nginx/site-ssl.conf.j2): `templates/nginx/site-ssl.conf.j2`
- [Self-signed site config](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/nginx/site-self-signed-ssl.conf.j2): `templates/nginx/site-self-signed-ssl.conf.j2`

### TLS certificates

- [SSL site tasks](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/tasks/_ssl-site.yml): `tasks/_ssl-site.yml`
- [TLS support files](https://github.com/blauwe-lucht/ansible-role-docker-webapps/tree/main/files/certbot): `files/certbot`
- [certbot renewal container](https://github.com/blauwe-lucht/ansible-role-docker-webapps/blob/main/templates/docker-compose.yml.j2): `templates/docker-compose.yml.j2`

### Other components

- **Ansible operator**
- **Docker host**
- **Let's Encrypt**
- **Webapp clients**

## Connections

- Ansible operator → Role tasks: runs role (evidence: `README.md`)
- Role configuration → Role tasks: configures (evidence: `README.md`)
- Role tasks → Docker host: deploys containers (evidence: `README.md`)
- Role tasks → Compose template: generates compose (evidence: `README.md`)
- Compose template → Webapp containers: defines services (evidence: `README.md`)
- Compose template → nginx proxy container: defines proxy (evidence: `README.md`)
- nginx proxy container → Webapp containers: forwards requests (evidence: `README.md`)
- nginx proxy container → nginx site config: uses site config (evidence: `README.md`)
- Webapp clients → nginx proxy container: requests HTTPS (evidence: `README.md`)
- Role tasks → SSL site tasks: configures TLS (evidence: `README.md`)
- SSL site tasks → Let's Encrypt: requests certificates (evidence: `README.md`)
- Compose template → certbot renewal container: defines renewal (evidence: `README.md`)
- certbot renewal container → Let's Encrypt: renews certificates (evidence: `README.md`)
- SSL site tasks → Self-signed site config: uses self-signed TLS (evidence: `README.md`)
- SSL site tasks → TLS support files: uses TLS assets
