Skip to content

๐Ÿ  Homelab Docker Documentation Handbook

Generated: 2026-07-23 ยท Timezone: Australia/Sydney
Purpose: Comprehensive reference for maintaining, troubleshooting, and rebuilding all Docker Compose services.


๐Ÿ“ Repository Layout

Docker/
โ”œโ”€โ”€ Cloud/
โ”‚   โ”œโ”€โ”€ Gaius/          โ† Cloud VPS #1 (Gaius)
โ”‚   โ”‚   โ”œโ”€โ”€ adguard/    โ† AdGuard DNS instance #2
โ”‚   โ”‚   โ””โ”€โ”€ tools/      โ† Dockflare agent
โ”‚   โ””โ”€โ”€ Starbuck/       โ† Cloud VPS #2 (Starbuck)
โ”‚       โ”œโ”€โ”€ adguard/    โ† AdGuard DNS instances #1 + Sync
โ”‚       โ”œโ”€โ”€ authentik/  โ† SSO / Identity Provider
โ”‚       โ”œโ”€โ”€ pangolin/   โ† Tunnelled reverse proxy
โ”‚       โ”œโ”€โ”€ services/   โ† Apprise, Gatus, Uptime Kuma
โ”‚       โ”œโ”€โ”€ tools/      โ† Dockflare agent
โ”‚       โ””โ”€โ”€ traefik/    โ† Cloud-facing Traefik
โ””โ”€โ”€ Homelab/
    โ”œโ”€โ”€ ARR-Stack/      โ† Media automation (*arr suite)
    โ”œโ”€โ”€ Bluesky/        โ† Self-hosted Bluesky PDS
    โ”œโ”€โ”€ ColonialOne/    โ† Glances system monitor
    โ”œโ”€โ”€ DockFlare/      โ† Cloudflare Tunnel manager
    โ”œโ”€โ”€ Docker/         โ† Core homelab service stacks
    โ”‚   โ”œโ”€โ”€ health/     โ† Fitbit & ResMed health exporters
    โ”‚   โ”œโ”€โ”€ librarrarian/ โ† Media transcoding dashboard
    โ”‚   โ”œโ”€โ”€ linkwarden/ โ† Bookmark manager
    โ”‚   โ”œโ”€โ”€ obsidian/   โ† Obsidian + CouchDB LiveSync
    โ”‚   โ”œโ”€โ”€ private/    โ† Private static sites
    โ”‚   โ”œโ”€โ”€ prometheus/ โ† Prometheus + all exporters
    โ”‚   โ”œโ”€โ”€ reitti/     โ† Location/route tracking
    โ”‚   โ”œโ”€โ”€ scanopy/    โ† Container vulnerability scanner
    โ”‚   โ”œโ”€โ”€ services/   โ† Main services megastack
    โ”‚   โ”œโ”€โ”€ tools/      โ† Newt, socket-proxy, traefik-kop
    โ”‚   โ””โ”€โ”€ velld/      โ† Database backup manager
    โ”œโ”€โ”€ Forgejo/        โ† Self-hosted Git server + CI runner
    โ”œโ”€โ”€ Immich/         โ† Photo library & ML
    โ”œโ”€โ”€ Media/
    โ”‚   โ”œโ”€โ”€ services/   โ† Media companion apps
    โ”‚   โ””โ”€โ”€ tools/      โ† RouteGhost, traefik-kop
    โ”œโ”€โ”€ Traefik/        โ† Homelab reverse proxy (primary)
    โ”œโ”€โ”€ VPNnet/         โ† WireGuard VPN + Tailscale exit node
    โ””โ”€โ”€ komodo-tools/   โ† Komodo socket proxy

๐Ÿ“„ Stack Documentation Index

Stack Host Doc Link
AdGuard (Gaius) Cloud โ€“ Gaius VPS adguard-gaius.md
AdGuard (Starbuck) Cloud โ€“ Starbuck VPS adguard-starbuck.md
Authentik Cloud โ€“ Starbuck VPS authentik.md
Pangolin Cloud โ€“ Starbuck VPS pangolin.md
Starbuck Services Cloud โ€“ Starbuck VPS starbuck-services.md
Starbuck/Gaius Tools Cloud โ€“ Both VPS cloud-tools.md
Starbuck Traefik Cloud โ€“ Starbuck VPS starbuck-traefik.md
ARR-Stack Homelab arr-stack.md
Bluesky PDS Homelab bluesky.md
ColonialOne Homelab colonialone.md
DockFlare Homelab dockflare.md
Forgejo Homelab forgejo.md
Health Exporters Homelab health.md
Immich Homelab immich.md
Librarrarian Homelab librarrarian.md
Linkwarden Homelab linkwarden.md
Media Services Homelab media-services.md
Media Tools Homelab media-tools.md
Obsidian Homelab obsidian.md
Prometheus Stack Homelab prometheus.md
qBittorrent Homelab qbittorrent.md
Reitti Homelab reitti.md
Scanopy Homelab scanopy.md
Services (Megastack) Homelab services.md
Tools Homelab tools.md
Traefik (Homelab) Homelab traefik.md
Velld Homelab velld.md
VPNnet Homelab vpnnet.md
komodo-tools Homelab komodo-tools.md

