Wolkra

Handleidingen

WordPress installeren op een VPS

Installeer WordPress op een VPS met Caddy, PHP-FPM en MariaDB op Ubuntu 24.04: database, automatische HTTPS, WP-CLI, caching, back-ups en updates, stap voor stap.

Bijgewerkt 5 min. leestijd

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.
bash
sudo ufw allow 80,443/tcp

1. PHP en MariaDB installeren

bash
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:

bash
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

bash
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:

bash
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:

bash
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

bash
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:

bash
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:

text
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:

bash
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):

ini
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 120
opcache.enable = 1
opcache.memory_consumption = 128
bash
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:

bash
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:

bash
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:

bash
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.

bash
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:
bash
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:

bash
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.

Start een server in Frankfurt

Maak een account aan, waardeer op en draai een server vanaf €3.49 per maand. Je betaalt alleen voor de uren die je gebruikt. Onbemeterde bandbreedte bij elk pakket.