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("/")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 Flask và Gunicorn để 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ụng là HTTP, 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/
Nguồn: viblo.asia