Creació d'una plantilla VPS amb Drupal 9 a Centos 8

Continuem ampliant el nostre mercat. Fa poc hem parlat de com va fer una imatge de Gitlab, i aquesta setmana ha aparegut Drupal al nostre mercat.

Expliquem per què l'hem escollit i com es va crear la imatge.

Creació d'una plantilla VPS amb Drupal 9 a Centos 8

drupal és una plataforma còmoda i potent per crear qualsevol tipus de llocs: des de microllocs i blocs fins a grans projectes socials, que també s'utilitza com a base per a aplicacions web, escrites en PHP i utilitzant bases de dades relacionals com a emmagatzematge de dades.

Drupal 9 inclou totes les característiques introduïdes a la versió 8.9. La diferència clau entre la versió 9 i la versió 8 és que la plataforma continuarà rebent actualitzacions i solucions de seguretat després del novembre de 2021. També a la versió 9, el procés d'actualització s'ha simplificat, fent que el procés d'actualització de la versió 8 sigui encara més fàcil.

Requisits del servidor

Per utilitzar Drupal, es recomana utilitzar 2 GB de RAM i 2 nuclis de CPU.

Els fitxers principals de Drupal tenen uns 100 MB, a més necessitareu espai per emmagatzemar imatges, bases de dades, temes, complements i còpies de seguretat, que dependrà de la mida del vostre lloc.

Drupal 9 requereix PHP 7.4 o superior amb un límit mínim (memory_limit) a 64 MB de memòria, en cas d'utilitzar mòduls addicionals, es recomana instal·lar 128 MB.

Drupal pot utilitzar Apache o Nginx com a servidor web i MySQL, PostgreSQL o SQLite com a base de dades.

Instal·larem Drupal mitjançant Nginx i MySQL.

Instal · lació

Actualitzeu els paquets instal·lats a la darrera versió:

sudo dnf update -y

Afegim un permís permanent per al trànsit entrant als ports http/80 i https/443:

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

Apliqueu les noves regles del tallafoc:

sudo systemctl reload firewalld

Instal·leu Nginx:

sudo dnf install nginx -y

Comencem i activem el servidor Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Com que PHP 7.2 s'utilitza actualment al dipòsit principal de Centos, afegim el dipòsit REMI amb PHP 7.4 (la versió mínima per a Drupal 9).
Per fer-ho, afegiu el repositori EPEL (requerit pel repositori REMI):

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

Afegim el repositori REMI:

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

Habiliteu el mòdul php:remi-7.4 per instal·lar php 7.4:

sudo dnf module enable php:remi-7.4 -y

Instal·leu php-fpm i php-cli:

sudo dnf install -y php-fpm php-cli

Instal·leu els mòduls PHP necessaris perquè Drupal funcioni:

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

També instal·larem els mòduls PHP recomanats mbstring opcache:

sudo dnf install -y php-mbstring php-opcache

Instal·leu el servidor MySQL:

sudo dnf install mysql-server -y

Activeu i inicieu el servidor MySQL:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Com que estem fent una plantilla per a VDS, i poden ser lentes, afegirem un retard d'inici de mysqld de 30 segons, en cas contrari pot haver-hi problemes en iniciar el servidor durant l'arrencada inicial del sistema:

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

Canviem el grup i l'usuari amb què s'executarà nginx fent canvis 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

Canvieu el propietari del directori de sessió de PHP a nginx en conseqüència:

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

Eliminem les línies de comentaris del fitxer de configuració /etc/nginx/nginx.conf (de manera que no hi hagi dobles visites per a sed):

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

Afegiu la configuració de compressió 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

Afegim la configuració del fitxer d'índex 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

Afegim la configuració per al servidor predeterminat que processa php a través del sòcol php-fpm, desactivem el registre dels fitxers estàtics, augmentem el temps de caducitat, desactivem el registre d'accés i errors per a favicon.ico i robots.txt i denegarem l'accés als fitxers .ht per a tothom:

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

Instal·leu wget necessari per instal·lar certbot:

sudo dnf install wget -y

Baixeu el fitxer executable de certbot des de fora del lloc:

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

Mou certbot a /usr/local/bin/:

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

I assigneu drets i propietat a root:

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

Instal·leu les dependències de certbot i atureu-lo en aquesta etapa (Respostes: Y, c):

certbot-auto

Baixeu l'arxiu amb la darrera versió de Drupal 9 des de fora del lloc:

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

Instal·leu tar per desempaquetar l'arxiu:

sudo dnf install tar -y

Suprimeix els fitxers predeterminats al directori /usr/share/nginx/html/:

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

Descomprimiu els fitxers al directori del servidor web:

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

Mou els fitxers del subdirectori al directori arrel del servidor web:

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

Suprimim el subdirectori:

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

Elimina l'arxiu amb els fitxers d'instal·lació:

rm -f ./tar.gz

Estableix el propietari dels fitxers nginx:

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

En aquesta etapa, apagarem el servidor i farem una instantània:

shutdown -h now

Després d'iniciar el VDS des de la instantània, realitzarem la configuració inicial del servidor MySQL executant l'script:

mysql_secure_installation

Habiliteu el validador de contrasenyes:

Would you like to setup VALIDATE PASSWORD component? : y

Establiu la contrasenya de l'usuari root de MySQL:

New password:
Re-enter new password:

Elimina usuaris anònims:

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

Evitem que el root es connecti de manera remota:

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

