73b561ed33
- edubox-tools.patch : getShopDomain/Ssl conservent les ports non standards - edubox-configuration.patch : PS_SHOP_DOMAIN, _PS_BASE_URL_, PS_SSL_ENABLED… résolus dynamiquement - edubox-shop-getbaseurl.patch : Shop::getBaseURL() utilise le host de la requête - edubox-shopurl.patch : getMainShopDomain conserve les ports non standards - edubox-clear-cache-init.sh : vidage des caches à chaque démarrage - seed.ts : passage au tag 9-edubox-9 - README mis à jour avec les nouveaux patches
5.5 KiB
5.5 KiB
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-9
docker push \
151.80.60.98:3001/yacine/edubox/edubox-prestashop:9-edubox-9
Patches appliqués
| Patch | Fichier modifié | Objectif |
|---|---|---|
edubox-tools.patch |
classes/Tools.php |
getShopDomain() / getShopDomainSsl() utilisent getHttpHost() dynamiquement en conservant les ports non standards (ex. localhost:8088) ; .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 en conservant les ports non standards. |
edubox-shop-getbaseurl.patch |
classes/shop/Shop.php |
Shop::getBaseURL() utilise le host/port de la requête courante. |
edubox-shopcontext.patch |
src/Core/Context/ShopContext.php |
getBaseURL() du BO est reconstruit à partir de la requête courante. |
edubox-configuration.patch |
classes/Configuration.php |
PS_SHOP_DOMAIN, PS_SHOP_DOMAIN_SSL, PS_SSL_ENABLED, _PS_BASE_URL_, _PS_BASE_URL_SSL_ sont résolus dynamiquement depuis la requête, pas depuis le cache DB. |
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-dashboard-warning.patch |
controllers/admin/AdminDashboardController.php |
Désactive le bandeau d’avertissement "domaine différent de SEO & URL". |
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-).edubox-clear-cache-init.sh→/tmp/init-scripts/edubox-clear-cache.sh: vidage des caches Smarty/Symfony et des assets CCC à chaque démarrage du conteneur, afin que les changements de domaine/port soient pris en compte.
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-8
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.