¿Quién no ha experimentado esto: necesitas descargar rápidamente algo en un paquete de alojamiento compartido barato (por ejemplo, de IONOS)? git pull Quizás quieras ejecutar un programa o usar una base de datos, pero tu proveedor de alojamiento no te da acceso SSH, o solo lo ofrece en planes más caros. A menudo, la única opción es el tedioso proceso de subir archivos manualmente por FTP, lo que complica innecesariamente las implementaciones y las hace propensas a errores.
Una posible solución alternativa es montar el sistema de archivos mediante sshfs. En teoría, esto suena bien: montas la carpeta remota localmente y trabajas como si los archivos estuvieran en tu propia máquina. Para ello, simplemente creas un directorio local y lo conectas al servidor mediante el usuario FTP/SSH. Los comandos necesarios para establecer la conexión y preparar Git para esta carpeta se ven así en Linux::
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
El problema: El rendimiento es pésimo. Dado que Git tiene dificultades con comandos como git status Al realizar miles de operaciones con archivos pequeños, cada una de las cuales requiere acceso a la red, a menudo se esperan minutos incluso para las respuestas más simples. El trabajo productivo es prácticamente imposible en estas circunstancias. Especialmente en proyectos con numerosas dependencias, la terminal se bloquea por completo con frecuencia, obligando a los usuarios frustrados a abandonar el proceso.
Existen bibliotecas como ftpsh exactamente para este escenario. La biblioteca permite ejecutar comandos de shell en un servidor remoto que solo ofrece acceso (S)FTP y HTTP. El truco: se carga temporalmente un script PHP, que ejecuta los comandos dados y devuelve el resultado. Todo esto sucede en segundo plano, pero se siente como un caparazón real.
La instalación es rápida y sencilla.:
mkdir ftpsh
cd ftpsh
wget -O ftpsh.sh https://raw.githubusercontent.com/vielhuber/ftpsh/main/ftpsh.sh
chmod +x ftpsh.sh
Luego pusimos una .env con los datos de acceso (S)FTP a:
HOST=your-server.com
PORT=22
USERNAME=your-username
PASSWORD=your-password
REMOTE_PATH="/"
WEB_URL="https://your-server.com"
Ahora podemos ejecutar cualquier comando en el servidor, siempre que las herramientas estén disponibles de forma remota.:
ftpsh git status
ftpsh "mysqldump -h xxx --port 3306 -u xxx -p\"xxx\" --routines xxx" > dump.sql
El script carga un trabajador en segundo plano, ejecuta el comando localmente en el servidor (donde es rápido) y devuelve el resultado. Esto permite automatizar de manera eficiente las implementaciones, los volcados de bases de datos y las operaciones de Git, incluso en entornos de alojamiento limitados. Por ejemplo, también funciona perfectamente con syncdb para sincronizar bases de datos.