Recherche de site Web

Comment installer la suite de commerce électronique Magento sur Debian 12 avec Nginx et Elasticsearch


Magento est une plateforme de commerce électronique open source écrite en PHP. Il a été acquis par Adobe en 2018. Il est également proposé sous forme de produit commercial et basé sur le cloud. Vous pouvez utiliser Magento pour créer des sites Web commerciaux professionnels de grande capacité. Il propose les deux : un mode magasin unique et un mode magasin multiple. Il est livré avec de nombreux modules pour étendre ses fonctionnalités.

Dans ce tutoriel, nous installerons l'édition communautaire open source de Magento. Il offre toutes les fonctionnalités dont vous avez besoin pour créer une boutique en ligne professionnelle. Nous installerons également Elasticsearch pour la recherche dans le catalogue de produits, Redis pour le cache de session et de fichiers, et le servirons à l'aide du serveur Nginx.

Conditions préalables

    Un serveur exécutant Debian 12 avec un minimum de 2 Go de RAM. Vous aurez peut-être besoin de plus de RAM en fonction de vos besoins.

    Un utilisateur non root avec les privilèges sudo.

    Un nom de domaine complet (FQDN) pour le serveur, magento.example.com

    Assurez-vous que tout est mis à jour.

    $ sudo apt update
    $ sudo apt upgrade
    

    Peu de packages dont votre système a besoin.

    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
    

    Certains de ces packages sont peut-être déjà installés sur votre système.

Étape 1 - Configurer le pare-feu

La première étape consiste à configurer le pare-feu. Debian est livré par défaut avec ufw (Uncomplicated Firewall).

Vérifiez si le pare-feu est en cours d'exécution.

$ sudo ufw status

Vous devriez voir quelque chose comme ce qui suit.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Autorisez également les ports HTTP et HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Vérifiez à nouveau l'état du pare-feu.

$ sudo ufw status

Vous devriez voir une sortie similaire.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Étape 2 - Installez PHP et ses extensions

Debian 12 est livré par défaut avec la version PHP 8.2. Vous pouvez l'installer ainsi que les extensions requises par Magento en exécutant la commande suivante.

$ sudo apt install php-fpm php-cli php-mysql php-mbstring php-xml php-gd php-bcmath php-zip php-curl php-tidy php-intl php-soap php-xsl libsodium-dev libsodium23 libssl-dev libcurl4-openssl-dev

Pour toujours rester sur la dernière version de PHP ou si vous souhaitez installer plusieurs versions de PHP, ajoutez le dépôt PHP d'Ondrej.

Tout d’abord, importez la clé PHP GPG du dépôt de Sury.

$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

Ajoutez le référentiel PHP d'Ondrej Sury.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

Mettez à jour la liste des référentiels système.

$ sudo apt update	

Ensuite, installez PHP et ses extensions requises par Magento.

$ sudo apt install php8.2-fpm php8.2-mysql php8.2-bcmath php8.2-xml php8.2-zip php8.2-curl php8.2-mbstring php8.2-gd php8.2-tidy php8.2-intl php8.2-cli php8.2-soap php8.2-xsl libsodium-dev libsodium23 libssl-dev libcurl4-openssl-dev

Vérifiez l'installation.

$ php --version
PHP 8.2.8 (cli) (built: Jul 16 2023 11:00:43) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.8, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.8, Copyright (c), by Zend Technologies

Étape 3 - Installer Composer

Composer est un outil de gestion des dépendances pour PHP et est requis pour l'installation de Magento.

Exécutez les commandes suivantes pour télécharger le binaire Composer. Magento nécessite Composer 2.2 LTS, nous avons donc modifié la commande en conséquence.

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php composer-setup.php --2.2
$ php -r "unlink('composer-setup.php');"

Installez Composer en déplaçant le binaire vers le répertoire /usr/local/bin.

$ sudo mv composer.phar /usr/local/bin/composer

Vérifiez l'installation en vérifiant sa version.

$ composer --version
Composer version 2.2.21 2023-02-15 13:07:40

Étape 4 - Installer MariaDB

