#!/bin/sh # Deploie le contenu de output/ (voir "make export") sur l'app YunoHost. # Voir README.md pour le detail des parametres et l'authentification par cle SSH. # # Le compte SSH d'une app "Custom Webapp" YunoHost est en general limite a # SFTP (ForceCommand internal-sftp) et chroote dans son propre dossier home # (/var/www/) : rsync ne fonctionne donc pas (il a besoin # d'executer un shell distant), et le chemin distant doit etre relatif a la # racine du chroot, pas un chemin absolu du systeme de fichiers du serveur. set -eu SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" PROJECT_ROOT="$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)" OUTPUT_DIR="$PROJECT_ROOT/output" if [ ! -f "${PROJECT_ROOT}/.env" ]; then echo "Aucun .env trouve : lance 'make config' puis renseigne-le (voir .env.example)." >&2 exit 1 fi # shellcheck disable=SC1090,SC1091 . "${PROJECT_ROOT}/.env" if [ ! -f "${OUTPUT_DIR}/index.html" ]; then echo "output/ est vide ou incomplet : lance d'abord 'make export' (ou le bouton Export de l'editeur)." >&2 exit 1 fi if [ -z "${REMOTE_HOST:-}" ] || [ -z "${REMOTE_USER:-}" ]; then echo "REMOTE_HOST et REMOTE_USER doivent etre renseignes dans .env (voir .env.example)." >&2 exit 1 fi REMOTE_PORT="${REMOTE_PORT:-22}" # Chemin relatif a la racine du chroot SFTP (pas le chemin absolu serveur). REMOTE_PATH="${REMOTE_PATH:-/www/}" SCP="scp" if [ -n "${REMOTE_PASSWORD:-}" ]; then if ! command -v sshpass > /dev/null 2>&1; then echo "REMOTE_PASSWORD est defini dans .env mais sshpass n'est pas installe (apt install sshpass)." >&2 exit 1 fi SCP="sshpass -p ${REMOTE_PASSWORD} scp" fi ${SCP} -P "${REMOTE_PORT}" \ "${OUTPUT_DIR}/index.html" \ "${OUTPUT_DIR}/style.css" \ "${OUTPUT_DIR}/app.js" \ "${OUTPUT_DIR}/config.json" \ "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}"