SSHなしのGit

誰もが経験したことがあるでしょうが、安価な共有ホスティング パッケージ (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

次に、(S)FTP アクセス データを含む .env ファイルを作成します。:

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とシームレスに統合され、データベース同期を実現します。

バック