Chưa tới 5 phút là thời gian đưa Python App của bạn ra ngoài Internet với BizflyCloud App Engine

Mở đầu Tiếp tục trong Series triển khai đủ loại ứng dụng lên trên BizflyCloud App Engine, hôm nay mình sẽ hướng dẫn mọi người triển khai ứng dụng viết bằng Python. Python là một ngôn ngữ ngày càng phổ biến bởi sự tiện dụng và khả năng làm được nhiều công việc khác nhau.

Mở đầu

Tiếp tục trong Series triển khai đủ loại ứng dụng lên trên BizflyCloud App Engine, hôm nay mình sẽ hướng dẫn mọi người triển khai ứng dụng viết bằng Python. Python là một ngôn ngữ ngày càng phổ biến bởi sự tiện dụng và khả năng làm được nhiều công việc khác nhau. Không dài dòng nữa, chúng ta cùng “make your hand dirty” nhé!
image.png

Điều kiện tiên quyết

  • Đã cài đặt Python3
  • Đã cài đặt pip: PyPI Package Manager
  • Đã có tài khoản tại BizflyCloud

Chuẩn bị

Code

Trong bài này mình sẽ triển khai một web app Python đơn giản chạy bằng framework Flask, chắc mọi người từng làm việc với Python đều sẽ biết framework quốc dân này rồi 😄.

Ta tạo file có tên main.py với nội dung như sau:

from flask import Flask

app = Flask(__name__)@app.get("/")defindex():return"This is your first Python app run on App Engine BizflyCloud!"if __name__ =="__main__":
    app.run(host="0.0.0.0", port=8080, debug=True)

Trong đoạn code trên mình sẽ chạy một web app Python tại cổng 8080 với host là 0.0.0.0 đồng nghĩa với việc chấp nhận truy cập từ mọi địa chỉ IP vào webserver này.

Lưu ý: Một số trường hợp các bạn chạy với host=127.0.0.1 hoặc localhost khi triển khai lên trên App Engine sẽ bị lỗi do không cho phép truy cập từ bên ngoài. Cấu hình host như trên chỉ phù hợp với môi trường dev ở local.

Mình thêm một route mặc định @app.get(“/”) để nhận yêu cầu từ người truy cập, nếu có request gửi đến, ứng dụng python này sẽ trả về This is your first Python app run on App Engine BizflyCloud!. Rất dễ hiểu đúng không 😄

Tiếp theo ta cần cài đặt framework FlaskGunicorn để chạy web app Python này bằng câu lệnh

pip install flask gunicorn

Chạy thử ứng dụng python trên bằng câu lệnh sau:

python main.py
# hoặc chạy sử dụng gunicorn
gunicorn --bind :8080 --workers 1 --threads 8 --timeout 0 main:app

Dependencies

BizflyCloud App Engine phát hiện ngôn ngữ Python dựa trên những file đặc trưng dùng để quản lý dependencies ví dụ như:

  • requirements.txt
  • Pipfile
  • poetry.lock
  • environment.yml

Chính vì thế source code của bạn cần chứa các file này để App Engine phát hiện được ngôn ngữ Python để build cho phù hợp. Đơn giản nhất để tạo ra file này bạn chạy câu lệnh:

pip freeze > requirements.txt

Nội dung file sau khi tạo sẽ có nội dung dạng:

Flask==2.0.2
gunicorn==20.1.0

Run Command

Bạn hoàn toàn có thể cấu hình Run command hay câu lệnh để chạy ứng dụng cho web app Python trên App Engine. Để cấu hình Run Command bạn cần thêm file có tên Procfile, ở đây mình sẽ chạy ứng dụng với gunicorn đã cài ở mục trước. File Procfile sẽ có nội dung như sau:

# Run command
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

Giải thích

  • web: định nghĩa tên của process chạy command này
  • gunicorn –bind :$PORT –workers 1 –threads 8 –timeout 0 main:app: Chạy web app Python với gunicorn với port được lấy từ biến môi trường PORT, sử dụng 1 worker với 8 thread, thời gian timeout bằng 0.

