Drupal 9 installeren met Nginx en Let’s Encrypt SSL op Debian 10

Drupal is een bekend open bron inhoudsbeheersysteem, gebaseerd op PHP. Het is gratis beschikbaar en wordt vrijgegeven onder de GNU Algemene Openbare Licentie. Drupal kan gebruikt worden voor websites van alle afmetingen, van grote internationale websites tot persoonlijke blogs en bedrijfs- of overheidssites.

Het kerngedeelte van drupal heet “Drupal Core”, het bevat het basis inhoudbeheersysteem, gebruikersbeheer, menubeheer, lay-out aanpassing en systeembeheer. Drupal Core kan uitgebreid worden met plugins, tot nu toe heeft de drupal gemeenschap meer dan 31.000 modules voor Drupal ter beschikking gesteld.

In deze handleiding laten we je zien hoe je Drupal 9 op de Debian Buster 10 kunt installeren. We draaien Drupal onder de LEMP Stack (Linux, Nginx, MySQL/MariaDB, en PHP-FPM), en beveiligen de installatie met de SSL Letsencrypt.

Voorbereidingen

Voor deze gids testen we onze Drupal installatie op de nieuwste versie van Debian Buster 10 met 2GB RAM, 50GB vrije schijfruimte, en 2 CPUs. Ook hebben we de root sudo privileges nodig voor het installeren van nieuwe pakketten en het bewerken van enkele systeemsoftware configuraties.

Wat zullen we doen?

  • Nginx Webserver installeren
  • Installeren en instellen van PHP-FPM
  • Installeer en configureer MariaDB
  • SSL genereren met Letsencrypt
  • Nginx Virtualhost voor Drupal 9 instellen
  • Drupal 9 Broncode downloaden
  • Drupal 9 Na Installatie

Stap 1 – Installeer Nginx Webserver

Eerst installeren we de Nginx webserver op onze Debian server.

Werk de beschikbare repositories op je systeem bij en upgrade alle pakketten naar de nieuwste versie met het apt commando hieronder.

sudo apt update
sudo apt upgrade

Installeer vervolgens de Nginx webserver pakketten met het volgende commando.

sudo apt install nginx -y

Als alle installatie voltooid is, start je de Nginx service en voeg je hem toe aan het systeem opstarten.

systemctl start nginx
systemctl enable nginx

De Nginx dienst is aan de praat, controleer hem met het volgende commando.

systemctl status nginx

Hieronder staat het resultaat dat je krijgt.

Installeer Nginx

Het resultaat is dat de Nginx dienst up and running is op de Debian Buster 10.

Stap 2 – Installeer en configureer PHP-FPM

In deze stap installeren en configureren we PHP-FPM 7.3 op de Debian 10 voor onze Drupal installatie.

Installeer PHP en PHP-FPM pakketten 7.3 met het onderstaande apt commando.

sudo apt install php php-fpm php-gd php-common php-mysql php-apcu php-gmp php-curl php-intl php-mbstring php-xmlrpc php-gd php-xml php-cli php-zip -y

Als de hele installatie klaar is, ga je naar de ‘/etc/php/7.3’ directory en bewerk je de configuratie ‘php.ini’ met vim editor.

cd /etc/php/7.3/fpm/
vim php.ini

Haal het commentaar weg en verander de details van de configuratie zoals hieronder.

date.timezone = Asia/Singapore
memory_limit = 256M
upload_max_filesize = 64M
max_execution_time = 600
cgi.fix_pathinfo = 0

Bewaar en sluit.

Start vervolgens de PHP-FPM dienst opnieuw op en voeg hem toe aan het systeem opstarten.

systemctl restart php7.3-fpm
systemctl enable php7.3-fpm

De PHP-FPM dienst is aan de praat, en draait standaard onder het sock bestand

start php-fpm service

Controleer de PHP-FPM dienst met het volgende commando.

ss -plnt | grep php
systemctl status php7.3-fpm

Hieronder staat het resultaat dat je krijgt.

controleer php-fpm service en sock bestand

