Flask là một micro web framework được viết bằng Python do Armin Ronacher phát triển. Nó được gọi là microframework vì không yêu cầu bất kỳ công cụ hoặc thư viện nào. Flask là một mô-đun Python và có lõi nhỏ và dễ mở rộng giúp bạn phát triển các ứng dụng web dễ dàng.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách triển khai ứng dụng Flask với Uwsgi và Nginx trên Ubuntu 20.04.
Sau khi tất cả các gói được cập nhật, bạn có thể tiến hành bước tiếp theo.
Sau khi tất cả các gói được cài đặt, bạn có thể tiến hành bước tiếp theo.
Đầu tiên, tạo một thư mục cho ứng dụng Flask của bạn bằng lệnh sau:
Tiếp theo, thay đổi thư mục thành myapp và tạo một môi trường ảo Python mới bằng lệnh sau:
Tiếp theo, kích hoạt môi trường ảo bằng lệnh sau:
Đầu tiên, hãy cài đặt Flask và uWSGI bằng lệnh sau:
Tiếp theo, hãy tạo một ứng dụng mẫu có tên myapp.py bằng lệnh sau:
Thêm các dòng sau:
Lưu và đóng tệp khi bạn hoàn tất. Tiếp theo, chạy ứng dụng Flask của bạn bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
Bây giờ, hãy mở trình duyệt web của bạn và truy cập ứng dụng Flask của bạn bằng URL http://your-server-ip:5000. Bạn sẽ thấy màn hình sau:
Bây giờ, hãy nhấn CTRL + C trong thiết bị đầu cuối của bạn để dừng ứng dụng Flask.
Thêm các dòng sau để nhập phiên bản Flask của bạn từ ứng dụng của bạn:
Lưu và đóng tệp khi bạn hoàn tất, sau đó kiểm tra xem uWSGI có thể phục vụ ứng dụng hay không bằng lệnh sau:
Bây giờ, hãy truy cập ứng dụng của bạn một lần nữa sử dụng URL http://your-server-ip:5000. Bạn sẽ thấy màn hình sau:
Bây giờ, nhấn CTRL + C để dừng ứng dụng.
Tiếp theo, chạy lệnh sau để thoát khỏi môi trường ảo của bạn:
Thêm các dòng sau:
Lưu và đóng tệp khi bạn hoàn tất.
Thêm các dòng sau:
Lưu và đóng tệp khi bạn hoàn tất, sau đó tải lại daemon systemd bằng lệnh sau:
Tiếp theo, thay đổi quyền sở hữu ứng dụng của bạn thành www-data và đặt quyền phù hợp bằng lệnh sau lệnh:
Tiếp theo, hãy khởi động ứng dụng của bạn và cho phép nó khởi động khi khởi động lại hệ thống bằng lệnh sau:
Bạn cũng có thể kiểm tra trạng thái của ứng dụng bằng lệnh sau:
Bạn sẽ nhận được kết quả đầu ra sau:
Thêm các dòng sau:
Lưu và đóng tệp khi bạn hoàn tất. Tiếp theo, hãy kiểm tra Nginx xem có lỗi cú pháp nào không bằng lệnh sau:
Bạn sẽ thấy kết quả sau:
Tiếp theo, hãy kích hoạt máy chủ ảo Nginx bằng lệnh sau:
Cuối cùng, hãy khởi động lại dịch vụ Nginx để áp dụng các thay đổi:
Tại thời điểm này, Nginx được cấu hình để phục vụ ứng dụng Flask của bạn.
Sau khi cài đặt, hãy bảo mật trang web của bạn bằng Let's Encrypt SSL bằng cách chạy lệnh sau:
Bạn sẽ được yêu cầu cung cấp địa chỉ email hợp lệ và chấp nhận điều khoản dịch vụ như hiển thị bên dưới:
Tiếp theo, chọn có chuyển hướng lưu lượng HTTP sang HTTPS hay không như hiển thị bên dưới:
Nhập 2 và nhấn Enter để hoàn tất cài đặt. Bạn sẽ thấy đầu ra sau:
Bây giờ, trang web Flask của bạn đã được bảo mật bằng Let's Encrypt SSL. Bạn có thể truy cập ứng dụng Flask của mình bằng URL https://flask.example.com.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách triển khai ứng dụng Flask với Uwsgi và Nginx trên Ubuntu 20.04.
Điều kiện tiên quyết
- Một máy chủ chạy Ubuntu 20.04.
- Một tên miền hợp lệ được trỏ bằng IP máy chủ của bạn.
- Một mật khẩu gốc được cấu hình cho máy chủ.
Bắt đầu
Trước tiên, bạn nên cập nhật các gói hệ thống của mình lên phiên bản mới nhất. Bạn có thể cập nhật chúng bằng cách chạy lệnh sau:
Mã:
apt-get update -y
Cài đặt các phụ thuộc bắt buộc
Tiếp theo, bạn sẽ cần cài đặt một số phụ thuộc cần thiết để triển khai ứng dụng flask. Bạn có thể cài đặt tất cả chúng bằng lệnh sau:
Mã:
apt-get install nginx python3-pip python3-dev python3-venv build-essential libssl-dev libffi-dev python3-setuptools -y
Tạo Môi trường ảo
Tiếp theo, bạn sẽ cần tạo một môi trường ảo cho ứng dụng Flask của mình. Môi trường ảo là một công cụ rất hữu ích được sử dụng để tạo các môi trường Python bị cô lập. Nó giúp bạn cài đặt phiên bản Python cụ thể cho dự án của bạn.Đầu tiên, tạo một thư mục cho ứng dụng Flask của bạn bằng lệnh sau:
Mã:
mkdir /var/www/html/myapp
Mã:
cd /var/www/html/myapp
python3.8 -m venv myappenv
Mã:
source myappenv/bin/activate
Thiết lập ứng dụng Flask
Lúc này, môi trường ảo Python đã sẵn sàng để triển khai ứng dụng Flask. Tiếp theo, bạn sẽ cần thiết lập ứng dụng Flask trong môi trường ảo của mình.Đầu tiên, hãy cài đặt Flask và uWSGI bằng lệnh sau:
Mã:
pip install uwsgi flask
Mã:
nano /var/www/html/myapp/myapp.py
Mã:
from flask import Flaskapp = Flask(__name__)@app.route("/")def hello(): return "[HEADING=1]Hi This is My Flask Application[/HEADING]"if __name__ == "__main__": app.run(host='0.0.0.0')
Mã:
python /var/www/html/myapp/myapp.py
Mã:
* Đang phục vụ ứng dụng Flask "myapp" (tải chậm) * Môi trường: sản xuất Sử dụng máy chủ WSGI sản xuất thay thế. * Chế độ gỡ lỗi: tắt * Đang chạy trên http://0.0.0.0:5000/ (Nhấn CTRL+C để thoát)
Bây giờ, hãy nhấn CTRL + C trong thiết bị đầu cuối của bạn để dừng ứng dụng Flask.
Cấu hình uWSGI
Trước tiên, hãy tạo một điểm vào WSGI để cho máy chủ uWSGI của bạn biết cách tương tác với nó.
Mã:
nano /var/www/html/myapp/wsgi.py
Mã:
from myapp import appif __name__ == "__main__": app.run()
Mã:
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
Bây giờ, nhấn CTRL + C để dừng ứng dụng.
Tiếp theo, chạy lệnh sau để thoát khỏi môi trường ảo của bạn:
Mã:
deactivate
Cấu hình uWSGI
Lúc này, uWSGI có thể phục vụ ứng dụng của bạn. Bây giờ, hãy tạo tệp cấu hình uWSGI bằng lệnh sau:
Mã:
nano /var/www/html/myapp/myapp.ini
Mã:
[uwsgi]module = wsgi:appmaster = trueprocesses = 5socket = myapp.sockchmod-socket = 660vacuum = truedie-on-term = true
Tạo tệp dịch vụ Systemd
Tiếp theo, bạn sẽ cần tạo tệp dịch vụ systemd để quản lý dịch vụ uWSGI. Bạn có thể tạo nó bằng lệnh sau:
Mã:
nano /etc/systemd/system/myapp.service
Mã:
[Unit]Description=uWSGI instance to serve myappAfter=network.target[Service]User=www-dataGroup=www-dataWorkingDirectory=/var/www/html/myappEnvironment="PATH=/var/www/html/myapp/myappenv/bin"ExecStart=/var/www/html/myapp/myappenv/bin/uwsgi --ini myapp.ini[Install]WantedBy=multi-user.target
Mã:
systemctl daemon-reload
Mã:
chown -R www-data:www-data /var/www/html/myapp
chmod -R 775 /var/www/html/myapp
Mã:
systemctl start myapp
systemctl enable myapp
Mã:
systemctl status myapp
Mã:
? myapp.service - phiên bản uWSGI để phục vụ myapp Đã tải: đã tải (/etc/systemd/system/myapp.service; đã tắt; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ CN 2020-09-13 08:38:08 UTC; 1 phút 53 giây trước PID chính: 662796 (uwsgi) Nhiệm vụ: 6 (giới hạn: 4691) Bộ nhớ: 21,8M CGroup: /system.slice/myapp.service ??662796 /var/www/html/myapp/myappenv/bin/uwsgi --ini myapp.ini ??662808 /var/www/html/myapp/myappenv/bin/uwsgi --ini myapp.ini ??662809 /var/www/html/myapp/myappenv/bin/uwsgi --ini myapp.ini ??662810 /var/www/html/myapp/myappenv/bin/uwsgi --ini myapp.ini ??662811 /var/www/html/myapp/myappenv/bin/uwsgi --ini myapp.ini ??662812 /var/www/html/myapp/myappenv/bin/uwsgi --ini myapp.ini13/9 08:38:08 ubuntu2004 uwsgi[662796]: ứng dụng WSGI 0 (mountpoint='') sẵn sàng trong 0 giây trên trình thông dịch 0x55e207e7a510 pid: 662796 (ứng dụng mặc định)13/9 08:38:08 ubuntu2004 uwsgi[662796]: *** uWSGI đang chạy ở chế độ nhiều trình thông dịch ***13/9 08:38:08 ubuntu2004 uwsgi[662796]: tạo tiến trình chính uWSGI (pid: 662796)13/9 08:38:08 ubuntu2004 uwsgi[662796]: tạo tiến trình công việc uWSGI 1 (pid: 662808, lõi: 1)13/9 08:38:08 ubuntu2004 uwsgi[662796]: tạo ra công nhân uWSGI 2 (pid: 662809, lõi: 1)13/9 08:38:08 ubuntu2004 uwsgi[662796]: tạo ra công nhân uWSGI 3 (pid: 662810, lõi: 1)13/9 08:38:08 ubuntu2004 uwsgi[662796]: tạo ra công nhân uWSGI 4 (pid: 662811, lõi: 1)13/9 08:38:08 ubuntu2004 uwsgi[662796]: tạo ra công nhân uWSGI 5 (pid: 662812, cores: 1)
Cấu hình Nginx làm Proxy ngược
Tiếp theo, bạn sẽ cần cấu hình Nginx làm proxy ngược để phục vụ ứng dụng Flask. Bạn có thể thực hiện bằng lệnh sau:
Mã:
nano /etc/nginx/sites-available/flask.conf
Mã:
server { listen 80; server_name flask.example.com; location / { include uwsgi_params; uwsgi_pass unix:/var/www/html/myapp/myapp.sock; }}
Mã:
nginx -t
Mã:
nginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: kiểm tra tệp cấu hình /etc/nginx/nginx.conf thành công
Mã:
ln -s /etc/nginx/sites-available/flask.conf /etc/nginx/sites-enabled/
Mã:
systemctl restart nginx
Bảo mật ứng dụng Flask bằng Let's Encrypt SSL
Tiếp theo, bạn cũng nên bảo mật ứng dụng của mình bằng Let's Encrypt SSL miễn phí. Trước tiên, bạn sẽ cần cài đặt ứng dụng khách Certbot để cài đặt và quản lý chứng chỉ SSL. Bạn có thể cài đặt bằng lệnh sau:
Mã:
apt-get install python3-certbot-nginx -y
Mã:
certbot --nginx -d flask.example.com
Mã:
Lưu nhật ký gỡ lỗi vào /var/log/letsencrypt/letsencrypt.logCác plugin đã chọn: Authenticator nginx, Installer nginxNhập địa chỉ email (dùng để gia hạn khẩn cấp và thông báo bảo mật) (Nhập 'c' đểhủy): [emailprotected]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Vui lòng đọc Điều khoản dịch vụ tạihttps://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. Bạn phảiđồng ý để đăng ký với máy chủ ACME tạihttps://acme-v02.api.letsencrypt.org/directory- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(A)gree/(C)ancel: A- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bạn có sẵn lòng chia sẻ địa chỉ email của mình với Electronic Frontier Foundation, đối tác sáng lập của dự án Let's Encrypt và tổ chức phi lợi nhuận phát triển Certbot không? Chúng tôi muốn gửi cho bạn email về công việc của chúng tôimã hóa web, tin tức EFF, các chiến dịch và các cách hỗ trợ tự do kỹ thuật số.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(C)ó/(K)o: CNhận chứng chỉ mớiThực hiện các thử thách sau:Thử thách http-01 cho flask.example.comĐang chờ xác minh...Dọn dẹp các thử tháchTriển khai chứng chỉ cho VirtualHost /etc/nginx/sites-enabled/flask.conf
Mã:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1: Không chuyển hướng - Không thực hiện thêm bất kỳ thay đổi nào đối với cấu hình máy chủ web.2: Chuyển hướng - Chuyển hướng tất cả các yêu cầu đến quyền truy cập HTTPS an toàn. Chọn tùy chọn này chocác trang web mới hoặc nếu bạn tin chắc rằng trang web của mình hoạt động trên HTTPS. Bạn có thể hoàn tác thay đổi nàybằng cách chỉnh sửa cấu hình máy chủ web của bạn.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Chọn số thích hợp [1-2] sau đó [enter] (nhấn 'c' để hủy): 2
Mã:
Đang chuyển hướng tất cả lưu lượng truy cập trên cổng 80 sang ssl trong /etc/nginx/sites-enabled/flask.conf- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Xin chúc mừng! Bạn đã bật thành công https://flask.example.comBạn nên kiểm tra cấu hình của mình tại:https://www.ssllabs.com/ssltest/analyze.html?d=flask.example.com- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -LƯU Ý QUAN TRỌNG: - Xin chúc mừng! Chứng chỉ và chuỗi của bạn đã được lưu tại: /etc/letsencrypt/live/flask.example.com/fullchain.pem Tệp khóa của bạn đã được lưu tại: /etc/letsencrypt/live/flask.example.com/privkey.pem Chứng chỉ của bạn sẽ hết hạn vào ngày 30-10-2020. Để có phiên bản mới hoặc đã chỉnh sửa của chứng chỉ này trong tương lai, chỉ cần chạy lại certbot với tùy chọn "certonly". Để gia hạn không tương tác *tất cả* chứng chỉ của bạn, hãy chạy "certbot renew" - Thông tin đăng nhập tài khoản của bạn đã được lưu trong thư mục cấu hình Certbot tại /etc/letsencrypt. Bây giờ bạn nên sao lưu an toàn thư mục này. Thư mục cấu hình này cũng sẽ chứa các chứng chỉ và khóa riêng do Certbot thu thập, do đó, việc sao lưu thường xuyên thư mục này là lý tưởng. - Nếu bạn thích Certbot, vui lòng cân nhắc hỗ trợ công việc của chúng tôi bằng cách: Quyên góp cho ISRG / Let's Encrypt: https://letsencrypt.org/donate Quyên góp cho EFF: https://eff.org/donate-le - Chúng tôi không thể đăng ký cho bạn vào danh sách gửi thư EFF vì địa chỉ email của bạn có vẻ không hợp lệ. Bạn có thể thử lại sau bằng cách truy cập https://act.eff.org.