Installation d’un Site Magento sur serveur

Image d'un ordinateur posé sur une table avec sur l'écran le logo Magento

Dans ce troisième article, je vais vous guider à travers l’installation et la configuration d’un site Magento sur un serveur VPS (Virtual Private Server). Ce guide détaillé couvre toutes les étapes nécessaires pour déployer Magento de manière sécurisée et optimale. Suivez attentivement chaque étape pour assurer une installation réussie.

Prérequis

Avant de commencer, assurez-vous de disposer de :

  • Un serveur Linux (on utilise Ubuntu 24.04 dans ce guide).
  • L’utilisateur du système est ubuntu.
  • Un accès SSH au serveur avec des privilèges sudo.
  • Une stack technologique déjà configurée comprenant Apache, PHP, MySQL, Elasticsearch, RabbitMQ, Redis et Composer (voir les articles précédents pour plus de détails).
  • Un nom de domaine dont l’entrée A de la zone dns pointe vers l’adresse ip de votre serveur, ici monsitemagento.com

Création du Répertoire pour Magento

Commencez par créer un répertoire dédié pour votre installation Magento.

sudo mkdir /var/www/magento

Configuration du Virtual Host Apache

On va créer un Virtual Host Apache pour notre site web.

Navigation vers le Répertoire des Sites Disponibles

Accédez au répertoire où sont stockés les fichiers de configuration des sites disponibles d’Apache.

cd /etc/apache2/sites-available

ls -l

Création d’un Fichier de Configuration pour Magento

Copiez le fichier de configuration par défaut et créez un nouveau fichier spécifique à Magento.

sudo cp 000-default.conf demo.conf

sudo nano magento.conf

Modification du Fichier demo.conf

Modifiez le fichier magento.conf en y ajoutant les directives suivantes. Remplacez monsitemagento.com par votre propre nom de domaine et /var/www/magento/ par le chemin souhaité pour votre site Magento.

<VirtualHost *:80>
    ServerName monsitemagento.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/magento
    AllowEncodedSlashes NoDecode

    <Directory "/var/www/magento/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Activation du Virtual Host

Activez le nouveau Virtual Host et rechargez Apache pour appliquer les changements.

sudo a2ensite magento

sudo systemctl reload apache2

Vérification des DNS

Assurez-vous que l’entrée A de votre domaine (monsitemagento.com) pointe bien vers l’adresse IP de votre serveur VPS. Vous pouvez vérifier cela via votre gestionnaire de domaine ou en utilisant des outils comme What’s My DNS.

Obtention d’un Certificat SSL avec Certbot

Sécurisez votre site Magento en utilisant Certbot pour obtenir un certificat SSL de Let’s Encrypt.

sudo certbot --apache

Suivez les instructions à l’écran :

  1. Entrez votre adresse email pour recevoir les notifications concernant le renouvellement des certificats (si pas encore fait).
  2. Acceptez les termes du service en répondant Y.
  3. Répondez N si vous ne souhaitez pas partager votre adresse email avec l’Electronic Frontier Foundation.
  4. Choisissez le numéro correspondant à votre domaine (monsitemagento.com) pour configurer automatiquement HTTPS.

Vérification de l’Obtention du Certificat

Assurez-vous que Certbot a correctement configuré le certificat SSL en vérifiant les messages de succès affichés à l’écran. Vous pouvez également tester le renouvellement automatique avec la commande suivante :

sudo certbot renew --dry-run

Configuration des Permissions

Il est essentiel de configurer correctement les permissions des fichiers et répertoires pour assurer la sécurité et le bon fonctionnement de Magento.

Ajout de l’Utilisateur au Groupe www-data

Ajoutez votre utilisateur (ubuntu) au groupe www-data pour pouvoir éxecuter des commandes php bin/magento… sans erreurs.

sudo usermod -aG www-data ubuntu

sudo reboot

Attribution des Permissions Correctes

Assignez les bonnes permissions au répertoire de Magento. Ici le propriétaire sera l’utilisateur Apache (www-data et le groupe celui de notre utilisateur ubuntu).

sudo chown www-data:ubuntu /var/www/magento

sudo chmod 774 /var/www/magento

Création du projet Magento via Composer

Magento utilise Composer, un gestionnaire de dépendances pour PHP, pour gérer ses paquets et bibliothèques.

Obtention des Clés d’Authentification Magento

Pour télécharger Magento, vous aurez besoin de vos clés publiques et privées depuis le Magento Marketplace. Connectez-vous à votre compte et récupérez vos clés API.

