# Een site maken voor Laravel, WordPress, Next.js en meer

> Maak een site op je server vanuit een framework-preset zoals Laravel, WordPress of Next.js, met repository, database, domein en een gratis testadres.

Een **site** in Vimonto Deploy is één website of app op een van je servers: met een eigen domein, Nginx-configuratie, code, `.env` en deploys. Je maakt hem aan vanuit een framework-preset (Laravel, WordPress, Next.js en andere). Die kiest de runtime, de webmap, het buildcommando en een deployscript dat erbij past.

Als je een site aanmaakt, zet Vimonto Deploy hem op de server klaar, koppelt de repository en deployt hem meteen. Een paar minuten later staat de site live op een gegenereerd `on-deploy.link`-adres, nog voordat je iets aan DNS hebt gedaan.

![Het formulier voor een nieuwe site met server, repository, database en gegenereerd adres ingevuld](https://ops.vimonto.com/docs-media/nl/create-site.webp?v=161e760d "Een Laravel-site aanmaken")

![Het formulier voor een nieuwe site invullen en de site aanmaken](https://ops.vimonto.com/docs-media/nl/create-site.mp4?v=161e760d)

## Al je sites vinden

Het tabblad **Sites** in de bovenbalk toont alle sites van de organisatie, op al haar servers. Elke rij toont het domein met het icoon van het framework, en daaronder de server, het framework, de PHP-versie en de branch. **Gedeployd** zegt hoe lang geleden de site voor het laatst is gedeployd (of **nog niet gedeployd**), en **Status** laat zien of hij klaar is of nog bezig. Zoek op domein, sorteer op een kolom en klik op een rij om de site te openen.

Gebruikt je organisatie [teams](https://ops.vimonto.com/docs/nl/organization/teams), dan zie je alleen de sites op de servers waar je toegang toe hebt. De eigen pagina **Sites** van een server toont alleen de sites op die server.

![De lijst Sites van de organisatie met per site de server, het framework, de laatste deploy en de status](https://ops.vimonto.com/docs-media/nl/sites-list.webp?v=161e760d "De sites van de organisatie")

## Een nieuwe site starten

1. Open een server en ga naar de pagina **Sites**.
2. Klik op **Nieuwe site** en kies waarmee de site gebouwd is, bijvoorbeeld **Laravel** of **WordPress**.
3. Vul het formulier in (elk veld staat hieronder beschreven) en klik op **Site aanmaken**.

**Nieuwe site** in de lijst **Sites** van de organisatie heeft hetzelfde menu met frameworks. In het formulier kies je dan de server, en de link **← Sites** leidt terug naar de lijst van de organisatie in plaats van die van de server.

Sites komen op servers die websites serveren: een app-server of een webserver. Een load balancer bevat alleen load-balanced sites (zie [load balancing](https://ops.vimonto.com/docs/nl/sites/load-balancing)). Is er nog geen geschikte server, dan meldt het formulier **Nog geen server voor sites** en biedt het **Nieuwe server** aan. Zie [servertypes](https://ops.vimonto.com/docs/nl/servers/server-types) voor wat elk type installeert.

Je hebt in de organisatie het recht nodig om sites te beheren; zie [leden en rollen](https://ops.vimonto.com/docs/nl/organization/members-and-roles). Het gratis abonnement bevat 3 sites over alle servers van de organisatie samen; zijn die gebruikt, dan toont het formulier **Je abonnement zit vol** met **Bekijk abonnementen**. Zie [facturering](https://ops.vimonto.com/docs/nl/organization/billing).

## Welke frameworks kun je kiezen?

Het menu **Nieuwe site** groepeert de presets per taal. Elke preset stelt de runtime in (hoe Nginx de site serveert) en verstandige standaardwaarden, die je onder **Geavanceerde instellingen** kunt aanpassen.

| Preset | Runtime | Webmap | Composer | Standaard buildcommando | Repository |
|---|---|---|---|---|---|
| Laravel | Laravel (PHP) | `/public` | Ja | `npm run build` | Ja |
| Symfony | PHP | `/public` | Ja | geen | Ja |
| Statamic | Laravel (PHP) | `/public` | Ja | `npm run build` | Ja |
| WordPress | PHP | `/` | Nee | geen | Nee, wordt voor je geïnstalleerd |
| phpMyAdmin | PHP | `/` | Nee | geen | Nee, wordt voor je geïnstalleerd |
| PHP | PHP | `/public` | Ja | geen | Ja |
| Next.js | Node.js | niet gebruikt | Nee | `npm run build` | Ja |
| Nuxt | Node.js | niet gebruikt | Nee | `npm run build` | Ja |
| HTML | Statisch | `/` | Nee | geen | Ja |
| Anders | PHP | `/` | Nee | geen | Ja |
| Load balancer | Proxy naar je app-servers | niet gebruikt | Nee | geen | Nee |

Wat de runtimes betekenen:

- **Laravel**: PHP-FPM achter Nginx, met Laravels `storage/` gedeeld tussen releases, queue workers en de scheduler.
- **PHP**: elke PHP-app met een `index.php`, zoals Symfony of WordPress.
- **Statisch**: HTML, of een frontend die tot bestanden wordt gebouwd (Vite, Astro, een statische Next.js-export).
- **Node.js**: een app die op een poort luistert; Nginx stuurt verzoeken door.

De preset **Load balancer**, onder **Load balancing** in het menu, is alleen voor load balancer-servers en is de enige soort site die ze bevatten. Hij heeft geen code en geen deploys: hij stuurt verzoeken door naar je app-servers. Het formulier heeft geen repository, database of **Geavanceerde instellingen**, omdat er niets te bouwen of te isoleren is. Zie [load balancing](https://ops.vimonto.com/docs/nl/sites/load-balancing).

### WordPress en phpMyAdmin

WordPress en phpMyAdmin hebben geen repository nodig. Vimonto Deploy downloadt de nieuwste versie op de server en schrijft de configuratie:

- **WordPress** krijgt een `wp-config.php` met de databasenaam, gebruiker en wachtwoord, en nieuwe security keys en salts. WordPress heeft altijd een database nodig, dus **Database koppelen** kan niet uit.
- **phpMyAdmin** krijgt een `config.inc.php` die met cookie-authenticatie inlogt op de databaseserver op dezelfde machine.

Open de site daarna om de installatie van WordPress in de browser af te ronden.

## Het formulier invullen

### Server

Kies de server waar de site op komt. Alleen actieve servers die dit soort site kunnen hosten staan in de lijst, met hun IP-adres: app- en webservers voor elke preset, load balancers alleen voor de preset **Load balancer**.

### Broncode, repository en branch

Kies onder **Broncode** een van je [Git-koppelingen](https://ops.vimonto.com/docs/nl/connections/source-control) (GitHub, GitLab of Bitbucket), of **Eigen Git-URL**.

- Met een koppeling kies je de **Repository** (eventueel gefilterd op **Organisatie**) en de **Branch**.
- Met **Eigen Git-URL** typ je de **Git-URL**, zoals `git@github.com:you/project.git` of `https://github.com/you/project.git`, en de **Branch**.

De repository is optioneel. Zonder repository krijgt de site een tijdelijke pagina en koppel je later een repository op de pagina [Deployments](https://ops.vimonto.com/docs/nl/sites/deployments).

### Database koppelen

Op een server met een database staat **Database koppelen** standaard aan, met een nieuwe database die naar de site is genoemd (bijvoorbeeld `shop_example_com`). Je kunt:

- Op **Wijzigen** of **Database aanmaken** klikken om de naam, een eigen **Gebruiker** en een **Wachtwoord** te kiezen. Laat de gebruiker leeg om de eigen databasegebruiker van de server te gebruiken. Laat het wachtwoord leeg, dan wordt er een gegenereerd.
- Een bestaande database uit de lijst kiezen. De site krijgt daar dan een eigen databasegebruiker voor, zodat hij nooit een wachtwoord deelt met een andere site.

Bij Laravel- en Statamic-sites worden de databasenaam, gebruiker en wachtwoord in de `.env` van de site gezet. Zie [databases](https://ops.vimonto.com/docs/nl/servers/databases) om ze later te beheren.

### Domein of gegenereerd adres

Elke site kan een gratis adres op `on-deploy.link` krijgen, zoals `kalme-rivier-4821.on-deploy.link`. Het eerste deel van de naam kun je aanpassen in het veld **on-deploy.link-adres**. Het werkt meteen, zonder eigen DNS, en is daardoor handig om te testen en te delen. Een site die op dit adres draait, krijgt ook vanzelf HTTPS (zie hieronder).

Wil je een eigen domein gebruiken, klik dan op **Eigen domein gebruiken** en typ het, bijvoorbeeld `shop.example.com`. Laat **Ook …on-deploy.link** aangevinkt als de site ook op het gegenereerde adres moet reageren.

Daarna heeft het domein DNS-records nodig die naar de server wijzen. Met DNS-integraties staat onder het domein de hint "We zoeken het domein op bij je DNS-providers en zetten de records automatisch goed." Terwijl je typt, toont een vak **DNS** of een van je [integraties](https://ops.vimonto.com/docs/nl/connections/integrations) (Hetzner Cloud, DigitalOcean, Vultr, Akamai, AWS, Google Cloud of Cloudflare) het beheert; hun domeinlijsten worden live opgehaald:

- Is dat zo, dan staat **Automatisch laten wijzen met …** gekozen. Het vak toont de records (een A-record voor het domein en een CNAME voor `www.`) als **Nieuw**, **Klopt al** of **Wijzigingen**, met een waarschuwing voor alles wat verandert of wordt verwijderd. Veranderen er bestaande records, vink dan **Deze records wijzigen** aan. Na de inrichting werkt Vimonto Deploy de records bij, wacht tot het domein resolvet en vraagt zelf HTTPS aan. Kies **Ik beheer de DNS zelf** om de DNS met rust te laten.
- Is dat niet zo, maar heb je wel DNS-integraties, zet dan **Domein toevoegen aan een DNS-provider** aan en kies de **Provider** en de **Zone** (standaard het domein zonder subdomein, zoals `example.com`). Vimonto Deploy maakt de zone daar aan, zet de records en noemt in de uitvoer van de taak de nameservers die je bij je registrar instelt; HTTPS volgt zodra de DNS resolvet.
- Anders laat je het domein zelf bij je DNS-provider met een A-record naar het IP-adres van de server wijzen.

> [!TIP]
> De DNS van je domein kan voor je worden ingesteld. Koppel Cloudflare, Hetzner Cloud, DigitalOcean, Vultr, Akamai, AWS of Google Cloud onder [integraties](https://ops.vimonto.com/docs/nl/connections/integrations), en Vimonto Deploy vindt het domein daar, maakt de records aan en vraagt zelf HTTPS aan. Zonder koppeling toont het domeinformulier **Tip: laat ons de DNS-records instellen** met een link om er een te koppelen.

Zie [domeinen en SSL](https://ops.vimonto.com/docs/nl/sites/domains-and-ssl#je-domein-automatisch-laten-wijzen-met-een-dns-integratie) voor wat elke waarschuwing betekent.

Later kun je meer domeinen toevoegen, het gegenereerde adres uitzetten en HTTPS aanzetten; zie [domeinen en SSL](https://ops.vimonto.com/docs/nl/sites/domains-and-ssl).

### Composer-pakketten installeren

Bij Laravel-, Symfony-, Statamic- en PHP-sites met een repository voegt **Composer-pakketten installeren** `composer install` aan het deployscript toe. Zet het uit als je project geen `composer.json` heeft of de pakketten op een andere manier installeert.

### Eigen deploy-sleutel

Met **Eigen deploy-sleutel voor GitHub** (of GitLab, Bitbucket; **Eigen deploy-sleutel voor je Git-host** bij een eigen Git-URL) aan, de standaard, krijgt de site een eigen SSH-sleutel voor zijn repository. Bij een gekoppelde Git-host registreert Vimonto Deploy die als alleen-lezen deploy-sleutel op de repository. Bij een eigen Git-URL kopieer je de sleutel van de pagina Deployments en voeg je hem zelf toe bij je Git-host.

Een repository van een gekoppelde Git-host krijgt ook **Deployen bij elke push** aangezet: Vimonto Deploy voegt een webhook toe, en elke push naar de branch deployt. Je kunt het uitzetten op de pagina [Deployments](https://ops.vimonto.com/docs/nl/sites/deployments#push-to-deploy).

## Geavanceerde instellingen

Klik op **Geavanceerde instellingen** om de standaardwaarden van de preset te wijzigen. Klik op **Instellingen bewaren** om ze te bewaren.

| Instelling | Wat het doet |
|---|---|
| **Hoofdmap** | Waar de app in de repository staat. `/` is de hele repository; gebruik `/backend` of iets vergelijkbaars voor een monorepo. |
| **Webmap** | Wat Nginx serveert, binnen de hoofdmap, zoals `/public` of `/dist`. Niet zichtbaar bij Node.js-sites. |
| **PHP-versie** | Een van de PHP-versies die op de server geïnstalleerd zijn. Zie [PHP](https://ops.vimonto.com/docs/nl/servers/php). |
| **Pakketbeheerder frontend** | npm (standaard), yarn, pnpm of bun. Yarn en pnpm draaien via Corepack. |
| **Buildcommando** | Draait nadat de pakketten geïnstalleerd zijn, zoals `npm run build`. Leeg: niets bouwen. |
| **Website-isolatie** | Geeft de site een eigen Linux-gebruiker, met een **Gebruikersnaam** die je zelf kiest. |
| **Zero-downtime deploys** | Bouwt elke deploy in een nieuwe release en schakelt pas over als die gelukt is. Standaard aan. |
| **Composer-authenticatie** | Host, gebruikersnaam en wachtwoord of token voor privé Composer-pakketten, zoals `repo.packagist.com`. |
| **npm-authenticatie** | Registry en token voor een privé npm-registry, zoals `https://npm.pkg.github.com`. |

### Een monorepo deployen

Zet de **Hoofdmap** op de map van de app, bijvoorbeeld `/backend`. De hele repository wordt gekloond, maar het deployscript draait in die map, de `.env` wordt daar gekoppeld en de webmap wordt daarbinnen gezocht. Staat de map niet in de repository, dan mislukt de deploy met een duidelijke melding.

### Website-isolatie

Een geïsoleerde site draait als een eigen Linux-gebruiker, met een thuismap die andere sites niet kunnen lezen. Een PHP-site krijgt ook een eigen PHP-FPM-pool die als die gebruiker draait. Nginx kan de bestanden nog steeds serveren, omdat de systeemgebruiker van de server lid wordt van de groep van de site. Gebruik dit als meerdere klanten of projecten één server delen.

De gebruiker kies je bij het aanmaken van de site. De naam bestaat uit kleine letters, cijfers, `_` en `-`, begint met een letter en mag geen systeemnaam zijn, zoals `root` of `www-data`.

### Zero-downtime deploys

Met zero-downtime deploys wordt elke deploy gebouwd in een nieuwe releasemap en gaat hij in één atomische stap live. Bezoekers zien zo nooit een half gebouwde site en je kunt terugzetten. Staat het uit, dan wordt één release ter plekke bijgewerkt: sneller, maar bezoekers kunnen de build zien gebeuren en terugzetten kan niet. Je kunt dit later wijzigen onder [site-instellingen](https://ops.vimonto.com/docs/nl/sites/site-settings). Zie [deployments](https://ops.vimonto.com/docs/nl/sites/deployments) voor de details.

### Privé Composer- en npm-pakketten

De gegevens onder **Composer-authenticatie** en **npm-authenticatie** worden versleuteld opgeslagen en alleen tijdens de build gebruikt: Composer leest ze uit `COMPOSER_AUTH`, en npm uit een tijdelijk configuratiebestand dat daarna wordt verwijderd. Je kunt ze later toevoegen, wijzigen of verwijderen in de **Instellingen** van de site, op de tabbladen **Composer** en **npm**: zie [gegevens voor Composer en npm](https://ops.vimonto.com/docs/nl/sites/site-settings#gegevens-voor-composer-en-npm).

## Wat gebeurt er nadat je op Site aanmaken klikt?

Je komt op de pagina van de site, die alleen de inrichting toont tot de site live is: de fasen, de stap die bezig is en het logboek van elke taak. Je kunt de pagina op elk moment verlaten; het werk gaat op de achtergrond door.

1. **Instellen**: Vimonto Deploy maakt het DNS-record voor het gegenereerde adres, maakt de database en de gebruiker ervan aan, maakt de mappen van de site en schrijft de `.env`, de PHP-FPM-pool (bij isolatie) en de Nginx-configuratie. Tot de eerste deploy toont de site een pagina die zegt dat hij klaarstaat. WordPress en phpMyAdmin worden in deze fase geïnstalleerd.
2. **Koppelen**: bij een repository wordt de deploy-sleutel op de server gezet en, bij een gekoppelde Git-host, samen met de push-webhook op de repository geregistreerd.
3. **Ophalen, Bouwen, Live**: de eerste deploy kloont de branch, voert het deployscript uit en zet de release live.
4. **HTTPS**: voor een site waarvan het adres het gegenereerde `on-deploy.link`-adres is, en voor een site op een eigen domein dat een DNS-integratie laat wijzen. Bij een eigen domein werkt Vimonto Deploy eerst de DNS-records bij zoals het plan liet zien. Daarna wacht het tot de naam naar de server wijst (hooguit 10 minuten), vraagt dan een gratis Let's Encrypt-certificaat aan en zet de site over op HTTPS. Dit loopt naast de eerste deploy en is de laatste fase die je ziet. Mislukt het, dan blijft de site gewoon werken over HTTP; vraag later een certificaat aan onder [domeinen en SSL](https://ops.vimonto.com/docs/nl/sites/domains-and-ssl).

Een site die met een eigen domein is aangemaakt waarvan je de DNS zelf beheert, slaat de fase HTTPS over, omdat de DNS misschien nog niet naar de server wijst. Vraag het certificaat aan zodra dat wel zo is.

Zolang het opzetten loopt (inrichten, de repository koppelen, de eerste deploy en het eerste HTTPS-certificaat), is dit overzicht met de stappen de enige pagina van de site, samen met het logboek van de eerste deploy: er is geen zijbalk, en de andere pagina's van de site leiden ernaar terug.

Als alles klaar is, wordt de pagina het gewone overzicht van de site, met de zijbalk. De eerste keer dat jij (of iemand anders in de organisatie) hem daarna opent, begint hij met **Je site staat live**, hoe lang het opzetten duurde en een knop **Openen**; **Sluiten** verbergt dit, en bij latere bezoeken zie je alleen het overzicht.

Op schijf staat elke site in `/home/{user}/{domain}`, met `releases/`, `shared/` en een symlink `current`. De map houdt zijn naam als je later het domein van de site wijzigt.

Mislukt een fase, dan meldt de pagina **Inrichten mislukt**, **Koppelen van de repository mislukt** of **Eerste deploy mislukt**, met de fout en het logboek van de stap die misging (onder **Details en logboek**). Los de oorzaak op (een branchnaam, een ontbrekende deploy-sleutel) en gebruik de knop op de pagina: **Opnieuw proberen**, **Opnieuw koppelen** of **Opnieuw deployen**. Is een fase mislukt, dan zijn de zijbalk en alle pagina's van de site terug, zodat je de oorzaak kunt oplossen op de pagina's **Deployments** en **Omgeving**.

### Wat doe je daarna?

- Zet voor een site op een eigen domein waarvan je de DNS zelf beheert HTTPS aan met een gratis Let's Encrypt-certificaat onder [domeinen en SSL](https://ops.vimonto.com/docs/nl/sites/domains-and-ssl).
- Controleer de `.env` onder [omgeving](https://ops.vimonto.com/docs/nl/sites/environment).
- Voeg voor Laravel queue workers en de scheduler toe onder [queues en scheduler](https://ops.vimonto.com/docs/nl/sites/queues-and-scheduler), of zet Horizon aan in het menu [sitefuncties](https://ops.vimonto.com/docs/nl/sites/site-features).
- Roep bij een eigen Git-URL de [deploy-URL](https://ops.vimonto.com/docs/nl/sites/deployments#deployen-vanuit-ci-met-de-deploy-url) aan vanuit je Git-host of CI om bij een push te deployen.

![De sites van een server met hun domeinen en laatste deploys](https://ops.vimonto.com/docs-media/nl/server-sites.webp?v=161e760d "De sites van een server")

## Veelgestelde vragen

### Heb ik een domein nodig om een site te maken?

Nee. Elke site kan een gegenereerd `on-deploy.link`-adres krijgen dat meteen werkt. Voeg je eigen domein toe wanneer je er klaar voor bent.

### Kan ik meerdere sites op één server hosten?

Ja. Een server kan zoveel sites bevatten als er ruimte voor is. Elke site heeft een eigen Nginx-configuratie en map; zet website-isolatie aan om elke site ook een eigen Linux-gebruiker te geven.

### Welke repository gebruikt WordPress?

Geen. WordPress en phpMyAdmin worden bij het aanmaken van de site gedownload en op de server geïnstalleerd. Houd je een WordPress-project bij in Git, kies dan de preset **PHP** en koppel je repository.

### Hoe deploy ik een Next.js- of Nuxt-app?

Kies **Next.js** of **Nuxt**. De site krijgt een vrije lokale poort (vanaf 3000) waar Nginx naar doorstuurt, en het deployscript installeert de pakketten en voert `npm run build` uit. Vimonto Deploy voegt ook het proces toe dat je app op die poort draait, en de eerste deploy start het. Je vindt het onder [Processen](https://ops.vimonto.com/docs/nl/sites/queues-and-scheduler#een-nodejs-app-draaien).

### Kan ik een site over meerdere servers verdelen?

Ja, met een load balancer-server vóór twee of meer app-servers die elk dezelfde site draaien. Zie [load balancing](https://ops.vimonto.com/docs/nl/sites/load-balancing).

### Kan ik het framework later wijzigen?

Nee, de preset kies je bij het aanmaken van de site. De PHP-versie, de webmap, de Node.js-poort en zero-downtime deploys kun je wijzigen onder [site-instellingen](https://ops.vimonto.com/docs/nl/sites/site-settings), en het deployscript op de pagina [Deployments](https://ops.vimonto.com/docs/nl/sites/deployments).

### Kan ik een bestaande site kopiëren?

Ja. Klik in de **Instellingen** van de site op **Site klonen** om een nieuwe site te maken met dezelfde repository, buildinstellingen, deployscript en regels, op dezelfde of een andere server. Zie [een site klonen](https://ops.vimonto.com/docs/nl/sites/site-settings#een-site-klonen).
