چه کسی این را تجربه نکرده است: شما باید به سرعت چیزی را روی یک بسته میزبانی اشتراکی ارزان (مثلاً از IONOS) دانلود کنید. git pull ممکن است بخواهید یک برنامه را اجرا کنید یا از یک پایگاه داده استفاده کنید، اما ارائه دهنده خدمات میزبانی وب شما دسترسی SSH را ارائه نمیدهد - یا فقط در پلنهای گرانتر این امکان وجود دارد. اغلب، تنها گزینه باقی مانده، فرآیند خسته کننده آپلود دستی فایلها از طریق FTP است که باعث میشود استقرارها به طور غیرضروری پیچیده و مستعد خطا باشند.
یک راه حل ممکن، نصب سیستم فایل از طریق sshfs. در تئوری، این خوب به نظر میرسد: شما پوشه راه دور را به صورت محلی mount میکنید و طوری کار میکنید که انگار فایلها روی دستگاه خودتان هستند. برای انجام این کار، به سادگی یک دایرکتوری محلی ایجاد میکنید و آن را از طریق کاربر FTP/SSH به سرور متصل میکنید. دستورات لازم برای برقراری اتصال و آمادهسازی 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 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
سپس ما یک .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 برای همگام سازی پایگاه های داده نیز کاملاً کار می کند.