Crearea unui șablon VPS cu Drupal 9 pe Centos 8

Continuăm să ne extindem piața. V-am spus recent cum a făcut o imagine Gitlab, iar în această săptămână Drupal a apărut pe piața noastră.

Vă 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 web: de la microsite-uri și bloguri până la proiecte sociale mari, folosită și ca bază pentru aplicații web, scrisă în PHP și folosind baze de date relaționale ca stocare de date.

Drupal 9 include toate caracteristicile introduse în versiunea 8.9. Diferența cheie între versiunea 9 și versiunea 8 este că platforma va continua să primească actualizări și remedieri de securitate după noiembrie 2021. Versiunea 9 simplifică, de asemenea, procesul de actualizare, făcând procesul de actualizare de la versiunea 8 și mai ușor.

Cerințele serverului

Pentru a utiliza Drupal, este recomandat să folosiți 2 GB RAM și 2 nuclee CPU.

Principalele fișiere Drupal ocupă aproximativ 100 MB, în plus veți avea nevoie de spațiu pentru a stoca imagini, baze de date, teme, module suplimentare și copii de rezervă, care vor depinde de dimensiunea site-ului dvs.

Drupal 9 necesită PHP 7.4 sau mai mare, cu o limitare minimă (memory_limit) pentru memorie de 64 MB; dacă se folosesc module suplimentare, se recomandă instalarea a 128 MB.

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

Vom instala Drupal folosind Nginx și MySQL.

Instalare

Să actualizăm pachetele instalate la cea mai recentă versiune:

sudo dnf update -y

Să adăugăm permisiunea permanentă pentru traficul de intrare la porturile http/80 și https/443:

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

Să aplicăm noile reguli de firewall:

sudo systemctl reload firewalld

Să instalăm Nginx:

sudo dnf install nginx -y

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

sudo systemctl start nginx
sudo systemctl enable nginx

Deoarece depozitul principal Centos utilizează în prezent PHP 7.2, să adăugăm un depozit REMI cu PHP 7.4 (versiunea minimă pentru Drupal 9).
Pentru a face acest lucru, adăugați depozitul EPEL (solicitat de depozitul REMI):

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

Să adăugăm depozitul REMI:

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

Să activăm modulul php:remi-7.4 pentru a instala php 7.4:

sudo dnf module enable php:remi-7.4 -y

Instalați php-fpm și php-cli:

sudo dnf install -y php-fpm php-cli

Să instalăm modulele PHP necesare pentru ca Drupal să funcționeze:

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

Vom instala, de asemenea, modulele PHP mbstring opcache recomandate:

sudo dnf install -y php-mbstring php-opcache

Să instalăm serverul MySQL:

sudo dnf install mysql-server -y

Să pornim și să pornim serverul MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Deoarece facem un șablon pentru VDS și acestea pot fi lente, vom adăuga o întârziere de pornire mysqld de 30 de secunde, altfel pot apărea probleme cu pornirea serverului în timpul pornirii inițiale a sistemului:

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

Să schimbăm grupul și utilizatorul sub care va rula 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 de sesiuni PHP în nginx în consecință:

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

Să eliminăm liniile cu comentarii din fișierul de configurare /etc/nginx/nginx.conf (astfel încât să nu existe declanșatoare duble pentru sed):

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

Adăugați setările de compresie gzip la /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

Să adăugăm setările fișierului index index.php la /etc/nginx/nginx.conf:

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: procesarea PHP prin socket-ul php-fpm, dezactivează jurnalul pentru fișierele statice, crește timpul de expirare, dezactivează jurnalul de acces și erori pentru favicon.ico și robots.txt și refuză accesul la .ht fișiere pentru toată lumea:

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

Instalați wget necesar pentru instalarea certbot:

sudo dnf install wget -y

Descărcați fișierul executabil certbot din afara site-ului:

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

Mutați certbot în /usr/local/bin/:

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

Și să atribuim drepturile de proprietar la root:

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

Să instalăm dependențele certbot și, în această etapă, să îi întrerupem activitatea (Răspunsuri: Y, c):

certbot-auto

Să descarcăm arhiva cu cea mai recentă versiune a Drupal 9 din offsite:

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

Instalați tar pentru a despacheta arhiva:

sudo dnf install tar -y

Să ștergem fișierele implicite din directorul /usr/share/nginx/html/:

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

Să despachetăm fișierele în directorul serverului web:

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

Să mutăm 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/

Să ștergem subdirectorul:

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

Să ștergem arhiva cu fișierele de instalare:

rm -f ./tar.gz

Să atribuim proprietarul fișierelor nginx:

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

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

shutdown -h now

După lansarea VDS din instantaneu, vom efectua configurarea inițială a serverului MySQL prin rularea scriptului:

mysql_secure_installation

Să activăm validatorul de parole:

Would you like to setup VALIDATE PASSWORD component? : y

Să setăm parola pentru utilizatorul root MySQL:

New password:
Re-enter new password:

Să eliminăm utilizatorii anonimi:

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