Création du projet Magento avec Composer

Naviguez vers le répertoire de votre site Magento et créez le projet Magento. On utilise la Community Edition qui est la version open-source, Adobe Commerce, anciennement appelé Magento Enterprise est la version sous licence.

cd /var/www/magento

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

Lors de l’exécution de cette commande, Composer vous demandera vos identifiants Magento Marketplace. Utilisez vos clés publique et privée respectivement pour le nom d’utilisateur et le mot de passe.

Vous serez également invité à stocker les informations d’authentification dans le fichier auth.json. Répondez Y pour les sauvegarder.

Composer téléchargera et installera toutes les dépendances nécessaires pour Magento.

Configuration des Permissions Post-Installation

Après la création du projet, configurez les permissions des fichiers et répertoires pour assurer la sécurité. Ces permissions sont très importantes sinon vous aurez des erreurs lors du build entre autre.

find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +

find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +

sudo chown -R ubuntu:www-data .

chmod u+x bin/magento

Installation de Magento

Lancez l’installation de Magento en utilisant la commande suivante. Remplacez les paramètres par vos propres informations.

Nous allons prendre le temps de décrypter cette commande, sa bonne compréhension est cruciale pour le bon déroulement.

php bin/magento setup:install \
--base-url="https://magento.pierrebultez.com/" \
--base-url-secure="https://magento.pierrebultez.com/" \
--db-host="127.0.0.1" \
--db-name="demo" \
--db-user="user" \
--db-password="password" \
--admin-firstname="Pierre" \
--admin-lastname="Bultez" \
--admin-email="contact@pierrebultez.com" \
--admin-user="admin" \
--admin-password="aC1fHNfaGd0ac06NEJ0y" \
--language="fr_FR" \
--currency="EUR" \
--timezone="Europe/Paris" \
--use-rewrites="1" \
--search-engine="elasticsearch7" \
--elasticsearch-host="localhost" \
--elasticsearch-port=9200 \
--elasticsearch-enable-auth="false" \
--elasticsearch-index-prefix=magento_demo \
--elasticsearch-timeout=15 \
--amqp-host="localhost" \
--amqp-port="5672" \
--amqp-user="user" \
--amqp-password="password" \
--amqp-virtualhost="/"
  • –base-url = url de base du site
  • –base-url-secure = url sécurisée du site
  • –db-host = serveur de la base de données (pour nous localhost ou 127.0.0.1
  • –db-name = nom de la base de données
  • –db-user = utilisateur de la base de données
  • –db-password = mot de passe de la base de données
  • –admin-firstname = prénom du compte administrateur Magento
  • –admin-lastname = nom de compte administrateur Magento
  • –admin-email = email de l’administrateur
  • –admin-user = identifiant du compte administrateur
  • –admin-password = mot de passe du compte administrateur
  • –language = language (bien que vous verrez Magento sera en Anglais, nous aborderons la traduction dans un autre article)
  • –currency = devise utilisée sur la boutique
  • –timezone = fuseau horaire de la boutique
  • –use-rewrites = utiliser les réécritures Apache (toujours 1)
  • –search-engine = outil de base de données pour indéxer le catalogue et permettre une recherche, pour nous Elasticsearch)
  • –elasticsearch-host = adresse du serveur Elasticsearch (pour nous localhost ou 127.0.0.1)
  • –elasticsearch-port = port utilisé par Elasticsearch (par defaut 9200)
  • –elasticsearch-enable-auth = Activer ou non l’authentification par user/pass lors de la connection à Elasticsearch (pour notre configuration ce sera non)
  • –elasticsearch-index-prefix = index de la base de données Elasticsearch
  • –elasticsearch-timeout = timeout Elasticsearch (laisser par défaut)
  • –amqp-host = adresse du serveur RabbitMQ (dans notre cas localhost ou 127.0.0.1)
  • –amqp-port = port utilisé par RabbitMQ (5672 par défaut)
  • –amqp-user = utilisateur RabbitMQ
  • –amqp-password = motde passe de l’utilisateur RabbitMQ
  • –amqp-virtualhost = virtual host RabbitMQ que nous allons utiliser (dans notre cas on va utiliser / qui est celui par defaut)

Confirmation de l’Installation

