SSH olmadan Git

Bunu kim yaşamadı ki: Ucuz bir paylaşımlı hosting paketinden (örneğin IONOS'tan) hızlıca bir şey indirmeniz gerekiyor. git pull Bir program çalıştırmak veya bir veritabanı kullanmak isteyebilirsiniz, ancak hosting sağlayıcınız SSH erişimi sağlamıyor veya yalnızca daha pahalı planlarda sunuyor. Çoğu zaman geriye kalan tek seçenek, dosyaları FTP üzerinden manuel olarak yüklemenin zahmetli sürecidir; bu da dağıtımları gereksiz yere karmaşık ve hataya açık hale getirir.


Olası bir çözüm yolu, dosya sistemini şu şekilde bağlamaktır: sshfs. Teoride bu kulağa iyi geliyor: Uzak klasörü yerel olarak bağlıyorsunuz ve dosyalar kendi makinenizdeymiş gibi çalışıyorsunuz. Bunu yapmak için, basitçe yerel bir dizin oluşturup FTP/SSH kullanıcısı aracılığıyla sunucuya bağlanıyorsunuz. Linux altında bağlantıyı kurmak ve Git'i bu klasör için hazırlamak için gerekli komutlar şu şekildedir::

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

Sorun şu: Performans berbat. Git, şu gibi komutlarla başa çıkmakta zorlanıyor: git status Binlerce küçük dosya işlemi gerçekleştirirken, her biri ağ erişimi gerektirdiğinden, en basit yanıtlar için bile dakikalarca beklemek gerekebiliyor. Bu koşullar altında verimli çalışma neredeyse imkansız hale geliyor. Özellikle çok sayıda bağımlılığı olan projelerde, terminal sıklıkla tamamen donuyor ve bu da hayal kırıklığına uğramış kullanıcıların işlemi bırakmasına neden oluyor.

Tam olarak bu senaryo için ftpsh gibi kütüphaneler mevcuttur. Kitaplık, yalnızca (S)FTP ve HTTP erişimi sunan uzak bir sunucuda kabuk komutlarının yürütülmesini mümkün kılar. İşin püf noktası: Verilen komutları yürüten ve çıktıyı döndüren bir PHP betiği geçici olarak yüklenir. Bunların hepsi arka planda oluyor ama gerçek bir kabuk gibi geliyor.

Kurulum hızlı ve kolaydır.:

mkdir ftpsh
cd ftpsh
wget -O ftpsh.sh https://raw.githubusercontent.com/vielhuber/ftpsh/main/ftpsh.sh
chmod +x ftpsh.sh

Sonra biz bir şey koyduk. .env (S)FTP erişim verileriyle:

HOST=your-server.com
PORT=22
USERNAME=your-username
PASSWORD=your-password
REMOTE_PATH="/"
WEB_URL="https://your-server.com"

Artık, araçlar uzaktan erişilebilir olduğu sürece, sunucuda herhangi bir komutu çalıştırabiliriz.:

ftpsh git status
ftpsh "mysqldump -h xxx --port 3306 -u xxx -p\"xxx\" --routines xxx" > dump.sql

Betik arka planda bir çalışan yükler, komutu sunucuda yerel olarak çalıştırır (hızlı olduğu yerde) ve sonucu döndürür. Bu, sınırlı barındırma ortamlarında bile dağıtımların, veritabanı dökümlerinin veya Git işlemlerinin verimli bir şekilde otomatikleştirilmesine olanak tanır. Örneğin, veritabanlarını senkronize etmek için sinkdb ile de mükemmel çalışır.

Geri