Le e-commerce, également connu sous le nom de « commerce sur Internet », se réfère à la vente et à l’achat de biens ou de services via Internet et représente un marché en constante évolution depuis la crise de la COVID-19.

Avec l’évolution des besoins et des habitudes des consommateurs, de plus en plus d’entreprises ont décidé de déployer des boutiques en ligne pour vendre leurs marchandises aux clients de manière pratique et sans contact, et ce, 24 h/24.

Outre les grandes plateformes de vente au détail, de nombreuses boutiques spécialisées de petite et moyenne tailles occupent une place non négligeable sur le marché, en fournissant tous types de services et de produits à leurs clients.

Pendant la crise de la COVID-19, le monde a été témoin des impacts sans précédent sur le secteur du e-commerce et a vu émerger une nouvelle tendance dans ce domaine : de nouveaux clients ont commencé à faire leurs achats en ligne et les clients existants se sont mis à dépenser des sommes plus importantes et plus fréquemment lors de leurs commandes en ligne.

En 2020, les consommateurs sont connectés à Internet à toute heure, ont un accès illimité aux informations associées à un produit et sont prêts à faire leurs achats à n’importe quel moment de la journée.

Alors que la vente au détail traditionnelle subit un déclin constant des ventes, le secteur du e-commerce, lui, est en pleine expansion.

Pour suivre le rythme en matière de développement des solutions e-commerce, la plupart de ces détaillants traditionnels commencent à évoluer vers une extension de leurs activités à la vente en ligne, tout en assurant un traitement omnicanal pour rester compétitifs dans ce nouvel environnement.

Pour les petites et moyennes entreprises, le développement d’un système de vente en ligne comme PrestaShop représente une solution. PrestaShop est une plateforme de e-commerce open source de type freemium, utilisée par 300 000 boutiques à travers le monde et disponible dans 60 langues. Cette solution est très riche en fonctionnalités et offre aux clients une interface de boutique puissante et réactive. Elle est associée à une interface back-end intuitive pour gérer la boutique, les produits, les commandes et les clients, pour ne nommer que quelques fonctions.

Dans ce tutoriel, vous apprendrez comment déployer votre propre boutique e-commerce PrestaShop sur un serveur dédié Scaleway Dedibox, fonctionnant sur Ubuntu 20.04 LTS.

Prérequis :

  • Vous avez un compte et êtes connecté à console.scaleway.com
  • Vous avez configuré votre clé SSH
  • Vous disposez d’un serveur dédié Dedibox fonctionnant sur Ubuntu 20.04 (Focal Fossa)
  • Vous détenez des privilèges sudo ou avez accès à l’utilisateur root
  • Vous avez configuré un enregistrement A pointant vers l’adresse IP de votre serveur

Installation de PrestaShop

  1. Mettez le système à jour et à niveau. Ensuite, installez le package apt-transport-https, qui permet l’utilisation des référentiels accessibles via le protocole sécurisé HTTP (HTTPS).
apt update && apt -y upgrade
apt -y install apt-transport-https  
  1. Installez le serveur Web nginx et PHP à l’aide du gestionnaire de paquets apt :
apt install nginx php7.4-fpm php7.4-xml php7.4-zip php-7.4-curl php7.4-libgd php7.4-mysql php7.4-intl unzip wget
  1. Créez un répertoire pour PrestaShop dans le root du document de Nginx :
mkdir /var/www/html/eshop
  1. Créez un fichier de configuration Nginx pour votre PrestaShop. Dans ce tutoriel, nous dirons que le nom de domaine de notre boutique est eshop.example.com ; remplacez-le par le nom de domaine souhaité pour votre boutique.
nano /etc/nginx/sites-available/eshop.example.com

Et placez-y la configuration suivante :

