Creazione di un modello VPS con Drupal 9 su Centos 8

Continuiamo ad espandere il nostro mercato. Di recente ti abbiamo spiegato come ha creato un'immagine Gitlabe questa settimana Drupal è apparso sul nostro mercato.

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

Creazione di un modello VPS con Drupal 9 su Centos 8

Drupal — una piattaforma comoda e potente per creare qualsiasi tipo di sito web: da micrositi e blog a grandi progetti sociali, utilizzata anche come base per applicazioni web, scritta in PHP e utilizzando database relazionali come archivio dati.

Drupal 9 include tutte le funzionalità introdotte nella versione 8.9. La differenza fondamentale tra la versione 9 e la versione 8 è che la piattaforma continuerà a ricevere aggiornamenti e correzioni di sicurezza dopo novembre 2021. La versione 9 semplifica inoltre il processo di aggiornamento, rendendo il processo di aggiornamento dalla versione 8 ancora più semplice.

Requisiti del server

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

I file Drupal principali occupano circa 100 MB, inoltre avrai bisogno di spazio per archiviare immagini, database, temi, moduli aggiuntivi e backup, che dipenderanno dalle dimensioni del tuo sito.

Drupal 9 richiede PHP 7.4 o versione successiva con una limitazione minima (memory_limit) per 64 MB di memoria; se si utilizzano moduli aggiuntivi si consiglia di installare 128 MB.

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

Installeremo Drupal utilizzando Nginx e MySQL.

Installazione

Aggiorniamo i pacchetti installati all'ultima versione:

sudo dnf update -y

Aggiungiamo l'autorizzazione permanente per il traffico in entrata alle porte http/80 e https/443:

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

Applichiamo le nuove regole del firewall:

sudo systemctl reload firewalld

Installiamo Nginx:

sudo dnf install nginx -y

Avviamo e abilitiamo il server Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Poiché il repository principale di Centos attualmente utilizza PHP 7.2, aggiungiamo un repository REMI con PHP 7.4 (versione minima per Drupal 9).
Per fare ciò, aggiungi il repository EPEL (richiesto dal repository REMI):

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

Aggiungiamo il repository REMI:

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

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

sudo dnf module enable php:remi-7.4 -y

Installa php-fpm e php-cli:

sudo dnf install -y php-fpm php-cli

Installiamo i moduli PHP necessari 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 mbstring opcache consigliati:

sudo dnf install -y php-mbstring php-opcache

Installiamo il server MySQL:

sudo dnf install mysql-server -y

Accendiamo e avviamo il server MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Dato che stiamo creando un modello per VDS, e possono essere lenti, aggiungeremo un ritardo di avvio di mysqld di 30 secondi, altrimenti potrebbero esserci problemi con l'avvio del server durante l'avvio iniziale del sistema:

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

Cambiamo il gruppo e l'utente con cui verrà eseguito 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

Cambiamo di conseguenza il proprietario della directory delle sessioni PHP in nginx:

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

Rimuoviamo le righe con i commenti dal file di configurazione /etc/nginx/nginx.conf (in modo che non ci siano doppi trigger per sed):

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

Aggiungi le impostazioni di compressione gzip a /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 le impostazioni del file indice index.php a /etc/nginx/nginx.conf:

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

Aggiungiamo le impostazioni per il server predefinito: elaborazione PHP tramite il socket php-fpm, disabilitiamo il registro per i file statici, aumentiamo il tempo di scadenza, disabilitiamo il registro degli accessi e degli errori per favicon.ico e robots.txt e neghiamo l'accesso a .ht file 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

Installa wget richiesto per l'installazione di certbot:

sudo dnf install wget -y

Scarica il file eseguibile del certbot dall'esterno:

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

Sposta certbot in /usr/local/bin/:

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

E assegniamo i diritti come proprietario a root:

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

Installiamo le dipendenze del certbot e in questa fase interrompiamo il suo lavoro (Risposte: Y, c):

certbot-auto

Scarichiamo l'archivio con l'ultima versione di Drupal 9 dall'offsite:

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

Installa tar per decomprimere l'archivio:

sudo dnf install tar -y

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

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

Scompattiamo i file nella directory del server web:

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

Spostiamo i file dalla sottodirectory alla directory root 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

Assegniamo il proprietario dei file nginx:

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

A questo punto spegneremo il server e faremo uno snapshot:

shutdown -h now

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

mysql_secure_installation

Abilitiamo il validatore della password:

Would you like to setup VALIDATE PASSWORD component? : y

Impostiamo la password per l'utente root MySQL:

New password:
Re-enter new password:

Rimuoviamo gli utenti anonimi:

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

