Crearea unui șablon VPS cu Drupal 9 pe CentOS 8

Continuăm să ne extindem marketplace-ul. Recent, am povestit cum am creat imaginea Gitlab, iar în această săptămână, marketplace-ul nostru a inclus Drupal.

Îți spunem de ce l-am ales și cum a fost creată imaginea.

Crearea unui șablon VPS cu Drupal 9 pe CentOS 8

Drupal — o platformă convenabilă și puternică pentru crearea oricărui tip de site-uri: de la microsite-uri și bloguri până la mari proiecte sociale, utilizată de asemenea ca bază pentru aplicații web, scrisă în limba PHP și folosind bazele de date relaționale ca stocare de date.

Drupal 9 include toate caracteristicile implementate în versiunea 8.9. Diferența cheie între versiunea 9 și versiunea 8 este că actualizările și corecturile de securitate pentru platformă vor fi lansate și după noiembrie 2021. De asemenea, în versiunea 9, procesul de actualizare a fost simplificat, făcându-l și mai ușor de realizat de la versiunea 8.

Cerințe pentru server

Pentru a utiliza Drupal, se recomandă utilizarea a 2 GB RAM și 2 nuclee CPU.

Fișierele de bază Drupal ocupă aproximativ 100 MB, în plus, vei avea nevoie de spațiu pentru a stoca imagini, baze de date, teme, module suplimentare și backup-uri, care va depinde de dimensiunea site-ului tău.

Pentru Drupal 9 este necesar PHP 7.4 sau o versiune superioară, cu o limită minimă de (memory_limit) pentru memorie de 64 MB; în cazul utilizării modulelor suplimentare, se recomandă instalarea de 128 MB.

Ca server web, Drupal poate folosi Apache sau Nginx, iar ca bază de date, MySQL, PostgreSQL sau SQLite.

Vom instala Drupal folosind Nginx și MySQL.

Instalare

Vom actualiza pachetele instalate la cea mai recentă versiune:

sudo dnf update -y

Vom adăuga o permisiune permanentă pentru traficul de intrare pe porturile http/80 și https/443:

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

Aplicăm noile reguli ale firewall-ului:

sudo systemctl reload firewalld

Instalăm Nginx:

sudo dnf install nginx -y

Vom porni și activa serverul Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Având în vedere că în prezent în repositoarele principale Centos este utilizată versiunea PHP 7.2, vom adăuga repositoul REMI cu PHP 7.4 (versiunea minimă pentru Drupal 9).
Pentru aceasta, vom adăuga repositoul EPEL (necesar pentru repositoul REMI):

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

Adăugăm repositoul REMI:

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

Activăm modulul php:remi-7.4 pentru a instala php 7.4:

sudo dnf module enable php:remi-7.4 -y

Instalăm php-fpm și php-cli:

sudo dnf install -y php-fpm php-cli

Instalăm modulele PHP necesare pentru funcționarea 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

De asemenea, vom instala modulele PHP recomandate mbstring opcache:

sudo dnf install -y php-mbstring php-opcache

Să instalăm serverul MySQL:

sudo dnf install mysql-server -y

Să activăm și să pornim serverul MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Deoarece creăm un șablon pentru VDS, care ar putea fi lente, vom adăuga o întârziere de 30 de secunde pentru pornirea mysqld, altfel pot apărea probleme la pornirea serverului la încărcarea inițială a sistemului:

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

Să modificăm grupa și utilizatorul sub care va funcționa nginx, făcând modificări în /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

Să schimbăm proprietarul directorului sesiunilor PHP pe nginx:

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

Să eliminăm liniile cu comentarii din fișierul de configurare /etc/nginx/nginx.conf (pentru a nu exista activări duble pentru sed):

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

Să adăugăm în /etc/nginx/nginx.conf setările de compresie gzip:

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

Să adăugăm în /etc/nginx/nginx.conf setările pentru fișierul index index.php:

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

Să adăugăm setări pentru serverul implicit, pentru a procesa php prin socket php-fpm, să dezactivăm logarea pentru fișierele statice, să creștem timpul de expirare, să dezactivăm logarea accesului și erorilor pentru favicon.ico și robots.txt și să interzicem accesul la fișierele .ht pentru toți:

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

Să instalăm wget, necesar pentru instalarea certbot:

sudo dnf install wget -y

Vom descărca fișierul executabil certbot de pe site-ul oficial:

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

Vom muta certbot în /usr/local/bin/:

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

Și vom seta permisiunile și proprietarul root:

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

Vom instala dependențele certbot și în această etapă vom opri funcționarea acestuia (Răspunsuri: Y, c):

certbot-auto

Vom descărca de pe site-ul oficial arhiva cu ultima versiune Drupal 9:

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

Vom instala tar pentru a despacheta arhiva:

sudo dnf install tar -y

Vom șterge fișierele implicite din directorul /usr/share/nginx/html/:

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

Vom despacheta fișierele în directorul serverului web:

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

Vom muta fișierele din subdirector în directorul rădăcină al serverului web:

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

Vom șterge subdirectorul:

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

Vom șterge arhiva cu fișierele de instalare:

rm -f ./tar.gz

Vom seta ca proprietarul fișierelor nginx:

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

În această etapă vom opri serverul și vom face un snapshot:

shutdown -h now

După repornirea VDS din snapshot, vom efectua configurația inițială a serverului MySQL rulând scriptul:

mysql_secure_installation

Vom activa validarea parolelor:

Would you like to setup VALIDATE PASSWORD component? : y

