Git без SSH

Все мы оказывались в такой ситуации: нужно быстро что-то скачать с дешевого хостинга (например, с 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 для синхронизации баз данных.

Назад