- sanoid: daily snapshots (7d) + weekly (4w) for rpool/data (VM disks)
and rpool/ROOT (Proxmox OS); runs every 15 min via systemd timer
- syncoid: daily replication from rpool/data and pve-root to hdd/backups
at 02:00; first full sync completed successfully
- All VM disks (gitea, monitoring) now backed up to HDD pool
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Create claude-code user on Proxmox with chroot + ForceCommand internal-sftp
- Add dedicated SSH keypair (public key committed, private key in keys/)
- Update requirements to document that Claude Code runs in a persistent VM,
connects to other VMs via SSH, and to the Proxmox host via SFTP only
- Session persistence via tmux allows reconnecting from any WireGuard device
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Old values were exposed in plaintext in the initial commit history.
New values generated via `gitea generate secret`.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Node.js is required by JS-based actions (e.g. actions/checkout@v4)
on native host runners. python-pip is needed for ansible-lint install.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move group_vars into inventory/ so playbooks can find them (was only
visible to ad-hoc commands via CWD)
- Add Ansible Vault for sensitive variables (gitea/grafana passwords,
tokens, db credentials) with vault_password_file outside the repo
- Enable Gitea Actions and deploy act_runner with Docker backend on
the gitea VM
- Add .gitea/workflows/lint.yml to run ansible-lint on every push
- Set up Gitea → GitHub push mirror (sync_on_commit)
- Fix ansible.cfg stdout_callback for ansible-core 2.20 compatibility
- Add python-psycopg2 to gitea role (required for postgresql modules)
- Add docker to gitea_runner role (required by act_runner at startup)
- Exclude password hashes and VM images from git
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>