Création d'un modèle VPS avec Drupal 9 sur Centos 8

Nous continuons d'élargir notre marché. Récemment, nous avons expliqué comment nous avons créé une image Gitlab, et cette semaine, Drupal est apparu sur notre marché.

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

Création d'un modèle VPS avec Drupal 9 sur Centos 8

Drupal — une plateforme pratique et puissante pour créer tout type de sites : des microsites et blogs aux grands projets sociaux, utilisée également comme base pour des applications web, écrite en PHP et utilisant des bases de données relationnelles comme stock.

Drupal 9 comprend toutes les fonctionnalités mises en œuvre dans la version 8.9. La principale différence entre la version 9 et la version 8 est que des mises à jour et correctifs de sécurité seront publiés pour la plateforme après novembre 2021. De plus, la version 9 simplifie le processus de mise à jour, rendant le passage de la version 8 encore plus facile.

Exigences du serveur

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

Les fichiers principaux de Drupal occupent environ 100 Mo, vous aurez besoin d’espace supplémentaire pour stocker les images, la base de données, les thèmes, les modules supplémentaires et les sauvegardes, ce qui dépendra de la taille de votre site.

Pour Drupal 9, PHP 7.4 ou une version ultérieure est requis avec une restriction minimale (memory_limit) sur la mémoire de 64 Mo, et si vous utilisez des modules supplémentaires, il est recommandé de fixer cela à 128 Mo.

En tant que serveur web, Drupal peut utiliser Apache ou Nginx, et comme base de données MySQL, PostgreSQL ou SQLite.

Nous allons installer Drupal en utilisant Nginx et MySQL.

Installation

Mettons à jour les paquets installés vers la dernière version :

sudo dnf update -y

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

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

Appliquons les nouvelles règles du pare-feu :

sudo systemctl reload firewalld

Installons Nginx :

sudo dnf install nginx -y

Démarrons et activons le serveur Nginx :

sudo systemctl start nginx
sudo systemctl enable nginx

Comme actuellement le référentiel principal de CentOS utilise PHP 7.2, ajoutons le référentiel REMI avec PHP 7.4 (version minimale pour Drupal 9).
Pour cela, ajoutons le référentiel EPEL (nécessaire pour le référentiel REMI) :

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

Ajoutons le référentiel REMI :

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

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

sudo dnf module enable php:remi-7.4 -y

Installons php-fpm et php-cli :

sudo dnf install -y php-fpm php-cli

Installons les modules PHP requis pour le bon fonctionnement de 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

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

sudo dnf install -y php-mbstring php-opcache

Installons le serveur MySQL :

sudo dnf install mysql-server -y

Activate and start the MySQL server :

sudo systemctl start mysqld
sudo systemctl enable mysqld

Comme nous faisons un modèle pour VDS, qui peuvent être lents, ajoutons un délai de démarrage du mysqld de 30 secondes, sinon il pourrait y avoir des problèmes de démarrage du serveur lors du premier chargement du système :

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

Changeons le groupe et l'utilisateur sous lesquels nginx fonctionnera en modifiant /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

Changeons également le propriétaire du répertoire des sessions PHP en nginx :

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

Nous allons supprimer les lignes de commentaires dans le fichier de configuration /etc/nginx/nginx.conf (pour éviter des doubles déclenchements pour sed) :

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

Ajoutons les paramètres de compression gzip dans /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 dans /etc/nginx/nginx.conf les configurations pour le fichier d'index index.php :

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

Ajoutons les paramètres pour le serveur par défaut concernant le traitement PHP via le socket php-fpm, désactivons les journaux pour les fichiers statiques, augmentons le temps d'expiration, désactivons les journaux d'accès et d'erreurs pour favicon.ico et robots.txt et interdisons l'accès aux fichiers .ht pour tous :

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

Installons wget requis pour l'installation de certbot :

sudo dnf install wget -y

Téléchargeons le fichier exécutable certbot depuis le site officiel :

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

Déplaçons certbot dans /usr/local/bin/ :

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

Et définissons les droits et le propriétaire comme root :

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

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

certbot-auto

Téléchargeons depuis le site officiel l'archive de la dernière version de Drupal 9 :

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

Installons tar pour extraire l'archive :

sudo dnf install tar -y

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

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

Décompressons les fichiers dans le répertoire du serveur web :

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

Déplaçons 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/

Supprimons le sous-répertoire :

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

Supprimons l'archive avec les fichiers d'installation :

rm -f ./tar.gz

Définissons nginx comme propriétaire des fichiers :

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

À ce stade, nous allons éteindre le serveur et faire un snapshot :

shutdown -h now

Après le démarrage du VDS à partir du snapshot, effectuons la configuration initiale du serveur MySQL en lançant le script :

mysql_secure_installation

Activer le validateur de mots de passe :

Souhaitez-vous configurer le composant VALIDATE PASSWORD ? : y

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

Nouveau mot de passe :
Ressaisir le nouveau mot de passe :

Supprimons les utilisateurs anonymes :

Supprimer les utilisateurs anonymes ? (Appuyez sur y|Y pour Oui, toute autre touche pour Non) : y

