Skip to content

Data Volumes

siamakerlab edited this page May 23, 2026 · 5 revisions

Data Volumes & Backup

Since v0.7.0, every persistent path lives under one host directory (./vibe-coder-data/), making backup/migration a one-line tar.

Full mapping

./vibe-coder-data/                                       container
─────────────────                                        ─────────
├── workspace/                              →  /workspace                       (sources + APKs)
├── server/                                 →  /data                            (SQLite + logs)
├── dev-tools/
│   ├── android-sdk/                        →  /opt/android-sdk                 (3-4 GB)
│   ├── gradle/                             →  /home/vibe/.gradle               (1-2 GB)
│   ├── npm-global/                         →  /home/vibe/.local                (MCP `npm -g`)
│   ├── npm-cache/                          →  /home/vibe/.npm                  (npx cache)
│   ├── playwright/                         →  /home/vibe/.cache/ms-playwright  (optional, ~300 MB)
│   └── config/                             →  /home/vibe/.config               (tool config)
└── claude/                                 →  /home/vibe/.claude               (OAuth/API key/MCP registrations)

The server image itself (~600 MB) contains only the Ktor body + Claude CLI + JDK + Node — every byte that took effort to download lives in your host directory.

Backup

# Stop the container so SQLite is in a quiescent state (optional but recommended).
docker compose stop vibe-coder-server

# One-line backup
tar czf vibe-coder-data-$(date +%F).tar.gz vibe-coder-data/

# Resume
docker compose start vibe-coder-server

Restore / migrate to another machine

# On the destination
mkdir -p ~/vibe-coder && cd ~/vibe-coder
curl -fsSL https://raw.githubusercontent.com/siamakerlab/vibe-coder-server/main/docker/compose.yml -o compose.yml
curl -fsSL https://raw.githubusercontent.com/siamakerlab/vibe-coder-server/main/docker/.env.example -o .env
# Edit .env (PUID/PGID likely changes!)

# Drop the archive into place
scp source-host:~/vibe-coder/vibe-coder-data-*.tar.gz .
tar xzf vibe-coder-data-*.tar.gz

docker compose up -d

PUID / PGID change is the only gotcha — file ownership inside vibe-coder-data/ was set to the source host's uid:gid. If destination host's id -u/-g differ, the entrypoint will chown the top-level dirs but not deep contents. If you see permission errors, either:

sudo chown -R $(id -u):$(id -g) vibe-coder-data/   # easiest

or update .env PUID/PGID to match the source host's values.

Sizing guidance

Use case Recommended free disk
First boot, no projects yet ~5 GB (SDK 3-4 GB + image 600 MB + buffer)
Active project, ~10 builds done ~10 GB
Heavy use with Playwright + several MCP-installed packages ~15 GB
Production-leaning (artifact retention 20+ APKs each ~100 MB) ~20 GB

The artifactKeepCount in server.yml (default 20) bounds APK growth.

What's NOT in ./vibe-coder-data/

  • Docker container's own writable layer — ephemeral, recreated on --force-recreate. If you put state here by accident (writing to a non-mounted path inside the container), it'll vanish.

  • Image layers — pulled fresh on docker compose pull.

  • Host SSH agent — not forwarded. SSH keys for git clone live inside the container at /home/vibe/.ssh/, which IS bind-mounted as part of claude/ — wait, no. ~/.ssh is NOT in the bind mount list above. This means: SSH keys are auto-regenerated on first re-clone after a fresh data directory. If you want to preserve the SSH key across full reinstalls, add ~/.ssh to your compose volumes manually:

    - ./vibe-coder-data/ssh:/home/vibe/.ssh

    This is intentional — the host SSH key registered with GitHub is your cleanest path; vibe-coder-generated keys are a fallback.

docker compose down -v warning

docker compose down -v removes Docker named volumes. v0.7.0+ uses bind mounts only (everything in ./vibe-coder-data/), so down -v is safe in clean installations. But if you're mid-migration from a v0.6.x install, you may still have orphaned named volumes — those would be deleted. Use docker volume ls to check first.

Disk usage diagnosis

du -sh vibe-coder-data/*/
#
# 1.2G  vibe-coder-data/dev-tools
# 8.4G  vibe-coder-data/workspace
# 120M  vibe-coder-data/server
# 8.0K  vibe-coder-data/claude

Inside dev-tools/:

du -sh vibe-coder-data/dev-tools/*/
# 3.7G  android-sdk
# 1.8G  gradle
# 420M  npm-global
# 280M  npm-cache
# 310M  playwright
# 4.0K  config

Clone this wiki locally