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.
ftpsh gibi kütüphaneler tam olarak bu senaryo için mevcuttur. Bu kütüphane, yalnızca (S)FTP ve HTTP erişimi sunan uzak bir sunucuda shell komutlarını çalıştırmanıza olanak tanır. İşin püf noktası, verilen komutları çalıştıran ve çıktıyı döndüren bir PHP betiğinin geçici olarak yüklenmesidir. Tüm bunlar arka planda gerçekleşir, ancak gerçek bir shell gibi hissettirir.
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
Ardından, (S)FTP erişim verilerini içeren bir .env dosyası oluşturuyoruz.:
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
Bu betik, arka planda bir çalışanı yükler, komutu sunucuda yerel olarak (hızlı olduğu yerde) yürütür ve sonucu döndürür. Bu, sınırlı barındırma ortamlarında bile dağıtımların, veritabanı yedeklemelerinin veya Git işlemlerinin verimli bir şekilde otomatikleştirilmesini sağlar. Ayrıca veritabanı senkronizasyonu için syncdb ile sorunsuz bir şekilde entegre olur.