-
Notifications
You must be signed in to change notification settings - Fork 1
Upgrade Guide
Upgrading is a pull-and-recreate in your ops compose directory. All data
under ./vibe-coder-data/ is preserved across image upgrades.
cd ~/vibe-coder
docker compose pull
docker compose up -d --force-recreate
docker compose logs -f vibe-coder-server # watch boot outputThe slim image carries only the Ktor server + Claude CLI + JDK + Node. The
build environment — Android SDK, Gradle cache, MCP servers, Claude
credentials, SSH key, keystores — lives in the ./vibe-coder-data/ bind
mounts and survives every image upgrade. You never re-download the SDK or
re-authenticate Claude just because you pulled a newer image.
docker compose stop
sudo tar czf vibe-coder-data-pre-upgrade-$(date +%F).tar.gz vibe-coder-data/
sudo chown $(id -u):$(id -g) vibe-coder-data-pre-upgrade-*.tar.gz
docker compose startsudo is needed because the PostgreSQL data directory
(vibe-coder-data/postgres/) is owned by UID 70 inside the container. For a
running-server alternative (logical PG dump + workspace tar) see
Data Volumes & Backup.
If you maintain your own compose.yml (rather than using the bundled one),
re-check it against the repo's docker/compose.yml after each upgrade so you
pick up any new bind mounts or environment variables. The bundled compose
already maps every persistent path:
- ./vibe-coder-data/dev-tools/ssh:/home/vibe/.ssh
- ./vibe-coder-data/dev-tools/keystores:/home/vibe/keystoresNew host directories are created empty on first boot. The entrypoint
generates an ED25519 SSH key into the .ssh mount on first boot if none
exists and never overwrites it afterwards — register the public key on your
Git host via Settings → SSH Key. Create signing keystores via
Settings → Keystores.
-
Back up
./vibe-coder-data/dev-tools/keystores/after creating each release keystore. Losing a release key blocks Play Store updates for that package permanently. - The PostgreSQL data directory (
vibe-coder-data/postgres/) must keep its UID 70 ownership. When copying data to another host, restore withsudo tarand leave that directory's ownership alone — fixingPUID/PGIDon the other top-level dirs is fine, but neverchownthe postgres dir. -
VIBECODER_DB_PASSWORDmust stay the same across a restore of the PostgreSQL data directory, or the restored data won't authenticate.
If a release misbehaves, pin the previous version and recreate:
cd ~/vibe-coder
sed -i 's|siamakerlab/vibe-coder-server:.*|siamakerlab/vibe-coder-server:<previous-version>|' compose.yml
docker compose pull
docker compose up -d --force-recreateThe unified ./vibe-coder-data/ layout keeps rollback data-safe. Restore
from a pre-upgrade snapshot if needed:
docker compose down
sudo rm -rf vibe-coder-data/
sudo tar xzf vibe-coder-data-pre-upgrade-*.tar.gz
docker compose up -dBy default compose.yml ships with :latest. To pin a specific tag:
image: siamakerlab/vibe-coder-server:<version>Pinning is recommended for production-leaning installs — bump deliberately after reading the CHANGELOG. The published image set on Docker Hub keeps older tags available indefinitely.