Il est possible, via une petite modification du fichier index.php de magento, d’utiliser deux bases de données séparées pour la production et la backoffice. Ces deux base de données devront être en master/master.

Cela permet de séparer les requêtes « gourmandes » du backoffice et ainsi d’avoir une production allégée des opérations de maintenance. Nous assumerons que le document root de production s’appelle « prod » et celui du backoffice « bo« . Ci-dessous la procédure de séparation des bases de données, toute les commandes ci-dessous sont executées depuis le document root de la production.

    • Créer deux répertoires de configuration pour la production et le backoffice. Ces deux répertoires seront de préférence hors du document root du site.
mkdir -p ../includes/{prod,bo}_etc
    • Le document root de « bo » est un lien vers « prod« .
ln -s ../bo prod
    • Copions l’intégralité des fichiers et répertoire présent dans « app/etc/ » vers les deux répertoires créés dans « ../includes« .
cp -a app/etc ../include/prod_etc cp -a app/etc ../include/bo_etc 
  • On révise les droits sur le répertoire « ../includes » pour autoriser le serveur WEB à lire/écrire ces fichiers. (L’écriture n’est pas forcement nécessaire) chown -R websrv:websrv ../includes find ../includes -type f -exec chmod 600 {} ';' find ../includes -type d -exec chmod 700 {} ';'
  • Le repertoire app/etc est « hard codé » dans la vérification d’installation magento. Nous laisserons donc un fichier local.xml avec la date définie lors de l’installation. Voici le contenu de notre fichier :
  • Rajoutons maintenant ces quelques lignes dans le fichier **index.php**. cela permet à magento de prendre un répertoire de configuration spécifique à chaque document root. # # $doc_root = $_SERVER["DOCUMENT_ROOT"]; $arrDocRoot = explode( "/", $doc_root ); $cur = $arrDocRoot[ count( $arrDocRoot ) - 1 ]; $arrDocRoot[ count( $arrDocRoot ) - 1 ] = "includes"; $arrDocRoot[] = $cur."_etc"; $etc_dir = implode( "/", $arrDocRoot ); $options = Array( 'etc_dir'=>$etc_dir ); Mage::run($mageRunCode, $mageRunType, $options); # # # Mage::run($mageRunCode, $mageRunType);
  • Nous pouvons désormais configurer distinctement notre instance de production et de backoffice. Le lien symbolique « bo » pointant » sur « prod » nous permettant d’éviter les problèmes de synchronisation entre les deux répertoires. (Notons qu’un montage « bind » aurait produit le même résultat)
Philippe Humeau
Philippe Humeau
Philippe a co-fondé NBS System en 1999. Après s’être concentré sur la sécurité, qu’il n’a jamais abandonnée, il se découvre une passion pour le ecommerce à partir de 2008. Tour à tour pentester, CTO, CCO puis CEO, son profil touche-à-tout l’a conduit à devenir directeur marketing et stratégie d’OT Group après notre intégration dans celui-ci.