Git không cần SSH

Ai mà chưa từng trải qua tình huống này: Bạn cần tải nhanh một thứ gì đó trên gói lưu trữ chia sẻ giá rẻ (ví dụ: từ IONOS). git pull Bạn có thể muốn chạy một chương trình hoặc sử dụng cơ sở dữ liệu, nhưng nhà cung cấp dịch vụ lưu trữ của bạn không cấp quyền truy cập SSH – hoặc chỉ có trong các gói dịch vụ đắt tiền hơn. Thông thường, lựa chọn duy nhất còn lại là quy trình tốn thời gian tải lên tệp tin thủ công qua FTP, điều này làm cho việc triển khai trở nên phức tạp không cần thiết và dễ xảy ra lỗi.


Một giải pháp khả thi là gắn kết hệ thống tập tin thông qua sshfs. Về lý thuyết, điều này nghe có vẻ tốt: Bạn gắn thư mục từ xa vào máy tính cục bộ và làm việc như thể các tệp nằm trên máy của bạn. Để làm điều này, bạn chỉ cần tạo một thư mục cục bộ và kết nối nó với máy chủ thông qua người dùng FTP/SSH. Các lệnh cần thiết để thiết lập kết nối và chuẩn bị Git cho thư mục này trông như thế này trên 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

Vấn đề: Hiệu năng cực kỳ kém. Vì Git gặp khó khăn với các lệnh như... git status Khi thực hiện hàng nghìn thao tác nhỏ trên các tập tin, mỗi thao tác đều yêu cầu truy cập mạng, người dùng thường phải chờ đợi vài phút ngay cả với những phản hồi đơn giản nhất. Hiệu quả công việc gần như không thể đạt được trong điều kiện này. Đặc biệt trong các dự án có nhiều phụ thuộc, thiết bị đầu cuối thường xuyên bị treo hoàn toàn, buộc người dùng phải bỏ dở công việc vì quá bực bội.

Các thư viện như ftpsh tồn tại chính xác cho trường hợp này. Thư viện này cho phép bạn thực thi các lệnh shell trên máy chủ từ xa chỉ cung cấp truy cập (S)FTP và HTTP. Mấu chốt là một kịch bản PHP được tải lên tạm thời, kịch bản này sẽ thực thi các lệnh đã cho và trả về kết quả. Tất cả điều này diễn ra trong nền, nhưng mang lại cảm giác như một shell thực sự.

Việc lắp đặt nhanh chóng và dễ dàng.:

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

Tiếp theo, chúng ta tạo một tệp .env với dữ liệu truy cập (S)FTP.:

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

Giờ đây, chúng ta có thể thực thi bất kỳ lệnh nào trên máy chủ, miễn là các công cụ đó có sẵn từ xa.:

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

Tập lệnh này tải lên một tiến trình con trong nền, thực thi lệnh cục bộ trên máy chủ (nơi tốc độ nhanh) và trả về kết quả. Điều này cho phép tự động hóa hiệu quả việc triển khai, sao lưu cơ sở dữ liệu hoặc các thao tác Git, ngay cả trên các môi trường lưu trữ hạn chế. Nó cũng tích hợp liền mạch với syncdb để đồng bộ hóa cơ sở dữ liệu.

Trở lại