#!/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}/"