๐ŸŒ Shared External Networks

These Docker networks must be created before bringing up stacks that reference them as external: true.

docker network create traefik
docker network create database
docker network create internal
docker network create apps
docker network create backend
docker network create cloudflare-net
docker network create vpn-net
docker network create gatus-net

Tip: Run docker network ls to check which already exist.


๐Ÿ”‘ Key Conventions

Convention Description
PUID=1027 / PGID=100 Standard unprivileged user/group across all media services
TZ=Australia/Sydney Global timezone for all containers
backup=media / backup=services Docker labels used by backup tooling to tag containers
read_only: true + tmpfs Hardened containers using 11notes images
traefik-kop Syncs Traefik labels from remote hosts via Redis
dockflare Manages Cloudflare Tunnel routes from Docker labels
.env files Secrets are stored in .env alongside each compose.yaml

๐Ÿš€ Cloudflare Pages Deployment via Forgejo

This documentation can be automatically published as a static site on Cloudflare Pages using Forgejo Actions.

How It Works

Push to Forgejo  โ†’  Forgejo Actions runner  โ†’  Build (optional)  โ†’  Cloudflare Pages deploy

Setup Steps

1. Create a Cloudflare Pages Project

  1. Go to Cloudflare Dashboard โ†’ Workers & Pages โ†’ Create Application โ†’ Pages
  2. Choose Direct Upload (Wrangler CLI deploys from CI)
  3. Name your project e.g. homelab-docs

2. Get Cloudflare Credentials

Item Where to find it
Account ID Right sidebar of the Cloudflare dashboard
API Token My Profile โ†’ API Tokens โ†’ Create Token โ†’ use Edit Cloudflare Workers template + add Pages permissions

3. Add Secrets to Forgejo

In your Forgejo repo: Settings โ†’ Secrets โ†’ Actions

Secret Name Value
CLOUDFLARE_API_TOKEN Your Cloudflare API token
CLOUDFLARE_ACCOUNT_ID Your Cloudflare account ID

4. Create the Forgejo Actions Workflow

Create .forgejo/workflows/deploy-docs.yml:

name: Deploy Docs to Cloudflare Pages

on:
  push:
    branches:
      - main
    paths:
      - 'Documentation/**'

jobs:
  deploy:
    runs-on: docker
    container:
      image: node:20-alpine
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install Wrangler
        run: npm install -g wrangler

      - name: Deploy to Cloudflare Pages
        env:
          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
        run: |
          wrangler pages deploy Documentation \
            --project-name=homelab-docs \
            --branch=main \
            --commit-dirty=true

5. Optional โ€” MkDocs Material for a Polished Wiki

For a full wiki experience, add mkdocs.yml at the repo root and update the workflow:

      - name: Setup Python
        run: apk add python3 py3-pip

      - name: Install MkDocs Material
        run: pip install mkdocs-material

      - name: Build docs
        run: mkdocs build --site-dir public

      - name: Deploy to Cloudflare Pages
        env:
          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
        run: |
          wrangler pages deploy public \
            --project-name=homelab-docs \
            --branch=main

[!NOTE] The Documentation/ directory is served as the site root. Cloudflare Pages will automatically serve index.html if you run a static site generator like MkDocs.


โš ๏ธ Important Security Notes

[!CAUTION] Several compose files contain plaintext credentials (passwords, API keys, WireGuard private keys) directly in the YAML. These should be migrated to .env files or Docker secrets. Do not commit these files to a public repository without scrubbing secrets first.

[!WARNING] The prometheus/compose.yaml stack contains exposed API keys for Sonarr, Radarr, Lidarr, Prowlarr, qBittorrent, and UniFi. Rotate these keys if the repo is ever made public.


๐Ÿค– Generation Prompt Reference

This documentation suite was originally generated using the following prompt:

Act as a senior DevOps and homelab documentation engineer. 
Analyze the following Docker Compose file(s) and write clean, comprehensive, and human-readable markdown documentation for my self-hosted homelab.

The docker compose files are inside this repo, the documentation files are in the Documentation directory

Please structure the generated documentation with the following sections:
1. **Overview**: A brief summary of what this stack does and its core purpose.
2. **Architecture & Services**: A bulleted breakdown of each container/service, its role, and its exposed internal/external ports.
3. **Networking**: Explanation of custom networks used, bridge modes, or reverse proxy integration (e.g., Nginx Proxy Manager, Traefik).
4. **Persistent Storage**: Details on volumes and bind mounts, explaining where data is stored on the host machine.
5. **Environment Variables**: A table or list describing all required environment variables and secrets (leave out sensitive passwords/keys).
6. **Access & Usage**: Default URLs, login instructions (if standard), and basic health-check or startup commands.
7. **Maintenance & Backup**: Recommendations on how to update containers and backup their specific persistent volumes.

Keep the tone practical, concise, and optimized for an Obsidian or BookStack homelab wiki.

Also show a way on how to show this on a cloudflare pages page via forgejo