# frankoslaw/homelab-2026 architecture

> Architecture diagram of the GitHub repository frankoslaw/homelab-2026, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/frankoslaw/homelab-2026
- Repository: https://github.com/frankoslaw/homelab-2026

## Overview

This repository configures homelab hosts and describes container deployments: Ansible playbooks and roles automate host setup, while Quadlet files define production rootless Podman services and Compose files serve local development and testing. The README documents those tool roles but not exact playbook-to-role or service-to-service wiring, so the graph avoids inferring those links. The Compose catalog includes additional applications whose production deployment is not represented by Quadlet files in this tree.

Main entry points: [`provisioning/setup_host.yml`](https://github.com/frankoslaw/homelab-2026/blob/main/provisioning/setup_host.yml) (Host setup), [`quadlets/bookstack`](https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/bookstack) (BookStack services), [`quadlets/forgejo`](https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/forgejo) (Forgejo service), [`quadlets/traefik`](https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/traefik) (Traefik proxy)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_provisioning["Host provisioning"]
  node_setup["Host setup<br/>[setup_host.yml]"]
  node_bootstrap["Bootstrap<br/>[bootstrap.yml]"]
  node_common["Common configuration"]
  node_docker_install["Docker install"]
  node_podman_install["Podman install"]
  node_podman_user["Podman user setup"]
end

subgraph group_production["Production services"]
  node_quadlet_bookstack["BookStack services"]
  node_quadlet_forgejo["Forgejo service"]
  node_quadlet_traefik["Traefik proxy"]
  node_quadlet_whoami["Whoami service"]
end

subgraph group_local["Local app manifests"]
  node_compose_bookstack["BookStack manifest<br/>[compose.yml]"]
  node_compose_diun["Diun manifest<br/>[compose.yml]"]
  node_compose_dockge["Dockge manifest<br/>[compose.yml]"]
  node_compose_dozzle["Dozzle manifest<br/>[compose.yml]"]
  node_compose_forgejo["Forgejo manifest<br/>[compose.yml]"]
  node_compose_memos["Memos manifest<br/>[compose.yml]"]
  node_compose_passbolt["Passbolt manifest<br/>[compose.yml]"]
  node_compose_sftpgo["SFTPGo manifest<br/>[compose.yml]"]
  node_compose_traefik["Traefik manifest<br/>[compose.yml]"]
  node_compose_uptime["Uptime Kuma manifest<br/>[compose.yml]"]
end

subgraph group_runtime["Container runtimes"]
  node_podman["Rootless Podman"]
  node_compose_runtime["Compose runtime"]
end

node_admin(("Homelab admin"))

node_admin -->|"runs"| node_setup
node_admin -->|"runs"| node_bootstrap
node_setup -->|"configures hosts"| node_common
node_setup -->|"automates setup"| node_docker_install
node_setup -->|"automates setup"| node_podman_install
node_setup -->|"automates setup"| node_podman_user
node_quadlet_bookstack -->|"defines services for"| node_podman
node_quadlet_forgejo -->|"defines service for"| node_podman
node_quadlet_traefik -->|"defines proxy for"| node_podman
node_quadlet_whoami -->|"defines service for"| node_podman
node_compose_bookstack -.->|"runs with"| node_compose_runtime
node_compose_diun -.->|"runs with"| node_compose_runtime
node_compose_dockge -.->|"runs with"| node_compose_runtime
node_compose_dozzle -.->|"runs with"| node_compose_runtime
node_compose_forgejo -.->|"runs with"| node_compose_runtime
node_compose_memos -.->|"runs with"| node_compose_runtime
node_compose_passbolt -.->|"runs with"| node_compose_runtime
node_compose_sftpgo -.->|"runs with"| node_compose_runtime
node_compose_traefik -.->|"runs with"| node_compose_runtime
node_compose_uptime -.->|"runs with"| node_compose_runtime

click node_setup "https://github.com/frankoslaw/homelab-2026/blob/main/provisioning/setup_host.yml"
click node_bootstrap "https://github.com/frankoslaw/homelab-2026/blob/main/provisioning/bootstrap.yml"
click node_common "https://github.com/frankoslaw/homelab-2026/tree/main/provisioning/roles/common"
click node_docker_install "https://github.com/frankoslaw/homelab-2026/tree/main/provisioning/roles/docker_install"
click node_podman_install "https://github.com/frankoslaw/homelab-2026/tree/main/provisioning/roles/podman_install"
click node_podman_user "https://github.com/frankoslaw/homelab-2026/tree/main/provisioning/roles/podman_user"
click node_quadlet_bookstack "https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/bookstack"
click node_quadlet_forgejo "https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/forgejo"
click node_quadlet_traefik "https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/traefik"
click node_quadlet_whoami "https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/whoami"
click node_compose_bookstack "https://github.com/frankoslaw/homelab-2026/blob/main/compose/bookstack/compose.yml"
click node_compose_diun "https://github.com/frankoslaw/homelab-2026/blob/main/compose/diun/compose.yml"
click node_compose_dockge "https://github.com/frankoslaw/homelab-2026/blob/main/compose/dockge/compose.yml"
click node_compose_dozzle "https://github.com/frankoslaw/homelab-2026/blob/main/compose/dozzle/compose.yml"
click node_compose_forgejo "https://github.com/frankoslaw/homelab-2026/blob/main/compose/forgejo/compose.yml"
click node_compose_memos "https://github.com/frankoslaw/homelab-2026/blob/main/compose/memos/compose.yml"
click node_compose_passbolt "https://github.com/frankoslaw/homelab-2026/blob/main/compose/passbolt/compose.yml"
click node_compose_sftpgo "https://github.com/frankoslaw/homelab-2026/blob/main/compose/sftpgo/compose.yml"
click node_compose_traefik "https://github.com/frankoslaw/homelab-2026/blob/main/compose/traefik/compose.yml"
click node_compose_uptime "https://github.com/frankoslaw/homelab-2026/blob/main/compose/uptime_kuma/compose.yml"

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_setup,node_bootstrap,node_common,node_docker_install,node_podman_install,node_podman_user toneBlue
class node_quadlet_bookstack,node_quadlet_forgejo,node_quadlet_traefik,node_quadlet_whoami toneAmber
class node_compose_bookstack,node_compose_diun,node_compose_dockge,node_compose_dozzle,node_compose_forgejo,node_compose_memos,node_compose_passbolt,node_compose_sftpgo,node_compose_traefik,node_compose_uptime toneMint
class node_podman,node_compose_runtime toneRose
class node_admin toneIndigo
```

## Components

### Host provisioning

- [Host setup](https://github.com/frankoslaw/homelab-2026/blob/main/provisioning/setup_host.yml): `provisioning/setup_host.yml`
- [Bootstrap](https://github.com/frankoslaw/homelab-2026/blob/main/provisioning/bootstrap.yml): `provisioning/bootstrap.yml`
- [Common configuration](https://github.com/frankoslaw/homelab-2026/tree/main/provisioning/roles/common): `provisioning/roles/common`
- [Docker install](https://github.com/frankoslaw/homelab-2026/tree/main/provisioning/roles/docker_install): `provisioning/roles/docker_install`
- [Podman install](https://github.com/frankoslaw/homelab-2026/tree/main/provisioning/roles/podman_install): `provisioning/roles/podman_install`
- [Podman user setup](https://github.com/frankoslaw/homelab-2026/tree/main/provisioning/roles/podman_user): `provisioning/roles/podman_user`

### Production services

- [BookStack services](https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/bookstack): `quadlets/bookstack`
- [Forgejo service](https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/forgejo): `quadlets/forgejo`
- [Traefik proxy](https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/traefik): `quadlets/traefik`
- [Whoami service](https://github.com/frankoslaw/homelab-2026/tree/main/quadlets/whoami): `quadlets/whoami`

### Local app manifests

- [BookStack manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/bookstack/compose.yml): `compose/bookstack/compose.yml`
- [Diun manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/diun/compose.yml): `compose/diun/compose.yml`
- [Dockge manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/dockge/compose.yml): `compose/dockge/compose.yml`
- [Dozzle manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/dozzle/compose.yml): `compose/dozzle/compose.yml`
- [Forgejo manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/forgejo/compose.yml): `compose/forgejo/compose.yml`
- [Memos manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/memos/compose.yml): `compose/memos/compose.yml`
- [Passbolt manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/passbolt/compose.yml): `compose/passbolt/compose.yml`
- [SFTPGo manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/sftpgo/compose.yml): `compose/sftpgo/compose.yml`
- [Traefik manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/traefik/compose.yml): `compose/traefik/compose.yml`
- [Uptime Kuma manifest](https://github.com/frankoslaw/homelab-2026/blob/main/compose/uptime_kuma/compose.yml): `compose/uptime_kuma/compose.yml`

### Container runtimes

- **Rootless Podman**
- **Compose runtime**

### Other components

- **Homelab admin**

## Connections

- Homelab admin → Host setup: runs
- Homelab admin → Bootstrap: runs
- Host setup → Common configuration: configures hosts
- Host setup → Docker install: automates setup
- Host setup → Podman install: automates setup
- Host setup → Podman user setup: automates setup
- BookStack services → Rootless Podman: defines services for
- Forgejo service → Rootless Podman: defines service for
- Traefik proxy → Rootless Podman: defines proxy for
- Whoami service → Rootless Podman: defines service for
- BookStack manifest → Compose runtime: runs with
- Diun manifest → Compose runtime: runs with
- Dockge manifest → Compose runtime: runs with
- Dozzle manifest → Compose runtime: runs with
- Forgejo manifest → Compose runtime: runs with
- Memos manifest → Compose runtime: runs with
- Passbolt manifest → Compose runtime: runs with
- SFTPGo manifest → Compose runtime: runs with
- Traefik manifest → Compose runtime: runs with
- Uptime Kuma manifest → Compose runtime: runs with
