Introduzione

Drupal è un sistema di gestione dei contenuti gratuito, open source e scalabile che può essere utilizzato per creare e gestire qualsiasi tipo di sito Web. È scritto in PHP e utilizza MySQL/MariaDB per archiviare i suoi dati. Drupal offre un ricco set di funzionalità che possono essere estese da migliaia di componenti aggiuntivi. Drupal supporta molti server Web tra cui, Apache, Nginx, IIS, Lighttpd e database MySQL, MariaDB, MongoDB, SQLite, PostgreSQL e MS SQL server. Drupal viene fornito con un'interfaccia utente Web semplice e intuitiva che consente di creare siti Web senza alcuna conoscenza di codifica.

In questo tutorial, ti mostreremo come installare Drupal 8 sul server CentOS 8 e proteggerlo con Let's Encrypt SSL gratuito.

Requisiti

  • Un server che esegue CentOS 8.
  • Un nome di dominio valido indicato con l'IP del tuo server
  • Utente con privilegi sudo.

Installare Nginx, MariaDB e PHP

Prima di iniziare, dovrai installare il server LEMP sul tuo server. È possibile installarlo eseguendo il comando seguente:

sudo dnf install nginx mariadb-server php php-fpm php-cli php-mbstring php-gd php-xml php-curl php-mysqlnd php-pdo php-json php-opcache -y

Una volta installato, avvia Nginx, MariaDB e php-fpm e abilita l'avvio dopo il riavvio del sistema usando il comando seguente:

sudo systemctl start nginx
sudo systemctl start mariadb
sudo systemctl start php-fpm
sudo systemctl enable nginx
sudo systemctl enable php-fpm
sudo systemctl enable mariadb

Configurare database

Per impostazione predefinita, MariaDB non è protetto, quindi sarà necessario proteggerlo. È possibile proteggerlo eseguendo il comando seguente:

mysql_secure_installation

Rispondi a tutte le domande come mostrato di seguito:

Enter current password for root (enter for none):
Set root password? [Y/n] Y
New password:
Re-enter new password:
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

Una volta terminato, accedere alla shell MariaDB con il seguente comando:

sudo mysql -u root -p

Fornisci la tua password di root quando richiesto, quindi crea un database e un utente per Drupal con il seguente comando:

CREATE DATABASE drupaldb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER [email protected] IDENTIFIED BY "password";

Successivamente, concedi tutti i privilegi a drupaldb con il seguente comando:

GRANT ALL ON drupaldb.* TO [email protected] IDENTIFIED BY "password";

Quindi, svuota i privilegi ed esci dalla shell MariaDB con il seguente comando:

FLUSH PRIVILEGES;
EXIT;

Scaricare Drupal

Innanzitutto, dovrai scaricare l'ultima versione di Drupal dal loro sito Web ufficiale.

Installare wget se non è già installato:

sudo dnf install wget

Scaricare Drupal con il seguente comando:

sudo wget https://ftp.drupal.org/files/projects/drupal-8.7.10.tar.gz

Installare tar se non è già installato:

sudo dnf install tar

Una volta scaricato Drupal, estrarre il file con il seguente comando:

sudo tar -xvzf drupal-8.7.10.tar.gz

Quindi, spostare la directory estratta nella directory root Web di Nginx con il seguente comando:

sudo mv drupal-8.7.10 /var/www/html/drupal

Quindi, crea una directory per archiviare i file del sito Web e rinomina il file default.settings.php come mostrato di seguito:

sudo mkdir /var/www/html/drupal/sites/default/files
sudo cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php

Successivamente, modifica la proprietà della directory Drupal in nginx come mostrato di seguito:

sudo chown -R nginx:nginx /var/www/html/drupal/

Configura Nginx per Drupal

Innanzitutto, crea un file di configurazione php-fpm per Drupal con il seguente comando:

sudo vi /etc/php-fpm.d/drupal.conf

Aggiungi le seguenti righe:

[drupal]
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen = /run/php-fpm/drupal.sock
pm = ondemand
pm.max_children =  50
pm.process_idle_timeout = 10s
pm.max_requests = 500
chdir = /

Salva e chiudi il file al termine. Quindi, crea un file di configurazione dell'host virtuale Nginx per Drupal:

sudo vi /etc/nginx/conf.d/drupal.conf

Aggiungi le seguenti righe:

server {
    listen 80;
    server_name example.com;

    root /var/www/html/drupal;

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

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

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

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

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

    # Block access to scripts in site files directory
    location ~ ^/sites/[^/]+/files/.*\.php$ {
        deny all;
    }
    location ~ (^|/)\. {
        return 403;
    }

    location / {
        try_files $uri /index.php?$query_string;
    }

    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }
    location ~ /vendor/.*\.php$ {
        deny all;
        return 404;
    }


    location ~ '\.php$|^/update.php' {
        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
        include fastcgi_params;
       	# Block httpoxy attacks. See https://httpoxy.org/.
        fastcgi_param HTTP_PROXY "";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/run/php-fpm/drupal.sock;
    }
    location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
        try_files $uri @rewrite;
    }

    # Handle private files through Drupal. Private file's path can come
    # with a language prefix.
    location ~ ^(/[a-z\-]+)?/system/files/ { # For Drupal >= 7
        try_files $uri /index.php?$query_string;
    }

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

Salva e chiudi il file. Quindi, riavvia php-fpm e il servizio Nginx per applicare le modifiche:

sudo systemctl restart php-fpm
sudo systemctl restart nginx

Configurare il Firewall

Se avete il firewall abilitato, sarà necessario creare una regola firewall per consentire il servizio HTTP e HTTPS da reti esterne. Puoi permetterlo con il seguente comando:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https firewall-cmd --reload
sudo firewall-cmd --reload

Configurare l'HTTPS con Let's Encrypt SSL

Drupal è ora installato e configurato. È ora di proteggerlo con Let's Encrypt SSL gratuito.

Per fare ciò, dovrai scaricare il client certbot sul tuo server. È possibile scaricare e impostare le autorizzazioni corrette eseguendo il comando seguente:

sudo wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto

Ora, esegui il comando seguente per ottenere e installare un certificato SSL per il tuo sito Web Drupal.

sudo certbot-auto --nginx -d example.com

Il comando sopra installerà prima tutte le dipendenze richieste sul tuo server. Una volta installato, ti verrà chiesto di fornire un indirizzo e-mail e di accettare il termine di servizio come mostrato di seguito:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y 


Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/drupal.conf

Successivamente, dovrai scegliere se reindirizzare il traffico HTTP su HTTPS come mostrato di seguito:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Digita 2 e premi Invio per continuare. Una volta terminata l'installazione, dovresti vedere il seguente output:

Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/drupal.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-03-23. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again with the "certonly" option. To non-interactively renew *all*
   of your certificates, run "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Accedere al sito Web di Drupal

Ora apri il tuo browser web e digita l'URL https://example.com. Verrai reindirizzato alla pagina di installazione di Drupal.

Seleziona la lingua desiderata e fai clic sul pulsante Salva e continua.

Scegli il tuo profilo di installazione e fai clic sul pulsante Salva e continua.

Fornire i dettagli del database e fare clic sul pulsante Salva e continua.

Fornisci il nome del tuo sito, il nome utente dell'amministratore, la password e fai clic sul pulsante Salva e continua. Dovresti vedere la dashboard di Drupal.

Conclusione

In questo tutorial abbiamo visto come installare e proteggere Drupal sul server CentOS 8.