Phase 4: Migrate Forgejo to k3s #5

Open
opened 2026-05-04 19:39:59 +00:00 by agent-cos · 3 comments

Goal

Move Forgejo from bare metal to k8s Deployment. Cut over nginx upstream.

Tasks

  • Deploy Forgejo manifest: kubectl apply -f apps/forgejo/deployment.yaml
  • Wait for pod: kubectl get pods -n forgejo -w
  • Verify data mount: PVC created, Forgejo repos accessible
  • Test Forgejo health: curl http://forgejo.forgejo.svc.cluster.local:3000/api/v1/version
  • Update n97-1 nginx upstream /forgejo/ to point at k8s service
  • Reload nginx: systemctl reload nginx
  • Verify: os.scoble.me/forgejo/ loads
  • Test: push a commit, verify CI runner still works
  • Disable bare-metal Forgejo: set services.forgejo.enable = false in n97-1.nix
  • Rebuild n97-1

Rollback

  • Swap nginx upstream back to http://127.0.0.1:3000/
  • Re-enable bare-metal Forgejo

Acceptance

  • Forgejo running as k8s Deployment
  • All repos and users intact
  • CI runners still functional (may need updates to point at new internal URL)
  • bare-metal Forgejo service disabled

Depends On

  • #3 (Postgres must be in k8s, Forgejo needs it)

Blockers

  • SSH port 22 — needs mapping or use HTTPS git exclusively
  • CI runners: May need to update FORGEJO_URL env var in runner config
## Goal Move Forgejo from bare metal to k8s Deployment. Cut over nginx upstream. ## Tasks - [ ] Deploy Forgejo manifest: `kubectl apply -f apps/forgejo/deployment.yaml` - [ ] Wait for pod: `kubectl get pods -n forgejo -w` - [ ] Verify data mount: PVC created, Forgejo repos accessible - [ ] Test Forgejo health: `curl http://forgejo.forgejo.svc.cluster.local:3000/api/v1/version` - [ ] Update n97-1 nginx upstream `/forgejo/` to point at k8s service - [ ] Reload nginx: `systemctl reload nginx` - [ ] Verify: `os.scoble.me/forgejo/` loads - [ ] Test: push a commit, verify CI runner still works - [ ] Disable bare-metal Forgejo: set `services.forgejo.enable = false` in n97-1.nix - [ ] Rebuild n97-1 ## Rollback - Swap nginx upstream back to `http://127.0.0.1:3000/` - Re-enable bare-metal Forgejo ## Acceptance - Forgejo running as k8s Deployment - All repos and users intact - CI runners still functional (may need updates to point at new internal URL) - bare-metal Forgejo service disabled ## Depends On - #3 (Postgres must be in k8s, Forgejo needs it) ## Blockers - SSH port 22 — needs mapping or use HTTPS git exclusively - CI runners: May need to update FORGEJO_URL env var in runner config
Owner

Triage: Still pending — blocked on #4 (Postgres migration) and workers (#3)

Phase 4 (Forgejo → k8s) depends on:

  • #3 ❌ (workers needed)
  • #4 ❌ (Postgres must be in k8s first, since Forgejo needs a database)

Neither dependency is met yet. Leaving open.

## Triage: Still pending — blocked on #4 (Postgres migration) and workers (#3) Phase 4 (Forgejo → k8s) depends on: - #3 ❌ (workers needed) - #4 ❌ (Postgres must be in k8s first, since Forgejo needs a database) Neither dependency is met yet. Leaving open.
Owner

BLOCKED — This ticket requires:

  1. Worker nodes (n97-2, n97-3, rpi4-1, rpi4-2) to be reachable via Tailscale
  2. Nodes are NOT currently online (Tailscale shows only n97-mini + 2 phones active)
  3. Kubeclaw repo not found at expected location (archived)
  4. Physical access required to set up/verify worker hardware

Available from this host: n97-mini with single-node k3s (control-plane only).
Cannot bootstrap workers or migrate databases without the target nodes being online.
Scott needs to power on and verify the worker hardware before this ticket can proceed.

BLOCKED — This ticket requires: 1. Worker nodes (n97-2, n97-3, rpi4-1, rpi4-2) to be reachable via Tailscale 2. Nodes are NOT currently online (Tailscale shows only n97-mini + 2 phones active) 3. Kubeclaw repo not found at expected location (archived) 4. Physical access required to set up/verify worker hardware Available from this host: n97-mini with single-node k3s (control-plane only). Cannot bootstrap workers or migrate databases without the target nodes being online. Scott needs to power on and verify the worker hardware before this ticket can proceed.
Owner

❌ BLOCKED

Reason: Worker nodes offline — Phase 4 (Forgejo migration) requires Phase 3+worker nodes complete first

This ticket was previously identified as blocked. It requires Scott's action or external infrastructure before dispatch can proceed. Once unblocked, the system will pick it up on the next dispatch cycle.

Action for Scott: Phase 4 (Forgejo migration) requires Phase 3+worker nodes complete first

## ❌ BLOCKED **Reason:** Worker nodes offline — Phase 4 (Forgejo migration) requires Phase 3+worker nodes complete first This ticket was previously identified as blocked. It requires Scott's action or external infrastructure before dispatch can proceed. Once unblocked, the system will pick it up on the next dispatch cycle. **Action for Scott:** Phase 4 (Forgejo migration) requires Phase 3+worker nodes complete first
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: sscoble/devops#5
No description provided.