Debian 12 n'est pas livré avec MySQL par défaut et n'a pas encore publié de package officiel pour celui-ci. Par conséquent, nous utiliserons MariaDB pour cela. MariaDB n'a pas non plus de package officiel pour Debian 12, mais Debian est livré avec. Par conséquent, installez-le à l’aide de la commande suivante.

$ sudo apt install mariadb-server

Vérifiez la version de MySQL.

$ mysql --version
mysql  Ver 15.1 Distrib 10.11.3-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

Désormais, cette version de MariaDB n'est pas prise en charge par Magento et le package officiel MariaDB pour Debian 12 n'est pas disponible pour le moment. Nous allons donc poursuivre l’installation et utiliser une solution de contournement ultérieurement pour contourner la restriction.

Exécutez le script d'installation sécurisée MariaDB.

$ sudo mysql_secure_installation

Il vous sera demandé le mot de passe root. Appuyez sur Entrée car nous n'avons défini aucun mot de passe pour cela.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):

Ensuite, il vous sera demandé si vous souhaitez passer à la méthode d'authentification par socket Unix. Le plugin unix_socket vous permet d'utiliser les informations d'identification de votre système d'exploitation pour vous connecter au serveur MariaDB. Puisque vous disposez déjà d'un compte root protégé, entrez n pour continuer.

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n

Ensuite, il vous sera demandé si vous souhaitez modifier votre mot de passe root. Sur Debian 12, le mot de passe root est étroitement lié à la maintenance automatisée du système, il doit donc être laissé tel quel. Tapez n pour continuer.

 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n

Ensuite, certaines questions vous seront posées pour améliorer la sécurité de MariaDB. Tapez Y pour supprimer les utilisateurs anonymes, interdire les connexions root à distance, supprimer la base de données de test et recharger les tables de privilèges.

 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Vous pouvez accéder au shell MariaDB en tapant sudo mysql ou sudo mariadb sur la ligne de commande.

Étape 5 - Configurer MariaDB

Connectez-vous au shell MariaDB.

$ sudo mysql

Créez une base de données pour Magento.

mysql> CREATE DATABASE magento;

Créez un compte utilisateur SQL.

mysql> CREATE USER 'magentouser'@'localhost' IDENTIFIED BY 'Your_password2';

Accordez tous les privilèges sur la base de données à l'utilisateur.

mysql> GRANT ALL PRIVILEGES ON magento.* TO 'magentouser'@'localhost';

Puisque nous ne modifions pas l'utilisateur root, vous devez créer un autre utilisateur SQL pour effectuer des tâches administratives qui utilisent l'authentification par mot de passe. Choisissez un mot de passe fort pour celui-ci.

MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;

Vider les privilèges utilisateur.

mysql> FLUSH PRIVILEGES;

Quittez le shell.

mysql> exit

Étape 6 - Installer Nginx

Debian 12 est livré avec une ancienne version de Nginx. Pour installer la dernière version, vous devez télécharger le référentiel officiel Nginx.

Importez la clé de signature de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Ajoutez le référentiel pour la version stable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Mettez à jour les référentiels système.

$ sudo apt update

Installez Nginx.

$ sudo apt install nginx

Vérifiez l'installation. Sur les systèmes Debian, la commande suivante ne fonctionnera qu'avec sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Démarrez le serveur Nginx.

$ sudo systemctl start nginx

Vérifiez l'état du service.

? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Wed 2023-08-02 06:45:52 UTC; 14s ago
       Docs: https://nginx.org/en/docs/
    Process: 18326 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 18327 (nginx)
      Tasks: 2 (limit: 2315)
     Memory: 1.8M
        CPU: 11ms
     CGroup: /system.slice/nginx.service
             ??18327 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??18328 "nginx: worker process"

Étape 7 - Installer SSL

Nous devons installer Certbot pour générer le certificat SSL. Vous pouvez soit installer Certbot à l'aide du référentiel Debian, soit récupérer la dernière version à l'aide de l'outil Snapd. Nous utiliserons la version Snapd.

Debian 12 n'est pas fourni avec Snapd installé. Installez le package Snapd.

