Git sans SSH

Qui n'a jamais vécu ça : avoir besoin de télécharger rapidement quelque chose sur un forfait d'hébergement mutualisé bon marché (par exemple, chez IONOS) ? git pull Vous souhaitez peut-être exécuter un programme ou utiliser une base de données, mais votre hébergeur ne propose pas d'accès SSH, ou seulement dans ses formules les plus onéreuses. Souvent, la seule option restante est le fastidieux processus de transfert manuel des fichiers via FTP, ce qui complexifie inutilement les déploiements et augmente les risques d'erreurs.


Une solution possible consiste à monter le système de fichiers via sshfs. En théorie, l'idée est séduisante : vous montez le dossier distant localement et travaillez comme si les fichiers se trouvaient sur votre propre machine. Pour ce faire, il suffit de créer un répertoire local et de le connecter au serveur via l'utilisateur FTP/SSH. Sous Linux, les commandes nécessaires pour établir la connexion et configurer Git pour ce dossier sont les suivantes ::

sudo apt-get install sshfs
mkdir /var/www/remote
cd /var/www/remote
sshfs username@your.host:/ -p 22 /var/www/remote
git config --global --add safe.directory /var/www/remote
git status
...
umount /var/www/remote

Le problème : les performances sont catastrophiques. Git a en effet beaucoup de mal avec des commandes comme… git status Lors de l'exécution de milliers de petites opérations sur des fichiers, chacune nécessitant un accès réseau, l'attente peut durer plusieurs minutes, même pour les réponses les plus simples. Dans ces conditions, il est quasiment impossible de travailler efficacement. En particulier dans les projets comportant de nombreuses dépendances, le terminal se bloque fréquemment, contraignant les utilisateurs, exaspérés, à abandonner le processus.

Des bibliothèques comme ftpsh existent précisément pour ce genre de situation. Elles permettent d'exécuter des commandes shell sur un serveur distant qui n'offre qu'un accès (S)FTP et HTTP. Le principe est simple : un script PHP est temporairement chargé, exécute les commandes et renvoie le résultat. Tout se passe en arrière-plan, mais l'expérience utilisateur est similaire à celle d'un véritable shell.

L'installation est rapide et facile.:

mkdir ftpsh
cd ftpsh
wget -O ftpsh.sh https://raw.githubusercontent.com/vielhuber/ftpsh/main/ftpsh.sh
chmod +x ftpsh.sh

Ensuite, nous créons un fichier .env avec les données d'accès (S)FTP.:

HOST=your-server.com
PORT=22
USERNAME=your-username
PASSWORD=your-password
REMOTE_PATH="/"
WEB_URL="https://your-server.com"

Nous pouvons désormais exécuter n'importe quelle commande sur le serveur, à condition que les outils soient disponibles à distance.:

ftpsh git status
ftpsh "mysqldump -h xxx --port 3306 -u xxx -p\"xxx\" --routines xxx" > dump.sql

Le script télécharge un processus en arrière-plan, exécute la commande localement sur le serveur (où l'exécution est rapide) et renvoie le résultat. Ceci permet une automatisation efficace des déploiements, des sauvegardes de bases de données ou des opérations Git, même sur des environnements d'hébergement limités. Il s'intègre également parfaitement avec syncdb pour la synchronisation des bases de données.

Retour