Tìm hiểu thêm về gunicorn tại đây: https://gunicorn.org/

Python Version

Việc quản lý phiên bản Python mà bạn sẽ chạy cũng là một vấn đề khá quan trọng đúng không 😄. Để cấu hình phiên bản Python mà bạn sẽ chạy trên BizflyCloud App Engine hãy tạo file runtime.txt với nội dung như sau:

python-3.11.0

Các phiên bản Python được hỗ trợ sẽ được cập nhật liên tục tại link docs: https://docs.bizflycloud.vn/app_engine/deploy/python/#id=python-version-không-bắt-buộc

Về cơ bản như vậy là ứng dụng của bạn đã có thể triển khai được rồi. Các bạn có thể áp dụng các bước trên với source code python bạn đã có sẵn hoặc sử dụng source code mẫu mình đã đẩy lên Github

https://github.com/bizflycloud/app-engine-sample-python

Tạo Service

Để tạo được service trên App Engine thì bạn cần phải có tài khoản ở BizflyCloud, các bước này mình đã hướng dẫn trong bài trước, mọi người đọc tại đây nhé !

Trong phần tạo service mình sẽ nhập các trường với nội dung như hình ở dưới:
image.png

  • Tên Service: tên của dịch vụ, dùng để gợi nhớ
  • Location: Vị trí triển khai ứng dụng (Hiện tại sản phẩm đang trong quá trình beta nên chỉ hỗ trợ Hà Nội, sau này sẽ có thêm nhiều location khác nha 😄 )
  • Source Type: Git – Trong phần này mình triển khai từ Github nên sẽ sử dụng GIT, nếu các bạn đã đóng gói ứng dụng thành image rồi thì có thể chọn image
  • Source URL: Đường dẫn đến repo github (lưu ý URL này không chưa branch nhé)
  • Branch: Nhánh mà bạn muốn triển khai

Trong phần cấu hình ứng dụng, vì đây là một Web service nên mình sẽ chọn Loại ứng dụngHTTP, PORT ở đây sẽ là cổng mà dịch vụ của bạn sẽ chạy, nếu web python của bạn chạy với port 8080 thì đoạn này cần set là 8080, tuy nhiên Run command hiện mình đang để chạy với cổng là giá trị biến môi trường PORT nên đoạn này không cần thay đổi gì, mặc định là 80.

Ngoài ra bạn có thể thêm biến môi trường vào trong ứng dụng để kết nối đến các database, Message Queue,… trong phần Cấu hình Enviroments

Sau khi đã cấu hình xong hết nhấn xác nhận để tạo service. Quá trình triển khai sẽ lập tức được triển khai, bạn có thể xem Logs quá trình đóng gói trong phần Logs ở thanh menu bên trái.

image.png

Đối với ứng dụng này chỉ tốn tầm 3 phút, hệ thống đã triển khai thành công và trả về cho bạn URL để truy cập.

Đường dẫn trả về sẽ có dạng https://example-nnwpu.appengine.bfcplatform.vn/python-app. Kết quả sau khi truy cập:
image.png

Kết

Hiện tại BizflyCloud App Engine đang hỗ trợ các bạn có thể triển khai 4 service mỗi service lên đến 2 CPU – 4GB Ram để các bạn thoải mái triển khai các app từ nhẹ tới nặng. Còn chờ gì mà không triển khai ngay code của các bạn lên trên App Engine ✌️

Hy vọng bài viết này giúp ích cho các bạn phần nào trong công việc. Bất cứ thắc mắc nào các bạn có thể comment lại mình sẽ trả lời hoặc liên hệ trực tiếp với mình qua Telegram @HoangViet12

Và đừng quên nếu thấy bài viết này hay hãy Upvote và Follow mình để xem các bài viết triển khai các loại App khác nhé 😄

Tham khảo

Docs App Engine: https://docs.bizflycloud.vn/app_engine/

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,