fdc6d83bdf657106f31fa34cd800a5a2f57136e3
EduBox PrestaShop 9 Image
Image Docker patchée basée sur prestashop/prestashop:9, conçue pour fonctionner
avec le reverse proxy dynamique d'EduBox.
Pourquoi une image patchée ?
PrestaShop 9 (Apache 2.4 + PHP 8.5) a plusieurs problèmes majeurs derrière EduBox :
- Les headers
X-Forwarded-*sont corrompus par Apache/PHP :$_SERVERles reçoit sous forme d'arrays au lieu de strings. On contourne ce bug viagetenv()dansconfig/defines_custom.inc.php. - PrestaShop utilise partout le domaine stocké en base (
ps_shop_url) et la configurationPS_SSL_ENABLED. Derrière EduBox, le domaine public change à chaque instance (<id>.alfrednobel.edudeploy.com) et toutes les requêtes publiques arrivent en HTTPS. Les patches forcent l'utilisation de l'hôte et du protocole de la requête courante. - Les agents étudiants peuvent être hors ligne. Le pack de langue français est donc embarqué dans l'image pour éviter tout téléchargement pendant l'installation.
Build local
cd /opt/edubox/prestashop-image
docker build -t edubox-prestashop:9 .
Push sur le registry Gitea
docker tag edubox-prestashop:9 \
151.80.60.98:3001/yacine/edubox/edubox-prestashop:9-edubox-7
docker push \
151.80.60.98:3001/yacine/edubox/edubox-prestashop:9-edubox-7
Patches appliqués
| Patch | Fichier modifié | Objectif |
|---|---|---|
edubox-tools.patch |
classes/Tools.php |
getShopDomain() / getShopDomainSsl() utilisent getHttpHost() dynamiquement ; .htaccess généré sans condition HTTP_HOST (images/catégories). |
edubox-link.patch |
classes/Link.php |
getBaseLink() et getAdminBaseLink() utilisent usingSecureMode() et getHttpHost(). |
edubox-frontcontroller.patch |
classes/controller/FrontController.php |
Désactive sslRedirection() pour éviter les boucles HTTP/HTTPS. |
edubox-shop.patch |
classes/shop/Shop.php |
Shop::initialize() utilise le shop par défaut sans redirection forcée. |
edubox-shopurl.patch |
classes/shop/ShopUrl.php |
getMainShopDomain() / getMainShopDomainSSL() retournent le domaine de la requête. |
edubox-shopcontext.patch |
src/Core/Context/ShopContext.php |
getBaseURL() du BO est reconstruit à partir de la requête courante. |
edubox-asseturl.patch |
src/Adapter/Assets/AssetUrlGeneratorTrait.php |
Les assets CCC utilisent le protocole de la requête, pas PS_SSL_ENABLED. |
edubox-install.patch |
src/PrestaShopBundle/Install/Install.php |
finalize() respecte PS_FOLDER_ADMIN (évite le bug overlayfs admin → admin-edubox). |
edubox-install-language.patch |
src/PrestaShopBundle/Install/Install.php |
Évite le téléchargement du pack legacy fr.gzip quand le pack Symfony est embarqué. |
edubox-language.patch |
classes/Language.php |
Utilise _PS_TRANSLATIONS_DIR_ au runtime pour le cache langue ; évite le téléchargement réseau si le pack est présent. |
edubox-docker-run.patch |
/tmp/docker_run.sh |
Supprime un install.lock résiduel si une installation précédente a échoué. |
Fichiers injectés
proxy.conf: Apache trusteX-Forwarded-Proto: httpspour positionnerHTTPS=ondans l'environnement PHP. Active aussiAllowOverride Allpour que le.htaccessde PrestaShop fonctionne.config/defines_custom.inc.php: normaliseHTTP_X_FORWARDED_HOST,HTTP_X_FORWARDED_PROTOetHTTP_HOSTcorrompus ; définitPS_TRUSTED_PROXIESpour Symfony.translations-symfony-fr-FR.zip→ copié soussf-fr-FR.zipdans/var/www/html/translations/: pack de langue Symfony français embarqué ( PrestaShop attend le préfixesf-).
Utilisation dans EduBox
Le template PrestaShop 9 dans server/prisma/seed.ts utilise cette image :
app:
image: 151.80.60.98:3001/yacine/edubox/edubox-prestashop:9-edubox-7
Mise à jour vers une nouvelle version de PrestaShop
Si PrestaShop sort une version 9.x.y :
- Modifier le
FROMdu Dockerfile :FROM prestashop/prestashop:9.x.y - Relancer le build. Les patches qui échouent doivent être adaptés aux nouvelles lignes/code de PrestaShop.
- Re-tagger et pousser :
9.x.y-edubox-1. - Mettre à jour
server/prisma/seed.tsavec le nouveau tag.
Déploiement sur les agents
L'image doit être accessible depuis chaque agent étudiant. Deux options :
- Registry privé (recommandé) : tagger et pousser l'image sur un registry
(Docker Hub, registry Gitea, GHCR, etc.) puis mettre à jour
server/prisma/seed.tsavec le nom complet. - Build manuel sur chaque agent : copier ce dossier sur l'agent et lancer
docker buildavant le premier déploiement.
Description
Languages
Dockerfile
59.6%
PHP
40.4%