Wie heeft dit niet meegemaakt: je moet snel iets downloaden op een goedkoop shared hostingpakket (bijvoorbeeld van IONOS). git pull U wilt wellicht een programma uitvoeren of een database gebruiken, maar uw hostingprovider biedt geen SSH-toegang – of alleen in duurdere abonnementen. Vaak is de enige overgebleven optie het omslachtige proces van het handmatig uploaden van bestanden via FTP, wat implementaties onnodig ingewikkeld en foutgevoelig maakt.
Een mogelijke oplossing is om het bestandssysteem te mounten via sshfs. In theorie klinkt dit goed: je koppelt de externe map lokaal en werkt alsof de bestanden op je eigen computer staan. Om dit te doen, maak je simpelweg een lokale map aan en verbind je deze met de server via de FTP/SSH-gebruiker. De benodigde commando's om de verbinding tot stand te brengen en Git voor deze map voor te bereiden, zien er onder Linux als volgt uit::
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
Het probleem: de prestaties zijn erbarmelijk. Git heeft namelijk moeite met commando's zoals git status Bij het uitvoeren van duizenden kleine bestandsbewerkingen, die elk netwerktoegang vereisen, moet je vaak minuten wachten op zelfs de eenvoudigste reacties. Productief werken is onder deze omstandigheden vrijwel onmogelijk. Vooral bij projecten met veel afhankelijkheden loopt de terminal regelmatig volledig vast, waardoor gefrustreerde gebruikers het proces moeten afbreken.
Bibliotheken zoals ftpsh bestaan juist voor dit soort scenario's. Met deze bibliotheek kun je shell-commando's uitvoeren op een externe server die alleen (S)FTP- en HTTP-toegang biedt. De truc is dat er tijdelijk een PHP-script wordt geüpload dat de opgegeven commando's uitvoert en de output teruggeeft. Dit gebeurt allemaal op de achtergrond, maar voelt aan als een echte shell.
De installatie is snel en eenvoudig.:
mkdir ftpsh
cd ftpsh
wget -O ftpsh.sh https://raw.githubusercontent.com/vielhuber/ftpsh/main/ftpsh.sh
chmod +x ftpsh.sh
Vervolgens maken we een .env-bestand aan met de (S)FTP-toegangsgegevens.:
HOST=your-server.com
PORT=22
USERNAME=your-username
PASSWORD=your-password
REMOTE_PATH="/"
WEB_URL="https://your-server.com"
Nu kunnen we alle commando's op de server uitvoeren, mits de benodigde tools op afstand beschikbaar zijn.:
ftpsh git status
ftpsh "mysqldump -h xxx --port 3306 -u xxx -p\"xxx\" --routines xxx" > dump.sql
Het script uploadt een worker op de achtergrond, voert de opdracht lokaal op de server uit (waar het snel is) en retourneert het resultaat. Dit maakt efficiënte automatisering van implementaties, database-dumps of Git-bewerkingen mogelijk, zelfs in hostingomgevingen met beperkte resources. Het integreert bovendien naadloos met syncdb voor databasesynchronisatie.