Open Cart est système open source de création de pages de produits à vendre très populaire qui permet d’obtenir un site eCommerce fonctionnel, entièrement hébergé sur son propre serveur. Open Cart fournit une interface simple et conviviale pour vendre des produits en ligne. Il est spécialement conçu pour les petites et moyennes entreprises et possède toutes les fonctionnalités de commerce électronique standard nécessaires pour les boutiques en ligne. Il offre un riche ensemble de fonctionnalités, notamment multi-devises, langue, catégories illimitées, produits, critiques de produits, multi-boutiques et bien d’autres.
Cet article expose une procédure d’installation de Open Cart sur un serveur NGinx.
Base de données
Open Cart fonctionne en php
avec une base de données mySQL
, ou MariaDB
. On crée donc une base auquelle on attribue un utilisateur et mot de passe :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ sudo mysql -u root -p Enter password: Your MySQL connection id is XXX Server version: 8.0.26 MySQL Community Server - GPL Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. mysql> CREATE USER `Opencart`@`localhost` IDENTIFIED BY 'Mot_de_passe'; mysql> CREATE DATABASE opencart mysql> GRANT ALL ON `Opencart`.* to `Opencart`@`localhost`; mysql> FLUSH PRIVILEGES; |
Télécharger OpenCart
On télécharge la version stable encours, pour moi la 3.0.3.7
du 4 Février 2021 vers un dossier choisi pour l’installation, par exemple/var/www/opencart
et l’on dézippe.
1 2 |
xavier@server:/var/www/opencart$ wget https://github.com/opencart/opencart/releases/download/3.0.3.7/opencart-3.0.3.7.zip xavier@server:/var/www/opencart$ unzip opencart-3.0.3.7.zip |
La version opencart
se trouve dans le dossier upload
.
On enlève le suffixe dist
des fichiers config.dist.php
:
1 2 3 |
xavier@server:/var/www/opencart$ cd upload xavier@server:/var/www/opencart/upload$ mv config-dist.php config.php xavier@server:/var/www/opencart/upload$ mv admin/config-dist.php admin/config.php |
Le dossier opencart
contient donc la version 3.0.3.7
.
Pour changer plus rapidement de version, et connaître au premier coup d’oeil la version utilisée, on peut renommer le dossier opencart
en opencart-3.0.3.7
, et faire un lien symbolique de opencart
vers opencart-3.0.3.7/upload
dans le dossier parent, de plus les fichiers à utiliser se trouve dans le sous-dossier upload
:
1 2 3 4 5 6 7 |
xavier@server:/var/www$ mv opencart opencart-3.0.3.7 xavier@server:/var/www$ ln -sfn opencart-3.0.3.7/upload opencart xavier@server:/var/www$ ll ... lrwxrwxrwx 1 xavier xavier 16 Jul 23 00:56 opencart -> opencart-3.0.3.7/upload/ drwxrwxr-x 7 xavier xavier 4096 Jul 23 00:49 opencart-3.0.3.7/ ... |
Le dossier opencart-3.0.3.7
contient un fichier install.txt
qui explique la procédure d’installation, en particulier les autorisations d’écriture de certains dossiers.
Afin de ne pas me mélanger les pinceaux avec d’autres sites, je crée le dossier /var/www/Opencart
, et je déplace le dossier opencart-3.0.3.7
et le dossier lié opencart
.
1 2 3 4 5 6 7 |
xavier@server:/var/www$ mkdir Opencart xavier@server:/var/www$ cd Opencart xavier@server:/var/www/Opencart$ mv ../opencart . xavier@server:/var/www/Opencart$ mv ../opencart-3.0.3.7 . xavier@server:/var/www/Opencart$ ll lrwxrwxrwx 1 xavier xavier 16 Jul 23 00:56 opencart -> opencart-3.0.3.7/upload/ drwxrwxr-x 7 xavier xavier 4096 Jul 23 00:49 opencart-3.0.3.7/ |
Pour changer rapidement les autorisations, éventuellement si je fais de nouvelles installations, je crée un fichier /var/www/Opencart/permissions.sh
, j’y ajoute le renommage des fichiers config-dist.php
et attribue la propriété des fichiers à www-data
. On automatise ainsi le processus pour une prochaine installation. Si les fichiers ont déjà été renommés, il y aura deux petites erreurs sans importance :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/bash mv opencart/config-dist.php opencart/config.php mv opencart/admin/config-dist.php opencart/admin/config.php chmod 0755 opencart/system/storage/cache/ chmod 0755 opencart/system/storage/download/ chmod 0755 opencart/system/storage/logs/ chmod 0755 opencart/system/storage/modification/ chmod 0755 opencart/system/storage/session/ chmod 0755 opencart/system/storage/upload/ chmod 0755 opencart/system/storage/vendor/ chmod 0755 opencart/image/ chmod 0755 opencart/image/cache/ chmod 0755 opencart/image/catalog/ chmod 0755 opencart/config.php chmod 0755 opencart/admin/config.php chown -R www-data: opencart/* |
On rend ce fichier exécutable et on lance le script avec sudo
:
1 2 |
xavier@server:/var/www/Opencart$ sudo chmod 0774 permissions/sh xavier@server:/var/www/Opencart$ sudo ./permissions.sh |
Créer un certificat SSL pour OpenCart
OpenCart doit fonctionner avec un certificat SSL Secure Sockets Layer et être appelé avec une adresse en https
. On utilise letsencrypt pour cela.
Je crée un sous domaine à mon domaine : opencart.ocmiex.net
.
Je crée un dossier /var/www/Opencart/.well-know
n, que j’attribue à www-data
.
1 2 3 4 5 6 7 8 |
xavier@server:/var/www/Opencart$ mkdir .well-known xavier@server:/var/www/Opencart$ sudo chown www-data: .well-known xavier@server:/var/www/Opencart$ ll drwxrwxr-x 5 xavierbs xavierbs 4096 Jul 24 01:46 ./ drwxrwxr-x 13 xavierbs xavierbs 4096 Jul 14 00:56 ../ lrwxrwxrwx 1 xavierbs xavierbs 16 Jul 24 01:46 opencart -> opencart-3.0.3.7/upload/ drwxrwxr-x 7 xavierbs xavierbs 4096 Jul 24 01:29 opencart-3.0.3.7/ drwxrwxr-x 2 www-data www-data 4096 Jul 23 23:34 .well-known/ |
Configuration NGinx
On ouvre le fichier /etc/nginx/sites-available/opencart
de configuration Nginx
:
1 2 |
xavier@server:/var/www$ cd /etc/nginx/sites-available xavier@server:/etc/nginx/sites-available$ sudo vim opencart |
J’écris un premier bloc server qui accepte des connexions vers le dossier .well-known
, un dossier au même niveau que le dossier opencart
. On crée un fichier de configuration opencart
dans /etc/nginx/sites-available
. Les commandes touch
, vim
et autres se font avec sudo
, le propriétaire est root
.
Et l’on écrit dans un fichier /etc/nginx/sites-available/opencart
les lignes suivantes pour obtenir un certificat SSL Letsencrypt
:
1 2 3 4 5 6 7 8 9 10 |
server { listen *:80; server_name opencart.ocmiex.net; location ~ /\.well-known { allow all; root /var/www/Opencart/; try_files $uri =404; } } |
On lie ce fichier dans le dossier sites-enabled
:
1 2 3 4 5 6 |
xavier@server:/etc/nginx/sites-available$ cd ../sites-enabled xavier@server:/etc/nginx/sites-enabled$ ln -sfn /etc/nginx/sites-available/opencart opencart xavier@server:/var/www/Opencart$ ll ... lrwxrwxrwx 1 root root 35 Feb 11 09:28 opencart -> /etc/nginx/sites-available/opencart ... |
On teste la configuration NGinx
et on relance le serveur NGinx
:
1 2 3 4 |
xavier@server:/etc/nginx/sites-enabled$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful xavier@server:/etc/nginx/sites-enabled$ sudo systemctl restart nginx |
Création des certificats
On est prêt à lancer la commande pour obtenir les certificats de la part de letsencrypt
. On accompagne la commande de l’option
--dry-run, qui permet de faire un essai sans créer réellement les certificats, juste pour voir si tout est correct pour letsencrypt
:
1 |
sudo letsencrypt certonly --webroot -w /home/xavierbs/www/Opencart -d opencart.ocmiex.net --server https://acme-v02.api.letsencrypt.org/directory --dry-run |
Lorsque la commande a été testée, on enlève l’option --dry-run pour créer effectivement le certificat.
Terminer la configuration
On termine la configuration en changeant le fichier /etc/nginx/sites-available/opencart
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
server { listen *:80; server_name opencart.ocmiex.net; location ~ /\.well-known { allow all; root /var/www/Opencart/; try_files $uri =404; } location / { return 301 https://opencart.ocmiex.net$request_uri; } } server { listen *:443 ssl http2; server_name opencart.ocmiex.net; root /var/www/Opencart/opencart; index index.php index.html; autoindex off; include snippets/common-rules.conf; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm-www.sock; } ssl_certificate /etc/letsencrypt/live/opencart.ocmiex.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/opencart.ocmiex.net/privkey.pem; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/opencart.ocmiex.net/fullchain.pem; resolver 8.8.8.8 8.8.4.4 62.210.16.6 62.210.16.7 valid=300s; resolver_timeout 3s; ssl_session_cache shared:SSL:100m; ssl_session_timeout 24h; ssl_session_tickets on; ssl_session_ticket_key /etc/nginx/ssl/ticket.key; ssl_dhparam /etc/nginx/ssl/dhparam4.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; } |
L’explication de la configuration précédente complètera cet article prochainement …
Premier lancement et configuration
On charge dans le navigateur, l’adresse https://opencart.ocmiex.net/index.php
, la page est redirigée vers https://opencart.ocmiex.net/install/index.php
, et l’on poursuit l’installation.
On renseigne à l’étape 3/4 les champs sur les différentes pages tels le nom, l’utilisateur de la base de données, l’utilisateur admin, le mot de passe, l’email. À cette étape, il sera peut-être nécessaire d’augmenter le paramètre php
max_execution_time
de php.ini
. La procédure sur serveur NGinx php fpm
est expliquée dans l’article Réparer l’erreur 504 Gateway Timeout avec Nginx.
Ensuite, à la validation du formulaire, la procédure peut échouer avec l’erreur Uncaught Exception: Error: Variable 'sql_mode' can't be set to the value of 'MYSQL40'Error No: 1231
. Pour résoudre cette erreur, il faut éditer le fichier /var/www/Opencart/opencart/install/model/install/install.php
et effacer ou commenter la ligne 35 de la version 3.0.3.7 :
35 |
// $db->query("SET @@session.sql_mode = 'MYSQL40'"); |
et recommencer la procédure, en resoumettant le formulaire. Les paramètres pourront être réinitialisés, il faut vérifier et corriger.
On arrive ainsi à la dernière page, la base est installée, on peut effacer le répertoire install
et utiliser Open Cart. On peut aussi vouloir remettre la configuration NGinx
et fpm
de base, en enlevant les options fastcgi_read_timeout
du fichier de configuration NGinx
et max_execution_time
de fpm
.
Installation en ligne de commande
Trop de problèmes se posent après l’installation, peut-être la modification du sql_mode
ne plait pas. Comme je suis coincé avec cette erreur de temps d’exécution de php
, je me tourne vers l’installation en ligne de commande. Donc j’efface toutes les table de la base données, et c’est reparti.
1 2 3 4 5 6 7 8 |
$ sudo mysql -u root -p Enter password: Your MySQL connection id is XXX Server version: 8.0.26 MySQL Community Server - GPL mysql> DROP DATABASE opencart; mysql> CREATE DATABASE opencart; mysql> quit; |
Le dossier install
contient un fichier cli_install.php
. J’utilise le driver database mpdo
. Il y a trop de problème avec mysqli
. La commande est (remplacer les champs <...>
par les bonnes valeurs) :
1 2 3 4 5 6 |
xavier@server:/var/www/Opencart/opencart/install$ sudo php cli_install.php install --db_hostname localhost --db_username <username> --db_password "<password>" --db_database <database_name> --db_driver mpdo --db_port 3306 --username <admin_username> --password <admin_password> --email <email@example.com> --http_server <https://opencart.ocmiex.net/> SUCCESS! Opencart successfully installed on your server Store link: https://opencart.ocmiex.net/ Admin link: https://opencart.ocmiex.net/admin/ xavier@server:/var/www/Opencart/opencart/install$ |
Ne pas oublier le slash /
à la fin de l’adresse https://.../
de la boutique.
J’utilise la version 7.4
de php cli
. Pour changer rapidement de versions, si plusieurs sont installées, on utilise :
1 2 3 4 5 6 7 8 9 10 11 12 |
xavier@xavier:~$ sudo update-alternatives --config php [sudo] password for xavier: There are 3 choices for the alternative php (providing /usr/bin/php). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/bin/php8.0 80 auto mode 1 /usr/bin/php7.2 72 manual mode * 2 /usr/bin/php7.4 74 manual mode 3 /usr/bin/php8.0 80 manual mode Press <enter> to keep the current choice[*], or type selection number: |
La commande d’installation en ligne de Open Cart est exécutée assez rapidement comparée à ce que cela prend dans un navigateur. L’avantage est que l’on peut recommencer plusieurs fois, en effaçant les table de la base.
Et hop, Open Cart est installé. Maintenant, il s’agit de lancer l’application dans le navigateur, pour moi https://opencart.ocmiex.net. La première utilisation et les premiers réglages sont à suivre.
Trackbacks/Pingbacks