Tools op een server
Een machine draagt zijn rollen — web, mail, dns, db, backup, ftp — en daarnaast draagt hij tools: de dingen die je klanten in een shell nodig hebben, maar die geen enkele rol uit zichzelf installeert. git om vanuit een repository uit te rol
Geschreven voor: Beheerder
Een machine draagt zijn rollen — web, mail, dns, db, backup, ftp — en daarnaast draagt hij tools: de dingen die je klanten in een shell nodig hebben, maar die geen enkele rol uit zichzelf installeert. git om vanuit een repository uit te rollen, Composer om PHP-afhankelijkheden op te lossen, WP-CLI om een WordPress-installatie aan te sturen, imapsync om mailboxen van iemand anders binnen te halen, een Node- of Python-versie waar de applicatie van een klant tegenaan geschreven is, en Redis voor sessies en object-caching.
In het paneel: Servers → de server → Snelle acties → Tools beheren, of rechtstreeks op /nodes/<server>/tools.
Wat een tool is
Drie dingen, en verder niets:
- een pakket op je eigen mirror,
- een naam in de lijst
tools:in/etc/corecp/node.yamlvan die server, - en een render:
corectl reconcilemaakt de machine gelijk aan die lijst.
Daarom is installeren geen scriptje dat iets downloadt: de lijst ís de waarheid, een machine die je opnieuw opbouwt uit zijn state-bestand komt terug met dezelfde tools, en een tool die je van de lijst haalt is bij de eerstvolgende reconcile ook echt van de schijf.
root@web1:~# corectl tool list
Tools:
on git Git — clone and deploy from a repository
on composer Composer — PHP dependency manager
on wp-cli WP-CLI — manage a WordPress installation from the shell
on redis Redis — one shared instance for sessions and object caching
imapsync imapsync — the universal IMAP fallback for migrations
node (22, 24) Node.js — the two active LTS series
python (312, 313) Python — extra series beside the distribution's
docker Docker — containers, single-tenant nodes only — this node is not marked single-tenantTwee kolommen zeggen twee verschillende dingen. Gepland betekent dat de naam in node.yaml staat; aanwezig betekent dat de binary op de schijf staat. Ze verschillen zolang één reconcile duurt, en als ze langer verschillen is er iets mis op de machine — daar staat het teken ! voor.
Installeren en verwijderen
root@web1:~# corectl tool add git
tool git is available (/usr/bin/git)
git installed — /usr/bin/git
root@web1:~# corectl tool remove imapsync
tool imapsync removed
imapsync removedVerwijderen haalt alleen weg wat CoreCP zelf geïnstalleerd heeft. De machine houdt in /etc/corecp/rendered/tools.yaml bij wat deze motor erop gezet heeft, dus een git die er al stond toen CoreCP de machine overnam wordt nooit door een reconcile verwijderd — die was niet van ons.
Wat een rol meebrengt
Een rol installeren schrijft zijn eigen tools één keer in node.yaml:
| Rol | Tools |
|---|---|
| web | git, composer, wp-cli, redis |
| imapsync |
Het is een startpunt, geen lijst die terugkomt: een tool die je daarna verwijdert, blijft weg.
Redis staat er bewust als één instantie per server, niet één per klant. Een account bereikt hem via het PHP-beleid — session.save_handler en session.save_path staan in de klantenset — dus er is geen tweede socket uit te delen en geen daemon per account om in de gaten te houden.
Node en Python
Deze dragen meer dan één versie tegelijk. Ze installeren onder /opt/corecp/node/<XY> en /opt/corecp/python/<XY>, precies zoals de CoreCP-PHP-builds onder /opt/corecp/php/<XY>:
root@web1:~# corectl tool add node@24
installing node@24 (corecp-node24)
tool node@24 is available (/opt/corecp/node/24/bin/node /opt/corecp/node/24/bin/npm)
root@web1:~# su - klant1 -c 'node --version && npm config get prefix'
v24.19.0
/home/klant1/.npm-globalEr zijn twee Node-LTS-lijnen tegelijk actief. De andere erbij zetten vervangt de eerste: twee versies op dezelfde PATH betekent dat node degene is die toevallig als laatste sorteert, en dat is niemands keuze.
De globale prefix van npm en de user base van Python staan in de eigen home van de klant (~/.npm-global, ~/.local), gezet door /etc/profile.d/corecp-tools.sh. Een gedeelde globale prefix op een machine met meerdere klanten zou betekenen dat de npm install -g van de één een binary schrijft die alle anderen daarna draaien.
Bereikbaar in de kooi
Er is niets extra's voor nodig. De kooi vervangt /home, /etc/corecp en /proc en raakt verder niets aan, dus een binary onder /usr/bin of /opt/corecp is binnen een sessie in de kooi vanzelf zichtbaar. Wat hij nodig heeft is PATH, en dat levert het profielbestand hierboven — óók binnen de kooi, want de kooi vervangt /etc niet.
Docker
Docker installeert alleen op een server die uitdrukkelijk als één-klant- server gemarkeerd is. De daemon draait als root en de socket is een root-shell voor wie hem kan openen, dus naast gedeelde accounts hoort hij niet, en een account in de kooi krijgt hem nooit.
root@single1:~# corectl tool add docker
error: docker may only be installed on a node marked single-tenant …
root@single1:~# corectl tool single-tenant on
node single-tenant
root@single1:~# corectl tool add docker
docker installed — /usr/bin/dockerDe markering is een bewering over de machine, en de machine kan die tegenspreken: een server met meer dan één hostingaccount weigert hem en noemt ze bij naam. De markering weer weghalen haalt ook weg wat hij vrijgaf.
Een pakket dat er niet is
Op een server met de CoreCP-OS-mirror aan (corectl update --os-mirror on) is een tool waarvan het pakket op geen enkele mirror-lijst staat, gewoon niet te installeren. De weigering zegt aan welke lijst hij toegevoegd moet worden:
error: git could not be installed: … — check that git is on this node's mirror
(infra/build-server/packages/tools.list, then bash infra/build-server/mirror-upstream.sh)De twee runtimes bouwen we zelf in plaats van te mirroren: infra/build-server/build-node.sh 24 --publish en infra/build-server/build-python.sh 313 --publish.
Wat er bewust niet is
Geen Supervisor. Elk hostingaccount draait al in zijn eigen systemd-slice met eigen limieten; een tweede procesmanager ernaast zou twee plekken opleveren om één gecrashte worker te zoeken.
Geen tool-lijst per klant. Wat een machine draagt is een beslissing van de beheerder. Een klant die een runtime nodig heeft die de server niet heeft, vraagt erom; een reseller versmalt wat zijn klanten krijgen via een pakket, nooit via de machine.