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. |
|
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.