Créer un modèle VPS avec Drupal 9 sur Centos 8

Nous continuons d'élargir notre marché. Nous avons récemment parlé de la façon dont créé une image Gitlab, et cette semaine Drupal est apparu sur notre marché.

Nous expliquons pourquoi nous l'avons choisi et comment l'image a été créée.

Créer un modèle VPS avec Drupal 9 sur Centos 8

Drupal est une plate-forme pratique et puissante pour créer tout type de sites : des microsites et blogs aux grands projets sociaux, qui sert également de base aux applications Web, écrites en PHP et utilisant des bases de données relationnelles comme stockage de données.

Drupal 9 inclut toutes les fonctionnalités introduites dans la version 8.9. La principale différence entre la version 9 et la version 8 est que la plateforme continuera à recevoir des mises à jour et des correctifs de sécurité après novembre 2021. Également dans la version 9, le processus de mise à niveau a été simplifié, ce qui rend le processus de mise à niveau à partir de la version 8 encore plus facile.

Exigences du serveur

Pour utiliser Drupal, il est recommandé d'utiliser 2 Go de RAM et 2 cœurs CPU.

Les principaux fichiers Drupal font environ 100 Mo, vous aurez également besoin d'espace pour stocker les images, la base de données, les thèmes, les modules complémentaires et les sauvegardes, qui dépendront de la taille de votre site.

Drupal 9 nécessite PHP 7.4 ou supérieur avec une limitation minimale (memory_limit) à 64 Mo de mémoire, en cas d'utilisation de modules supplémentaires, il est recommandé d'installer 128 Mo.

Drupal peut utiliser Apache ou Nginx comme serveur Web et MySQL, PostgreSQL ou SQLite comme base de données.

Nous installerons Drupal en utilisant Nginx et MySQL.

Installation

Mettez à jour les packages installés vers la dernière version :

sudo dnf update -y

Ajoutons une autorisation permanente pour le trafic entrant vers les ports http/80 et https/443 :

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

Appliquez les nouvelles règles de pare-feu :

sudo systemctl reload firewalld

Installez Nginx :

sudo dnf install nginx -y

Commençons et activons le serveur Nginx :

sudo systemctl start nginx
sudo systemctl enable nginx

Puisque PHP 7.2 est actuellement utilisé dans le référentiel principal Centos, ajoutons le référentiel REMI avec PHP 7.4 (la version minimale pour Drupal 9).
Pour cela, ajoutez le dépôt EPEL (requis par le dépôt REMI) :

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

Ajoutons le dépôt REMI :

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

Activez le module php:remi-7.4 pour installer php 7.4 :

sudo dnf module enable php:remi-7.4 -y

Installez php-fpm et php-cli :

sudo dnf install -y php-fpm php-cli

Installons les modules PHP requis pour que Drupal fonctionne :

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

Nous installerons également les modules PHP recommandés mbstring opcache :

sudo dnf install -y php-mbstring php-opcache

Installez le serveur MySQL :

sudo dnf install mysql-server -y

Activez et démarrez le serveur MySQL :

sudo systemctl start mysqld
sudo systemctl enable mysqld

Puisque nous créons un modèle pour VDS et qu'ils peuvent être lents, nous ajouterons un délai de démarrage de mysqld de 30 secondes, sinon il pourrait y avoir des problèmes avec le démarrage du serveur lors du démarrage initial du système :

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

Modifions le groupe et l'utilisateur sous lesquels nginx s'exécutera en apportant des modifications à /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

Changez le propriétaire du répertoire de session PHP en nginx en conséquence :

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

Supprimons les lignes de commentaires du fichier de configuration /etc/nginx/nginx.conf (afin qu'il n'y ait pas de double hit pour sed) :

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

Ajoutez les paramètres de compression gzip à /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

Ajoutons les paramètres du fichier d'index index.php à /etc/nginx/nginx.conf :

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

Ajoutons des paramètres pour le serveur par défaut : traitement PHP via le socket php-fpm, désactivez le journal pour les fichiers statiques, augmentez le délai d'expiration, désactivez le journal des accès et des erreurs pour favicon.ico et robots.txt, et refusez l'accès à .ht des fichiers pour tout le monde :

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

Installez wget requis pour installer certbot :

sudo dnf install wget -y

Téléchargez le fichier exécutable certbot hors site :

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

Déplacez certbot vers /usr/local/bin/ :

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

Et attribuez les droits et la propriété à root :

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

Installons les dépendances de certbot et interrompons à ce stade son travail (Réponses : Y, c) :

certbot-auto

Téléchargez l'archive avec la dernière version de Drupal 9 hors site :

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

Installez tar pour décompresser l'archive :

sudo dnf install tar -y

Supprimez les fichiers par défaut dans le répertoire /usr/share/nginx/html/ :

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

Décompressez les fichiers dans le répertoire du serveur Web :

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

Déplacez les fichiers du sous-répertoire vers le répertoire racine du serveur Web :

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

Supprimer le sous-répertoire :

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

Supprimez l'archive avec les fichiers d'installation :

rm -f ./tar.gz

Définissez le propriétaire des fichiers nginx :

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

A ce stade, nous allons éteindre le serveur et prendre un instantané :

shutdown -h now

Après avoir démarré le VDS à partir du snapshot, nous effectuerons la configuration initiale du serveur MySQL en exécutant le script :

mysql_secure_installation

Activez le validateur de mot de passe :

Would you like to setup VALIDATE PASSWORD component? : y

Définissez le mot de passe de l'utilisateur root MySQL :

New password:
Re-enter new password:

Supprimez les utilisateurs anonymes :

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

