← ClaudeAtlas

proxmox-docker-compose-vmlisted

This skill should be used when deploying an application that only ships via Docker Compose (no native/bare-metal install path — e.g. Immich, and similar multi-container stacks with a custom database extension baked into a maintained image) inside a Proxmox VM, managing its Docker Compose file and secrets as code via Ansible, debugging a Compose service that's unexpectedly reachable on the plain LAN IP instead of only over Tailscale Serve, wiring up a hardware-acceleration `extends:` stanza (hwaccel.yml, OpenVINO/VAAPI image tags) that ships commented-out in the upstream Compose file, or exposing one feature of an otherwise tailnet-only app (e.g. Immich share links) to people outside the tailnet via a purpose-built proxy sidecar + narrow Funnel rather than punching a hole in the app's own API. Also covers verifying an async first-run job (ML indexing, search embedding, etc.) actually processed something rather than just checking container health, and a shared Ansible `file` loop silently drifting a sensitive d
jackson2w/claude-code-skills · ★ 1 · DevOps & Infrastructure · score 64
Install: claude install-skill jackson2w/claude-code-skills
# Docker Compose stack in a Proxmox VM (not an LXC) Use this when an app's *only* supported deployment path is Docker Compose — no native package, no bare-metal tarball (unlike e.g. Paperless-ngx, which has one). This homelab otherwise avoids Docker everywhere (Grafana, Homepage, n8n, Jellyfin, Paperless-ngx all run as native systemd services specifically to dodge Docker-in-unprivileged-LXC cgroup quirks — see the `proxmox-node-systemd-service` skill). When Docker is genuinely unavoidable, run it in a **VM**, not an LXC, and contain the exception there rather than fighting cgroups. Built and verified end-to-end deploying Immich (`immich-app/immich`, VMID 145, v3.0.3) — every gotcha below was hit for real, not theoretical. **VM creation itself** (cloud-init staleness, `qemu-guest-agent` needed before `generate-config-out`, cleaning up the generated Terraform config) is covered by the `proxmox-terraform-provisioning` skill, not repeated here — this skill picks up once the VM exists and boots with working networking. ## Install sequence 1. **Docker CE + Compose plugin from Docker's official apt repo**, not the Debian repo (`docker.io` package) or a distro-bundled `docker-compose` — Compose v2 (the `docker compose` subcommand, not the legacy hyphenated `docker-compose` binary) is what modern Compose files assume: ```yaml - name: Add Docker GPG key ansible.builtin.get_url: url: https://download.docker.com/linux/debian/gpg dest: /etc/apt/keyri