Interdire la connexion root à distance :

Interdire la connexion root à distance ? (Appuyez sur y|Y pour Oui, toute autre touche pour Non) : y

Supprimer la base de données test :

Supprimer la base de données test et y accéder ? (Appuyez sur y|Y pour Oui, toute autre touche pour Non) : y

Recharger les tables de privilèges :

Recharger les tables de privilèges maintenant ? (Appuyez sur y|Y pour Oui, toute autre touche pour Non) : y

Après cela, pour terminer l'installation, nous pouvons aller à l'adresse vps_ip_address
À cette adresse, nous verrons la page d'installation de Drupal.

Choisissez la langue utilisée. Par exemple : français. Cliquez sur « Enregistrer et continuer »

Choisissez le profil d'installation (la démo est uniquement utilisée pour se familiariser avec le système). Dans notre cas, cela sera « standard ».

À la page suivante, définissons le nom de la base de données, par exemple « drupal ». Indiquons le nom d'utilisateur de la BDD root et le mot de passe défini lors de l'exécution de mysql_secure_installation. Cliquez sur « Enregistrer et continuer ».

Patientez jusqu'à la fin de l'installation et la mise à jour des traductions (ce processus peut prendre quelques minutes).

Nous indiquerons le nom du site, définirons l'email du site (au nom duquel les notifications seront envoyées), le nom d'utilisateur, 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 nous terminerons l'installation en cliquant sur « Enregistrer et continuer ».

Après cela, vous pouvez accéder au tableau de bord avec le nom d'utilisateur et le mot de passe créés pour l'administrateur Drupal.

Configuration de HTTPS (optionnelle)

Pour configurer HTTPS, le VDS doit avoir un nom DNS valide, indiquez dans

/etc/nginx/nginx.conf

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

server_name  domainname.fr;

Redémarrons nginx :

service nginx restart

Lançons certbot :

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

Saisissons notre e-mail, acceptons les conditions du service (A), l'abonnement à la newsletter (optionnelle) (N), choisissons les noms de domaine pour lesquels le certificat doit être émis (Entrée pour tous).

Si tout s'est bien passé, nous verrons un message confirmant l'émission réussie des certificats et la configuration du serveur :

Félicitations ! Vous avez activé avec succès ...

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

Ajoutons dans /etc/crontab pour la mise à jour automatique des 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ée)

Cette configuration est destinée à résoudre le problème lié à la détermination dynamique de base_url, et vise à prévenir les attaques de l'en-tête HTTP HOST (lorsque votre site pense qu'il est un autre).

Pour cela, il faut indiquer les noms de domaine de confiance du site dans le fichier de configuration.

Dans le fichier

/usr/share/nginx/html/sites/default/settings.php décommentons ou ajoutons la configuration avec les motifs des noms de domaine actuels, par exemple :

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

Installation de PHP APCu (RECOMMANDÉ)

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

Pour l'activer, installons le module PHP APCu :

dnf -y install php-pecl-apcu

Redémarrons nginx et php-fpm :

service nginx restart
service php-fpm restart

En cas d'utilisation de la langue russe et d'APCu avec la taille de mémoire recommandée pour le cache, vous pouvez voir un avertissement dans le tableau de bord indiquant que la taille de la mémoire allouée au cache diffère de celle recommandée, mais en réalité tout fonctionne correctement, et cet avertissement incorrect sera probablement corrigé dans les prochaines mises à jour.

Ou si l'avertissement est gênant, vous pouvez utiliser patch approprié depuis le site externe.

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

Il y a trois façons de participer.

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

Si vous êtes prêt à vous lancer et à créer l'image qui vous manque, nous vous créditerons 3000 roubles sur votre solde interne — que vous pourrez dépenser pour des serveurs.

Comment créer votre image :

  1. Créez un compte chez nous sur le site
  2. Informez le support que vous allez créer et tester des images
  3. Nous vous créditerons 3000 roubles et activerons la possibilité de créer des snapshots
  4. Commandez un serveur virtuel avec un système d'exploitation propre
  5. Installez le logiciel sur ce VPS et configurez-le
  6. Rédigez un guide ou un script pour déployer le logiciel
  7. Créez un snapshot pour le serveur configuré
  8. Commandez un nouveau serveur virtuel en choisissant dans le menu déroulant le snapshot créé précédemment comme « Modèle de serveur »
  9. En cas de création réussie du serveur, transmettez les documents obtenus à l'étape 6 au support technique
  10. En cas d'erreur, vous pouvez demander au support la raison et répéter la configuration

Pour les propriétaires d'entreprise : proposez votre logiciel

Si vous êtes un développeur de logiciels qui se déploie et s'utilise sur VPS, nous pouvons vous inclure dans notre marketplace. Ainsi, nous pouvons vous aider à attirer de nouveaux clients, du trafic et de la notoriété. Écrivez-nous

Dites-nous dans les commentaires quel type d'image vous manque ?

Et nous le préparerons nous-mêmes

Création d'un modèle VPS avec Drupal 9 sur Centos 8

Création d'un modèle VPS avec Drupal 9 sur Centos 8

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster