گیت بدون SSH

چه کسی این را تجربه نکرده است: شما باید به سرعت چیزی را روی یک بسته میزبانی اشتراکی ارزان (مثلاً از 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 دقیقاً برای این سناریو وجود دارند. این کتابخانه به شما امکان می‌دهد دستورات shell را روی یک سرور از راه دور که فقط دسترسی (S)FTP و HTTP را ارائه می‌دهد، اجرا کنید. ترفند این است که یک اسکریپت PHP به طور موقت آپلود می‌شود که دستورات داده شده را اجرا کرده و خروجی را برمی‌گرداند. همه اینها در پس‌زمینه اتفاق می‌افتد، اما مانند یک shell واقعی به نظر می‌رسد.

نصب آن سریع و آسان است.:

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

این اسکریپت یک worker را در پس‌زمینه آپلود می‌کند، دستور را به صورت محلی روی سرور (جایی که سریع است) اجرا می‌کند و نتیجه را برمی‌گرداند. این امر امکان خودکارسازی کارآمد استقرارها، dumpهای پایگاه داده یا عملیات Git را حتی در محیط‌های میزبانی محدود فراهم می‌کند. همچنین برای همگام‌سازی پایگاه داده به طور یکپارچه با syncdb ادغام می‌شود.

بازگشت