من منا لم يمر بهذا الموقف: تحتاج إلى تنزيل شيء ما بسرعة على باقة استضافة مشتركة رخيصة (على سبيل المثال، من IONOS). git pull قد ترغب في تشغيل برنامج أو استخدام قاعدة بيانات، لكن مزود خدمة الاستضافة لا يمنحك صلاحية الوصول عبر SSH، أو أنها متاحة فقط في الباقات الأعلى سعرًا. غالبًا ما يكون الخيار الوحيد المتبقي هو عملية تحميل الملفات يدويًا عبر بروتوكول نقل الملفات (FTP)، وهي عملية شاقة تجعل عمليات النشر معقدة بلا داعٍ وعرضة للأخطاء.
أحد الحلول الممكنة هو تثبيت نظام الملفات عبر sshfs. نظريًا، يبدو هذا جيدًا: تقوم بتثبيت المجلد البعيد محليًا وتعمل كما لو كانت الملفات موجودة على جهازك. للقيام بذلك، ما عليك سوى إنشاء مجلد محلي وربطه بالخادم عبر مستخدم FTP/SSH. تبدو الأوامر اللازمة لإنشاء الاتصال وإعداد Git لهذا المجلد كما يلي في نظام Linux::
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 صعوبة في التعامل مع أوامر مثل git status عند إجراء آلاف العمليات على الملفات الصغيرة، والتي تتطلب كل منها الوصول إلى الشبكة، غالبًا ما ينتظر المستخدم دقائق حتى للحصول على أبسط الاستجابات. يصبح العمل المثمر شبه مستحيل في ظل هذه الظروف. خاصةً في المشاريع ذات التبعيات الكثيرة، يتجمد طرفية النظام بشكل كامل في كثير من الأحيان، مما يجبر المستخدمين المحبطين على التخلي عن العملية.
توجد مكتبات مثل ftpsh لهذا السيناريو بالضبط. تتيح المكتبة إمكانية تنفيذ أوامر shell على خادم بعيد يوفر فقط الوصول (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 لمزامنة قواعد البيانات.