From aed16efdfc417144e341d48db5d847d220bd8bab Mon Sep 17 00:00:00 2001 From: mathieu Date: Sat, 8 Aug 2026 01:24:57 +0200 Subject: [PATCH] Ajoute le script de publication vers akbar (SFTP via rclone) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le compte SSH de déploiement est restreint au SFTP côté serveur (ForceCommand internal-sftp, YunoHost) : rsync/scp échouent car ils ont besoin d'exécuter une commande shell distante. rclone en backend SFTP ne parle que le protocole SFTP et fonctionne avec ce type de compte. Co-Authored-By: Claude Sonnet 5 --- README.md | 4 ++- script/publish-akbar.sh | 56 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100755 script/publish-akbar.sh diff --git a/README.md b/README.md index 8a4ffd2..99ee92b 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,9 @@ Modifier `.env.exemple` en `.env` ### publish.sh `./script/publish.sh` : Publie le site dans le _PUBLISH_DIR_ de _.env_ +### publish-akbar.sh +`./script/publish-akbar.sh` : build (`publish.sh`) puis déploiement de `PUBLISH_DIR` vers akbar via `rclone`/SFTP (`SSH_USER`, `SSH_HOST`, `SSH_PORT`, `SSH_REMOTE_PATH` dans `.env`). Le compte de déploiement est restreint au SFTP côté serveur (YunoHost), d'où `rclone` plutôt que `rsync`/`scp` qui nécessitent un shell distant. + Ne pas oublier de vérifier que les - dossiers sont en 755 (`find /var/www -type d -exec chmod 755 {} \;`) - fichiers sont en 644 (`find /var/www -type f -exec chmod 644 {} \;`) @@ -85,7 +88,6 @@ En mode incognito sur Chromium, F12 puis Lighthouse. Tester smartphon Document does not have a meta description - ## Idées d'évolutions - Témoignages diff --git a/script/publish-akbar.sh b/script/publish-akbar.sh new file mode 100755 index 0000000..9d0da31 --- /dev/null +++ b/script/publish-akbar.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# +# Build le site (publish.sh) puis déploie le résultat vers akbar en une +# seule commande. +# +# Le compte SSH de déploiement (webapp YunoHost) est restreint au SFTP +# (ForceCommand internal-sftp côté serveur) : ni scp, ni rsync-sur-ssh ne +# fonctionnent (la commande distante est refusée, la connexion est coupée). +# On utilise donc rclone en backend SFTP, qui ne parle que le protocole +# SFTP et ne tente jamais d'exécuter de commande shell distante. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(dirname "${SCRIPT_DIR}")" + +if ! command -v rclone >/dev/null 2>&1; then + echo "Erreur : rclone est requis (apt install rclone)." + exit 1 +fi + +if [[ ! -f "${PROJECT_DIR}/.env" ]]; then + echo "Erreur : fichier .env introuvable." + exit 1 +fi + +set -a +source "${PROJECT_DIR}/.env" +set +a + +: "${SSH_USER:?Variable SSH_USER manquante dans .env}" +: "${SSH_HOST:?Variable SSH_HOST manquante dans .env}" +: "${SSH_PORT:=22}" +: "${SSH_REMOTE_PATH:?Variable SSH_REMOTE_PATH manquante dans .env}" + +PUBLISH_PATH="${PROJECT_DIR}/${PUBLISH_DIR}" + +echo "=== Étape 1/2 : build du site ===" +(cd "${PROJECT_DIR}" && "${SCRIPT_DIR}/publish.sh") + +echo +echo "=== Étape 2/2 : déploiement (SFTP) vers ${SSH_USER}@${SSH_HOST}:${SSH_REMOTE_PATH} ===" +rclone sync \ + "${PUBLISH_PATH}" \ + ":sftp:${SSH_REMOTE_PATH}" \ + --sftp-host "${SSH_HOST}" \ + --sftp-user "${SSH_USER}" \ + --sftp-port "${SSH_PORT}" \ + --sftp-ask-password \ + --sftp-shell-type none \ + --sftp-disable-hashcheck \ + --progress + +echo +echo "Déployé. Site visible sur :" +echo " https://${SSH_HOST}/"