Empêchons root de se connecter à distance :

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

Supprimons la base de données de test :

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

Rechargeons les tables de privilèges :

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

Après cela, pour terminer l'installation, nous pouvons aller à adresse_ip_vps
A cette adresse, nous verrons une page avec l'installation de Drupal.

Sélectionnons la langue à utiliser. Par exemple : le russe. Cliquez sur « Enregistrer et continuer »

Choisissons un profil d'installation (la démo est utilisée uniquement pour se familiariser avec le système). Dans notre cas, que ce soit "standard".

Sur la page suivante, donnez un nom à la base de données, tel que « drupal ». Spécifiez le nom d'utilisateur de la base de données root et le mot de passe qui lui a été donné lors du démarrage de mysql_secure_installation. Cliquez sur "Enregistrer et continuer".

Attendons la fin de l'installation et de la mise à jour des traductions (le processus peut prendre plusieurs minutes).

Nous indiquerons le nom du site, définirons l'email du site (au nom duquel les notifications du site seront envoyées), le login, le mot de passe et l'email du compte administrateur Drupal. Nous définirons également le pays et le fuseau horaire dans les paramètres régionaux. Et terminez l'installation en cliquant sur "Enregistrer et continuer".

Après cela, vous pouvez accéder au panneau de configuration avec le login et le mot de passe de l'administrateur Drupal créés.

Paramètre HTTPS (facultatif)

Pour configurer HTTPS, le VDS doit avoir un nom DNS valide, spécifiez dans

/etc/nginx/nginx.conf

dans la section serveur le nom du serveur (par exemple) :

server_name  domainname.ru;

Redémarrez nginx :

service nginx restart

Commençons certbot :

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

Saisissez votre e-mail, acceptez les conditions générales d'utilisation (A), Abonnez-vous à la newsletter (facultatif) (N), sélectionnez les noms de domaine pour lesquels vous souhaitez émettre un certificat (Entrez pour tous).

Si tout s'est déroulé sans erreur, nous verrons un message concernant l'émission réussie des certificats et la configuration du serveur :

Congratulations! You have successfully enabled ...

Après cela, les connexions sur le port 80 seront redirigées vers 443 (https).

Ajoutez à /etc/crontab pour mettre à jour automatiquement les certificats :

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

Configuration de la sécurité des hôtes de confiance (recommandé)

Ce paramètre est destiné à résoudre le problème de la détection dynamique de base_url et à empêcher les attaques d'en-tête HTTP HOST (lorsque votre site pense qu'il s'agit de quelqu'un d'autre).

Pour ce faire, vous devez spécifier les noms de domaine de confiance du site dans le fichier de paramètres.

En fichier

/usr/share/nginx/html/sites/default/settings.php Décommentons ou ajoutons un paramètre avec des modèles de noms de sites réels, par exemple :

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

Installation de PHP APCu (RECOMMANDÉ)

Drupal prend en charge APCu - Alternative PHP User Cache, les versions 8 et 9 utilisent APCu de manière plus intensive comme cache local à court terme que les versions précédentes. La taille du cache par défaut (32 Mo) convient à la plupart des sites et ne peut pas dépasser 512 Mo.

Pour l'activer, installez le module PHP APCu :

dnf -y install php-pecl-apcu

Redémarrez nginx et php-fpm :

service nginx restart
service php-fpm restart

Dans le cas de l'utilisation de la langue russe et de l'APCu avec la taille de mémoire cache recommandée, vous pouvez voir un avertissement dans le panneau de configuration indiquant que la taille de la mémoire cache allouée diffère de celle recommandée, mais en fait tout fonctionne correctement, et le mauvais l'avertissement sera très probablement corrigé dans les prochaines mises à jour.

Ou si l'avertissement fait mal aux yeux, vous pouvez utiliser correctif correspondant hors site.

Nous souhaitons vous rappeler que vous pouvez également créer une image pour nous

Il existe trois options pour participer.

Préparez vous-même l'image et obtenez 3000 roubles sur votre solde

Si vous êtes prêt à vous lancer immédiatement dans la bataille et à créer vous-même l'image qui vous manque, nous vous créditerons de 3000 XNUMX roubles sur votre solde interne - vous pourrez les dépenser sur des serveurs.

Comment créer votre image :

  1. Créez un compte avec nous En ligne
  2. Dites au support que vous allez créer et tester des images
  3. Nous vous créditerons 3000 XNUMX roubles et vous offrirons la possibilité de créer des instantanés
  4. Commandez un serveur virtuel avec un système d'exploitation propre
  5. Installez le logiciel sur ce VPS et configurez-le
  6. Rédiger des instructions ou un script pour le déploiement de logiciels
  7. Créer un instantané pour le serveur configuré
  8. Commandez un nouveau serveur virtuel en sélectionnant l'instantané créé précédemment dans la liste déroulante "Modèle de serveur"
  9. En cas de création réussie du serveur, transférez les matériaux reçus à l'étape 6 au support technique
  10. En cas d'erreur, vous pouvez vérifier la raison auprès de l'assistance et répéter la configuration.

Pour les chefs d’entreprise : proposez votre logiciel

Si vous êtes un développeur de logiciels déployés et utilisés sur un VPS, nous pouvons vous inclure sur le marché. C’est ainsi que nous pouvons vous aider à attirer de nouveaux clients, du trafic et de la visibilité. ишите нам

Dites-nous dans les commentaires quelle image vous manque ?

Et nous le préparerons nous-mêmes

Créer un modèle VPS avec Drupal 9 sur Centos 8

Créer un modèle VPS avec Drupal 9 sur Centos 8

Source: habr.com