Tạo nhanh web/FTP server với Python

Khi cần chia sẻ file qua mạng nội bộ, tôi thường nghĩ đến việc chạy 1 web server hay FTP server, nhưng lại ngại cài những phần mềm chuyên dụng như Apache, ProFTP vì tôi chỉ muốn chạy server trong 1 khoảng thời gian ngắn, chỉ phục vụ tải file cho một thư mục nhất định và không muốn cấu hình username/password để login.

Chẳng hạn, nếu cài webserver chuyên dụng như Apache, Nginx thì thường thư mục gốc sẽ là /var/wwww/, nếu muốn chia sẻ file từ 1 thư mục bất kì thì phải tạo symlink vô đây, và phải gõ password để lên sudo. Nếu cài 1 FTP server chuyên dụng như ProFTP thì từ client truy cập vô, luôn đụng phải thư mục root và phải đăng nhập username, password.

Thật mừng là Python có những thư viện đáp ứng rất tốt nhu cầu. Chẳng hạn tôi muốn chia sẻ file từ thư mục /home/hongquan/Documents, tôi chỉ việc vào thư mục đó và chạy:

python3 -m http.server

Trong đó http.server là standard lib của Python nên không cần cài đặt gì thêm.

Nếu mở trình duyệt ở máy khác, ta sẽ thấy nội dụng thư mục được chia sẻ và có thể download dễ dàng (lưu ý port mặc định là 8000):

Web

Nếu muốn tải cùng lúc nhiều file thì chạy FTP server tiện hơn. Python không có thư viện chuẩn cho FTP server, ta phải dùng thư viện ngoài là pyftpdlib nhưng việc cài đặt thì quá đơn giản như các thư viện Python khác:

sudo pip3 install pyftpdlib

Sau đó ta chạy FTP server như sau (port mặc định là 2121):

python3 -m pyftpdlib

Mở FTP client từ máy khác, ta sẽ thấy ngay nội dung được chia sẻ mà không cần đăng nhập hay nhảy thư mục lôi thôi:

FTP

Thật tiện phải không?

HTTP, FTP là cách tôi thường dùng để chuyển dữ liệu qua lại giữa laptop, điện thoại và tablet của tôi. Một điều tuyệt vời nữa là điện thoại của tôi cũng hỗ trợ Python, Terminal như máy bàn nên tôi có thể chạy web server, FTP server y chang vậy từ điện thoại.