Files
dotfiles/common/claude/memory/-home-connor-projects-runway/connor-homelab-deploy.md
T
2026-10-22 09:21:28 -04:00

2.5 KiB

name, description, metadata
name description metadata
connor-homelab-deploy Connor's homelab is this machine; its deployment config is ~/compose.yml and ~/Caddyfile, and the Gitea runner lives here too.
type
reference

The homelab is the dev machine (mainframe). ~/compose.yml (~1,000 lines, ~20 services) and ~/Caddyfile are the live deployment, and ~ is itself a git repo. Secrets are ~/.env with SERVICE_THING names, read as ${VAR} in compose. server.rcjohnstone.com resolves here.

Gitea is git.rcjohnstone.com; SSH remotes are on port 2222 (ssh://connor@git.rcjohnstone.com:2222/connor/<repo>.git). CI vars are REGISTRY/USERNAME with secret DOCKER_PASSWORD.

The Actions runner is act_runner.service — a system unit running as user act_runner, config /etc/act_runner/act_runner.yaml, state in /var/lib/act_runner. Ignore ~/.runner; it is a stale registration of Connor's own. Labels are ubuntu-latest, ubuntu-22.04, ubuntu-20.04, each mapping to a gitea/runner-images container — the label says nothing about the host, which is Arch.

It needs docker.service running. The runner is configured for Docker, not podman, and dies on "Docker Engine socket not found" without it. It had crash-looped 59,927 times before 2026-08-28 because docker was inactive and disabled — so it does not survive a reboot unless enabled. Connor starts it by hand; that is how he has always done it.

The stack runs in ROOT podman, not rootless. Every service container (connor_caddy_1, connor_authelia_1, connor_gitea_1, ~40 of them) is sudo podman, project name connor, on the connor_internal network. Connor's own rootless podman holds only scratch containers. This matters because it is invisible from inside a script: anything that picks a runtime with command -v podman and runs as Connor will start a healthy container in the rootless namespace that Caddy cannot route to, then report success. Deploy units for this machine must be system units. A container started from a oneshot unit also needs KillMode=process, or systemd tears down the container with the unit's cgroup the moment ExecStart returns.

Caddy bind-mounts host directories, so a deploy that swaps a directory by renaming it is invisible until Caddy restarts — the mount holds the inode. Mount the parent of the directory being replaced.

Runway's own arrangement is in ~/projects/runway/deploy/README.md. See runway-v2-build-plan and verify-before-claiming.