- vừa được xem lúc

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

0 0 26

Người đăng: Hoàng Việt

Theo Viblo Asia

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é!

Đ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("/")
def index(): 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:

  • 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.

Đố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:

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/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 88

- vừa được xem lúc

In calculus, love also means zero.

Mình nhớ hồi năm 2 đại học, thầy giáo môn calculus, trong một giây phút ngẫu hứng, đã đưa ra cái definition này. Lúc đấy mình cũng không nghĩ gì nhiều.

0 0 65

- vừa được xem lúc

Chuyện thay đổi

Thay đổi là một thứ gì đó luôn luôn đáng sợ. Cách đây vài tháng mình có duyên đi làm cho một banking solution tên là X.

0 0 47

- vừa được xem lúc

Pet vs Cattle - Thú cưng và gia súc

Khái niệm. Pets vs Cattle là một khái niệm cơ bản của DevOps. Bài viết này sẽ nói về sự phát triển của các mô hình dịch vụ từ cốt lõi Pets and Cattle. 1.

0 0 34

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 85

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 113