--- title: "Caveman plan — Beelink naar Ubuntu Scrum4Me server" status: draft audience: [maintainer, operator] language: nl last_updated: 2026-05-09 --- # Caveman plan — Beelink naar Ubuntu Scrum4Me server ## Doel Zet de Beelink mini-PC om naar een dual-boot machine waarop **Ubuntu Server 24.04 LTS** de standaard server-boot is. Windows blijft bestaan als fallback, maar Scrum4Me draait op Ubuntu. Doelopstelling: ```text Beelink mini-PC ├─ Windows fallback └─ Ubuntu Server 24.04 LTS default ├─ Docker Engine ├─ Postgres ├─ Scrum4Me webserver ├─ worker-idea ├─ worker-implementation └─ worker-orchestrator ``` ## Hardware Bekende specs: | Onderdeel | Waarde | |---|---| | Merk | Beelink | | CPU | Intel Core i5-12450H | | CPU boost | Tot 4,4 GHz | | RAM | 32 GB DDR4 | | Opslag | 1 TB | | GPU | Intel integrated graphics | | Vorm | Mini-PC | Conclusie: geschikt voor Scrum4Me als single-user/small-team server, mits implementation-concurrency op 1 blijft en resource limits strak staan. ## Caveman Regels - Geen Ubuntu Desktop installeren. - Geen GPU-driver installeren tenzij beeld echt kapot is. - Geen Docker Desktop. - Geen Postgres-poort naar internet. - Geen Docker socket mounten in workercontainers. - Geen repos, caches of worktrees op de Windows-partitie. - Alles onder `/srv/scrum4me`. - Eerst één worker werkend krijgen, daarna pas drie. - Eerst via lokaal IP testen, daarna pas domein/TLS. - Ubuntu wordt default boot; Windows is fallback. ## Waarom Geen Drivergedoe Verwacht Wordt De CPU heeft Intel integrated graphics. Ubuntu Server heeft geen desktop nodig. Intel geeft aan dat de meeste Linux-distributies Intel graphics drivers al meeleveren. Voor deze machine verwacht je de kernel-driver `i915`. Na installatie alleen checken: ```bash lspci -k | grep -EA3 'VGA|3D|Display' lsmod | grep i915 ``` Als `i915` zichtbaar is: klaar. Niet verder aan sleutelen. ## Fase 0 — Voorbereiding In Windows 1. Maak backup van belangrijke Windows-data. 2. Sla BitLocker recovery key op als BitLocker aan staat. 3. Zet Windows Fast Startup uit: - Control Panel - Power Options - Choose what the power buttons do - Turn off fast startup 4. Maak vrije ruimte: - Open Disk Management. - Shrink `C:`. - Laat ongeveer `600 GB` unallocated voor Ubuntu. Aanbevolen diskverdeling: ```text Windows: 250-300 GB Ubuntu /: 120 GB /srv/scrum4me: rest van vrije ruimte swapfile: 16 GB EFI: bestaande EFI behouden ``` ## Fase 1 — Ubuntu USB Maken 1. Download Ubuntu Server 24.04 LTS amd64. 2. Maak USB-stick met Rufus of Balena Etcher. 3. Sluit ethernet aan op de Beelink. 4. Boot van USB. Veelvoorkomende Beelink toetsen: ```text Boot menu: F7 BIOS: Del ``` BIOS-checks: ```text UEFI boot: aan Secure Boot: mag aan blijven, maar uitzetten als install gedoe geeft Power on after power loss: aan Ubuntu later als eerste boot entry ``` ## Fase 2 — Ubuntu Installeren Kies tijdens installatie: ```text Install Ubuntu Server OpenSSH server: YES Desktop: NO Storage: Custom layout ``` Storage: ```text Bestaande EFI partition: mount: /boot/efi formatteren: NEE Nieuwe ext4 partition 120 GB: mount: / Nieuwe ext4 partition rest: mount: /srv/scrum4me ``` Niet kiezen: ```text Use entire disk ``` Dat zou Windows verwijderen. ## Fase 3 — Eerste Boot Login op Ubuntu. ```bash sudo apt update sudo apt upgrade -y sudo reboot ``` Na reboot: ```bash sudo hostnamectl set-hostname scrum4me-server ip a ``` Zet in je router een DHCP reservation voor het IP-adres. Dat is simpeler dan handmatige netwerkconfiguratie. ## Fase 4 — Server Niet Laten Slapen ```bash sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target ``` In BIOS: ```text Power on after power loss: ON Sleep: OFF als optie bestaat Boot order: Ubuntu eerst ``` ## Fase 5 — Basis Tools ```bash sudo apt install -y git curl ca-certificates gnupg htop iotop ufw fail2ban unzip jq ``` Firewall: ```bash sudo ufw allow OpenSSH sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable sudo ufw status ``` Let op: Docker kan gepubliceerde containerpoorten buiten gewone `ufw`-verwachtingen om bereikbaar maken. Publiceer straks alleen reverse proxy poorten naar buiten. ## Fase 6 — Docker Engine Installeren Gebruik Docker Engine native op Ubuntu. Geen Docker Desktop. ```bash sudo apt update sudo apt install -y ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc ``` ```bash echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` ```bash sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo usermod -aG docker $USER sudo reboot ``` Na reboot: ```bash docker run hello-world docker compose version ``` ## Fase 7 — Scrum4Me Directories ```bash sudo mkdir -p /srv/scrum4me/{postgres,repos,worker-cache,worker-logs,worker-state,backups,compose,caddy} sudo chown -R $USER:$USER /srv/scrum4me ``` Doelstructuur: ```text /srv/scrum4me/postgres database data /srv/scrum4me/repos cloned GitHub repos / mirrors /srv/scrum4me/worker-cache npm/git/cache /srv/scrum4me/worker-logs worker logs /srv/scrum4me/worker-state worker state /srv/scrum4me/backups local backup staging /srv/scrum4me/compose docker compose files /srv/scrum4me/caddy reverse proxy config ``` ## Fase 8 — Services Einddoel: ```text postgres scrum4me-web worker-idea worker-implementation worker-orchestrator caddy ``` Aanbevolen resource limits voor 32 GB RAM: | Service | CPU limit | Memory limit | Opmerking | |---|---:|---:|---| | `postgres` | 2 CPU | 3-4 GB | Lokale DB | | `scrum4me-web` | 2 CPU | 2-3 GB | Next.js runtime | | `worker-idea` | 2 CPU | 4 GB | Grill, plan, chat | | `worker-implementation` | 4-5 CPU | 10-12 GB | Zwaarste worker | | `worker-orchestrator` | 2-3 CPU | 5-6 GB | PR review, CI triage, conflicts | | `caddy` of `nginx` | 0.25 CPU | 256 MB | Reverse proxy | Laat 5-7 GB vrij voor Ubuntu, Docker overhead, filesystem cache en pieken. ## Fase 9 — Tokens en Secrets Maak aparte tokens per rol: ```text SCRUM4ME_TOKEN_IDEA SCRUM4ME_TOKEN_IMPLEMENTATION SCRUM4ME_TOKEN_ORCHESTRATOR GH_TOKEN_IDEA GH_TOKEN_IMPLEMENTATION GH_TOKEN_ORCHESTRATOR CLAUDE_CODE_OAUTH_TOKEN_IDEA CLAUDE_CODE_OAUTH_TOKEN_IMPLEMENTATION CLAUDE_CODE_OAUTH_TOKEN_ORCHESTRATOR ``` Tokenbeleid: | Token | Rechten | |---|---| | Idea | Read-only waar mogelijk, markdown/status updates via Scrum4Me | | Implementation | GitHub contents RW + pull requests RW | | Orchestrator | PR RW, contents RW alleen voor conflict/repair | Bestandsrechten: ```bash chmod 600 /srv/scrum4me/compose/*.env ``` Geen secrets in git. ## Fase 10 — Backups Minimum: ```text Elke nacht pg_dump Elke nacht backup van /srv/scrum4me/compose Offsite kopie naar cloud, NAS of externe disk Backup restore maandelijks testen ``` Lokale backup alleen is onvoldoende. Als de SSD stuk gaat, is alles weg. ## Fase 11 — Monitoring Simpel beginnen: ```bash docker ps docker stats htop iotop df -h du -sh /srv/scrum4me/* journalctl -u docker --no-pager -n 100 ``` Dagelijkse health checklist: ```text Docker containers up? Disk < 80% vol? Backups gelukt? Workers online? Postgres bereikbaar? Webserver bereikbaar via HTTPS? Geen runaway logs? ``` ## Fase 12 — Uitrolvolgorde Niet alles tegelijk. 1. Ubuntu werkt. 2. SSH werkt. 3. Docker werkt. 4. Caddy/nginx testpagina werkt. 5. Postgres container werkt. 6. Scrum4Me webserver werkt lokaal. 7. Scrum4Me webserver werkt via HTTPS. 8. Eén worker werkt: `worker-idea`. 9. Tweede worker werkt: `worker-implementation`. 10. Derde worker werkt: `worker-orchestrator`. 11. Role-aware queue claiming aanzetten. 12. Backups testen. ## Eerste Smoke Test Na installatie: ```bash hostnamectl free -h df -h lscpu docker version docker compose version docker run hello-world lspci -k | grep -EA3 'VGA|3D|Display' lsmod | grep i915 ``` Verwacht: ```text Ubuntu 24.04 LTS ~32 GB RAM zichtbaar Docker werkt 1 TB disk verdeeld zoals gepland i915 zichtbaar voor Intel integrated graphics ``` ## Foutscenario's ### Geen beeld na Ubuntu install Eerst: ```text Gebruik HDMI-poort 1 Gebruik andere kabel Boot recovery mode Probeer tijdelijk Secure Boot uit ``` Niet meteen drivers installeren. ### Windows start direct, geen Ubuntu menu BIOS boot order aanpassen: ```text Ubuntu boven Windows Boot Manager ``` ### Docker permission denied ```bash groups ``` Als `docker` ontbreekt: ```bash sudo usermod -aG docker $USER sudo reboot ``` ### Server wordt traag Check: ```bash docker stats free -h htop iotop ``` Eerste maatregel: ```text implementation-worker alleen laten draaien orchestrator zware builds verbieden worker memory limits verlagen ``` ## Bronnen - Ubuntu Server requirements: - Ubuntu Server install docs: - Intel Linux graphics guidance: - Docker Engine on Ubuntu: - Next.js self-hosting: