Dev Environment (LXC 131)
Dedicated remote development LXC running code-server with Claude Code CLI and all MCP servers. Provides a browser-based VS Code experience with full Claude Code integration, accessible from anywhere.
Overview
| Property | Value |
|---|---|
| LXC ID | 131 |
| IP | 192.168.1.131 |
| Pool | apps-pool (sde) |
| Disk | 20G |
| Memory | 4096MB |
| URL | https://dev.eva-00.network |
| Auth | PocketID OIDC via oauth2-proxy |
| Vault path | secret/code-server-dev |
Architecture
Browser (anywhere) -> dev.eva-00.network -> Caddy (105) -> oauth2-proxy (:4180) -> code-server (:8443)
VS Code Desktop -> SSH [email protected] -> same filesystem
- code-server runs in Docker (linuxserver image) for the web IDE
- Claude Code CLI, MCP servers, and repos live on the LXC filesystem
- The terminal in code-server runs on the LXC host, giving direct access to
claudeCLI
Access Methods
Browser (from anywhere)
- Navigate to
https://dev.eva-00.network - Authenticate via PocketID
- Open the terminal panel (`Ctrl+``)
- Run
claudefor a Claude Code session
VS Code Desktop (from home / VPN)
- SSH config on Mac:
Host dev HostName 192.168.1.131 User root - VS Code: Remote-SSH -> Connect to
dev - Open
/opt/code-server/workspace/as workspace - Use the integrated terminal for
claudeCLI
Folder Layout
/opt/
├── code-server/ # Docker service
│ ├── docker-compose.yml
│ ├── .env
│ ├── config/ # VS Code settings, extensions
│ └── workspace/ # Repos (mounted as /workspace in container)
│ ├── chizuru-v2/
│ ├── homelab-docs/
│ ├── homelab-notes/
│ └── .mcp.json
├── alloy/ # Monitoring
└── mcp-servers/ # MCP server binaries
├── gitea-mcp # Forgejo MCP (Go binary)
├── mcp-grafana # Grafana MCP (Go binary)
├── proxmox-plus/ # Proxmox MCP (Python venv)
└── mediabot-mcp/ # Mediabot MCP (Python venv)
/root/.claude/
└── settings.json # Claude Code CLI config
MCP Servers
All 5 MCP servers run on the LXC, connecting to the same homelab services as the Mac setup:
| Server | Binary | Config location |
|---|---|---|
| proxmox-plus | /opt/mcp-servers/proxmox-plus/.venv/bin/python |
/root/.claude/settings.json |
| forgejo | /opt/mcp-servers/gitea-mcp |
/root/.claude/settings.json + .mcp.json |
| grafana | /opt/mcp-servers/mcp-grafana |
/root/.claude/settings.json + .mcp.json |
| karakeep | npx @karakeep/mcp |
/root/.claude/settings.json + .mcp.json |
| mediabot | /opt/mcp-servers/mediabot-mcp/run.sh |
/root/.claude/settings.json + .mcp.json |
Tokens are injected by the Ansible playbook from Vault. The same tokens used on the Mac are reused here.
Repo Management
Repos are cloned into /opt/code-server/workspace/ from Forgejo. Git operations work normally:
cd /opt/code-server/workspace/chizuru-v2
git pull
# ... make changes ...
git add -A && git commit -m "message"
git push
Repos are configured with the claude bot account for push access.
To add a new repo:
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]"
IaC
| File | Purpose |
|---|---|
ansible/playbooks/dev.yml |
Main deployment playbook |
ansible/playbooks/create-lxc.yml -e target_lxc=dev |
LXC creation |
.forgejo/workflows/dev.yml |
CI/CD workflow |
services/code-server-dev/docker-compose.yml |
Docker compose |
ansible/inventory/hosts.yml (dev entry) |
LXC parameters |
Backup
- LXC rootfs backed up weekly via PBS (non-critical job)
- Repos are in Forgejo —
git pushis the primary sync mechanism - VS Code config (
/opt/code-server/config/) and Claude memory (/root/.claude/) backed up with rootfs - Full rebuild from scratch:
create-lxc.yml+dev.yml(repos need re-clone or PBS restore)