Git bez SSH

Każdemu z nas to się kiedyś zdarzyło: trzeba szybko pobrać coś z taniego pakietu hostingu współdzielonego (np. z IONOS). git pull Możesz chcieć uruchomić program lub skorzystać z bazy danych, ale Twój dostawca hostingu nie zapewnia dostępu SSH – lub oferuje go tylko w droższych planach. Często jedyną opcją pozostaje żmudny proces ręcznego przesyłania plików przez FTP, co niepotrzebnie komplikuje wdrożenia i zwiększa ryzyko błędów.


Jednym z możliwych obejść jest zamontowanie systemu plików za pomocą sshfs. Teoretycznie brzmi to dobrze: montujesz folder zdalny lokalnie i pracujesz tak, jakby pliki znajdowały się na Twoim komputerze. Aby to zrobić, po prostu tworzysz katalog lokalny i łączysz go z serwerem za pośrednictwem użytkownika FTP/SSH. Polecenia niezbędne do nawiązania połączenia i przygotowania Gita dla tego folderu w systemie Linux wyglądają następująco::

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

Problem: Wydajność jest fatalna. Ponieważ Git ma problemy z poleceniami takimi jak git status Podczas wykonywania tysięcy małych operacji na plikach, z których każda wymaga dostępu do sieci, często czeka się minuty na nawet najprostsze odpowiedzi. W takich okolicznościach produktywna praca jest praktycznie niemożliwa. Szczególnie w projektach z licznymi zależnościami, terminal często całkowicie się zawiesza, zmuszając sfrustrowanych użytkowników do przerwania procesu.

Biblioteki takie jak ftpsh istnieją właśnie na potrzeby tego scenariusza. Umożliwia ona wykonywanie poleceń powłoki na serwerze zdalnym, który oferuje jedynie dostęp przez (S)FTP i HTTP. Sztuczka polega na tym, że tymczasowo wgrywany jest skrypt PHP, który wykonuje podane polecenia i zwraca dane wyjściowe. Wszystko to dzieje się w tle, ale działa jak prawdziwa powłoka.

Instalacja jest szybka i łatwa.:

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

Następnie tworzymy plik .env zawierający dane dostępowe (S)FTP.:

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

Teraz możemy wykonywać dowolne polecenia na serwerze, pod warunkiem, że narzędzia są dostępne zdalnie.:

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

Skrypt przesyła proces roboczy w tle, wykonuje polecenie lokalnie na serwerze (gdzie jest to szybkie) i zwraca wynik. Pozwala to na efektywną automatyzację wdrożeń, zrzutów bazy danych lub operacji Git, nawet w środowiskach hostingowych o ograniczonej pojemności. Integruje się również bezproblemowo z syncdb w celu synchronizacji baz danych.

Plecy