Vom seta parola pentru utilizatorul root MySQL:

New password:
Re-enter new password:

Vom șterge utilizatorii anonimi:

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

Vom interzice conectarea root de la distanță:

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

Vom șterge baza de date de test:

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

Vom reîncărca tabelele de privilegii:

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

După aceasta, pentru a finaliza instalarea, putem accesa adresa vps_ip_address
La această adresă vom vedea pagina de instalare Drupal.

Vom alege limba utilizată. De exemplu: română. Vom apăsa „Salvați și continuați”

Vom alege profilul de instalare (demo este folosit exclusiv pentru a familiariza utilizatorii cu sistemul). În cazul nostru, să fie „standard”.

Pe pagina următoare vom specifica numele bazei de date, de exemplu „drupal”. Vom indica numele utilizatorului DB root și parola setată în timpul rulării mysql_secure_installation. Vom apăsa „Salvați și continuați”.

Vom aștepta finalizarea instalării și actualizarea traducerilor (procesul poate dura câteva minute).

Vom specifica numele site-ului, vom introduce email-ul site-ului (de la care vor veni notificările site-ului), numele de utilizator, parola și email-ul contului de administrator Drupal. De asemenea, vom stabili țara și fusul orar în setările regionale. Și vom finaliza instalarea apăsând „Salvează și continuă”.

După aceasta, putem accesa panoul de control cu numele de utilizator și parola create pentru administratorul Drupal.

Configurarea HTTPS (opțional)

Pentru configurarea HTTPS, VDS trebuie să aibă un nume DNS valid, indicați în

/etc/nginx/nginx.conf

secțiunea server numele serverului (de exemplu):

server_name domainname.ro;

Să repornim nginx:

service nginx restart

Să rulăm certbot:

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

Introduceti email-ul dumneavoastră, acceptați termenii serviciului (A), Abonare la newsletter (opțional) (N), alegeți numele de domenii pentru care trebuie emis certificatul (Enter pentru toate).

În cazul în care totul a decurs fără erori, vom vedea un mesaj de succes privind emiterea certificatelor și configurarea serverului:

Felicitări! Ați activat cu succes ...

După această conexiune, portul 80 va fi redirecționat către 443 (https).

Adăugați în /etc/crontab pentru actualizarea automată a certificatelor:

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

Configurați Securitatea Trusted Host (recomandat)

Această configurație este destinată rezolvării problemei legate de determinarea dinamică a base_url și este menită să prevină atacurile HTTP HOST Header (când site-ul dumneavoastră crede că este altcineva).

Pentru aceasta, trebuie să indicați numele de domenii de încredere ale site-ului în fișierul de configurare.

În fișierul

/usr/share/nginx/html/sites/default/settings.php dezmembrați sau adăugați configurația cu patternuri pentru numele curente ale site-ului, de exemplu:

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

Instalarea PHP APCu (RECOMANDAT)

Drupal suportă APCu — Alternative PHP User Cache, versiunile 8 și 9 utilizează mai intens APCu ca cache local pe termen scurt decât versiunile anterioare. Dimensiunea cache-ului implicit (32 MB) este potrivită pentru majoritatea site-urilor și nu poate depăși 512 MB.

Pentru activare, instalăm modulul PHP APCu:

dnf -y install php-pecl-apcu

Să repornim nginx și php-fpm:

service nginx restart
service php-fpm restart

În cazul în care utilizați limba română și APCu cu dimensiunea recomandată a memoriei pentru cache, în panoul de control puteți vedea un avertisment că dimensiunea memoriei alocate pentru cache diferă de cea recomandată, dar de fapt totul funcționează corect, iar avertizarea incorectă probabil va fi corectată în următoarele actualizări.

Sau, dacă avertismentul este deranjant, se poate utiliza patch-ul corespunzător de pe site.

Vrem să vă reamintim că și voi puteți crea o imagine pentru noi

Există trei modalități de a participa.

Pregătiți singuri imaginea și primiți 3000 de lei în cont

Dacă sunteți gata să săriți direct în luptă și să creați imaginea de care aveți nevoie, vă vom adăuga 3000 de lei în soldul intern — îi puteți folosi pentru servere.

Cum să creați propria imagine:

  1. Creează un cont la noi pe site
  2. Informați suportul că intenționați să creați și să testați imagini
  3. Vă vom adăuga 3000 de lei și vom activa opțiunea de a crea snapshots
  4. Comandați un server virtual cu un sistem de operare curat
  5. Instalați software-ul pe acest VPS și configurați-l
  6. Elaborați o instrucțiune sau un script pentru desfășurarea software-ului
  7. Creează un snapshot pentru serverul configurat
  8. Comandați un nou server virtual, alegând din lista derulantă „Șablon server” snapshot-ul creat anterior
  9. În caz de creare reușită a serverului, trimiteți materialele obținute la etapa 6 echipei tehnice
  10. În caz de eroare, puteți verifica cu suportul motivul și repetați configurarea

Pentru proprietarii de afaceri: oferiți software-ul vostru

Dacă sunteți dezvoltator de software care este desfășurat și utilizat pe VPS, putem să vă includem în marketplace. Astfel, vă putem ajuta să aduceți noi clienți, trafic și recunoaștere. Scrieți-ne

Povestiți-ne în comentarii ce imagine vă lipsește?

Și noi o vom pregăti noi

Crearea unui șablon VPS cu Drupal 9 pe CentOS 8

Crearea unui șablon VPS cu Drupal 9 pe CentOS 8

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster