Repository navigation
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.
-
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
--buildcompiles 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=1so Docker works inside it.
git clone https://github.com/RackDaddyDCIM/RackDaddy-Lab.git
cd RackDaddy-Lab
docker compose -f docker-compose.lab.yml up -d --buildThe 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).
The defaults are deliberately weak placeholders for a quick start. Change them before putting the Lab on any network you do not fully trust.
-
Database password. Set
DB_PASSWORDin a.envfile next to the compose file before the very firstup(the password is baked into the database volume on first init). -
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:hashoutput intoLOCAL_AUTH_PASSWORD_HASH. -
Session secret. Set
LOCAL_AUTH_SECRETto 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 LabApply changes with docker compose -f docker-compose.lab.yml up -d.
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.