Het resultaat is dat de PHP-FPM installatie en configuratie voor Drupal 9 op Debian Buster 10 voltooid zijn.

Stap 3 – Installeer en configureer MariaDB Server

Na de installatie van PHP en PHP-FPM pakketten, gaan we de MariaDB databank installeren en een nieuwe databank voor Drupal 9 maken.

Installeer MariaDB pakketten met het onderstaande apt commando.

sudo apt install mariadb-server mariadb-client

Start daarna de MariaDB dienst en voeg die toe aan het systeem opstarten.

systemctl start mysql
systemctl enable mysql

Als resultaat is de MariaDB databank op de Debian server geïnstalleerd.

setup MySQL root wachtwoord

Vervolgens stellen we het wachtwoord in voor de standaard MariaDB root gebruiker met het ‘mysql_secure_installation’ commando zoals hieronder.

mysql_secure_installation

Typ het wachtwoord voor standaard root en typ‘Y‘ voor alle opties.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Set a root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

En het MariaDB root wachtwoord is ingesteld.

Nu moeten we toegang krijgen tot de MySQL shell en een nieuwe database en gebruiker aanmaken voor onze Drupal installatie.

Log in op de MySQL shell met de standaard root gebruiker en je wachtwoord zoals hieronder.

mysql -u root -p

Maak een nieuwe database met de naam ‘drupaldb’ en de gebruiker ‘drupaluser’ met het wachtwoord ‘[email protected]’ met behulp van de onderstaande MySQL query’s.

create database drupaldb;
create user [email protected] identified by '[email protected]';
grant all privileges on drupaldb.* to [email protected] identified by '[email protected]';
flush privileges;

Typ‘exit‘ of druk op de‘Ctrl+d‘ toets om de MySQL shell te verlaten.

Database aanmaken voor drupal

Het resultaat is dat de nieuwe database en gebruiker voor de Drupal installatie zijn aangemaakt.

Stap 4 – Genereer SSL Letsencrypt

Voor deze handleiding zullen we de Drupal 9 installatie beveiligen met de SSL Letsencrypt. Zorg er dus voor dat je een domeinnaam hebt die resolved naar je server IP adres.

Om de SSL Letsencrypt te gebruiken, moeten we SSL certificaten genereren met het certbot gereedschap.

Installeer het certbot gereedschap met het onderstaande apt commando.

sudo apt install certbot -y

Stop daarna de Nginx dienst en genereer de SSL Letsencrypt voor je Drupal domeinnaam met het volgende commando.

systemctl stop nginx
certbot certonly --rsa-key-size 2048 --standalone --agree-tos --no-eff-email --email [email protected] -d drupal.hakase-labs.io

Zorg ervoor dat je het e-mail adres met je eigen adres verandert. Als alles voltooid is, zijn je SSL certificaten beschikbaar in de map ‘/etc/letsencrypt/live/yourdomain.com’.

Stap 6 – Stel Nginx Virtualhost voor Drupal 9 in

In deze stap maken we een nieuwe Nginx virtualhost configuratie voor Drupal.

Ga naar de etc/nginx/sites-available directory en maak met vim editor een nieuwe virtuele host configuratie ‘drupal9’.

cd /etc/nginx/sites-available/
vim drupal9

Verander de domeinnaam en het pad van de SSL Letsencrypt certificaten met je eigen, en plak ze erin.

