Jump to content

Stockage externalisé des photos produits - CDN


Recommended Posts

Bonjour,

Nous travaillons aujourd'hui sur une grosse boutique (400k produits), et cela crée des problématiques de stockage.
Le dossier des photos produits /img/p/ va bientot s'approcher des 100Go.

Notre serveur dedié (PlanetHoster) travaille avec de l'espace limité, ou sinon ca coute cher :) 

Y a t'il une possibilité de placer ces photos sur un serveur externe, plus dedié au stockage, dans lequel l'espace serait "moins couteux" ?

J'ai entrevu l'idée des "serveurs de media", mais je ne sais pas si cette solution permet uniquement de charger des fichiers media d'autres serveurs si et uniquement si il y a redondance, ou si cela marcherait si le serveur principal est dépourvu des fichiers ?

(Au passage si quelqu'un a un tuto de mise en place de ses serveurs media..)

Merci pour votre aide et conseil,

Link to comment
Share on other sites

Bonjour, je dirais que ce n'est pas possible. Chaque fois qu'on ajoute une photo, Prestashop crée dans le dossier img/p autant d'images qu'il y a de réglages de tailles. Donc si vous avez 6 dimensions d'images, il faut multiplier le nombre d'images ajoutées dans les produits par le nombre de ces déclinaisons d'images ... Et il serait difficile à Prestashop d'aller mettre les images sur un autre serveur car lui ne voit que le dossier img/p ... A moins qu'un plus pointu que moi n'aie une solution.

Les serveurs de medias, c'est pour l'optimisation.

Je dirais donc qu'à la base, les images doivent être optimisées avant de les ajouter aux produits. Pas besoin de mettre des images "drap de lit" comme je vois souvent le cas. Si la taille max des images à afficher est 800x800pixels (un exemple), alors envoyez toutes vos images produits avec ces dimensions et pas en 3000x3000 😉

Avec 400k produits, il faut de la place ...

Link to comment
Share on other sites

Bonjour,

les serveurs de Media ne servent qu'à proposer les fichiers statiques à partir d'autre domaine, comme peut le proposer un CDN.

Les CDN récupèrent automatiquement les fichiers présents dans les répertoires, en gros, ils copient l'intégralité de vos fichiers sur des serveurs plus proches des utilisateurs.

Si vous souhaitez stocker vos images sur un autre serveur, il faut alors mettre en place des scripts permettant la récupération des fichiers puis changer le fonctionnement de PrestaShop pour qu'il aille sur ce nouveau serveur pour ces fichiers spécifiquement.

À mon avis, dans un premier temps, il serait préférable de bien maitriser l'intégralité des configurations des images pour savoir si vous utilisez bien telle ou telle miniature.

Puis mettre en place un module qui va compresser les images, pour économiser de la place et de la bande passante, au moment de la génération des miniatures.

Il faut aussi prendre l'habitude de ne charger les images qu'aux dimensions maximales proposées par le thème, cela permet de réduire le poids initial des images et donc aussi le temps de génération des miniatures.

Perso, je passe par un CDN avec affichage automatique des images au format webp si le client les accepte : https://www.mediacom87.fr/cloudflare-et-keycdn-le-couple-parfait-pour-prestashop/

 

Link to comment
Share on other sites

Merci à tous les deux pour vos réponses.


J'ai essayer entre temps de modifier directement la redirection des images dans le htaccess, dans l'idée ca marche tres bien. Mais pour le coup des que Prestashop vient regenerer le htacess pour tel ou tel raisons... Cela supprime ma modification, mais j'ai trouvé à modifier l'auto génération

Forcément cela m'oblige à une synchronisation "live" entre le dossier prestashop du serveur principal qui reçoit les images à la toute base lors des créations produits, et le serveur "CDN" qui a les images utile.
Des que l'image est copié depuis le serveur prestashop vers le CDN, elle peut être supprimé de celui-ci.

Ligne 2680 de classes/Tool.php, changé {ENV:REWRITEBASE} par le domaine du second serveur

fwrite($write_fd, 'RewriteRule ^' . str_repeat('([0-9])', $i) . '(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/' . $img_path . $img_name . '$' . ($j + 1) . ".jpg [L]\n");
RewriteCond %{HTTP_HOST} ^www.rawmotorsports.net$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L]

