- Merge Infrastructure + Secure + Systems → SNS Networking (Business #1) - Merge Web + Software + Cloud → SNS Digital (planned) - SNS Support unchanged (planned) - Add infra/ folder with 16 FOSS-first buildable designs - Update all agent knowledge, division briefs, legal structure - Restructure businesses/ from 7 to 3 operating folders
3.4 KiB
3.4 KiB
Development Environments — SNS Digital
Entity: SNS Digital · Status: Buildable now
What it is
Reproducible dev environments that can be spun up on Proxmox in minutes. No "works on my machine" — every project gets a defined environment.
Stack
| Component | Software | FOSS | Role |
|---|---|---|---|
| Remote dev | SSH + VS Code Remote / Kiro CLI | Yes | Code on server, UI on laptop |
| Environment definition | Ansible roles | Yes | Reproducible provisioning |
| Ephemeral VMs | Proxmox cloud-init clone | Yes | Fresh VM per project/experiment |
| Containers (app deps) | Docker Compose | Yes | Databases, caches, queues for local dev |
| Language management | mise (formerly rtx) | Yes | Python, Node, Go version pinning per project |
Patterns
Pattern 1: Remote VM (primary workflow)
Laptop (Kiro CLI / SSH) ──────► Dev VM on Proxmox
├── Project repo (git clone)
├── mise (.tool-versions)
├── Docker Compose (deps)
└── Full Linux environment
When: Most development. Get a full Linux box with all tools, accessible from any device over Tailscale/WireGuard.
Build:
- Clone Debian 12 template on Proxmox.
- Run
dev-workstationAnsible role:- Install: git, mise, docker, docker-compose, build-essential
- Configure: user
sam, SSH key, dotfiles - Set resource: 4 vCPU, 8GB RAM, 64GB disk (adjustable)
- SSH in,
mise install,docker compose up -d, start coding.
Pattern 2: Ephemeral project VM
When: Trying something risky, testing infrastructure changes, client-isolated work.
Build:
qm clone 9000 --name experiment-xyz --full- Work. Break things. Learn.
qm destroy <vmid>— gone, no cleanup.
Pattern 3: Local laptop (lightweight)
When: Quick edits, offline work, documentation.
Just Kiro CLI + SSH config. The heavy lifting happens on the remote VM.
mise Configuration (per-project)
# .mise.toml
[tools]
python = "3.12"
node = "20"
ansible = "latest"
[env]
VIRTUAL_ENV = ".venv"
Ensures every contributor (or future hire) gets the same versions without polluting the system.
Ansible Role: dev-workstation
# roles/dev-workstation/tasks/main.yml (key tasks)
- name: Install base packages
apt:
name: [git, curl, jq, tmux, htop, build-essential, unzip]
- name: Install Docker
# Official Docker repo, not distro package
- name: Install mise
shell: curl https://mise.run | sh
- name: Clone dotfiles
git:
repo: gitea:sam/dotfiles.git
dest: /home/sam/.dotfiles
- name: Symlink dotfiles
# .bashrc, .tmux.conf, .gitconfig
Security Posture
- Dev VMs are not production. They sit on the service VLAN but have no inbound ports open beyond SSH.
- No secrets in dev environments. Use
.env.example+ Vaultwarden lookups. - Ephemeral VMs destroyed after use. No stale boxes accumulating.
- Docker socket access is the one elevated privilege — acceptable for dev, not prod.
Upgrade Path
- Devcontainers / Codespaces-like: If you hire devs who need browser-based IDEs, deploy code-server or Gitpod self-hosted on Proxmox.
- Nix flakes: For truly reproducible environments beyond what mise offers (full system-level deps). Higher learning curve.