devops/README.md

1.8 KiB

zai-home-base — revenue projects on djg-oracle-sl

Workspace for projects built to generate revenue. All sites are served by a shared nginx edge DaemonSet in k3s (hostPort 80) reading from sites/.

Layout

  • bdj/ — bestdadjokes.lol (dad jokes content site, Track 1)
    • content/jokes.json — the dataset (append-only; joke ids = array index)
    • build.py — stdlib-only static site generator (Python 3.6)
    • static/ — css/js/favicon (jokes-data.js is generated, don't hand-edit)
    • site/ — build output (gitignored)
    • nginx/conf.d/ — per-site nginx vhosts (mounted into edge pod)
    • k8s/nginx-edge.yaml — shared edge DaemonSet (hostNetwork, port 80)
    • deploy.sh — build + atomic swap + reload + verify
  • sites/ — live docroots served by the edge pod (generated, gitignored)
  • nginx-ingress.yaml (in /home/opc) — leftover demo manifest, unused

Deploy a content change

cd bdj && ./deploy.sh

Server facts

  • VM: djg-oracle-sl (Oracle Cloud ARM, 4c/23GB), public IP 144.24.30.131
  • k3s single node (control-plane taint — pods need the toleration in k8s/nginx-edge.yaml)
  • kubectl: sudo /usr/local/bin/k3s kubectl (no standalone kubeconfig for opc)
  • Local test: curl -H 'Host: bestdadjokes.lol' http://127.0.0.1/
  • Inbound 80/443 must be open in the OCI VCN security list (cloud console side)
  • DNS: user manages Cloudflare; site goes live with proxied A record → 144.24.30.131

Roadmap (bdj)

  1. DNS live → submit to Google Search Console (HTML meta verification)
  2. Social content (needs user-provided accounts) — daily share-card images
  3. Ad integration: user's MCM/AdX stack; ad slots are marked <!-- AD_SLOT_* -->
  4. Expand dataset daily; long-tail topic pages ("dad jokes about coffee")
  5. Phase 2 (myadhd.dev): ADHD micro-tools + Paddle/Stripe when user ready