Dev Environment Runbook
Operational procedures for the dev LXC (131).
Redeploy
Trigger via Forgejo Actions (push to main touching relevant paths) or manual dispatch:
Forgejo > holo/chizuru-v2 > Actions > Deploy Dev > Run workflow
The workflow runs create-lxc.yml (idempotent) then dev.yml.
Update Claude Code CLI
SSH into the LXC and update globally:
ssh [email protected]
npm update -g @anthropic-ai/claude-code
claude --version
Or add the update to dev.yml and redeploy.
Update MCP Server Binaries
Go binaries (gitea-mcp, mcp-grafana)
- Check for new releases:
- gitea-mcp:
https://gitea.com/gitea/gitea-mcp/releases - mcp-grafana:
https://github.com/grafana/mcp-grafana/releases - Update the version vars in
ansible/playbooks/dev.yml:gitea_mcp_version: "v0.2.0" # new version mcp_grafana_version: "v0.5.0" # new version - Commit, push, redeploy.
Python MCP servers (proxmox-plus, mediabot)
These are installed via pip install -e . from cloned repos. To update:
ssh [email protected]
# proxmox-plus
cd /opt/mcp-servers/proxmox-plus
git pull
.venv/bin/pip install -e .
# mediabot
# Files are copied from chizuru-v2 repo — redeploy via workflow
Add a New Repo
ssh [email protected]
cd /opt/code-server/workspace
git clone https://claude:<token>@git.eva-00.network/holo/<repo>.git
cd <repo>
git config user.name "claude"
git config user.email "[email protected]"
To make it part of IaC, add the repo name to the forgejo_repos list in dev.yml.
Troubleshooting
code-server not loading
ssh [email protected]
docker ps -a # check container status
docker logs code-server-dev
docker logs oauth2-proxy-code-server-dev
oauth2-proxy 500 error
Usually means the PocketID OIDC client is misconfigured or the cookie secret is wrong:
docker logs oauth2-proxy-code-server-dev 2>&1 | tail -20
Check Vault secrets match PocketID config:
- Client ID and secret must match the OIDC client at auth.eva-00.network
- Cookie secret must be exactly 16 raw characters
- Redirect URL must be https://dev.eva-00.network/oauth2/callback
Claude Code MCP servers not connecting
ssh [email protected]
# Test forgejo MCP
/opt/mcp-servers/gitea-mcp -transport stdio -host https://git.eva-00.network -insecure
# Test grafana MCP
GRAFANA_URL=https://grafana.eva-00.network GRAFANA_SERVICE_ACCOUNT_TOKEN=<token> /opt/mcp-servers/mcp-grafana -transport stdio
# Check Claude config
cat /root/.claude/settings.json | python3 -m json.tool
Alloy not shipping logs
docker logs alloy 2>&1 | tail -20
# Check Loki is reachable
curl -s http://192.168.1.108:3100/ready
Backup and Restore
Verify backup
Check PBS for LXC 131 snapshots:
ssh [email protected] # cajita-elite
proxmox-backup-client list --repository pbs-local
Or check via Proxmox UI: Datacenter > Storage > cajita-elite > Content > filter by 131.
Full restore from scratch
If the LXC is destroyed:
- Dispatch
create-lxcworkflow withtarget_lxc=dev - Dispatch
Deploy Devworkflow - Re-clone any repos not in the
forgejo_reposlist - Re-authenticate Claude Code CLI (
claudewill prompt for API key)
Restore from PBS backup
Via Proxmox UI: select PBS storage > find LXC 131 backup > Restore.
This restores everything: repos, VS Code config, Claude memory, MCP server configs.