From 6450c981dbebf1cd70fb9194aedd82e801ce3af6 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Tue, 3 Feb 2026 10:28:33 -0800 Subject: [PATCH] Add quartz deployment for docs hosting (Phase 1b) - Create ArgoCD Application and manifests for quartz service - Add docs.ops.eblu.me to Caddy reverse proxy - ConfigMap points to blumeops v1.0.0 release tarball - Tailscale ingress with homepage annotations for auto-discovery Co-Authored-By: Claude Opus 4.5 --- ansible/roles/caddy/defaults/main.yml | 3 ++ argocd/apps/quartz.yaml | 18 ++++++++ argocd/manifests/quartz/configmap.yaml | 10 +++++ argocd/manifests/quartz/deployment.yaml | 43 +++++++++++++++++++ .../manifests/quartz/ingress-tailscale.yaml | 25 +++++++++++ argocd/manifests/quartz/kustomization.yaml | 9 ++++ argocd/manifests/quartz/service.yaml | 13 ++++++ docs/README.md | 1 + 8 files changed, 122 insertions(+) create mode 100644 argocd/apps/quartz.yaml create mode 100644 argocd/manifests/quartz/configmap.yaml create mode 100644 argocd/manifests/quartz/deployment.yaml create mode 100644 argocd/manifests/quartz/ingress-tailscale.yaml create mode 100644 argocd/manifests/quartz/kustomization.yaml create mode 100644 argocd/manifests/quartz/service.yaml diff --git a/ansible/roles/caddy/defaults/main.yml b/ansible/roles/caddy/defaults/main.yml index 2aefc3d..c35ef76 100644 --- a/ansible/roles/caddy/defaults/main.yml +++ b/ansible/roles/caddy/defaults/main.yml @@ -70,6 +70,9 @@ caddy_services: - name: hajimari host: "go.{{ caddy_domain }}" backend: "https://go.tail8d86e.ts.net" + - name: docs + host: "docs.{{ caddy_domain }}" + backend: "https://docs.tail8d86e.ts.net" - name: sifaka host: "nas.{{ caddy_domain }}" backend: "http://sifaka:5000" diff --git a/argocd/apps/quartz.yaml b/argocd/apps/quartz.yaml new file mode 100644 index 0000000..75924cc --- /dev/null +++ b/argocd/apps/quartz.yaml @@ -0,0 +1,18 @@ +--- +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: quartz + namespace: argocd +spec: + project: default + source: + repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/blumeops.git + targetRevision: main + path: argocd/manifests/quartz + destination: + server: https://kubernetes.default.svc + namespace: quartz + syncPolicy: + syncOptions: + - CreateNamespace=true diff --git a/argocd/manifests/quartz/configmap.yaml b/argocd/manifests/quartz/configmap.yaml new file mode 100644 index 0000000..db70026 --- /dev/null +++ b/argocd/manifests/quartz/configmap.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: quartz-config + namespace: quartz +data: + # BlumeOps docs release URL + # Update this to deploy a new docs version + DOCS_RELEASE_URL: "https://forge.ops.eblu.me/eblume/blumeops/releases/download/v1.0.0/docs-v1.0.0.tar.gz" diff --git a/argocd/manifests/quartz/deployment.yaml b/argocd/manifests/quartz/deployment.yaml new file mode 100644 index 0000000..a6f5619 --- /dev/null +++ b/argocd/manifests/quartz/deployment.yaml @@ -0,0 +1,43 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: quartz + namespace: quartz +spec: + replicas: 1 + selector: + matchLabels: + app: quartz + template: + metadata: + labels: + app: quartz + spec: + containers: + - name: quartz + image: registry.ops.eblu.me/blumeops/quartz:v1.0.0 + ports: + - containerPort: 80 + name: http + envFrom: + - configMapRef: + name: quartz-config + resources: + requests: + memory: "64Mi" + cpu: "10m" + limits: + memory: "128Mi" + livenessProbe: + httpGet: + path: /healthz + port: 80 + initialDelaySeconds: 10 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /healthz + port: 80 + initialDelaySeconds: 5 + periodSeconds: 10 diff --git a/argocd/manifests/quartz/ingress-tailscale.yaml b/argocd/manifests/quartz/ingress-tailscale.yaml new file mode 100644 index 0000000..69cf049 --- /dev/null +++ b/argocd/manifests/quartz/ingress-tailscale.yaml @@ -0,0 +1,25 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: quartz-tailscale + namespace: quartz + annotations: + tailscale.com/proxy-class: "default" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "Docs" + gethomepage.dev/group: "Apps" + gethomepage.dev/icon: "mdi-book-open-page-variant" + gethomepage.dev/description: "BlumeOps Documentation" + gethomepage.dev/href: "https://docs.ops.eblu.me" + gethomepage.dev/pod-selector: "app=quartz" +spec: + ingressClassName: tailscale + defaultBackend: + service: + name: quartz + port: + number: 80 + tls: + - hosts: + - docs diff --git a/argocd/manifests/quartz/kustomization.yaml b/argocd/manifests/quartz/kustomization.yaml new file mode 100644 index 0000000..dc0348c --- /dev/null +++ b/argocd/manifests/quartz/kustomization.yaml @@ -0,0 +1,9 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: quartz +resources: + - configmap.yaml + - deployment.yaml + - service.yaml + - ingress-tailscale.yaml diff --git a/argocd/manifests/quartz/service.yaml b/argocd/manifests/quartz/service.yaml new file mode 100644 index 0000000..ecdc31e --- /dev/null +++ b/argocd/manifests/quartz/service.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: quartz + namespace: quartz +spec: + selector: + app: quartz + ports: + - name: http + port: 80 + targetPort: 80 diff --git a/docs/README.md b/docs/README.md index 1ba602f..b694cb9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -63,6 +63,7 @@ The documentation is being restructured to follow the [Diataxis](https://diataxi ``` - [ ] Test end-to-end: commit -> build -> release -> deploy - [ ] Set up `CHANGELOG.md` with [towncrier](https://towncrier.readthedocs.io/) using news fragments from zk cards +- [ ] Add `docs.ops.eblu.me` link to homepage dashboard ### Phase 2: Tutorials Learning-oriented content for getting started.