Une fois l’installation terminée, vous devriez voir un message de succès indiquant que Magento a été installé correctement. Notez l’URI d’administration fourni ce sera l’adresse de votre backoffice (https://monsitemagento.com/admin_hga8x3c dans notre cas).

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

Désactivation des Modules de Sécurité Adobe

Par défaut Adobe Commerce / Magento utilise un système d’authentification à deux facteurs pour se connecter.
Notre serveur n’étant pas configuré pour l’envoi d’emails nous ne pourrons pas nous connecter. Alors on désactive les modules en question.
Si votre serveur est capable d’envoyer des emailsv (PHPmailer par exemple) alors vous pouvez laisser activer pour plus de sécurité.

Toutes les commandes php bin/magento ou bin/magento sont à executer dans le dossier d’installation du projet (var/www/magento dans notre cas).

bin/magento module:disable Magento_AdminAdobeImsTwoFactorAuth Magento_TwoFactorAuth

Passage en Mode Développeur

Configurez Magento en mode développeur pour faciliter le développement et le débogage.

php bin/magento deploy:mode:set developer

php bin/magento setup:upgrade

bin/magento indexer:reindex

bin/magento cache:clean && bin/magento cache:flush
  • php bin/magento deploy:mode:set developer = activation du mode développeur
  • php bin/magento setup:upgrade = mise à jour des modules Magento
  • bin/magento indexer:reindex = réindexation de tous les index
  • bin/magento cache:clean && bin/magento cache:flush = nettoyage et purge du cache Magento

Validation de l’Installation

Accès au Frontend et Backend

Accédez à votre site Magento via l’URL https://monsitemagento.com/ pour vérifier le frontend.

Et à l’URI d’administration https://monsitemagento.com/admin_hga8x3c pour accéder au backend avec les identifiants que vous avez configurés.

Vérification des Fichiers et Permissions

Assurez-vous que tous les fichiers et permissions sont correctement configurés pour garantir la sécurité et les performances optimales de votre site Magento.

Configuration des Cron Jobs

Les tâches cron sont essentielles pour le bon fonctionnement de Magento, notamment pour la réindexation, les newsletters, les e-mails et les plans de site.

Installation des Cron Jobs

Installez les tâches cron en utilisant les commandes suivantes :

bin/magento cron:install

crontab -l

bin/magento cron:run

bin/magento cron:run --group default
  • bin/magento cron:install = installe les tâches cron par défaut
  • crontab -l = liste les tâches cron activées
  • bin/magento cron:run = lance les tâches cron
  • bin/magento cron:run –group default = lance les tâches cron pour le groupe par défaut

Il faut executer deux fois chaque commandes cron:run, une fois pour découvrir les tâches à executer, une seconde fois pour les executer. Après les tâches se feront automatiquement aux intervalles données.

Gestion des Tâches Cron

Magento utilise plusieurs groupes de tâches cron, notamment default, index, consumers, staging et catalog_event. Assurez-vous que ces tâches sont correctement configurées pour éviter les problèmes de performance et de fonctionnalité.

Résolution des Erreurs Cron

Si vous rencontrez des erreurs, par exemple :

One or more indexers are invalid. Make sure your Magento cron job is running.

Vérifiez que les cron jobs sont bien en cours d’exécution et qu’ils sont correctement configurés.

Vous pouvez réindexer manuellement avec la commande bin/magento indexer:reindex

Résolution des Problèmes Spécifiques

Correction d’une Exception dans le Fichier Calendar.php

Si vous rencontrez l’exception suivante :

Exception #0 (Exception): Warning: Trying to access array offset on null in /var/www/magento/vendor/magento/framework/View/Element/Html/Calendar.php on line 114

Modifiez les lignes problématiques dans le fichier Calendar.php :

sudo nano +114 /var/www/magento/vendor/magento/framework/View/Element/Html/Calendar.php

Remplacez les deux lignes concernées par le code suivant :

$this->assign('am', $this->encoder->encode($localeData['calendar']['gregorian']['AmPmMarkersAbbr'][0] ?? null));

$this->assign('pm', $this->encoder->encode($localeData['calendar']['gregorian']['AmPmMarkersAbbr'][1] ?? null));

Conclusion

Vous avez maintenant une boutique Magento entièrement fonctionnelle et sécurisée sur votre serveur.

Cette configuration de base est optimisée pour la performance et la sécurité, vous offrant une plateforme solide pour développer et gérer votre boutique en ligne. N’hésitez pas à explorer davantage les options de personnalisation et les extensions disponibles pour enrichir votre site selon vos besoins spécifiques.

Pour toute question ou assistance supplémentaire, je vous invite à me contacter directement.