Suprimim la base de dades de prova:

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

Torneu a carregar les taules de privilegis:

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

Després d'això, per completar la instal·lació, podem anar a adreça_ip_vps
En aquesta adreça veurem una pàgina amb la instal·lació de Drupal.

Seleccioneu l'idioma que voleu utilitzar. Per exemple: rus. Feu clic a "Desa i continua"

Triem un perfil d'instal·lació (la demostració només s'utilitza per familiaritzar-se amb el sistema). En el nostre cas, que sigui "estàndard".

A la pàgina següent, doneu un nom a la base de dades, com ara "drupal". Especifiqueu el nom d'usuari root de la base de dades i la contrasenya que se li va donar en iniciar mysql_secure_installation. Feu clic a "Desa i continua".

Esperem que finalitzi la instal·lació i l'actualització de les traduccions (el procés pot trigar uns quants minuts).

Especifiqueu el nom del lloc, configureu el correu electrònic del lloc (en nom de quin lloc arribaran les notificacions), inici de sessió, contrasenya i correu electrònic del compte d'administrador de Drupal. També establirem el país i la zona horària a la configuració regional. I completeu la instal·lació fent clic a "Desa i continua".

Després d'això, podeu anar al tauler de control amb l'inici de sessió i la contrasenya de l'administrador de Drupal creats.

Configuració HTTPS (opcional)

Per configurar HTTPS, el VDS ha de tenir un nom DNS vàlid, especifiqueu-ho a

/etc/nginx/nginx.conf

a la secció del servidor el nom del servidor (per exemple):

server_name  domainname.ru;

Reinicieu nginx:

service nginx restart

Comencem certbot:

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

Introduïu el vostre correu electrònic, accepteu les condicions del servei (A), Subscriu-te al butlletí (opcional) (N), selecciona els noms de domini per als quals vols emetre un certificat (Entra per a tots).

Si tot ha anat sense errors, veurem un missatge sobre l'emissió correcta dels certificats i la configuració del servidor:

Congratulations! You have successfully enabled ...

Després d'això, les connexions al port 80 es redirigiran al 443 (https).

Afegiu a /etc/crontab per renovar automàticament els certificats:

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

Configuració de la seguretat de l'amfitrió de confiança (recomanat)

Aquesta configuració pretén ser una solució al problema de detecció dinàmica de base_url i pretén evitar atacs de capçalera HTTP HOST (quan el vostre lloc creu que és una altra persona).

Per fer-ho, heu d'especificar els noms de domini de confiança del lloc al fitxer de configuració.

A l'arxiu

/usr/share/nginx/html/sites/default/settings.php descomenta o afegeix una configuració amb patrons de noms de llocs reals, per exemple:

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

Instal·lació de PHP APCu (RECOMANAT)

Drupal admet APCu - Cache d'usuari PHP alternativa, les versions 8 i 9 utilitzen APCu de manera més intensa com a memòria cau local a curt termini que les versions anteriors. La mida de la memòria cau per defecte (32 MB) s'adaptarà a la majoria de llocs i no pot superar els 512 MB.

Per activar-lo, instal·leu el mòdul PHP APCu:

dnf -y install php-pecl-apcu

Reinicieu nginx i php-fpm:

service nginx restart
service php-fpm restart

En el cas d'utilitzar l'idioma rus i l'APCu amb la mida de memòria cau recomanada, podeu veure un avís al tauler de control que la mida de la memòria cau assignada difereix de la recomanada, però de fet tot funciona correctament i és incorrecte. L'advertència probablement s'arreglarà en les properes actualitzacions.

O si l'avís fa mal als ulls, podeu utilitzar-lo pedaç corresponent des de fora del lloc.

Us volem recordar que també podeu fer-nos una imatge

Hi ha tres opcions de com participar.

Prepareu la imatge vosaltres mateixos i obteniu 3000 rubles al vostre saldo

Si esteu preparats per precipitar-vos immediatament a la batalla i crear la imatge que us falta, us acreditarem 3000 rubles al vostre saldo intern; podeu gastar-lo en servidors.

Com crear la teva imatge:

  1. Creeu un compte amb nosaltres Online
  2. Digues al servei d'assistència que crearàs i provaràs imatges
  3. Us acreditarem 3000 rubles i habilitarem la possibilitat de crear instantànies
  4. Demaneu un servidor virtual amb un sistema operatiu net
  5. Instal·leu el programari en aquest VPS i configureu-lo
  6. Escriu instruccions o script per al desplegament de programari
  7. Creeu una instantània per al servidor configurat
  8. Sol·liciteu un nou servidor virtual seleccionant la instantània creada anteriorment a la llista desplegable "Plantilla de servidor"
  9. En cas de crear correctament el servidor, transferiu els materials rebuts al pas 6 al suport tècnic
  10. En cas d'error, podeu consultar el motiu amb el suport i repetir la configuració

Per a empresaris: ofereix el teu programari

Si sou un desenvolupador de programari que es desplega i s'utilitza en un VPS, us podem incloure al mercat. Així us podem ajudar a atraure nous clients, trànsit i visibilitat. Escriu-nos

Fes-nos saber als comentaris quina imatge trobes a faltar?

I ho prepararem nosaltres mateixos

Creació d'una plantilla VPS amb Drupal 9 a Centos 8

Creació d'una plantilla VPS amb Drupal 9 a Centos 8

Font: www.habr.com