# Home Server & Personal DevOps Homelab
AI Summary
Purpose:
- Capture durable knowledge about the personal home server (self-hosted
Nextcloud, Google Drive mount) and the Mac Mini DevOps homelab (k3s + ArgoCD + GitHub Actions + AI PR review).
Key points:
- Self-hosting stack (Docker): Nextcloud + MariaDB + Redis behind Nginx Proxy
Manager (NPM), TLS via Let's Encrypt, served at cloud.hshouse.xyz, external SSDs mounted as Nextcloud data dirs.
- Google Drive mounted on Ubuntu via
rclone mount(vfs-cache minimal,
realtime poll), run via systemd; gotchas: enable user_allow_other in /etc/fuse.conf, register OAuth test users, enable Drive API.
- DevOps homelab (planned/in-progress): Mac Mini M2 runs k3s (master+worker),
ArgoCD does GitOps sync from a config repo, GitHub Actions builds images to GHCR and updates manifests, with a Gemini-based AI PR review step; LG Gram provides Nextcloud/NFS storage; future AWS EC2 nodes join the same ArgoCD.
- This is a personal mirror of the work patterns in labrador-platform (GitOps,
containerized services, AI PR review).
Relevant when:
- Working on the personal server, rclone/Nextcloud setup, or the k3s/ArgoCD
GitOps homelab.
Do not read full document unless:
- You need exact rclone flags, the docker-compose service list, or k3s/ArgoCD
install commands.
Linked documents:
- [[labrador-platform.md]] (work-side GitOps / AI PR review counterpart)
- [[index.md]]
Open Questions
- Homelab (k3s/ArgoCD) was "in progress" with several unchecked steps in the
source note; current deployment state is Needs confirmation.
- NOTE: the source docker-compose / config files contained plaintext passwords
and a NPM default credential. Those secrets are intentionally NOT copied here (repo policy: no credentials). Treat them as compromised/rotate if reused.
Details
Self-hosting stack
- Nextcloud + NPM on Docker (Ubuntu). Services:
nginx-proxy-manager(ports
80/443/81) + its MariaDB, nextcloud + its MariaDB + redis, on a shared bridge network. External SSDs (T7_medias, hdd_infos) mounted into the Nextcloud container; mount ownership must match the Nextcloud user/group to be writable.
- TLS/domain: A record cloud.hshouse.xyz → server public IP; NPM proxy host →
forward to nextcloud:80, request Let's Encrypt cert, Force SSL + HSTP + HTTP/2.
- Nextcloud
config.php: set trusted_domains,overwriteprotocol=https,
trusted_proxies to the docker subnet, Redis for memcache/locking; run occ files:scan --all and occ maintenance:repair --include-expensive.
Google Drive mount (rclone)
rclone configremotegdrive(type drive, full scope, optional
root_folder_id to mount one folder); rclone mount gdrive: <path> --vfs-cache-mode=minimal --dir-cache-time=5s --poll-interval=5s --allow-other.
- Gotchas:
--allow-otherneedsuser_allow_otheruncommented in
/etc/fuse.conf; OAuth login fails unless your Gmail is added as a test user; 403 means Drive API not enabled in the Cloud Console project.
- Run as a systemd service (
rclone-gdrive.service) with
ExecStop=/bin/fusermount -u <path> and Restart=on-failure; alternatives are nohup or tmux.
DevOps homelab (Mac Mini M2)
- Orchestration: k3s (lightweight CNCF-certified K8s, API-compatible, ~50% less
memory; bundles SQLite + containerd; cloud/old-storage drivers stripped).
- CD: ArgoCD for GitOps — sync cluster state to a Git config repo (separate from
the app/source repo). Contrast with Airflow: ArgoCD = CD/infra state sync, Airflow = ETL/DAG scheduling.
- CI: GitHub Actions builds + pushes images to GHCR and updates the manifest tag;
ArgoCD polls the config repo (~every 3 min) and rolls out.
- AI code review: a GitHub Action sends the PR diff to Google Gemini (free tier)
which posts review comments — same pattern as the work-side Bitbucket+Claude reviewer.
- Storage: LG Gram hosts Nextcloud + an NFS shared volume mounted by pods.
- Expansion: add AWS EC2 (install k3s, register to the Mac Mini ArgoCD via
cluster add) to manage home + cloud from one place.