server {
    server_name drupal.hakase-labs.io;
    root /var/www/drupal9; ## <-- Your only path reference.

    listen 80;
    listen [::]:80;
    listen 443 default ssl;

    ssl_certificate      /etc/letsencrypt/live/drupal.hakase-labs.io/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/drupal.hakase-labs.io/privkey.pem;

    # Redirect HTTP to HTTPS
    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Very rarely should these ever be accessed outside of your lan
    location ~* \.(txt|log)$ {
        allow 192.168.0.0/16;
        deny all;
    }

    location ~ \..*/.*\.php$ {
        return 403;
    }

    location ~ ^/sites/.*/private/ {
        return 403;
    }

    # Block access to "hidden" files and directories whose names begin with a
    # period. This includes directories used by version control systems such
    # as Subversion or Git to store control files.
    location ~ (^|/)\. {
        return 403;
    }

    location / {
        # try_files $uri @rewrite; # For Drupal <= 6
        try_files $uri /index.php?$query_string; # For Drupal >= 7
    }

    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }

    # In Drupal 8, we must also match new paths where the '.php' appears in the middle,
    # such as update.php/selection. The rule we use is strict, and only allows this pattern
    # with the update.php front controller.  This allows legacy path aliases in the form of
    # blog/index.php/legacy-path to continue to route to Drupal nodes. If you do not have
    # any paths like that, then you might prefer to use a laxer rule, such as:
    #   location ~ \.php(/|$) {
    # The laxer rule will continue to work if Drupal uses this new URL pattern with front
    # controllers other than update.php in a future release.
    location ~ '\.php$|^/update.php' {
        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
        #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        include fastcgi_params;
        include snippets/fastcgi-php.conf;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    }

    # Fighting with Styles? This little gem is amazing.
    # location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6
    location ~ ^/sites/.*/files/styles/ { # For Drpal >= 7
        try_files $uri @rewrite;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
}

Bewaar en sluit.

Activeer nu de Nginx virtuele host configuratie voor Drupal.

ln -s /etc/nginx/sites-available/drupal9 /etc/nginx/sites-enabled/

Test nu de Nginx configuratie en controleer of er geen fout optreedt, herstart dan de Nginx dienst.

nginx -t
systemctl restart nginx

Als resultaat is de configuratie van Nginx virtuele host voor Drupal voltooid.

Opzetten van Nginx virtuele host voor Drupal

Stap 6 – Drupal downloaden

In deze stap downloaden en installeren we de nieuwste Drupal versie 9 in de ‘/var/www’ directory.

Ga nu naar de ‘/var/www’ directory en download de Drupal broncode met het wget commando zoals hieronder.

cd /var/www/
wget -q https://www.drupal.org/download-latest/tar.gz -O drupal-latest.tar.gz

Pak de drupal broncode uit en hernoem de directory naar ‘drupal9’.

tar -xf drupal-latest.tar.gz
mv drupal-9*/ drupal9/

Verander daarna het eigendom van de Drupal installatiedirectory in de gebruiker ‘www-data’.

chown -R www-data:www-data /var/www/drupal9

Als resultaat staat de Drupal installatiedirectory in de ‘/var/www/drupal9’ directory.

Drupal 9 Broncode downloaden

Stap 7 – Drupal Post installatie

Open je webbrowser en typ je Drupal URL installatie in de adresbalk.

https://drupal.hakase-labs.io/

En je wordt doorgestuurd naar de beveiligde HTTPS verbinding.

Kies nu de standaard taal voor je Drupal installatie. De standaard taal is‘Engels‘.

Drupal insteltaal

Kies als voorkeurstaal en klik op de knop‘Save and continue‘.

Kies je Drupal installatieprofiel en klik op‘Opslaan en verder’. Als je Drupal voor de eerste keer installeert, kies dan het‘Standaard‘ installatieprofiel.

Drupal Installatie type

Typ voor de MySQL databank configuraties de details van de aangemaakte databank bovenaan en klik op de knop‘Save and continue’.

Database opzetten voor Drupal

En je krijgt het Drupal installatieproces zoals hieronder.

Drupal installatieproces

Als de hele installatie voltooid is, configureer je de naam van je site, admin gebruiker, wachtwoord, e-mail, enz.

Drupal Site Configuratie

Klik op de knop‘Save and continue‘.

Nu word je doorverwezen naar de Drupal standaard index pagina zoals hieronder.

drupal homepage

Klik op het‘Configuration‘ menu op t op, en je krijgt het Drupal Admin configuratie Dashboard.

Drupal Admin Dashboard

Als resultaat is de installatie van Drupal 9 met de LEMP Stack op Debian Buster 10 met succes voltooid.