CLI tool to discover, manage, and document your IT infrastructure and home lab.
500K+
RackPeek is a Web UI & CLI tool for documenting and managing home lab and small-scale IT infrastructure.
It helps you track hardware, services, networks, and their relationships in a clear, scriptable, and reusable way — without enterprise bloat, proprietary lock-in, or drowning in unnecessary metadata and process.
Your data lives in a single human-readable YAML file that you own outright. No database, no telemetry, no ads, no tracking, no artificial restrictions.
RackPeek is open source and community-driven. Code, docs, ideas, bug reports, and real-world usage feedback are all massively appreciated. If you run a home lab, you belong here.
GitHub · Live Demo · Docs · Discord
docker volume create rackpeek-config
docker run -d \
--name rackpeek \
-p 8080:8080 \
-v rackpeek-config:/app/config \
aptacode/rackpeek:latest
Then open http://localhost:8080.
services:
rackpeek:
image: aptacode/rackpeek:latest
container_name: rackpeek
ports:
- "8080:8080"
volumes:
- rackpeek-config:/app/config
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-fsS", "http://localhost:8080/health"]
interval: 30s
timeout: 5s
start_period: 15s
retries: 3
volumes:
rackpeek-config:
docker compose up -d
A named volume avoids permission issues entirely and is recommended for most users.
RackPeek runs as a non-root user, UID/GID 1654:1654. A bind-mounted host directory must be writable by that user, or RackPeek cannot create or update your config:
mkdir -p config
sudo chown 1654:1654 config
docker run -d \
--name rackpeek \
-p 8080:8080 \
-v $(pwd)/config:/app/config:Z \
aptacode/rackpeek:latest
The :Z suffix is required on SELinux-enabled systems (Fedora, RHEL, CentOS) and can be omitted elsewhere.
To confirm the user the container runs as:
docker exec rackpeek id
# uid=1654(app) gid=1654(app)
If you see Access to the path '/app/config/config.yaml' is denied., this is almost always the cause. RackPeek needs to create config.yaml, update it, and write backup files alongside it.
RackPeek stores all state as YAML under /app/config:
config/
└── config.yaml
Back it up by copying that file, or commit it to git — it is plain text and diffs cleanly. That is the point.
Session keys are persisted under config/.dataprotection on the same volume, so browser logins survive container upgrades.
| Variable | Default | What it does |
|---|---|---|
RPK_YAML_DIR | /app/config | Directory holding config.yaml. |
RPK_API_KEY | (unset) | Enables the HTTP API. While unset the API is disabled, returning 503 to every request. Once set, clients must send a matching X-Api-Key header. |
GIT_TOKEN | (unset) | Enables optional git integration, committing and pushing config changes. Git features stay off while unset. |
GIT_USERNAME | git | The username the token belongs to. Set this alongside GIT_TOKEN for most hosts. |
GIT_INSECURE_TLS | (unset) | Set to true to skip TLS validation for a self-hosted Gitea/GitLab behind a private CA. Leave unset for public hosts. |
| Port | 8080 |
| Volume | /app/config |
| Health check | GET /health → rackpeek, no auth required |
| Runs as | 1654:1654 (non-root) |
If you run with read_only: true, also mount a tmpfs for the app's temp directory:
read_only: true
tmpfs:
- /app/tmp:uid=1654,gid=0
The same image ships the rpk CLI alongside the Web UI, operating on the same config:
docker exec -it rackpeek rpk --help
docker exec -it rackpeek rpk servers add Server1
docker exec -it rackpeek rpk systems list
The Web UI and CLI write to one YAML file without cross-process locking, so treat the UI as the source of truth while it is running.
Full command tree: CLI command reference.
| Tag | What it is | Platforms |
|---|---|---|
latest | Newest stable release. | amd64, arm64 |
vX.Y.Z | An exact release, e.g. v2.1.0. Pin this for production. | amd64, arm64 |
nightly | Latest build from staging. Early access, not for production. | amd64 |
nightly-<short-sha> | A specific nightly build. | amd64 |
RackPeek follows Semantic Versioning; the CLI binary and Docker image share the same version number.
Issues and contributions: github.com/Timmoth/RackPeek
Content type
Image
Digest
sha256:139f88077…
Size
126.5 MB
Last updated
16 days ago
docker pull aptacode/rackpeek