deviens

RewriteCond %{HTTP_HOST} ^www.rawmotorsports.net$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %https://cdn1.rawmotorsports.net/img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L]

A voir si cela ne crée pas d'autre soucis

@Mediacom87 Ton article est intéressant, j'utilise déjà CloudFlare depuis quelques années, je vais essayer de pousser avec ton duo pour optimiser. Même si ici au delà de l'optimisation (rapidité) je cherche de la place. Mais le site étant exploité aussi bien en France, qu'au USA ou en Australie, une optimisation (rapidité) avec un vrai CDN est également tres utile.

Edited by RaWMotorsports (see edit history)
Link to comment
Share on other sites

Hello, c'est intéressant ! Quoique cela demande chaque fois des manips pour supprimer les images du serveur sur lequel est le Prestashop. Faut payer pour un autre serveur. Ce ne serait pas plus simple de payer pour un peu plus d'espace chez l'hébergeur ??

En ce qui concerne le .htaccess, si on ajoute le code en-dehors des lignes ci-dessous, les ajouts ne sont pas supprimés en cas de réinitialisation du fichier par Prestashop

# ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again

# ~~end~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again

  • Like 1
Link to comment
Share on other sites

@kerlin L'espace de stockage sur le serveur dedié PlanetHoster coute 60€/an/10Go soit pour mes 100Go -> 600€/an
Ces memes 100Go sur un serveur mutualisé, a mon sens amplement suffisant pour diffuser des images (surtout puisqu'il passe par CloudFlare au milieu..) me coute 60€/an
Une petite économie pas négligeable qui me permet entre autre d'avoir deux serveurs, et donc un peu plus de flexibilité desfois.

 

Apres un peu de travail tout marche parfaitement.

J'ai du ajouter : 

$domain_non_www = str_replace('www.','', $domain);

à la suite de :

$domain = str_replace(['[', ']'], ['\[', '\]'], $domain);

dans le fichier classes/tool.php, afin de pouvoir changer la ligne 2679 par :

fwrite($write_fd, 'RewriteRule ^' . str_repeat('([0-9])', $i) . '(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ https://cdn1.'.$domain_non_www.'/img/p/' . $img_path . $img_name . '$' . ($j + 1) . ".jpg [L]\n");

Grâce à cela toutes mes URL ré-ecrite de tout mes domaines (car multi-boutique) pointe bien vers la nouvelle URL sur le serveur de stockage.

Ensuite, il a fallu (après avoir transférer initialement par FTP tout le dossier /img/p/) mis en place une procédure automatique de transfert des images du serveur web vers le serveur de stockage. Ceci est réalisé grâce à plusieurs script. Qui me permet de gérer quelques 6 000 images / jours sans surcharger le serveur ce qui est amplement suffisant dans mon cas.

Script 1 :

Déplacement des fichiers img depuis /img/p/ vers un dossier que j'ai appeller /img/p_tmp/ -> L'idée étant que le dossier /img/p/ n'est plus accessible car redirigé sur le second serveur donc pour pouvoir récuperer les images et donc y accéder en premier lieu je les ai déplacé.

Script 2 :

Listing de tout les fichiers disponible dans /img/p_tmp/ afin que le serveur de stockage puisse les voir et donc les copier

Script 3 :

Récupération sur le serveur de stockage des images 

Script 4 :

Suppression des fichiers dans /img/p_tmp/ pour libérer de l'espace.

En pratique, j'ai quelques lignes supplémentaire dans tout les scripts qui me permettent de vérifier la bonne et juste copie des images avant suppression par exemple ;)
Le tout tourne régulièrement, pour assurer qu'une image déposé sur le BackOffice devienne rapidement dispo sur le FrontOffice.

Dernierement, ajouté dans le .htaccess la redirection des URL images non simplifié afin de ne pas créer de mien rompu quand PrestaShop n'utilise pas les URL simplifié (exemple BackOffice)

Edited by RaWMotorsports (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...