Skip to content

Installation

RackDaddy edited this page Aug 2, 2026 · 1 revision

Installation

RackDaddy Lab runs as a self-contained Docker Compose stack: PostgreSQL, the API, and the web frontend. Nothing else is required to get started.

Requirements

  • Docker and the Docker Compose plugin. On a fresh host: curl -fsSL https://get.docker.com | sh.
  • git (to clone the repo).
  • About 2 vCPU, 4 GB RAM, 10 GB disk. The first --build compiles the frontend, which needs roughly 4 GB of RAM available; images are around 1.5 GB, plus the first-boot device-library seed and background image generation.
  • If you run this in a Proxmox LXC, the container must be unprivileged with features: nesting=1,keyctl=1 so Docker works inside it.

Install

git clone https://github.com/RackDaddyDCIM/RackDaddy-Lab.git
cd RackDaddy-Lab
docker compose -f docker-compose.lab.yml up -d --build

The API runs prisma db push on first boot to create the schema, then seeds around 5,589 device types from the bundled library and generates schematic placeholder images in the background.

Open http://localhost:8080 and sign in with:

  • Username: admin
  • Password: rackdaddy

Change the port with LAB_PORT (for example LAB_PORT=9000 docker compose -f docker-compose.lab.yml up -d).

Secure it before you expose it

The defaults are deliberately weak placeholders for a quick start. Change them before putting the Lab on any network you do not fully trust.

  1. Database password. Set DB_PASSWORD in a .env file next to the compose file before the very first up (the password is baked into the database volume on first init).

  2. Admin password. Generate a new scrypt hash and set LOCAL_AUTH_PASSWORD_HASH. With Docker (no local Node needed):

    docker run --rm node:22-alpine node -e "const c=require('crypto');const s=c.randomBytes(16);console.log(s.toString('hex')+':'+c.scryptSync(process.argv[1],s,64).toString('hex'))" 'your-new-password'

    Copy the salt:hash output into LOCAL_AUTH_PASSWORD_HASH.

  3. Session secret. Set LOCAL_AUTH_SECRET to a long random string:

    openssl rand -hex 32

Example .env:

DB_PASSWORD=please-change-me
LOCAL_AUTH_USER=admin
LOCAL_AUTH_PASSWORD_HASH=<generated-hash>
LOCAL_AUTH_SECRET=<long-random-string>
SITE_NAME=My Lab

Apply changes with docker compose -f docker-compose.lab.yml up -d.

Run behind TLS

Only the frontend container is exposed, and it already reverse-proxies /api and the /ws WebSocket, so you terminate TLS in front of a single port. Any reverse proxy works. Caddy is the shortest path to automatic HTTPS:

rackdaddy.example.com {
    reverse_proxy localhost:8080
}

See Configuration for the full list of environment variables, and the DEPLOYMENT.md in the repo for backups, upgrades, and troubleshooting.

Clone this wiki locally