add: add CLAUDE.md for homelab guidance and add compose files for karakeep, nginx-proxy-manager, and pihole services

This commit is contained in:
2026-05-02 02:38:05 +00:00
parent acb9ee5bfe
commit 5bee35eccf
4 changed files with 162 additions and 0 deletions

88
CLAUDE.md Normal file
View File

@@ -0,0 +1,88 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Overview
This is a personal homelab running 21 Docker Compose stacks on a single Linux host. Each service lives in its own subdirectory with an independent `compose.yaml` (or `docker-compose.yaml`). There is no CI/CD, no Makefile, and no shared orchestration layer — everything is managed manually.
## Common Commands
All commands must be run from within the relevant service directory:
```bash
# Start a stack (detached)
docker compose up -d
# Stop a stack
docker compose down
# Restart a single service within a stack
docker compose restart <service>
# Pull latest images and recreate
docker compose pull && docker compose up -d
# View logs
docker compose logs -f [service]
```
## Architecture
### Directory Layout
Each service is self-contained in its own directory. The pattern is:
- `compose.yaml` or `docker-compose.yaml` — service definition
- `.env` — secrets/overrides (only Authentik and SparkFitness use this; most others embed values inline)
- `compose.env` — Komodo-specific env file loaded via `--env-file`
### Storage
Two storage tiers are used across all stacks:
- `/docker/<service>/` — Local persistent data (databases, config, app state)
- `/nfs/media/` — NFS-mounted shared library for large binary data:
- `Movies/`, `Shows/`, `Musics/`, `Podcasts/` — consumed by Jellyfin, ARR stack, Navidrome
- `photo/library/` — Immich photo library
- `Books/Kavita Library/` — Kavita ebook collection
- `/nfs/torrent/` — qBittorrent download target (Radarr/Sonarr pick up from here)
### Authentication
**Authentik** (`authentik/`) is the central SSO/OIDC provider. Currently integrated with:
- **Paperless-NGX** — OIDC via `PAPERLESS_SOCIALACCOUNT_PROVIDERS`
- **Komodo** — OIDC via `KOMODO_OIDC_*` vars
When adding OIDC to a new service, the Authentik provider/application must be configured separately in the Authentik admin UI, and the client ID/secret wired into the service's compose file.
### Key Service Relationships
- **ARR stack** (Sonarr → qBittorrent → Radarr/Bazarr → `/nfs/torrent`) feeds content into Jellyfin
- **Komodo** manages container lifecycle across the host; the `periphery` agent mounts `/var/run/docker.sock`
- **Immich** uses `pgvecto-rs` (not stock PostgreSQL) — image version pinning matters for DB compatibility
- **Paperless-NGX** depends on Gotenberg (PDF rendering) and Tika (content extraction) sidecar containers
### Ports
Services are exposed on `localhost:80xx` ports (see individual compose files). A reverse proxy (not in this repo) sits in front and handles TLS/domain routing.
## Conventions
### Commit Messages
Follow the format used throughout git history:
```
add: <description> # new service or feature
fix: <description> # corrections
remove: <description> # deletions
```
### Environment Variables
- `TZ: Asia/Ho_Chi_Minh` is set on all containers
- LinuxServer.io images use `PUID`/`PGID` for file permission mapping
- All credentials go inline in compose files — never use `.env` files for new stacks
### Image Pinning
Most services pin to a specific tag or `latest`. When upgrading images that have associated databases (Immich, Paperless-NGX, Gitea), check upstream migration notes before pulling.