Om WordPress op een VPS te draaien, installeer je een webserver (hier Caddy), PHP-FPM met de extensies die WordPress nodig heeft, en MariaDB; maak je een database en gebruiker aan; download je WordPress met WP-CLI; en laat je een domein naar de server wijzen, zodat Caddy HTTPS kan inschakelen. Op Ubuntu 24.04 kost de hele installatie ongeveer 20 minuten.
Wil je het handwerk liever overslaan, dan installeert de WordPress-app met één klik van Wolkra dezelfde stack automatisch. Deze handleiding laat zien wat er onder de motorkap gebeurt, zodat je het zelf kunt beheren en repareren.
Voordat je begint
- Een server met Ubuntu 24.04 (Debian 12 werkt met dezelfde stappen), 2 GB geheugen aanbevolen.
- De eerste stappen uitgevoerd: updates, sudo-gebruiker, SSH-sleutels.
- Een domein met een A-record (en AAAA als je IPv6 gebruikt) dat naar de server wijst. In deze handleiding:
blog.example.com. - Poorten 80 en 443 open in UFW en in een eventuele cloudfirewall.
sudo ufw allow 80,443/tcp
1. PHP en MariaDB installeren
sudo apt update
sudo apt install -y mariadb-server \
php-fpm php-mysql php-curl php-gd php-intl php-mbstring \
php-xml php-zip php-imagick php-bcmath unzip
Ubuntu 24.04 installeert PHP 8.3; Debian 12 installeert PHP 8.2. Controleer welke versie je hebt:
php -v
ls /run/php/
Noteer de naam van de socket, zoals php8.3-fpm.sock. Die heb je nodig in stap 5.
2. MariaDB beveiligen en de database aanmaken
sudo mariadb-secure-installation
Accepteer de standaardwaarden: behoud unix-socketauthenticatie voor root, verwijder anonieme gebruikers en de testdatabase.
Maak een database en gebruiker aan voor WordPress:
DBPASS=$(openssl rand -hex 20)
echo "Database password: $DBPASS"
sudo mariadb <<SQL
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp'@'localhost' IDENTIFIED BY '$DBPASS';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wp'@'localhost';
FLUSH PRIVILEGES;
SQL
Bewaar het wachtwoord; WP-CLI heeft het zo meteen nodig.
3. Caddy installeren
Caddy publiceert een officiële Debian/Ubuntu-repository:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | \
sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | \
sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
4. WP-CLI installeren en WordPress downloaden
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
Maak de map voor de site aan en maak de PHP-gebruiker eigenaar:
sudo mkdir -p /var/www/blog
sudo chown www-data:www-data /var/www/blog
cd /var/www/blog
sudo -u www-data wp core download
sudo -u www-data wp config create \
--dbname=wordpress --dbuser=wp --dbpass="$DBPASS" --dbhost=localhost
sudo -u www-data wp core install \
--url=https://blog.example.com \
--title="My Blog" \
--admin_user=admin_$(openssl rand -hex 3) \
--admin_email="<je-e-mailadres>" \
--prompt=admin_password
Een niet voor de hand liggende gebruikersnaam voor de beheerder maakt raadaanvallen lastiger. --prompt vraagt om het wachtwoord in plaats van het in je shellgeschiedenis achter te laten.
5. Caddy configureren
Vervang /etc/caddy/Caddyfile door:
blog.example.com {
root * /var/www/blog
encode zstd gzip
php_fastcgi unix//run/php/php8.3-fpm.sock
file_server
@blocked path /xmlrpc.php /wp-config.php /.git/* /.env
respond @blocked 404
header {
Strict-Transport-Security "max-age=31536000"
X-Content-Type-Options "nosniff"
Referrer-Policy "strict-origin-when-cross-origin"
}
}
Gebruik de naam van je eigen PHP-socket. Daarna:
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
Caddy vraagt bij het eerste verzoek een certificaat aan. Open https://blog.example.com/wp-admin/ en log in. Meer opties vind je in de handleiding Caddy als reverse proxy.
6. PHP afstemmen
De standaardwaarden zijn krap voor het uploaden van media. Maak /etc/php/8.3/fpm/conf.d/99-wordpress.ini aan (pas de versie aan):
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 120
opcache.enable = 1
opcache.memory_consumption = 128
sudo systemctl restart php8.3-fpm
OPcache houdt gecompileerde PHP in het geheugen en is de grootste gratis snelheidswinst.
7. Caching toevoegen
Voor de meeste blogs is een plugin voor paginacache genoeg. Voor drukkere sites voeg je Redis toe als objectcache:
sudo apt install -y redis-server php-redis
sudo systemctl restart php8.3-fpm
cd /var/www/blog
sudo -u www-data wp plugin install redis-cache --activate
sudo -u www-data wp redis enable
Redis luistert standaard alleen op localhost. Houd dat zo.
8. WordPress-cron via het systeem draaien
WordPress start geplande taken bij paginaweergaven, wat onbetrouwbaar is op rustige sites en verspilling op drukke. Gebruik in plaats daarvan een echte cronjob:
sudo -u www-data wp config set DISABLE_WP_CRON true --raw
echo '*/5 * * * * www-data cd /var/www/blog && /usr/local/bin/wp cron event run --due-now --quiet' | \
sudo tee /etc/cron.d/wordpress
9. Houd alles up-to-date
De meeste WordPress-hacks komen binnen via verouderde plugins. Werk wekelijks bij, of automatiseer het:
cd /var/www/blog
sudo -u www-data wp core update
sudo -u www-data wp plugin update --all
sudo -u www-data wp theme update --all
Verwijder plugins en thema's die je niet gebruikt. Elk ervan is code die een lek kan hebben.
10. Back-ups maken
Je hebt twee dingen nodig: de database en wp-content.
sudo mkdir -p /var/backups/blog
cd /var/www/blog
sudo -u www-data wp db export - | gzip | sudo tee /var/backups/blog/db-$(date +%F).sql.gz >/dev/null
sudo tar czf /var/backups/blog/files-$(date +%F).tar.gz -C /var/www/blog wp-content
Plan dat elke nacht in en kopieer het naar een andere plek. Voeg bij Wolkra automatische dagelijkse serverback-ups toe (20% van de serverprijs, 7 herstelpunten) en maak een snapshot vóór grote updates. Zie de handleiding voor een back-upstrategie.
11. De basis beveiligen
- Houd SSH op alleen sleutels en het besturingssysteem bijgewerkt (een Ubuntu-server beveiligen).
- Zet met een plugin tweestapsverificatie aan voor WordPress-beheerders.
- Schakel het bewerken van bestanden in het dashboard uit:
sudo -u www-data wp config set DISALLOW_FILE_EDIT true --raw
- Beperk inlogpogingen met een plugin of Fail2ban.
12. E-mail betrouwbaar versturen
WordPress verstuurt wachtwoordresets, reactiemeldingen en ordermails standaard via mail() van PHP, en die belanden vaak in de spam. Gebruik een SMTP-plugin en een degelijke mailprovider, en voeg SPF- en DKIM-records voor je domein toe zoals de provider beschrijft. Verstuurt de server zelf mail, stel dan in de console de reverse DNS van zijn IP in op de hostnaam van de server; zie IP-adressen.
13. Controleer of alles werkt
Een snelle check na de installatie:
curl -I https://blog.example.com
sudo -u www-data wp --path=/var/www/blog core verify-checksums
sudo -u www-data wp --path=/var/www/blog cron event list
systemctl status caddy php8.3-fpm mariadb --no-pager
verify-checksums vergelijkt de kernbestanden met de officiële release en is later ook een snelle manier om manipulatie op te sporen.
Capaciteit en groei
Houd geheugen en CPU een paar weken in de gaten via de grafieken in de console. Raken de PHP-workers op, verhoog dan pm.max_children in /etc/php/8.3/fpm/pool.d/www.conf of schaal de server op naar een groter pakket. Het dataverkeer is bij elk Wolkra-pakket onbemeterd, dus een drukke maand verhoogt de rekening niet. Meer over sites op deze manier draaien lees je bij WordPress-hosting.
Veelgestelde vragen
Is een VPS beter dan shared hosting voor WordPress?
Een VPS geeft je eigen resources, volledige controle over PHP en caching, en geen luidruchtige buren op hetzelfde account. Je neemt wel zelf de updates en beveiliging op je, die shared hosting voor je regelt.
Hoeveel geheugen heeft WordPress nodig op een VPS?
Eén site met een database draait met wat zorg op 1 GB. 2 GB is comfortabeler, en drukke webwinkels met WooCommerce willen vaak 4 GB.
Waarom Caddy gebruiken in plaats van Nginx of Apache?
Caddy vraagt HTTPS-certificaten zelf aan en vernieuwt ze, en heeft maar een paar regels configuratie nodig. Nginx en Apache werken net zo goed, maar vragen meer instelwerk.
Kan ik WordPress voorgeïnstalleerd krijgen?
Ja. De WordPress-app met één klik van Wolkra zet Caddy, PHP, MariaDB en WP-CLI voor je klaar, een paar minuten nadat de server is opgestart.
Hoe maak ik een back-up van WordPress?
Maak een back-up van zowel de database als de map wp-content. Een nachtelijke database-export met WP-CLI plus een kopie van de bestanden, opgeslagen buiten de server, dekt alles af.