$ sudo apt install snapd

Exécutez les commandes suivantes pour vous assurer que votre version de Snapd est à jour.

$ sudo snap install core && sudo snap refresh core

Installez Certbot.

$ sudo snap install --classic certbot

Utilisez la commande suivante pour vous assurer que la commande Certbot peut être exécutée en créant un lien symbolique vers le répertoire /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Vérifiez si Certbot fonctionne correctement.

$ certbot --version
certbot 2.6.0

Exécutez la commande suivante pour générer un certificat SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d magento.example.com

La commande ci-dessus téléchargera un certificat dans le répertoire /etc/letsencrypt/live/magento.example.com sur votre serveur.

Générez un certificat de groupe Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Vérifiez le service de planification de renouvellement Certbot.

$ sudo systemctl list-timers

Vous trouverez snap.certbot.renew.service comme l'un des services dont l'exécution est planifiée.

NEXT                        LEFT          LAST                        PASSED        UNIT                      ACTIVATES
.....
Wed 2023-08-02 08:09:00 UTC 9h left       Wed 2023-08-02 07:39:06 UTC 2h 59min ago  snap.certbot.renew.timer  snap.certbot.renew.service
Thu 2023-08-03 06:41:11 UTC 9h left       Wed 2023-08-02 06:24:33 UTC 10h ago       apt-daily-upgrade.timer   apt-daily-upgrade.service
Wed 2023-08-02 14:06:00 UTC 11h left      Sun 2021-11-14 02:03:02 UTC 5min ago      apt-daily.timer           apt-daily.service

Effectuez un essai à sec du processus pour vérifier si le renouvellement SSL fonctionne correctement.

$ sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes prêt. Votre certificat se renouvellera automatiquement.

Étape 8 - Installer Elasticsearch

Elasticsearch est utilisé par Magento pour les recherches de produits. Nous installerons Elasticsearch 7.x en utilisant son référentiel officiel puisque c'est la version compatible avec Magento.

Importez la clé GPG d'Elasticsearch.

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

Ajoutez le référentiel Elasticsearch.

$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

Mettez à jour la liste des référentiels du système.

$ sudo apt update

Installez Elasticsearch.

$ sudo apt install elasticsearch

Elasticsearch utilise beaucoup de mémoire. Vous devez limiter son utilisation en fonction de la taille de votre serveur. Créez le fichier /etc/elasticsearch/jvm.options.d/memory.options et ouvrez-le pour le modifier.

$ sudo nano /etc/elasticsearch/jvm.options.d/memory.options

Collez-y le code suivant. Modifiez les valeurs en fonction de la taille de votre serveur. La première valeur fait référence à la mémoire initiale et la seconde à la mémoire maximale disponible. Pour 1 Go et plus, utilisez le format -Xms1g.

-Xms512m
-Xmx784m

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité. Cela configure Elasticsearch pour utiliser 1 Go de RAM. Vous pouvez utiliser n'importe quelle valeur si nécessaire.

Démarrez et activez le service.

$ sudo systemctl enable elasticsearch --now

Vérifiez si Elasticsearch fonctionne.

$ curl http://localhost:9200

Vous devriez voir le résultat suivant.

