Creazione di un modello VPS con Drupal 9 su CentOS 8

Stiamo continuando ad espandere il nostro marketplace. Recentemente abbiamo parlato di come abbiamo creato l'immagine di Gitlab, mentre questa settimana nel nostro marketplace è apparso Drupal.

Spiegando 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 sistema di archiviazione.

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 l'aggiornamento dalla versione 8 ancora più facile.

Requisiti del server

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

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

Per Drupal 9 è richiesto PHP 7.4 o superiore con un limite minimo dimemory_limitimposta a 64 MB; nel caso vengano utilizzati 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 una regola 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é al momento 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 corretto 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 opcache:

sudo dnf install -y php-mbstring php-opcache

Installeremo il server MySQL:

sudo dnf install mysql-server -y

Attiveremo e avvieremo il server MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Poiché stiamo creando un template per VDS, e questi possono essere lenti, aggiungeremo un ritardo di avvio di mysqld di 30 secondi, altrimenti potrebbero esserci problemi con l'avvio del server all'accensione del sistema:

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

Modificheremo il gruppo e l'utente con cui nginx lavorerà 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

Modificheremo anche il proprietario della directory delle sessioni PHP in modo che sia corrispondente a nginx:

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

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

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

Aggiungeremo impostazioni di compressione gzip a /etc/nginx/nginx.conf

sudo sed -i '/types_hash_max_size 2048;/a \n\ngzip on;\ngzip_static on;\ngzip_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;\ngzip_comp_level 9;\ngzip_proxied any;\ngzip_min_length 1000;\ngzip_disable 'msie6';\ngzip_vary on; \n' /etc/nginx/nginx.conf

Aggiungeremo impostazioni per il file indice index.php a /etc/nginx/nginx.conf:

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

Aggiungeremo impostazioni per il server predefinito per l'elaborazione php tramite socket php-fpm, disabiliteremo il log per i file statici, aumenteremo il tempo di scadenza, disabiliteremo il log degli accessi e degli errori per favicon.ico e robots.txt e negheremo l'accesso ai file .ht per tutti:

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

Installeremo wget necessario per l'installazione di certbot:

sudo dnf install wget -y

Scarichiamo il file eseguibile 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 assegniamo i diritti e il proprietario root:

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

Installiamo le dipendenze di certbot e a questo punto interromperemo il suo funzionamento (Risposte: Y, c):

certbot-auto

Scarichiamo 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

Eliminiamo i file di default nella cartella /usr/share/nginx/html/:

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

Estraiamo i file nella cartella del server web:

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

Spostiamo i file dalla sottocartella nella cartella principale del server web:

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

Eliminiamo la sottocartella:

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 a nginx:

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

A questo punto spegneremo il server e creeremo uno snapshot:

shutdown -h now

Dopo aver avviato 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

Vietiamo il login 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 andare all'indirizzo vps_ip_address
A questo indirizzo vedremo la pagina di installazione di Drupal.

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

Selezioniamo il profilo di installazione (la demo è utilizzata solo per conoscere il sistema). Nel nostro caso scegliamo "standard".

Nella prossima pagina, inseriremo il nome del database, ad esempio "drupal". Indicheremo il nome utente del DB root e la password impostata durante l'esecuzione di mysql_secure_installation. Clicchiamo su "Salva e continua".

Attendiamo il completamento dell'installazione e l'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 login, la password e l'email dell'account amministratore di Drupal. Impostiamo anche il paese e il fuso orario nelle impostazioni regionali. E concludiamo l'installazione facendo clic su «Salva e continua».

Dopo questo, sarà possibile accedere al pannello di controllo con il login e la password creati per l'amministratore di Drupal.

Impostazione di HTTPS (opzionale)

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

/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

Inseriamo la nostra email, accettiamo le condizioni del servizio (A), Iscrizione alla newsletter (opzionale) (N), selezioniamo i nomi di dominio per i quali è necessario emettere il certificato (Invio per tutti).

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

Congratulazioni! Hai abilitato con successo ...

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

Aggiungiamo in /etc/crontab per l'aggiornamento automatico dei certificati:

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

Impostazione della Sicurezza Host Fidato (raccomandata)

Questa impostazione è pensata come una soluzione al problema legato alla definizione dinamica di base_url, e mira a prevenire attacchi HTTP HOST Header (quando il tuo sito pensa di essere qualcun altro).

Per questo è necessario specificare i nomi di dominio fidati del sito nel file di configurazione.

Nel file

/usr/share/nginx/html/sites/default/settings.php decommentiamo o aggiungiamo la configurazione con i pattern dei nomi di dominio attuali, 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 maggiormente APCu come cache locale a breve termine rispetto alle versioni precedenti. La dimensione della cache per impostazione predefinita (32 MB) è adatta alla maggior parte dei siti e non può superare i 512 MB.

Per attivarlo, installiamo il modulo PHP APCu:

dnf -y install php-pecl-apcu

Riavviamo nginx e php-fpm:

service nginx restart
service php-fpm restart

Se utilizzi la lingua russa e APCu con la dimensione della memoria consigliata 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 consigliata, ma in effetti tutto funziona correttamente, e l'avviso avrà probabilmente una correzione nelle prossime versioni.

Oppure, se l'avviso è fastidioso, si può utilizzare il patch corrispondente dal sito ufficiale.

Vogliamo ricordarvi che anche voi potete creare un'immagine per noi

Ci sono tre modi per partecipare.

Preparate l'immagine voi stessi e riceverete 3000 rubli sul saldo

Se siete pronti a lanciarvi subito in azione e creare voi stessi l'immagine di cui avete bisogno, vi accrediteremo 3000 rubli sul saldo interno — che potrete spendere per i server.

Come creare la vostra immagine:

  1. Create un account sul nostro sito
  2. Comunicate al supporto che intendete creare e testare immagini
  3. Vi accrediteremo 3000 rubli e abiliteremo la possibilità di creare snapshot
  4. Richiedete un server virtuale con un sistema operativo pulito
  5. Installate il software su questo VPS e configuratelo
  6. Elaborate un'istruzione o uno script per il deployment del software
  7. Create uno snapshot per il server configurato
  8. Richiedete un nuovo server virtuale, selezionando dallo stato a discesa il ‘Modello server’ che avete creato in precedenza
  9. In caso di successo nella creazione del server, inviate al supporto tecnico il materiale ottenuto al punto 6
  10. In caso di errore, potete chiedere al supporto la causa e ripetere la configurazione

Per i proprietari di attività: proponete il vostro software

Se siete sviluppatori di software che viene distribuito e utilizzato su VPS, possiamo includervi nel marketplace. Così possiamo aiutarvi ad attrarre nuovi clienti, traffico e riconoscibilità. Contattaci

Raccontateci nei commenti quale immagine vi manca?

E la creeremo 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, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS - ProHoster