Creazione di un modello VPS con Drupal 9 su CentOS 8

Stiamo continuando ad espandere il nostro marketplace. Recentemente abbiamo parlato di come abbiamo realizzato l'immagine di GitLab, e questa settimana nel nostro marketplace è arrivato Drupal.

Vi raccontiamo perché lo abbiamo scelto e come è stata creata l'immagine.

Creazione di un modello VPS con Drupal 9 su CentOS 8

Drupal — una piattaforma comoda e potente per la creazione di qualsiasi tipo di sito: da micrositi e blog a grandi progetti sociali, utilizzata anche come base per applicazioni web, scritta in PHP e che utilizza database relazionali come storage.

Drupal 9 include tutte le funzionalità implementate nella versione 8.9. La principale differenza tra la versione 9 e la versione 8 è che per la piattaforma verranno rilasciati aggiornamenti e correzioni di sicurezza anche dopo novembre 2021. Inoltre, nella versione 9 è stato semplificato il processo di aggiornamento, rendendo il passaggio dalla versione 8 ancora più facile.

Requisiti del server

Per utilizzare Drupal, si consiglia di avere 2 GB di RAM e 2 core CPU.

I file principali di Drupal occupano circa 100 MB; avrete anche bisogno di spazio per immagini, database, temi, moduli aggiuntivi e backup, che dipenderà dalle dimensioni del vostro sito.

Per Drupal 9 è necessario PHP 7.4 o superiore con un limite minimo dimemory_limit) per la memoria di 64 MB; se si utilizzano moduli aggiuntivi, si consiglia di impostare 128 MB.

Come server web, Drupal può utilizzare Apache o Nginx e come database MySQL, PostgreSQL o SQLite.

Installeremo Drupal utilizzando Nginx e MySQL.

Installazione

Aggiorneremo i pacchetti installati all'ultima versione:

sudo dnf update -y

Aggiungeremo un permesso permanente per il traffico in entrata sulle porte http/80 e https/443:

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

Applicheremo le nuove regole del firewall:

sudo systemctl reload firewalld

Installeremo Nginx:

sudo dnf install nginx -y

Avvieremo e attiveremo il server Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Poiché attualmente nel repository principale di CentOS è utilizzata la versione PHP 7.2, aggiungeremo il repository REMI con PHP 7.4 (versione minima per Drupal 9).
Per questo, aggiungeremo il repository EPEL (richiesto dal repository REMI):

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Aggiungeremo il repository REMI:

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Attiveremo il modulo php:remi-7.4 per installare php 7.4:

sudo dnf module enable php:remi-7.4 -y

Installeremo php-fpm e php-cli:

sudo dnf install -y php-fpm php-cli

Installeremo i moduli PHP richiesti per il funzionamento di Drupal:

sudo dnf install -y php-mysqlnd php-date php-dom php-filter php-gd php-hash php-json php-pcre php-pdo php-session php-simplexml php-spl php-tokenizer php-xml

Installeremo anche i moduli PHP consigliati mbstring e opcache:

sudo dnf install -y php-mbstring php-opcache

Installeremo il server MySQL:

sudo dnf install mysql-server -y

Abiliteremo e avvieremo il server MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Poiché stiamo creando un template per VDS, e potrebbero essere lenti, aggiungeremo un ritardo di avvio per mysqld di 30 secondi, altrimenti potrebbero verificarsi problemi di avvio del server durante il caricamento iniziale del sistema:

sudo sed -i '/Group=mysql/a 
ExecStartPre=/bin/sleep 30
' /usr/lib/systemd/system/mysqld.service

Modificheremo il gruppo e l'utente sotto i quali funzionerà nginx apportando modifiche a /etc/php-fpm.d/www.conf:

sudo sed -i --follow-symlinks 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sudo sed -i --follow-symlinks 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf

Cambieremo anche il proprietario della cartella delle sessioni PHP su nginx:

sudo chown -R nginx. /var/lib/php/session

Rimuoveremo le righe con commenti dal file di configurazione /etc/nginx/nginx.conf (per evitare attivazioni duplicate per sed):

sudo sed -i -e '/^[ t]*#/d'  /etc/nginx/nginx.conf

Aggiungeremo le impostazioni di compressione gzip in /etc/nginx/nginx.conf

sudo sed -i '/types_hash_max_size 2048;/a 

    gzip on;
    gzip_static on;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;
    gzip_comp_level 9;
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_disable "msie6";
    gzip_vary on; 