Să împiedicăm root-ul să se conecteze de la distanță:

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

Să ștergem baza de date de testare:

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

Să reîncărcăm 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 merge la adresa_ip_vps
La această adresă vom vedea pagina de instalare a Drupal.

Să selectăm limba de utilizat. De exemplu: rusă. Faceți clic pe „Salvați și continuați”

Să selectăm un profil de instalare (demo-ul este folosit numai pentru a vă familiariza cu sistemul). În cazul nostru, să fie „standard”.

Pe pagina următoare vom da un nume bazei de date, de exemplu „drupal”. Să indicăm numele de utilizator al bazei de date root și parola care i-a fost dată când rulează mysql_secure_installation. Faceți clic pe „Salvați și continuați”.

Să așteptăm finalizarea instalării și a actualizării traducerilor (procesul poate dura câteva minute).

Vom indica numele site-ului, vom seta email-ul site-ului (în numele căruia vor fi trimise notificări de site), login, parola și e-mailul contului de administrator Drupal. De asemenea, vom seta țara și fusul orar în setările regionale. Și finalizați instalarea făcând clic pe „Salvați și continuați”.

După aceasta, puteți merge la panoul de control cu ​​datele de conectare și parola de administrator Drupal create.

Configurarea HTTPS (opțional)

Pentru a configura HTTPS, VDS trebuie să aibă un nume DNS valid, specificați în

/etc/nginx/nginx.conf

în secțiunea server numele serverului (de exemplu):

server_name  domainname.ru;

Să repornim nginx:

service nginx restart

Să lansăm certbot:

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

Introduceți adresa dvs. de e-mail, acceptați termenii și condițiile (A), Abonați-vă la newsletter (opțional) (N), selectați numele de domenii pentru care doriți să eliberați un certificat (Enter for everyone).

Dacă totul a decurs fără erori, vom vedea un mesaj despre emiterea cu succes a certificatelor și configurarea serverului:

Congratulations! You have successfully enabled ...

După aceasta, conexiunile la portul 80 vor fi redirecționate la 443 (https).

Adăugați în /etc/crontab pentru a actualiza automat certificatele:

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

Configurarea securității gazdei de încredere (recomandat)

Această setare este concepută ca o soluție la problema asociată cu determinarea dinamică a URL-ului de bază și este concepută pentru a preveni atacurile HTTP HOST Header (atunci când site-ul dvs. crede că este altcineva).

Pentru a face acest lucru, trebuie să specificați nume de domenii de încredere pentru site în fișierul de setări.

În dosar

/usr/share/nginx/html/sites/default/settings.php Să anulăm comentariile sau să adăugăm o setare cu modele de nume reale de site, de exemplu:

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

Instalarea PHP APCu (RECOMANDAT)

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

Pentru activare, instalați modulul PHP APCu:

dnf -y install php-pecl-apcu

Reporniți nginx și php-fpm:

service nginx restart
service php-fpm restart

Dacă utilizați limba rusă și APCu cu dimensiunea de memorie recomandată pentru cache, este posibil să vedeți un avertisment în panoul de control că dimensiunea memoriei alocate pentru cache este diferită de cea recomandată, dar de fapt totul funcționează corect, iar avertismentul incorect va fi corectat cel mai probabil în următoarele actualizări.

Sau dacă avertismentul vă doare ochii, puteți utiliza patch-ul corespunzător din afara site-ului.

Dorim să vă reamintim că ne puteți face și o imagine

Există trei opțiuni pentru a participa.

Pregătiți singur imaginea și obțineți 3000 de ruble în sold

Dacă sunteți gata să vă grăbiți imediat în luptă și să creați imaginea care vă lipsește, vă vom credita cu 3000 de ruble din soldul dvs. intern, pe care le puteți cheltui pe servere.

Cum să-ți creezi propria imagine:

  1. Creați un cont la noi pe On-line
  2. Anunțați asistența că veți crea și testa imagini
  3. Vă vom credita 3000 de ruble și vă vom permite posibilitatea de a crea instantanee
  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. Scrieți instrucțiuni sau script pentru implementarea software-ului
  7. Creați un instantaneu pentru serverul configurat
  8. Comandați un nou server virtual selectând instantaneul creat anterior în lista derulantă „Șablon de server”
  9. Dacă serverul este creat cu succes, transferați materialele primite în etapa 6 către suport tehnic
  10. Dacă există o eroare, puteți verifica motivul la asistență și puteți repeta configurarea

Pentru proprietarii de afaceri: oferiți-vă software-ul

Dacă sunteți un dezvoltator de software care este implementat și utilizat pe VPS, atunci vă putem include pe piață. Acesta este modul în care vă putem ajuta să aduceți clienți noi, trafic și conștientizare. Scrie-ne

Spune-ne în comentarii ce imagine îți lipsește?

Și o vom pregăti singuri

Crearea unui șablon VPS cu Drupal 9 pe Centos 8

Crearea unui șablon VPS cu Drupal 9 pe Centos 8

Sursa: www.habr.com