diff --git a/.gitea/NETWORK-DIAGRAM.md b/.gitea/NETWORK-DIAGRAM.md new file mode 100644 index 0000000..5beaa92 --- /dev/null +++ b/.gitea/NETWORK-DIAGRAM.md @@ -0,0 +1,385 @@ +# Network Architecture Diagram + +## 🌐 Infrastructure Overview + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Home/Lab Network β”‚ +β”‚ 192.168.1.0/24 β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Orange Pi (Gitea) β”‚ β”‚ K3s Cluster (RPi) β”‚ +β”‚ 192.168.1.208 β”‚ β”‚ Master: 192.168.1.X β”‚ +β”‚ β”‚ β”‚ Workers: 192.168.1.Y/Z β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ +β”‚ β”‚ Gitea Server β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ :3000 (HTTP) β”‚ β”‚ β”‚ β”‚ K3s API Server β”‚ β”‚ +β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ :6443 (HTTPS) β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”‚ β”‚ β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ Container Reg. β”‚ β”‚ β”‚ β”‚ socktop-webterm β”‚ β”‚ +β”‚ β”‚ :3002 (HTTP) │◄─┼──────┼─── Deployment β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β€’ 3 replicas β”‚ β”‚ +β”‚ β–² β”‚ β”‚ β”‚ β€’ Port 8082 β”‚ β”‚ +β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ +β”‚ β”‚ Actions Runner β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ (act_runner) │──┼──────┼─►│ Ingress β”‚ β”‚ +β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ webterm.example β”‚ β”‚ +β”‚ β”‚ β€’ Docker builder β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”‚ β€’ kubectl client β”‚ β”‚ β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +β”‚ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”‚ (Optional) + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Rancher (Management) β”‚ +β”‚ 192.168.1.X:8443 β”‚ +β”‚ β”‚ +β”‚ β€’ Visual K8s mgmt β”‚ +β”‚ β€’ Monitoring β”‚ +β”‚ β€’ YAML editor β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## πŸ”„ CI/CD Flow + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ DEVELOPER WORKFLOW β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + + [Developer Workstation] + β”‚ + β”‚ 1. Update Cargo.toml version + β”‚ 2. git commit -m "Bump version" + β”‚ 3. git push origin main + β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Gitea Server β”‚ + β”‚ 192.168.1.208 β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”‚ 4. Webhook triggers Action + β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Gitea Actions Runner (Orange Pi) β”‚ + β”‚ β”‚ + β”‚ ╔═══════════════════════════════════╗ β”‚ + β”‚ β•‘ JOB 1: BUILD & PUSH β•‘ β”‚ + β”‚ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• β”‚ + β”‚ β”‚ + β”‚ 5. Clone repository β”‚ + β”‚ 6. Extract version from Cargo.toml β”‚ + β”‚ 7. docker buildx build --platform arm64 β”‚ + β”‚ β–Ό β”‚ + β”‚ 8. Push to registry ─────────────────┐ β”‚ + β”‚ 192.168.1.208:3002/ β”‚ β”‚ + β”‚ jason/socktop-webterm:0.2.2 β”‚ β”‚ + β”‚ β”‚ β”‚ + β”‚ ╔═══════════════════════════════════╗│ β”‚ + β”‚ β•‘ JOB 2: DEPLOY β•‘β”‚ β”‚ + β”‚ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β”‚ β”‚ + β”‚ β”‚ β”‚ + β”‚ 9. kubectl --kubeconfig=(secret) β”‚ β”‚ + β”‚ 10. kubectl set image deployment/... β”‚ β”‚ + β”‚ socktop-webterm:0.2.2 β”‚ β”‚ + β”‚ β”‚ β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ + β”‚ β”‚ + β”‚ 11. kubectl talks to k3s β”‚ + β–Ό β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ + β”‚ K3s Cluster β”‚ β”‚ + β”‚ β”‚ β”‚ + β”‚ 12. Pull new image β—„β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ + β”‚ from registry β”‚ + β”‚ β”‚ + β”‚ 13. Rolling update: β”‚ + β”‚ Pod 1: old β†’ new βœ“ β”‚ + β”‚ Pod 2: old β†’ new βœ“ β”‚ + β”‚ Pod 3: old β†’ new βœ“ β”‚ + β”‚ β”‚ + β”‚ 14. Deployment complete! β”‚ + β”‚ All pods running new version β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## πŸ” Authentication Flow + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ SECURITY & AUTHENTICATION β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +╔══════════════════════════════════════════════════════════════╗ +β•‘ 1. CONTAINER REGISTRY ACCESS β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + Actions Runner + β”‚ + β”‚ docker login 192.168.1.208:3002 + β”‚ Username: $REGISTRY_USERNAME (secret) + β”‚ Password: $REGISTRY_PASSWORD (secret/token) + β–Ό + Container Registry + β”‚ + β”‚ Token validated + β–Ό + βœ“ Authenticated - can push images + + +╔══════════════════════════════════════════════════════════════╗ +β•‘ 2. KUBERNETES CLUSTER ACCESS β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + Actions Runner + β”‚ + β”‚ kubectl --kubeconfig=$KUBECONFIG (secret) + β”‚ Contains: Service Account Token + β–Ό + K3s API Server (:6443) + β”‚ + β”‚ Validates token + β”‚ Checks RBAC permissions + β–Ό + ServiceAccount: gitea-deployer + β”‚ + β”‚ Bound to Role: gitea-deployer-role + β”‚ Permissions: + β”‚ - get/list/watch/update/patch deployments + β”‚ - get/list/watch pods + β”‚ - get/list/watch replicasets + β–Ό + βœ“ Authorized - can update deployment + + +╔══════════════════════════════════════════════════════════════╗ +β•‘ 3. IMAGE PULL ACCESS (K3s β†’ Registry) β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + K3s Node + β”‚ + β”‚ imagePullPolicy: Always + β”‚ image: 192.168.1.208:3002/jason/socktop-webterm:0.2.2 + β–Ό + Container Registry + β”‚ + β”‚ Public or registry secret configured + β–Ό + βœ“ Image pulled successfully +``` + +## πŸ“Š Network Ports & Services + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ PORT MAPPING β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +ORANGE PI (192.168.1.208) +β”œβ”€ :3000 β†’ Gitea Web UI (HTTP/HTTPS) +β”œβ”€ :3002 β†’ Gitea Container Registry (HTTP) +└─ :22 β†’ SSH/Git access + +K3S MASTER NODE +β”œβ”€ :6443 β†’ Kubernetes API Server (HTTPS) +β”œβ”€ :8080 β†’ K3s metrics (optional) +└─ :10250 β†’ Kubelet API + +K3S WORKER NODES +β”œβ”€ :10250 β†’ Kubelet API +└─ :30000+ β†’ NodePort services (if used) + +SOCKTOP-WEBTERM PODS +β”œβ”€ :8082 β†’ HTTP server (web terminal) +└─ :3001 β†’ Socktop agent + +RANCHER (if installed) +└─ :8443 β†’ Rancher UI (HTTPS) + +INGRESS (External Access) +└─ :80/:443 β†’ Routes to webterm service +``` + +## πŸ”§ Required Network Access + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ NETWORK CONNECTIVITY MATRIX β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +FROM: Developer Workstation + TO: Gitea (192.168.1.208:3000) [βœ“] HTTPS/Git Push + TO: Rancher [βœ“] HTTPS (optional) + TO: K3s cluster [βœ“] kubectl (optional) + +FROM: Actions Runner (on Orange Pi) + TO: Gitea Server (localhost) [βœ“] HTTP API + TO: Container Registry (localhost) [βœ“] HTTP (Docker API) + TO: K3s API (192.168.1.X:6443) [βœ“] HTTPS (kubectl) + TO: Internet [βœ“] Download dependencies + +FROM: K3s Cluster + TO: Container Registry (192.168.1.208:3002) [βœ“] HTTP (image pull) + TO: Internet [βœ“] External services (opt) + +FROM: End Users + TO: Ingress/NodePort [βœ“] HTTP/HTTPS (webterm) +``` + +## 🎯 Component Responsibilities + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ COMPONENT ROLES β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +╔════════════════════════════════════════════════════════════════╗ +β•‘ GITEA SERVER (Orange Pi) β•‘ +╠════════════════════════════════════════════════════════════════╣ +β•‘ β€’ Git repository hosting β•‘ +β•‘ β€’ Actions workflow execution coordinator β•‘ +β•‘ β€’ Container registry β•‘ +β•‘ β€’ Secret storage β•‘ +β•‘ β€’ Webhook management β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +╔════════════════════════════════════════════════════════════════╗ +β•‘ ACTIONS RUNNER (Orange Pi) β•‘ +╠════════════════════════════════════════════════════════════════╣ +β•‘ β€’ Execute workflow jobs β•‘ +β•‘ β€’ Build Docker images (arm64) β•‘ +β•‘ β€’ Push images to registry β•‘ +β•‘ β€’ Run kubectl commands β•‘ +β•‘ β€’ Report status back to Gitea β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +╔════════════════════════════════════════════════════════════════╗ +β•‘ K3S CLUSTER (Raspberry Pi nodes) β•‘ +╠════════════════════════════════════════════════════════════════╣ +β•‘ β€’ Container orchestration β•‘ +β•‘ β€’ Service discovery & load balancing β•‘ +β•‘ β€’ Rolling deployments β•‘ +β•‘ β€’ Health monitoring β•‘ +β•‘ β€’ Persistent storage (if needed) β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +╔════════════════════════════════════════════════════════════════╗ +β•‘ RANCHER (Optional - separate or on cluster) β•‘ +╠════════════════════════════════════════════════════════════════╣ +β•‘ β€’ Visual cluster management β•‘ +β•‘ β€’ YAML editor for resources β•‘ +β•‘ β€’ Monitoring dashboards β•‘ +β•‘ β€’ User-friendly kubectl alternative β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• +``` + +## πŸ”„ Data Flow + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ BUILD PIPELINE β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +SOURCE CODE ARTIFACTS RUNTIME +──────────── +Cargo.toml ─┐ Docker Image ─┐ Running Pods +src/**/*.rs β”œβ”€build──► :0.2.2 β”œβ”€pull──► [webterm] +templates/** β”‚ + :latest β”‚ [webterm] +static/** β”‚ β”‚ β”‚ [webterm] +Dockerfile β”€β”˜ β”‚ β”‚ + β–Ό β”‚ + Container Registry β”‚ + 192.168.1.208:3002 β”‚ + /jason/socktop-webterm β”‚ + β”‚ +Cargo.toml β”‚ +version ─────────extractβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + (by workflow) + +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ DEPLOYMENT PIPELINE β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +WORKFLOW K8S API CLUSTER STATE +──────── +kubectl set K3s API Server Deployment +image ───► validates ────► β€’ spec.image updated + β”‚ RBAC β€’ triggers rollout + β”‚ + β–Ό β–Ό + Authentication ReplicaSet + β€’ Service Account β€’ New RS created + β€’ Token β€’ Old RS scaled down + β€’ RBAC check + β–Ό + Pods + β€’ New pods: 0β†’1β†’2β†’3 + β€’ Old pods: 3β†’2β†’1β†’0 + β€’ Zero downtime +``` + +## πŸ” Monitoring Points + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ WHERE TO LOOK β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +πŸ“Š BUILD STATUS + β”œβ”€ Gitea β†’ Repository β†’ Actions tab + β”œβ”€ Runner logs: journalctl -u act_runner -f + └─ Docker build output in workflow logs + +πŸ“Š DEPLOYMENT STATUS + β”œβ”€ kubectl get deployment socktop-webterm -n default + β”œβ”€ kubectl rollout status deployment/socktop-webterm + β”œβ”€ kubectl get pods -l app=socktop-webterm + └─ Rancher β†’ Deployments β†’ socktop-webterm + +πŸ“Š APPLICATION HEALTH + β”œβ”€ kubectl logs -l app=socktop-webterm --tail=100 -f + β”œβ”€ HTTP health check: curl http://pod-ip:8082/ + β”œβ”€ Ingress: https://webterm.yourdomain.com + └─ Rancher β†’ Workloads β†’ Pod logs + +πŸ“Š REGISTRY + β”œβ”€ Gitea β†’ Repository β†’ Packages + β”œβ”€ docker images | grep socktop-webterm + └─ curl http://192.168.1.208:3002/v2/jason/socktop-webterm/tags/list +``` + +## πŸ’Ύ Persistent Data + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ DATA PERSISTENCE β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + +GITEA (Orange Pi) + /var/lib/gitea/ + β”œβ”€ data/ β†’ Git repositories + β”œβ”€ data/packages/ β†’ Container images + └─ data/actions_logs/ β†’ Workflow logs + +K3S CLUSTER + /var/lib/rancher/k3s/ + β”œβ”€ server/manifests/ β†’ Auto-deployed manifests + └─ agent/containerd/ β†’ Container images cache + +CONFIGMAPS & SECRETS + β”œβ”€ socktop-webterm-config β†’ Application config + └─ socktop-webterm-certs β†’ TLS certificates + +VOLUMES (if used) + └─ PersistentVolumeClaims β†’ App data (not currently used) +``` + +--- + +**This diagram shows the complete network topology and data flow for your CI/CD pipeline.** \ No newline at end of file