Все мы оказывались в такой ситуации: нужно быстро что-то скачать с дешевого хостинга (например, с IONOS). git pull Вам может понадобиться запустить программу или использовать базу данных, но ваш хостинг-провайдер не предоставляет доступ по SSH — или предоставляет его только в более дорогих тарифных планах. Часто единственным оставшимся вариантом является утомительный процесс ручной загрузки файлов через FTP, что делает развертывание излишне сложным и подверженным ошибкам.
Один из возможных обходных путей — монтировать файловую систему через sshfs. В теории это звучит неплохо: вы монтируете удалённую папку локально и работаете так, как если бы файлы находились на вашем собственном компьютере. Для этого вы просто создаёте локальный каталог и подключаете его к серверу через пользователя FTP/SSH. Необходимые команды для установления соединения и подготовки Git к работе с этой папкой в 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
Проблема: производительность ужасна. Git с трудом справляется с такими командами, как... git status При выполнении тысяч операций с небольшими файлами, каждая из которых требует доступа к сети, часто приходится ждать несколько минут даже самых простых ответов. В таких условиях продуктивная работа практически невозможна. Особенно в проектах с многочисленными зависимостями терминал часто полностью зависает, вынуждая разочарованных пользователей прерывать процесс.
Именно для этого сценария существуют такие библиотеки, как ftpsh . Библиотека позволяет выполнять команды оболочки на удаленном сервере, который предлагает только доступ (S)FTP и HTTP. Хитрость: временно загружается PHP-скрипт, который выполняет заданные команды и возвращает выходные данные. Все это происходит в фоновом режиме, но ощущается как настоящая оболочка.
Установка быстрая и простая.:
mkdir ftpsh
cd ftpsh
wget -O ftpsh.sh https://raw.githubusercontent.com/vielhuber/ftpsh/main/ftpsh.sh
chmod +x ftpsh.sh
Затем мы устанавливаем .env с данными доступа по (S)FTP к:
HOST=your-server.com
PORT=22
USERNAME=your-username
PASSWORD=your-password
REMOTE_PATH="/"
WEB_URL="https://your-server.com"
Теперь мы можем выполнять любые команды на сервере, при условии, что инструменты доступны удаленно.:
ftpsh git status
ftpsh "mysqldump -h xxx --port 3306 -u xxx -p\"xxx\" --routines xxx" > dump.sql
Скрипт загружает воркера в фоновом режиме, выполняет команду локально на сервере (где это происходит быстро) и возвращает результат. Это позволяет эффективно автоматизировать развертывания, дампы баз данных или операции Git даже в ограниченных средах хостинга. Например, он также отлично работает с syncdb для синхронизации баз данных.