server {
        listen 80;
        root /var/www/html/eshop;
        index index.php index.html index.htm;
        server_name eshop.example.com;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

Ensuite, enregistrez le fichier et fermez l’éditeur de texte.

  1. Créez un lien symbolique pour activer le bloc serveur :
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  1. Testez la configuration à la recherche d’erreurs de syntaxe :
nginx -t
  1. Rechargez Nginx pour activer la nouvelle configuration :
systemctl reload nginx
  1. Téléchargez la dernière version de PrestaShop depuis le site Web officiel. Au moment de la rédaction de ce tutoriel, il s’agit de la version 1.7.6.7 (utilisée ici). Remplacez le lien par la dernière version, si nécessaire.
cd /tmp
wget https://download.prestashop.com/download/releases/prestashop_1.7.6.7.zip
unzip prestashop_*.zip
unzip prestashop.zip -d /var/www/html/eshop
rm prestashop*.zip
  1. Octroyez la propriété des fichiers extraits à l’utilisateur et au groupe Nginx :
chown -R www-data:www-data /var/www/html/eshop

Configuration de MariaDB

PrestaShop repose sur le moteur de base de données MariaDB (MySQL). Initialisez-le et créez une base de données dans laquelle PrestaShop stockera ses données.

  1. Installez MariaDB à l’aide du gestionnaire de paquets apt :
apt install mariadb-server mariadb-client
  1. Exécutez l’outil d’initialisation interactif MariaDB pour configurer le serveur de base de données :
mysql_secure_installation
  1. Vous serez invité à saisir le mot de passe root actuel pour le serveur MariaDB. Comme aucun mot de passe n’est configuré par défaut, appuyez sur Enter.

  2. Appuyez sur Y pour définir un nouveau mot de passe pour l’utilisateur root MariaDB :

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

Set root password? [Y/n]
  1. Saisissez le nouveau mot de passe et appuyez sur Enter, puis répétez cette étape pour le confirmer.

  2. Le programme d’installation vous invitera à répondre à quelques questions supplémentaires. Vous pouvez conserver les paramètres proposés par défaut et les valider en appuyant sur Enter sur votre clavier.

  3. Une fois la configuration initiale effectuée, connectez-vous au shell MariaDB et à l’aide du compte root et de son nouveau mot de passe, créez la nouvelle base de données et son utilisateur associé pour PrestaShop :

mysql -u root -p
MariaDB [(none)]> create database prestashop_db;
MariaDB [(none)]> create user 'prestashop'@'localhost' identified by 'A_SECRET_PASSWORD';
MariaDB [(none)]> grant all privileges on prestashop_db.* TO 'prestashop'@'localhost';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

Obtention d’un certificat TLS Let's Encrypt

Pour sécuriser la connexion entre les visiteurs et le serveur, nous utiliserons un certificat TLS/SSL fourni par Let's Encrypt, une autorité de certification générant gratuitement des certificats TLS. La demande de certificat et sa gestion peuvent être simplifiées grâce à l’outil certbot.

  1. Certbot est disponible dans les référentiels Universe d’Ubuntu. Assurez-vous que ces derniers sont configurés sur votre système pour installer l’application à l’aide du gestionnaire de paquets apt :
apt update
apt install software-properties-common
add-apt-repository universe
apt update
  1. Installez certbot sur le système :
apt install certbot python3-certbot-nginx
  1. Exécutez l’application afin d’effectuer la demande de certificat pour votre boutique en ligne et reconfigurez votre serveur Web Nginx pour utiliser une connexion securisée par défaut :
certbot --nginx
  1. Certbot vous posera une série de questions auxquelles vous devez répondre comme dans l’exemple suivant :
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): myinbox@example.com <-- Tapez votre adresse e-mail ici 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A <-- Tapez A pour accepter les conditions de service de Let's Encrpyt
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y <-- Tapez Y si vous souhaitez partager votre adresse e-mail avec le EFF, sinon appuyez sur N

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: eshop.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1 <-- Press 1 to request the certificate for the domain name "eshop.example.com"
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for eshop.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/eshop.example.com

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1 <-- Appuyez sur 1 et, une fois la configuration terminée, vous pouvez activer la redirection directement dans Prestashop

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/eshop.example.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://eshop.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=eshop.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/eshop.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/eshop.example.com/privkey.pem
   Your cert will expire on 2020-11-09. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Configuration de PrestaShop

