homelab-blueprint/docker-compose-files/rackula/README.md
Brian Pooe 3a314b16d6 feat: add Koffan, Rackula, and SnapOtter stacks; expose Hermes dashboard
- new compose templates + READMEs for the three LXC apps (110-112)
- Makefile deploy targets (rackula pre-owns its data dir for uid 1001)
- Caddy vhosts for all four, incl. Hermes /auth/login redirect workaround
- firewall docs: CADDY->TRUSTED rules for LXCs 110-113
2026-07-06 20:50:34 +02:00

2.3 KiB

Rackula

Drag-and-drop server rack layout designer (front panels come from the NetBox devicetype-library). Runs as two containers: the rackula frontend and the rackula-api persistence backend, so layouts are stored on the server and shared across browsers/devices instead of living only in localStorage.

Persistent Data

rackula-api stores layouts as flat files in RACKULA_DATA_DIR (default ./data relative to where compose runs). The API runs as uid 1001, so the directory must exist and be owned by 1001:1001 before first start.

Installation

  1. Create .env if it does not exist:

    cp -n .env.sample .env
    
  2. Adjust the values in .env if needed:

    TZ=Africa/Johannesburg
    RACKULA_PORT=8080
    RACKULA_CORS_ORIGIN=https://rackula.<your-domain>
    
    DOCKERLOGGING_MAXFILE=3
    DOCKERLOGGING_MAXSIZE=10m
    
  3. Create the data directory:

    mkdir -p data && sudo chown 1001:1001 data
    
  4. Deploy with make:

    make deploy-rackula
    

    Manual equivalent:

    ./substitute_env.sh docker-compose-files/rackula/template.yaml docker-compose.rackula.yml .env
    docker compose -f docker-compose.rackula.yml config --quiet
    docker compose -f docker-compose.rackula.yml up -d
    
  5. Verify the containers and open http://<host-ip>:8080:

    docker compose -f docker-compose.rackula.yml ps
    docker compose -f docker-compose.rackula.yml logs --tail=100 rackula-api
    

Reverse Proxy

The Caddyfile proxies rackula.<domain> to this host on port 8080. After changing the port, update docker-compose-files/caddy/Caddyfile_template and run make reload-caddy.

Notes

  • Auth is disabled (RACKULA_AUTH_MODE=none) — the app is only reachable on the LAN and through Caddy. Switch to local and set RACKULA_AUTH_SESSION_SECRET, RACKULA_LOCAL_USERNAME and RACKULA_LOCAL_PASSWORD if it ever needs to be exposed more widely.
  • RACKULA_STORAGE_MODE=browser reverts to localStorage-only operation; the API container can then be dropped entirely.

Useful Commands

# Tail logs
docker compose -f docker-compose.rackula.yml logs -f

# Recreate after an image update
docker compose -f docker-compose.rackula.yml pull
docker compose -f docker-compose.rackula.yml up -d