incus-contrib/envs
Maarten 6ed083fd51 Add per-environment config files and split env secrets
- Create envs/beelink/env and envs/hetzner/env (gitignored, from root env)
- Create beelink awx.yaml, haproxy.yaml, observability.yaml (extracted
  from deploy script hardcoded defaults)
- Create hetzner observability.yaml
- Rewrite envs/README.md for new structure
- Update usage comments in all YAML files for new paths

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 18:40:42 +01:00
..
beelink Add per-environment config files and split env secrets 2026-03-03 18:40:42 +01:00
hetzner Add per-environment config files and split env secrets 2026-03-03 18:40:42 +01:00
README.md Add per-environment config files and split env secrets 2026-03-03 18:40:42 +01:00

README.md

Environment Configurations

Per-environment connection configs, secrets, and deployment settings. Each subdirectory represents a physical host (or host type) with its own network topology, storage backend, and resource sizing.

Directory layout

envs/
├── beelink/
│   ├── env                    # Secrets: PROXMOX_TOKEN_SECRET, etc. (gitignored)
│   ├── proxmox.yaml           # Proxmox connection (gitignored)
│   ├── proxmox.yaml.example   # Connection template (LAN, vmbr0, local-lvm)
│   ├── lab-cluster.yaml       # 3-node cluster (4C/4G/50G)
│   ├── awx.yaml               # AWX deployment settings
│   ├── haproxy.yaml           # HAProxy deployment settings
│   └── observability.yaml     # Monitoring stack settings
└── hetzner/
    ├── env                    # Secrets (gitignored)
    ├── proxmox.yaml           # Proxmox connection (gitignored)
    ├── proxmox.yaml.example   # Connection template (WireGuard, vmbr1, local-zfs)
    ├── lab-cluster.yaml       # 3-node cluster (8C/16G/100G)
    ├── lab-production.yaml    # OC + 3-node cluster
    ├── awx.yaml               # AWX deployment settings
    ├── haproxy.yaml           # HAProxy deployment settings
    ├── observability.yaml     # Monitoring stack settings
    └── setup/                 # Host provisioning (Proxmox install guide + script)
        ├── README.md
        ├── hetzner-setup.md
        ├── hetzner-lab-guide.md
        └── proxmox-setup

How to use

1. Source the environment

Each environment has its own env file with the same variable names. Source the one for the host you're targeting:

source envs/beelink/env    # or: source envs/hetzner/env

2. Deploy VMs

bin/incusos-proxmox --proxmox envs/hetzner/proxmox.yaml \
                    envs/hetzner/lab-production.yaml

3. Deploy services with --config

bin/deploy-awx --config envs/hetzner/awx.yaml --deploy
bin/deploy-haproxy --config envs/hetzner/haproxy.yaml --deploy
bin/deploy-observability --config envs/hetzner/observability.yaml --deploy

Adding a new environment

  1. Create a new subdirectory: envs/myhost/
  2. Copy proxmox.yaml.example from an existing env and edit
  3. Create an env file with your secrets (same variable names)
  4. Create lab YAML files sized for your hardware
  5. Create awx.yaml, haproxy.yaml, observability.yaml with your IPs

Key differences between environments

Setting Beelink Hetzner
Host 192.168.1.10 (LAN) 10.10.0.1 (WireGuard)
Method ssh api
Bridge vmbr0 vmbr1 (private)
Storage local-lvm local-zfs
VLAN 69 (none)
Gateway 192.168.100.1 10.10.0.1
VM IPs 192.168.102.x/22 10.10.0.x/24
VM cores 4 8
VM memory 4-8 GiB 16 GiB
VM disk 50 GiB 100 GiB