谁没经历过这种情况:你需要在廉价的共享主机套餐(例如 IONOS 的套餐)上快速下载某些东西。 git pull 您可能需要运行某个程序或使用数据库,但您的主机提供商不提供 SSH 访问权限——或者只在更昂贵的套餐中才提供。通常,唯一的选择是通过 FTP 手动上传文件,这会使部署变得不必要地复杂且容易出错。
一种可能的解决方法是通过以下方式挂载文件系统: sshfs. 理论上,这听起来不错:您可以将远程文件夹挂载到本地,然后像操作本地文件一样进行操作。为此,您只需创建一个本地目录,并通过 FTP/SSH 用户将其连接到服务器。在 Linux 系统下,建立连接并为该文件夹配置 Git 所需的命令如下所示::
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 访问的远程服务器上执行 shell 命令成为可能。技巧:临时上传一个 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完美配合来同步数据库。