After bootstrap, prints rsync commands to pull recovered compose files
back to the workstation for committing. All server commands shown as
ssh hetzner_root '...' for copy-paste convenience.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sudo -u infra_service inherits the working dir (/root), causing uv to
fail reading /root/uv.toml. Running from /tmp avoids the permission issue.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
docker-autocompose 1.0.1 uses distutils (removed in Python 3.12) and
the old docker SDK (docker.Client). Replace with a small inline script
using docker>=7.0 + pyyaml, run via uv --with inline dependencies.
Uses com.docker.compose.service label for correct service names.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
setup.sh only recovers umami and nginx proxy manager.
Padelnomics is an app-specific concern for its own repo.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- gitea/docker-compose.yml: single container, SQLite, port 3000, data at
/data/server-infra/gitea/
- setup.sh: restructure to separate recovery (one-time) from deploy (idempotent)
for all services; add data dirs for gitea; loop over all services on deploy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
setup.sh recovers docker-compose files from running containers via
uvx docker-autocompose, creates infra_service system user, and deploys
to /opt/server-infra/.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>