Tag 9.0.3-8.3-apache inexistant sur Docker Hub.
Format correct : {ps_version}-{theme_version}-classic-{php_version}-apache
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PHP 8.1 EOL depuis nov 2024, plus de patches sécurité.
PS9 + PHP 8.3 (maintenu jusqu'en 2027) élimine CVE-2024-3566 sur libphp/php-cli.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- sbom-generate : inventaire CycloneDX des images prestashop:8-apache et mariadb:10.11 via Syft
- sbom-scan : scan CVE depuis les SBOM via Trivy (cache /home/syoul/trivy-cache)
- sbom-publish : envoi vers dtrack.syoul.fr avec versioning date+commit SHA
- .gitignore : ajout /.reports/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Retire consul_token du pipeline (write-env + deploy) :
Registrator gere le routage Fabio via labels SERVICE_* automatiquement
- Supprime le bloc KV Fabio manuel dans le step deploy
- Passe prestashop et db en restart: always
- Ajoute /docs-sbom dans .gitignore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
cd /opt/prestashop dans les commandes precedentes change le CWD,
donc cat .consul_token cherchait /opt/prestashop/.consul_token.
Copie maintenant .consul_token vers /opt/prestashop/ et utilise
le chemin absolu pour le lire.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Ajoute consul_token dans write-env (from_secret, sans volumes)
- Ecrit le token dans .consul_token (lu par deploy)
- Apres docker compose up, relit l'IP du container et met a jour
fabio/config/$PROJECT avec les routes correctes
- Sous-cle par projet pour coexister avec les autres stacks
Corrige les 502 dus au KV stale quand le container change d'IP.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Format liste (- KEY=VALUE) pour permettre l'évaluation des defaults imbriqués
- SERVICE_80_NAME et SERVICE_80_TAGS surchargeables via env var sans modifier le fichier
- SERVICE_NAME redondant supprimé (SERVICE_80_NAME suffit)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Registrator ignore SERVICE_80_CHECK_TCP="" (valeur vide).
"true" est la valeur attendue pour activer le check TCP.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PS_SSL_ENABLED_EVERYWHERE=1 redirige tout HTTP en 302 vers HTTPS.
Consul ne suit pas les redirects -> check HTTP toujours failing -> Fabio
ne route pas le trafic. Check TCP verifie juste que le port 80 est ouvert.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
${PROJECT} dans configure -> $PROJECT (boucle infinie car substitue vide)
${CI_BUILD_NUMBER}, ${CI_COMMIT_SHA}, ${CI_COMMIT_BRANCH} dans notify-failure
Regle : jamais ${VAR} dans les commands Woodpecker next.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Les vars CI ne sont pas injectees comme vars shell dans les steps
sans Docker socket (write-env / alpine) -> $CI_REPO_OWNER vide.
Valeur fixe syoul-main-prestashop, conforme a la convention user-env-project.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
${CI_REPO_OWNER} et ${CI_COMMIT_BRANCH} etaient substitues vides par
Woodpecker au parse YAML -> PROJECT vide -> docker exec "-db" echoue
silencieusement -> boucle configure infinie (60 tentatives).
$VAR sans accolades n'est pas substitue au parse, resolu au shell runtime.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- COMPOSE_PROJECT_NAME construit dynamiquement : CI_REPO_OWNER-CI_COMMIT_BRANCH-prestashop
-> plus de valeur en dur dans le fichier
- validate : PS_DOMAIN/PS_ADMIN_FOLDER/COMPOSE_PROJECT_NAME calcules dans commands
via les vars CI injectees automatiquement par Woodpecker
- PS_DOMAIN placeholder remplace presta.syoul.fr hardcode dans validate
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Ajout SERVICE_80_CHECK_HTTP=/ : Consul valide le service via GET /
-> service healthy dans Consul -> Fabio route automatiquement le trafic
- SERVICE_80_TAGS sans guillemets + /* pour le glob matcher Fabio
- Suppression token Consul, enregistrement manuel et KV Fabio de la pipeline
-> Registrator + Consul catalog suffisent (approche native sonic)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
; ACME_EXIT=$? ne fonctionnait que si acme.sh retournait 0 (premier lancement).
Avec exit 2 (skip/cert valide), set -e coupait le script avant la capture.
Correction : ACME_EXIT=0 + || ACME_EXIT=$?
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Routes Fabio : / -> /* (glob matcher requiert /* pour matcher les sous-chemins)
Sans *, presta.syoul.fr:443/ ne matchait que / exactement, les autres
chemins (/admin-secure/, /themes/...) tombaient sur le catch-all nginx -> 404
- Ajout step configure : active PS_SSL_ENABLED + PS_SSL_ENABLED_EVERYWHERE dans
la DB apres installation, efface le cache -> PrestaShop genere des URLs https://
(Fabio passe X-Forwarded-Proto:https, pas de boucle de redirection)
- PS_ENABLE_SSL: 1 dans docker-compose.yml (coherence avec la config DB)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sans --home, acme.sh ecrit dans /root/.acme.sh (non persiste).
Avec --home /etc/acme.sh (volume sonic_acme), le cert survit aux recreations
du container sonic-acme-1 et le chemin de copie vers /host/certs/ est correct.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ajout de l'etape acme.sh dans le deploy :
- docker exec sonic-acme-1 /app/acme.sh --issue --webroot
- idempotent : skip (exit 2) si cert valide, echec si autre erreur
- copie automatique fullchain + key vers /host/certs/ pour Fabio SNI
- ordre : docker compose up > cert TLS > consul register > fabio KV
Ce pattern est le modele generique pour tout nouveau service sur sonic.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
La variable multiline cassait le parser YAML (ligne sans indentation).
Utilisation de printf avec \n pour construire la chaine sur une seule ligne.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Ajout label LETSENCRYPT_HOST sur le container prestashop :
sonic-acme-1 (acme-companion) emet le cert et le copie dans /host/certs/
Fabio le detecte par SNI sans redemarrage
- Route Fabio KV mise a jour : HTTP et HTTPS (domain:443) en une seule cle
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fabio ne detecte pas toujours les nouveaux services via le catalog Consul.
Ajout d'un consul kv put fabio/config avec la route urlprefix apres chaque
deploiement pour garantir le routage sans redemarrage de Fabio.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- write-env ecrit le token dans .consul_token (workspace partage)
- deploy lit .consul_token et utilise docker exec sonic-consul pour
enregistrer le service directement sur l'agent consul local
- network_mode host non supporte par ce Woodpecker, 172.17.0.1:8500
ne rejoignait pas le meme consul que Fabio
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
172.17.0.1:8500 passe par les regles iptables DOCKER et n'atteint pas
le meme consul que Fabio. Avec host network, localhost:8500 est direct.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ajout etape register-consul : recupere l'IP du conteneur sur le reseau sonic
et enregistre le service dans Consul avec le token ACL via l'API HTTP.
Registrator loggue "added" mais son token n'a pas les droits service:write
sur "prestashop" -> le service disparaissait de Consul apres chaque deploy.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>