🚀 Deployment & CI/CD Strategy
🎯 Objective
Automate the build, test, containerization, and deployment lifecycle for services hosted in the homelab.
🔄 CI/CD Pipelines Overview
sequenceDiagram
autonumber
actor Dev as Developer (Laptop)
participant Git as Git Remote (Gitea / GitHub)
participant CI as CI Runner (Actions)
participant Registry as Container Registry (GHCR / Local Registry)
participant Server as 24/7 Homelab Server
Dev->>Git: git push (feat/fix branch -> main)
Git->>CI: Trigger Build & Test workflow
CI->>CI: Run Linters & Unit Tests
CI->>Registry: Build multi-stage Docker image & Push
CI->>Server: Trigger GitOps Deploy / Webhook / SSH appctl pull
Server->>Registry: Pull new image
Server->>Server: Restart container with zero/minimal downtime
🛠️ Implementation Approaches
1. Webhooks & Watchtower / Diun
- Approach: CI pushes tagged images to GHCR. Watchtower/Diun running on the server detects new digest and automatically updates containers.
- Pros: Zero inbound SSH keys needed from CI into homelab.
- Cons: Less granular control over rollback logic.
2. GitOps with Gitea Actions / GitHub Actions Runner
- Approach: Run a self-hosted lightweight Gitea runner on the server. On release/push to
main, the runner executesappctl pull <service> && appctl restart <service>. - Pros: Full visibility, reproducible deployments, direct log output in CI UI.