# Servertypes: app, web, worker, database, cache en meer

> Servertypes in Vimonto Deploy vergeleken: app, web, worker, database, cache, Meilisearch en load balancer. Wat elk type installeert en welke pagina's het heeft.

Een servertype is de rol die je een server geeft als je [hem aanmaakt](https://ops.vimonto.com/docs/nl/servers/create-a-server). Het type bepaalt wat Vimonto Deploy installeert tijdens het [inrichten](https://ops.vimonto.com/docs/nl/servers/provisioning), welke poorten de firewall opent en welke pagina's de server in Vimonto Deploy heeft. Weet je niet welke je nodig hebt? Kies een **App-server**: die draait alles op één machine en past bij de meeste applicaties.

Met de andere types verdeel je een applicatie over meerdere servers als hij groeit: webservers achter een load balancer, aparte workers voor queues en eigen database-, cache- en zoekservers, verbonden via een [privénetwerk](https://ops.vimonto.com/docs/nl/servers/network).

![De overzichtspagina van een server met de zijbalk met de pagina's die zijn servertype heeft](https://ops.vimonto.com/docs-media/nl/server-overview.webp?v=161e760d "De pagina's in de zijbalk van een server hangen af van zijn type")

## Welk servertype moet ik kiezen?

| Type | Gebruik het voor | Installeert |
| --- | --- | --- |
| **App-server** | Alles op één server. Past bij de meeste applicaties. | Nginx, PHP, een database (optioneel), Redis, Memcached, Node.js, Supervisor |
| **Webserver** | Je applicatie serveren, met de database en cache op andere servers. | Nginx, PHP, Node.js, Supervisor |
| **Workerserver** | Queue workers en andere langlopende PHP-processen. Niet bereikbaar via HTTP. | PHP, Supervisor |
| **Databaseserver** | Een database voor je app-, web- en workerservers. | MySQL, MariaDB of PostgreSQL |
| **Cacheserver** | Redis en Memcached voor je app-, web- en workerservers. | Redis, Memcached |
| **Meilisearch-server** | Een snelle zoekmachine voor je applicatie, bereikbaar via het privénetwerk. | Meilisearch |
| **Load balancer** | Het verkeer voor een domein verdelen over je app- en webservers. | Nginx |

Elk type krijgt ook dezelfde basis: Ubuntu-updates, de servergebruiker, SSH-beveiliging, de `ufw`-firewall, fail2ban, automatische beveiligingsupdates, swap, standaard geplande taken en de monitoringagent.

## Welke pagina's heeft elk type?

Een server toont alleen de pagina's die zinvol zijn voor wat erop is geïnstalleerd.

| Pagina | App | Web | Worker | Database | Cache | Meilisearch | Load balancer |
| --- | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
| Overzicht | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Sites | ✓ | ✓ | – | – | – | – | ✓ |
| Databases | ✓¹ | – | – | ✓ | – | – | – |
| Back-ups | ✓¹ | – | – | ✓ | – | – | – |
| PHP | ✓ | ✓ | ✓ | – | – | – | – |
| Processen | ✓ | ✓ | ✓ | – | – | – | – |
| Planner | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Monitoring | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Terminal | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Netwerk | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| SSH-sleutels | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Services | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Instellingen | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |

¹ Alleen als de app-server met een database is aangemaakt, niet met **Geen**.

## App-server

De app-server heeft alles: Nginx, PHP (de versie die je kiest, met Composer), Node.js en npm, een database, Redis, Memcached en Supervisor voor queue workers. Poort 80 en 443 staan open voor je sites. De database, Redis en Memcached luisteren alleen op de server zelf (`localhost`), dus ze zijn van buitenaf niet bereikbaar.

Je kunt een app-server zonder database aanmaken door onder **Database** **Geen** te kiezen, bijvoorbeeld als je een aparte databaseserver gebruikt. Hij heeft dan geen pagina's **Databases** en **Back-ups**.

## Webserver

Een webserver draait je sites zoals een app-server, met Nginx, PHP, Node.js en Supervisor, maar zonder database of cache. Verbind hem via een privénetwerk met een databaseserver en een cacheserver. Zet meerdere webservers achter een load balancer om meer verkeer aan te kunnen.

## Workerserver

Een workerserver heeft PHP en Supervisor voor queue workers en andere [processen](https://ops.vimonto.com/docs/nl/servers/processes), en geen Nginx. De firewall laat alleen SSH toe, dus hij is niet bereikbaar via HTTP. Gebruik hem om zwaar queuewerk van je webservers af te halen.

## Databaseserver

Een databaseserver draait alleen MySQL (8.4 LTS of 8.0), MariaDB (11.4 LTS of 10.11 LTS) of PostgreSQL (18, 17 of 16); voor dit type is een database verplicht. Anders dan op een app-server luistert de database op alle adressen, zodat je andere servers ermee kunnen verbinden. Staat de server in een [privénetwerk](https://ops.vimonto.com/docs/nl/servers/server-types#servers-in-een-privénetwerk), dan staat het inrichten poort 3306 (MySQL en MariaDB) of 5432 (PostgreSQL) alleen vanuit dat netwerk toe. Zonder privénetwerk weigert de firewall al het inkomende verkeer naar de database tot je op de pagina [netwerk](https://ops.vimonto.com/docs/nl/servers/network) van de server een regel toevoegt voor de adressen van je andere servers.

Het inrichten maakt een databasegebruiker aan met de naam van de servergebruiker (standaard `vimonto`), met volledige rechten en het databasewachtwoord dat één keer wordt getoond, en een database met dezelfde naam. Beheer databases en gebruikers op de pagina [databases](https://ops.vimonto.com/docs/nl/servers/databases) en plan [back-ups](https://ops.vimonto.com/docs/nl/servers/backups) naar je eigen opslag.

## Cacheserver

Een cacheserver draait alleen Redis en Memcached. Ze luisteren op alle adressen, zodat je andere servers ze kunnen gebruiken. Redis draait hier zonder wachtwoord, dus alleen de firewall houdt het internet buiten. Staat de server in een [privénetwerk](https://ops.vimonto.com/docs/nl/servers/server-types#servers-in-een-privénetwerk), dan staat het inrichten poort 6379 (Redis) en 11211 (Memcached) alleen vanuit dat netwerk toe. Zonder privénetwerk kan niets ze bereiken tot je op de pagina [netwerk](https://ops.vimonto.com/docs/nl/servers/network) een regel toevoegt voor de adressen van je andere servers.

> [!WARNING]
> Sta de poort van Redis of Memcached op een cacheserver nooit toe vanaf **Iedereen**. Dan kan iedereen op het internet je cache lezen en wijzigen.

## Meilisearch-server

Een Meilisearch-server draait de zoekmachine [Meilisearch](https://www.meilisearch.com/) als systeemservice op poort 7700, in productiemodus. De master key wordt gegenereerd als de server wordt aangemaakt en één keer getoond, samen met het sudo-wachtwoord, als **Meilisearch master key**. Staat de server in een [privénetwerk](https://ops.vimonto.com/docs/nl/servers/server-types#servers-in-een-privénetwerk), dan staat het inrichten poort 7700 alleen vanuit dat netwerk toe; voeg anders een regel toe op de pagina [netwerk](https://ops.vimonto.com/docs/nl/servers/network). Stel het privé-adres van de server en de sleutel in je applicatie in (voor Laravel Scout: `MEILISEARCH_HOST` en `MEILISEARCH_KEY`).

## Servers in een privénetwerk

Database-, cache- en Meilisearch-servers die je in een privénetwerk aanmaakt, krijgen meteen firewallregels voor hun services. Je app-, web- en workerservers in hetzelfde netwerk kunnen dan zonder verdere instellingen verbinden:

| Type | Poorten toegestaan vanuit het privénetwerk |
| --- | --- |
| Databaseserver | 3306 (MySQL, MariaDB) of 5432 (PostgreSQL) |
| Cacheserver | 6379 (Redis), 11211 (Memcached) |
| Meilisearch-server | 7700 |

De regels staan het adresbereik van het netwerk toe, bijvoorbeeld `10.0.0.0/16`. Kent Vimonto Deploy het bereik niet, dan gebruikt het de `/16` rond het privé IP-adres van de server. Je vindt de regels op de pagina [netwerk](https://ops.vimonto.com/docs/nl/servers/network) van de server, gemarkeerd als **Standaard**; je kunt ze verwijderen of er eigen regels naast zetten. Het internet blijft buiten: de firewall weigert al het andere inkomende verkeer.

Servers zonder privénetwerk, ook een [eigen VPS](https://ops.vimonto.com/docs/nl/servers/custom-vps), krijgen deze regels niet: voeg dan zelf een regel toe voor elke server die erbij moet.

## Load balancer

Een load balancer draait alleen Nginx, met poort 80 en 443 open, en verdeelt het verkeer voor een domein over je app- en webservers. Hij heeft geen PHP. De enige soort site die je erop kunt aanmaken is een **Load balancer**-site (onder **Nieuwe site**), en die soort site kan alleen op een load balancer-server staan.

Op de pagina **Load balancing** van de site kies je:

- de **Methode**: **Round robin** (elke server om de beurt, naar gewicht), **Minste verbindingen** (de server met de minste open verbindingen) of **IP-hash** (elke bezoeker blijft bij één server, op basis van zijn IP-adres);
- de servers waar hij verkeer naartoe stuurt: met **Server toevoegen** kies je een actieve app- of webserver van je organisatie, met een **Poort**, een **Gewicht** (hoger krijgt meer verkeer) en desgewenst als **Reserveserver**, die alleen verkeer krijgt als de andere servers uitvallen (niet met **IP-hash**, dat Nginx niet combineert met reserveservers). Met **Bewerken** wijzig je later de poort, het gewicht en de reserve-instelling. Het verkeer gaat via het privénetwerk als beide servers in hetzelfde netwerk staan.

Elke app-server heeft een site nodig voor hetzelfde domein. De load balancer geeft het IP-adres van de bezoeker door aan de app-servers, en ook of die via HTTPS binnenkwam; de sites daar vertrouwen die informatie alleen van deze load balancer. De load-balanced site heeft een eigen domein nodig voordat je app-servers toevoegt, omdat die niet kunnen antwoorden voor zijn `on-deploy.link`-adres. Zolang er nog geen app-server is toegevoegd, krijgen bezoekers een 503. Lees in [load balancing](https://ops.vimonto.com/docs/nl/sites/load-balancing) hoe je het helemaal opzet.

## Veelgestelde vragen

### Begin ik met één app-server of met aparte servers?

Begin met één app-server. Dat is de eenvoudigste en goedkoopste opzet en die kan veel verkeer aan. Splits een databaseserver, cacheserver of workerservers af als één server niet meer genoeg is, of als je webservers los wilt opschalen.

### Hoe praten aparte servers met elkaar?

Zet ze bij het aanmaken in hetzelfde privénetwerk. Database-, cache- en Meilisearch-servers staan hun poorten dan al toe vanuit dat netwerk (zie [servers in een privénetwerk](https://ops.vimonto.com/docs/nl/servers/server-types#servers-in-een-privénetwerk)); voor de rest sta je de poort toe vanaf het adresbereik van het netwerk op de pagina **Netwerk** van de ontvangende server. Gebruik het privé IP-adres op het overzicht van elke server in de instellingen van je applicatie.

### Kan ik later een database aan een webserver toevoegen?

Het inrichten installeert wat het type nodig heeft wanneer de server wordt aangemaakt. Kies een app-server als je een database op dezelfde machine wilt, of maak een databaseserver aan en verbind daarmee.