L’installation basique de votre PrestaShop est à présent terminée, et vous pouvez lancer la configuration de l’application grâce à l’assistant d’installation basé sur le Web.

  1. Ouvrez votre navigateur Web et pointez-le vers http://eshop.example.com/install. L’assistant d’installation s’affiche. Choisissez la langue que vous souhaitez utiliser pour votre site e-commerce et cliquez sur Suivant :
  1. Lisez les termes du contrat de licence de PrestaShop et cochez la case J’accepte les termes et conditions du contrat ci-dessus, puis cliquez sur Suivant.
  1. L’assistant d’installation vérifie la compatibilité de votre système. Si toutes les conditions sont remplies, vous voyez un message de confirmation apparaître et vous pouvez cliquer sur Suivant pour poursuivre la configuration :
  1. Saisissez les informations relatives à votre boutique, les informations d’identification de votre compte et choisissez un mot de passe sécurisé pour votre compte administrateur. Cliquez sur Suivant pour poursuivre l’installation :
  1. Saisissez les détails de connexion pour votre base de données. Vous avez défini les identifiants pour l’utilisateur de la base de données dans une étape précédente. Si vous souhaitez utiliser PrestaShop avec une « Managed Database » (base de données gérée) pour MySQL, vous trouverez les identifiants sur votre console Scaleway. Cliquez sur Tester la connexion à la base de données pour vérifier que la connexion fonctionne. Une fois terminé, cliquez sur Suivant pour continuer.
  1. L’assistant d’installation créera la structure de base de données pour PrestaShop. Cette étape peut prendre un moment ; vous serez redirigé vers la page suivante une fois cette tâche effectuée :
  1. L’installation est terminée. Un résumé de l’installation s’affiche :
  1. Supprimez le répertoire d’installation pour terminer l’installation :
rm -rf /var/www/html/eshop/install

Configuration du chiffrement TLS

Par défaut, PrestaShop utilise des connexions HTTP brutes et non chiffres, ce qui pourrait représenter un risque en matière de sécurité. Comme nous avons déjà obtenu un certificat TLS pour notre site, nous allons configurer notre installation PrestaShop pour utiliser le protocole HTTPS.

  1. Accédez à http://eshop.example.com/admin. La connexion administrateur s’affiche. Connectez-vous à la zone administrateur à l’aide des identifiants définis lors de l’installation.

Remarque : pour des raisons de sécurité, PrestaShop renommera le répertoire /admin en utilisant une chaîne aléatoire. Si vous rencontrez des erreurs de type « 404 : fichier introuvable » dans la zone administrateur, ajoutez le chemin d’accès suivant à votre fichier de configuration Nginx (/etc/nginx/sites-available/eshop.example.com). Pensez à remplacer yourAdminDirectory par le nom de votre répertoire administrateur :

location /yourAdminDirectory/ {
           try_files $uri $uri/ /yourAdminDirectory/index.php?$args;
       }

2. Cliquez sur Paramètres de la boutique > Paramètres généraux dans le menu de gauche :

  1. Cliquez sur le lien Veuillez cliquer ici pour vérifier que votre boutique supporte le protocole HTTPS. Vous êtes alors redirigé vers une connexion HTTPS sécurisée :
  1. Activez les connexions HTTPS en cliquant sur le bouton correspondant. Par défaut, PrestaShop utilise le protocole HTTPS uniquement sur les sections Membre et Paiement. Si vous souhaitez utiliser le protocole HTTPS sur toutes les pages, activez l’option en cliquant sur le bouton correspondant. Ensuite, validez la configuration en cliquant sur Enregistrer en bas de la page :

Votre site e-commerce utilise désormais le protocole HTTPS sécurisé pour les connexions, et vous pouvez commencer à ajouter des produits à votre boutique en ligne.

Pour aller plus loin

Votre site Web de e-commerce est désormais prêt à tester l’application PrestaShop. À des fins de production, il est recommandé de prendre des mesures de sécurité supplémentaires en installant un pare-feu, par exemple UFW, qui fournit une interface de ligne de commande simple d'utilisation pour iptables.

  1. Installez UFW à l’aide du gestionnaire de paquets apt :
apt install ufw
  1. Pour des raisons de sécurité, nous désactivons par défaut toutes les connexions entrantes sur le serveur :
ufw default deny
  1. Autorisez toutes les connexions sortantes depuis le serveur par défaut :
ufw default allow outgoing
  1. Autorisez le trafic entrant sur les ports HTTP et HTTPS Nginx, ainsi que sur les connexions SSH :
ufw allow 'Nginx HTTP'
ufw allow 'Nginx HTTPS'
ufw allow 'OpenSSH'
  1. Activez la configuration du pare-feu :
sudo ufw enable

Vous disposez désormais d’un pare-feu à la fois basique et fonctionnel sur le serveur de votre boutique en ligne. Vous pouvez définir des règles supplémentaires pour les configurations plus complexes et configurer une protection additionnelle de la machine à l’aide de fail2ban.

Pour en savoir plus sur la manière de configurer votre boutique PrestaShop conformément aux exigences de votre activité, reportez-vous à la documentation officielle.