{
  "name" : "magento",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "LNFRevgvQIOGeWCdtvc7bA",
  "version" : {
    "number" : "7.17.12",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "e3b0c3d3c5c130e1dc6d567d6baef1c73eeb2059",
    "build_date" : "2023-07-20T05:33:33.690180787Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Étape 9 - Installer le serveur Redis

Magento utilise Redis pour le stockage de session et de cache. C'est entièrement facultatif et vous pouvez utiliser la base de données pour le stockage de session. Mais Redis fait un meilleur travail. La dernière version de Magento fonctionne avec Redis 7.0. Debian est livré avec Redis 6.0, nous utiliserons donc le référentiel Redis pour l'installation.

Importez la clé officielle Redis GPG.

$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

Ajoutez le référentiel APT à votre liste de sources.

$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

Mettez à jour la liste des référentiels système.

$ sudo apt update

Exécutez la commande suivante pour installer le serveur Redis.

$ sudo apt install redis

Confirmez la version Redis.

$ redis-server -v
Redis server v=7.0.12 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=d706905cc5f560c1

Vérifions la connexion au service en utilisant la commande suivante.

$ redis-cli

Vous serez basculé vers le shell Redis.

La première étape consiste à définir le mot de passe de l'utilisateur par défaut de Redis. Remplacez Your_Redis_Password par un mot de passe fort de votre choix. Assurez-vous de préfixer le mot de passe avec le caractère >.

127.0.0.1:6379> acl setuser default >Your_Redis_Password

Testez l'authentification Redis.

127.0.0.1:6379> AUTH Your_Redis_Password
OK

Pingez le service.

127.0.0.1:6379> ping
PONG

Quittez le service en tapant exit.

Étape 10 - Téléchargez Magento

Créez un répertoire racine Web pour Magento.

$ sudo mkdir /var/www/magento -p

Donnez les droits sur l'annuaire Magento à l'utilisateur actuel.

$ sudo chown $USER:$USER /var/www/magento/ -R

Avant d'aller plus loin, vous devez utiliser les clés d'authentification requises par le référentiel Magento. Visitez le site Web https://account.magento.com/ et vous obtiendrez la page suivante vous demandant de vous connecter à l'aide de votre Adobe ID.

Cliquez sur le bouton Connectez-vous avec Adobe ID pour accéder à la page suivante.

Si vous disposez d'un Adobe ID, saisissez vos informations d'identification pour continuer ou vous pouvez créer un compte ici. Une fois que vous avez créé votre compte et connecté, ouvrez l'URL https://marketplace.magento.com/customer/accessKeys/. Vous pouvez également accéder à cette page en visitant votre profil et en cliquant sur le lien Clés d'accès.

Cliquez sur le bouton Créer une nouvelle clé d'accès pour créer votre clé d'authentification. Donnez un nom à votre clé pour identification.

Notez les clés publique et privée pour l'étape suivante.

Créez le fichier ~/.config/composer/auth.json et ouvrez-le pour le modifier.

$ nano ~/.config/composer/auth.json

Collez-y le code suivant. Utilisez la clé publique pour le nom d'utilisateur et la clé privée pour le mot de passe.

{
"http-basic": {
        "repo.magento.com": {
                   "username": "<public_key>",
                   "password": "<private_key>"
              }

}
}

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Basculez vers le répertoire /var/www/magento.

$ cd /var/www/magento

Créez le projet Magento. Notez le point à la fin de la commande. Il fait référence au répertoire actuel dans lequel la commande est exécutée.

$ composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .

Vous devriez voir une sortie similaire.

Creating a "magento/project-community-edition" project at "./"
Installing magento/project-community-edition (2.4.6-p1)
  - Downloading magento/project-community-edition (2.4.6-p1)
  - Installing magento/project-community-edition (2.4.6-p1): Extracting archive
Created project in /var/www/magento/.
Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
Lock file operations: 565 installs, 0 updates, 0 removals
  - Locking 2tvenom/cborencode (1.0.2)
  - Locking adobe-commerce/adobe-ims-metapackage (2.2.0)
  - Locking allure-framework/allure-codeception (v2.3.0)
  - Locking allure-framework/allure-php-commons (v2.3.1)
  - Locking allure-framework/allure-phpunit (v2.1.0)
...............................................

Il y a un problème avec l'exemple de fichier de configuration Nginx fourni par Adobe. Exécutez la commande suivante pour résoudre ce problème.

$ sed -i 's/php-fpm:9000/fastcgi_backend/g' /var/www/magento/nginx.conf.sample

Exécutez les commandes suivantes pour définir les autorisations de fichiers et rendre le binaire Magento exécutable. Définissez également le propriétaire du répertoire Magento sur l'utilisateur Nginx afin qu'il puisse accéder au site Web.

$ sudo find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +
$ sudo find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
$ sudo chown -R :nginx .
$ sudo chmod u+x bin/magento

Étape 11 - Installer Magento

Avant de procéder à l'installation, nous devons modifier le programme d'installation afin qu'il nous permette d'utiliser MariaDB 10.11.3 qui n'est actuellement pas pris en charge par Magento. Magento prend jusqu'à présent en charge les versions MariaDB 10.2-10.6.

Ouvrez le fichier /var/www/magento/app/etc/di.xml pour le modifier.

$ sudo nano /var/www/magento/app/etc/di.xml

Recherchez la ligne suivante.

<item name="MariaDB-(10.2-10.6)" xsi:type="string">^10\.[2-6]\.</item>

Remplacez-le par le code suivant.

<item name="MariaDB-(10.2-10.11)" xsi:type="string">^10\.([2-9]|10|11)\.</item>

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Assurez-vous que vous êtes dans le répertoire Magento.

$ cd /var/www/magento

Exécutez la commande suivante pour installer Magento.

$ bin/magento setup:install \
--base-url=http://magento.example.com \
--use-secure=1 \
--base-url-secure=https://magento.example.com \
--use-secure-admin=1 \
--db-host=localhost \
--db-name=magento \
--db-user=magentouser \
--db-password=Your_password2 \
--admin-firstname=Navjot \
--admin-lastname=Singh \
[email  \
--admin-user=navjot \
--admin-password=admin_password \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1 \
--elasticsearch-host=http://127.0.0.1 \
--elasticsearch-port=9200 \
--session-save=redis \
--session-save-redis-db=0 \
--session-save-redis-password=redis_password \
--cache-backend=redis \
--cache-backend-redis-db=2 \
--cache-backend-redis-password=redis_password \
--page-cache=redis \
--page-cache-redis-db=4 \
--page-cache-redis-password=redis_password

Une fois le processus terminé, vous obtiendrez un résultat similaire.

.......
[SUCCESS]: Magento installation complete.
[SUCCESS]: Magento Admin URI: /admin_11xb2x
Nothing to import.

Notez l'URI Admin dont vous aurez besoin plus tard pour accéder au panneau d'administration.

Créez des tâches cron Magento.

$ php bin/magento cron:install

Vérifiez la tâche cron.

$ crontab -l

Vous devriez voir le résultat suivant.

#~ MAGENTO START d1957f62aa710cc367525c9ec68dd7456d4311756b5aa37d2143c4a98b25318c
* * * * * /usr/bin/php8.2 /var/www/magento/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/magento/var/log/magento.cron.log
#~ MAGENTO END d1957f62aa710cc367525c9ec68dd7456d4311756b5aa37d2143c4a98b25318c

Étape 12 - Configurer PHP-FPM

Ouvrez le fichier /etc/php/8.2/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Nous devons définir l'utilisateur/groupe Unix de processus PHP sur nginx. Recherchez les lignes user=www-data et group=www-data dans le fichier et remplacez-les par nginx.

...
; Unix user/group of the child processes. This can be used only if the master
; process running user is root. It is set after the child process is created.
; The user and group can be specified either by their name or by their numeric
; IDs.
; Note: If the user is root, the executable needs to be started with
;       --allow-to-run-as-root option to work.
; Default Values: The user is set to master process running user by default.
;                 If the group is not set, the user's group is used.
user = nginx
group = nginx
...

Recherchez les lignes listen.owner=www-data et listen.group=www-data dans le fichier et remplacez-les par nginx.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Augmentez le temps d'exécution de PHP-FPM et PHP-CLI à 180 secondes.

$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 180/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 180/' /etc/php/8.2/cli/php.ini

Augmentez la limite de mémoire pour PHP-FPM de 128 Mo à 256 Mo. Vous pouvez augmenter la limite en fonction de la taille de votre serveur et de vos exigences.

$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.2/fpm/php.ini

Magento définit par défaut la limite de taille de fichier pour la bibliothèque multimédia à 2 Mo. Exécutez les commandes suivantes pour augmenter la limite de taille du fichier à 25 Mo.

$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 25M/g' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 25M/g' /etc/php/8.2/fpm/php.ini

Activez la compression Zlib.

$ sudo sed -i 's/zlib.output_compression = Off/zlib.output_compression = On/g' /etc/php/8.2/fpm/php.ini

Redémarrez le service PHP-FPM.

$ sudo systemctl restart php8.2-fpm

Changez le groupe du répertoire des sessions PHP en Nginx.

$ sudo chgrp -R nginx /var/lib/php/sessions

Étape 13 - Configurer Nginx

Ouvrez le fichier /etc/nginx/nginx.conf pour le modifier.

$ sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Créez et ouvrez le fichier /etc/nginx/conf.d/magento.conf pour le modifier.

$ sudo nano /etc/nginx/conf.d/magento.conf

Collez-y le code suivant.

upstream fastcgi_backend {
  server  unix:/run/php/php8.2-fpm.sock;
}

server {
  # Redirect any http requests to https
  listen 80;
  listen [::]:80;
  server_name magento.example.com;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name magento.example.com;

  set $MAGE_ROOT /var/www/magento;
  include /var/www/magento/nginx.conf.sample;
  client_max_body_size 25m;

  access_log /var/log/nginx/magento.access.log;
  error_log  /var/log/nginx/magento.error.log;

  # TLS configuration
  ssl_certificate /etc/letsencrypt/live/magento.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/magento.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/magento.example.com/chain.pem;
  ssl_protocols TLSv1.2 TLSv1.3;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:50m;
  ssl_session_timeout 1d;

  # OCSP Stapling ---
  # fetch OCSP records from URL in ssl_certificate and cache them
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;
}

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité une fois terminé.

Magento est livré avec un modèle de configuration Nginx sur /var/www/magento/nginx.conf.sample que nous avons inclus dans notre configuration. La variable $MAGE_ROOT pointe vers le répertoire racine Web de Magento que nous avons défini dans notre fichier et est utilisée dans l'exemple de fichier de configuration.

Vérifiez la syntaxe du fichier de configuration Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Redémarrez le service Nginx.

$ sudo systemctl restart nginx

Ouvrez le site Web Magento via l'URL https://magento.example.com. Vous devriez voir la page suivante.

Si le CSS et le JS ne se chargent pas pour vous, exécutez les commandes suivantes.

$ cd /var/www/magento
$ php bin/magento setup:static-content:deploy -f
$ php bin/magento indexer:reindex

Étape 14 - Désactiver l'authentification à deux facteurs

Avant d'accéder au panneau d'administration, nous devons désactiver l'authentification à deux facteurs qui est activée par défaut. Magento essaie d'envoyer du courrier via sendmail pour activer l'authentification à deux facteurs lors de l'installation, mais comme nous ne l'avons pas configuré, la seule façon d'accéder au tableau de bord est d'abord de désactiver la fonctionnalité.

Si sendmail est configuré sur votre serveur pour envoyer des e-mails, vous pouvez ignorer cette étape. Pour désactiver l'authentification à deux facteurs, nous devons désactiver deux des modules de Magento à l'aide des commandes suivantes.

$ php /var/www/magento/bin/magento module:disable Magento_AdminAdobeImsTwoFactorAuth
$ php /var/www/magento/bin/magento module:disable Magento_TwoFactorAuth

Exécutez la commande suivante pour créer les classes.

$ php /var/www/magento/bin/magento setup:di:compile

Nettoyez également le cache.

$ php /var/www/magento/bin/magento c:c

Étape 15 - Accédez au portail d'administration

Vous devrez ouvrir le portail d'administration en utilisant l'URI que le script d'installation de Magento vous a fourni. Si vous avez oublié de le noter ou si vous l'avez perdu, vous pouvez récupérer l'URI à l'aide de la commande suivante.

$ php /var/www/magento/bin/magento info:adminuri
Admin URI: /admin_11xb2x

Ouvrez l'URL https://magento.example.com/admin_11xb2x dans votre navigateur et vous obtiendrez l'écran suivant.

Saisissez vos informations d'identification d'administrateur fournies lors de l'installation et cliquez sur le bouton Connexion pour continuer. Vous serez accueilli avec l’écran suivant.

Vous recevrez une fenêtre contextuelle demandant l'autorisation à Adobe de collecter des données d'utilisation. Cliquez sur le bouton Ne pas autoriser pour continuer.

L'étape suivante consiste à configurer SMTP pour les e-mails afin que nous puissions réactiver l'authentification à deux facteurs. Visitez le menu Magasins >> Configuration.

Développez le Menu avancé sur le côté gauche et cliquez sur l'option Systèmes pour ouvrir la page des paramètres de messagerie.

Décochez la case Utiliser la valeur système devant les options Transport, Hôte et Port. Cliquez sur le menu déroulant Transport et sélectionnez SMTP. Pour notre didacticiel, nous utilisons Amazon SES comme logiciel de messagerie.

Entrez votre hôte SMTP, 587 comme port, nom d'utilisateur et mot de passe, définissez Auth sur LOGIN et définissez SSL sur TLS dans les champs donnés. Cliquez sur le bouton Enregistrer la configuration lorsque vous avez terminé. Maintenant que nous avons configuré les paramètres de messagerie, l'étape suivante consiste à configurer les identifiants de messagerie du magasin afin que nous puissions les tester.

Faites défiler vers le haut et développez le menu Général sur la même page, puis sélectionnez l'option Enregistrer les adresses e-mail.

Décochez les champs Email de l'expéditeur par défaut et saisissez les identifiants de messagerie de votre boutique. Cliquez sur le bouton Enregistrer la configuration lorsque vous avez terminé. De même, ouvrez l'écran Contacts et effectuez les mêmes modifications, puis cliquez sur le bouton Enregistrer la configuration pour terminer.

La modification des options d'administrateur peut affecter le cache et vous recevrez un avertissement. Exécutez la commande suivante pour vider le cache manuellement.

$ php /var/www/magento/bin/magento c:c

Pour tester les e-mails, visitez la page vitrine et ouvrez la page Contactez-nous. Vous pouvez utiliser l'URL https://magento.example.com/contact/ directement pour y accéder. Envoyez un message test et cliquez sur le bouton Envoyer. Vous devriez recevoir un mail similaire.

Étape 16 - Activer et configurer l'authentification à deux facteurs

Maintenant que nous avons activé le courrier SMTP, il est temps de réactiver l'authentification à deux facteurs. Exécutez les commandes suivantes pour activer l'authentification à deux facteurs.

$ php /var/www/magento/bin/magento module:enable Magento_AdminAdobeImsTwoFactorAuth
$ php /var/www/magento/bin/magento module:enable Magento_TwoFactorAuth

Mettez à niveau la configuration des modules.

$ php /var/www/magento/bin/magento setup:upgrade

Exécutez la commande suivante pour créer les classes.

$ php /var/www/magento/bin/magento setup:di:compile

Nettoyez également le cache.

$ php /var/www/magento/bin/magento c:c

Si vous ne parvenez pas à accéder à la zone d'administration, exécutez également les commandes suivantes.

Forcez le déploiement du contenu statique.

$ php /var/www/magento/bin/magento setup:static-content:Deploy -f

Définissez les autorisations du fichier.

$ cd /var/www/magento
$ sudo find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +
$ sudo find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
$ sudo chown -R :nginx .

Visitez le portail d'administration et vous obtiendrez l'écran suivant.

Nous utiliserons la méthode Google Authenticator. Vous pouvez utiliser une clé matérielle si vous en avez. La méthode Google Authenticator fonctionne avec n'importe quelle application TOTP, notamment Authy, 1Password, Bitwarden, Microsoft Authenticator, etc. Cliquez sur le bouton Appliquer pour continuer.

Sur la page suivante, vous obtiendrez le code QR à scanner avec votre application 2FA. Saisissez les détails dans votre application et copiez le code généré dans le champ Code d'authentification. Cliquez sur le bouton Confirmer pour accéder au tableau de bord d'administration.

Conclusion

Ceci conclut notre tutoriel sur l'installation du site de commerce électronique Magento sur un serveur Debian 12 avec un serveur Nginx et Elasticsearch. Si vous avez des questions, postez-les dans les commentaires ci-dessous.

Articles connexes: