Operating day to day
Everything below runs on the host as root over SSH — the admin plane never touches the browser surfaces.
Users
provision-user.sh maya # add a user (container + routes + ssh port)
deprovision-user.sh maya # remove — keeps her home directory
deprovision-user.sh maya --purge-home # remove + delete home (irreversible)Support a user without disturbing anyone else:
podman exec -it comcon-maya bash # inside her container
ssh -p 2200 dev@<host> # her remote-attach port
podman exec comcon-maya comcon-cdp list # her open browser tabsAgent bricked its own environment? Recreate the container — the home volume survives, so projects, dotfiles, and sessions persist while the OS layer resets to the image.
Sharing between users
Shared directories live in /srv/workspace/shares/<name> and mount into each member's container — declared in shares.tsv as ro or rw. Use a live share for pair-working and assets; use git remotes for real code collaboration.
Upgrading the image
- Edit the Containerfile per the generation spec.
podman build -t comcon:latest— tag the old one ascomcon:prevfirst.- Recreate each container (
podman rm -f comcon-<u>+provision-user.sh <u>). Same ports, home survives, downtime is seconds. - On DigitalOcean, the next hibernate bakes the new image into the snapshot automatically.
Park and resume
hibernate.sh --yes # do: stop -> poweroff -> snapshot -> destroy
# other targets: rclone /srv -> stop containers
warmup.sh # do: droplet from snapshot -> DNS -> byte-identical
# other targets: pull /srv -> recreate containersA routine reboot is always safe — containers carry --restart always and /srv is the local source of truth. But a powered-off droplet still bills; never leave one off. Hibernate instead.
For an off-site copy on DigitalOcean too, hibernate.sh --archive also syncs /srv to object storage. Scheduled backups run every few hours while the host is active.
Tearing down
teardown.sh --yesDestroys droplet, snapshots, and remote state. Irreversible — hibernate first if unsure.