Evitiamo che root si connetta da remoto:

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

Eliminiamo il database dei 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

Successivamente, per completare l'installazione, possiamo andare su vps_indirizzo_ip
A questo indirizzo vedremo la pagina di installazione di Drupal.

Selezioniamo la lingua da utilizzare. Ad esempio: russo. Fare clic su "Salva e continua"

Selezioniamo un profilo di installazione (la demo serve esclusivamente per familiarizzare con il sistema). Nel nostro caso, lascia che sia "standard".

Nella pagina successiva daremo un nome al database, ad esempio “drupal”. Indichiamo il nome utente root del database e la password che gli è stata data durante l'esecuzione di mysql_secure_installation. Fai clic su "Salva e continua".

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

Indicheremo il nome del sito, imposteremo l'e-mail del sito (per conto del quale verranno inviate le notifiche del sito), login, password e e-mail dell'account amministratore Drupal. Imposteremo anche il paese e il fuso orario nelle impostazioni regionali. E completa l'installazione facendo clic su "Salva e continua".

Successivamente, puoi andare al pannello di controllo con il login e la password dell'amministratore Drupal creati.

Configurazione di HTTPS (facoltativo)

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

/etc/nginx/nginx.conf

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

server_name  domainname.ru;

Riavviamo nginx:

service nginx restart

Lanciamo cerbot:

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

Inserisci la tua email, accetta i termini del servizio (A), Iscriviti alla newsletter (facoltativo) (N), seleziona i nomi a dominio per i quali vuoi rilasciare il certificato (Inserisci per tutti).

Se tutto è andato senza errori, vedremo un messaggio sull'avvenuta emissione dei certificati e sulla configurazione del server:

Congratulations! You have successfully enabled ...

Successivamente, le connessioni alla porta 80 verranno reindirizzate a 443 (https).

Aggiungi a /etc/crontab per aggiornare automaticamente i certificati:

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

Configurazione della sicurezza dell'host attendibile (consigliata)

Questa impostazione è intesa come soluzione al problema associato alla determinazione dinamica di base_url ed è progettata per prevenire attacchi all'intestazione HOST HTTP (quando il tuo sito pensa che si tratti di qualcun altro).

Per fare ciò, è necessario specificare i nomi di dominio attendibili per il sito nel file delle impostazioni.

In archivio

/usr/share/nginx/html/sites/default/settings.php Rimuoviamo il commento o aggiungiamo un'impostazione con modelli di nomi di siti effettivi, ad esempio:

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

Installazione di PHP APCu (CONSIGLIATO)

Drupal supporta APCu - Alternative PHP User Cache, le versioni 8 e 9 fanno un uso maggiore di APCu come cache locale a breve termine rispetto alle versioni precedenti. La dimensione predefinita della cache (32 MB) è adatta alla maggior parte dei siti e non può superare i 512 MB.

Per attivare, installare il modulo PHP APCu:

dnf -y install php-pecl-apcu

Riavvia nginx e php-fpm:

service nginx restart
service php-fpm restart

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

Oppure se l'avvertimento ti fa male agli occhi, puoi usarlo patch corrispondente da fuori sede.

Ci teniamo a ricordarti che puoi anche realizzare un'immagine per noi

Ci sono tre opzioni su come partecipare.

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

Se sei pronto per precipitarti immediatamente in battaglia e creare l'immagine che ti manca, ti accrediteremo 3000 rubli sul tuo saldo interno, che potrai spendere sui server.

Come creare la tua immagine:

  1. Crea un account con noi su sito web
  2. Fai sapere al supporto che creerai e testerai le immagini
  3. Ti accrediteremo 3000 rubli e abiliteremo la possibilità di creare istantanee
  4. Ordina un server virtuale con un sistema operativo pulito
  5. Installa il software su questo VPS e configuralo
  6. Scrivere istruzioni o script per la distribuzione del software
  7. Crea uno snapshot per il server configurato
  8. Ordina un nuovo server virtuale selezionando lo snapshot precedentemente creato nell'elenco a discesa "Modello server".
  9. Se il server viene creato correttamente, trasferire i materiali ricevuti nella fase 6 al supporto tecnico
  10. Se si verifica un errore, è possibile verificare il motivo con l'assistenza e ripetere la configurazione

Per gli imprenditori: offri il tuo software

Se sei uno sviluppatore di software distribuito e utilizzato su VPS, possiamo includerti nel marketplace. Ecco come possiamo aiutarti a portare nuovi clienti, traffico e notorietà. Scrivici

Raccontaci nei commenti quale immagine ti manca?

E lo prepareremo noi stessi

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