' /etc/nginx/nginx.conf

Aggiungiamo nel /etc/nginx/nginx.conf la configurazione per il file index.php:

sudo sed -i '/        root         /usr/share/nginx/html;/a 
        index index.php index.html index.htm;
' /etc/nginx/nginx.conf

Aggiungiamo configurazioni per il server predefinito per l'elaborazione di php tramite il socket php-fpm, disattiviamo il log per i file statici, aumentiamo il tempo di scadenza, disattiviamo il log di accesso e di errore per favicon.ico e robots.txt e vietiamo l'accesso ai file .ht per tutti:

sudo sed -i '/        location / {/a 
		try_files $uri $uri/ /index.php?q=$uri&$args;
        }
    
        location ~* ^.+\.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
        access_log off;
        expires max;
        }
    
        location ~ .php$ {
        try_files  $uri =404;
        fastcgi_pass   unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_ignore_client_abort off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
        }
    
        location = /favicon.ico {
        log_not_found off;
        access_log off;
        }
    
        location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
        }
    
        location ~ /.ht {
        deny all;' /etc/nginx/nginx.conf

Installeremo wget necessario per l'installazione di certbot:

sudo dnf install wget -y

Scaricheremo il file eseguibile di certbot dal sito ufficiale:

cd ~
wget https://dl.eff.org/certbot-auto

Spostiamo certbot in /usr/local/bin/:

mv certbot-auto /usr/local/bin/certbot-auto

E impostiamo i permessi e il proprietario su root:

chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

Installeremo le dipendenze di certbot e a questo punto interromperemo la sua esecuzione (Risposte: Y, c):

certbot-auto

Scaricheremo dal sito ufficiale l'archivio con l'ultima versione di Drupal 9:

cd ~
wget https://www.drupal.org/download-latest/tar.gz

Installeremo tar per estrarre l'archivio:

sudo dnf install tar -y

Elimineremo i file predefiniti nella directory /usr/share/nginx/html/:

rm -rf /usr/share/nginx/html/*

Decomprimiamo i file nella directory del server web:

tar xf tar.gz -C /usr/share/nginx/html/

Trasferiamo i file dalla sottodirectory alla directory principale del server web:

mv /usr/share/nginx/html/drupal-9.0.7/* /usr/share/nginx/html/

Eliminiamo la sottodirectory:

rm -rf /usr/share/nginx/html/drupal-9.0.7

Eliminiamo l'archivio con i file di installazione:

rm -f ./tar.gz

Impostiamo nginx come proprietario dei file:

chown -R nginx. /usr/share/nginx/html

A questo punto spegneremo il server e creeremo uno snapshot:

shutdown -h now

Dopo aver avviato il VDS dallo snapshot, eseguiremo la configurazione iniziale del server MySQL avviando lo script:

mysql_secure_installation

Attiveremo il validatore delle password:

Would you like to setup VALIDATE PASSWORD component? : y

Imposteremo la password per l'utente root di MySQL:

New password:
Re-enter new password:

Eliminiamo gli utenti anonimi:

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Impediremo l'accesso remoto per root:

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Eliminiamo il database di test:

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

Ricarichiamo le tabelle dei privilegi:

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Dopo di che, per completare l'installazione, possiamo visitare l'indirizzo vps_ip_address
A questo indirizzo vedremo la pagina di installazione di Drupal.

Scegliamo la lingua da utilizzare. Ad esempio: italiano. Facciamo clic su «Salva e continua»

Scegliamo il profilo di installazione (la demo viene utilizzata esclusivamente per familiarizzare con il sistema). In questo caso, scegliamo «standard».

Nella pagina successiva, daremo un nome al database, ad esempio «drupal». Indicheremo il nome utente del database root e la password assegnata durante l'esecuzione di mysql_secure_installation. Facciamo clic su «Salva e continua».

Attendiamo il completamento dell'installazione e dell'aggiornamento delle traduzioni (il processo potrebbe richiedere alcuni minuti).

Indichiamo il nome del sito, impostiamo l'email del sito (da cui verranno inviate le notifiche del sito), il nome utente, la password e l'email dell'account amministratore di Drupal. Imposteremo anche il paese e il fuso orario nelle impostazioni regionali. E completiamo l'installazione facendo clic su «Salva e continua».

Dopo di ciò, sarà possibile accedere al pannello di controllo con il nome utente e la password dell'amministratore di Drupal appena creato.

Configurazione di HTTPS (opzionale)

Per configurare HTTPS, il VDS deve avere un nome DNS valido, indicare in

/etc/nginx/nginx.conf

nella sezione server il nome del server (ad esempio):

server_name domainname.ru;

Riavviamo nginx:

service nginx restart

Avviamo certbot:

sudo /usr/local/bin/certbot-auto --nginx

Inserire la propria e-mail, accettare i termini del servizio (A), iscrizione alla newsletter (opzionale) (N), scegliere i nomi di dominio per i quali emettere il certificato (Invio per tutti).

Se tutto è andato a buon fine, vedremo un messaggio di avvenuta emissione dei certificati e configurazione del server:

Congratulazioni! Hai abilitato con successo ...

Dopo questa connessione, le richieste sulla porta 80 verranno reindirizzate sulla porta 443 (https).

Aggiungere a /etc/crontab per l'aggiornamento automatico dei certificati:

# Cert Renewal
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"

Configurazione della Sicurezza del Server Host Fidato (consigliato)

Questa impostazione è progettata come soluzione a problemi legati alla determinazione dinamica di base_url, ed è destinata a prevenire attacchi HTTP HOST Header (quando il tuo sito pensa di essere qualcun altro).

Per fare ciò, è necessario specificare i nomi di dominio fidati del sito nel file di configurazione.

Nel file

/usr/share/nginx/html/sites/default/settings.php decommentare o aggiungere l'impostazione con i pattern dei nomi attuali del sito, ad esempio:

$settings['trusted_host_patterns'] = [
  '^www.mydomain.ru$',
];

Installazione di PHP APCu (RACCOMANDATO)

Drupal supporta APCu — Alternative PHP User Cache, le versioni 8 e 9 utilizzano APCu come cache locale a breve termine in modo più intenso rispetto alle versioni precedenti. La dimensione predefinita della cache (32 MB) è adatta per la maggior parte dei siti e non può superare i 512 MB.

Per attivare, installiamo il modulo PHP APCu:

dnf -y install php-pecl-apcu

Riavviamo nginx e php-fpm:

service nginx restart
service php-fpm restart

Nel caso si utilizzi la lingua russa e APCu con la dimensione della memoria raccomandata per la cache, nel pannello di controllo potresti vedere un avviso che indica che la dimensione della memoria allocata per la cache è diversa da quella raccomandata, ma in realtà tutto funziona correttamente, e l'avviso errato verrà probabilmente corretto nei prossimi aggiornamenti.

Oppure, se l'avviso è sgradevole, puoi utilizzare la patch corrispondente da un sito esterno.

Vogliamo ricordare che anche tu puoi creare un'immagine per noi

Ci sono tre modi per partecipare.

Prepara l'immagine tu stesso e ricevi 3000 rubli sul tuo saldo

Se sei pronto a tuffarti subito e creare l'immagine di cui hai bisogno, accreditaremo 3000 rubli sul tuo saldo interno — potrai usarli per i server.

Come creare la tua immagine:

  1. Crea un account con noi su sito
  2. Comunica al supporto che intendi creare e testare le immagini
  3. Accrediteremo 3000 rubli e attiveremo la possibilità di creare snapshot
  4. Ordina un server virtuale con un sistema operativo pulito
  5. Installa il software su questo VPS e configurarlo
  6. Elabora una guida o uno script per il deployment del software
  7. Crea uno snapshot del server configurato
  8. Ordina un nuovo server virtuale selezionando dal menu a discesa il «Modello server» lo snapshot creato in precedenza
  9. In caso di creazione riuscita del server, invia il materiale ricevuto al supporto tecnico al passo 6
  10. In caso di errore, puoi chiedere al supporto il motivo e ripetere la configurazione

Per i proprietari di aziende: proponi il tuo software

Se sei uno sviluppatore di software da deployare e utilizzare su VPS, possiamo includerti nel marketplace. In questo modo possiamo aiutarti a portare nuovi clienti, traffico e visibilità. Scrivici

Raccontaci nei commenti quale immagine ti manca?

E la prepareremo noi

Creazione di un modello VPS con Drupal 9 su CentOS 8

Creazione di un modello VPS con Drupal 9 su CentOS 8

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster