boutique

Deploiement (Hetzner, boutique.implacables.fr)

La boutique est servie par nginx sur le serveur Hetzner (178.104.195.46), a cote de ffse.implacables.fr :

Mise a jour : automatique

Il n’y a rien a faire apres un git push sur main. Le serveur recupere lui-meme le depot (public) chaque minute :

Pas de cle SSH ni de secret GitHub : le serveur ne fait que lire un depot public.

Publication du catalogue (bouton Publier)

Le catalogue ne passe plus par le depot. Le bouton Publier du backoffice envoie le catalogue (photos comprises) a une petite API sur le serveur, server/api.js, qui l’integre avec scripts/integrer-catalogue.py dans /var/www/boutique/data :

boutique/catalogue.json du depot ne sert plus que de repli si data/catalogue.json manque.

Acces au backoffice

/backoffice/ et /api/ demandent un identifiant (auth_basic nginx), lu dans /etc/nginx/boutique.htpasswd. Ajouter un compte (le mot de passe est demande deux fois, rien n’est affiche) :

ssh -t root@178.104.195.46 'printf "%s:%s\n" NOM "$(openssl passwd -apr1)" >> /etc/nginx/boutique.htpasswd'

Retirer un compte : supprimer sa ligne dans ce fichier. Aucun redemarrage n’est necessaire.

Paiement Stripe

Le serveur cree une session Stripe Checkout pour chaque commande (server/api.js), et Stripe lui confirme le paiement par un webhook. Deux secrets, poses sur le serveur uniquement (jamais dans le depot) dans /etc/boutique/stripe.env, lu par boutique-api.service :

Poser ou changer les deux secrets (saisie masquee, rien n’est affiche) :

ssh -t root@178.104.195.46 'read -rsp "Cle Stripe (sk_... ou rk_...) : " K; echo; read -rsp "Secret du webhook (whsec_...) : " W; echo; umask 077; mkdir -p /etc/boutique; printf "STRIPE_SECRET_KEY=%s\nSTRIPE_WEBHOOK_SECRET=%s\n" "$K" "$W" > /etc/boutique/stripe.env; systemctl restart boutique-api; sleep 1; journalctl -u boutique-api -n 1 --no-pager -o cat'

La derniere ligne affichee dit si Stripe est en TEST ou en LIVE. Sans ce fichier, les commandes sont enregistrees « a regler au retrait ».

Commandes enregistrees : /var/www/boutique/data/commandes.json. Copie dans le Google Sheet du club si /etc/boutique/sheets.env existe : voir GOOGLE_SHEETS.md.

Sur le serveur

Commandes utiles :

ssh root@178.104.195.46 systemctl list-timers boutique-pull.timer
ssh root@178.104.195.46 journalctl -u boutique-pull.service -n 20
ssh root@178.104.195.46 sudo -u deploy /usr/local/bin/boutique-pull   # mise a jour immediate