照片由 Christina @ wocintechchat.com 在 Unsplash 拍摄
Flask,一个用Python编写的轻量级Web框架,以其简单和灵活性著称。最初设计用于快速构建Web应用程序,由于其内置服务器,Flask在开发环境中常常被使用。然而,在生产环境中部署Flask应用程序需要仔细考虑并进行配置。在这篇文章中,我们将详细讨论如何将Flask应用程序部署到生产环境,确保其稳定、安全和可扩展。
理解Flask开发和上线在开始讲如何在生产环境中使用 Flask 之前,让我们先了解其开发和部署服务器。Flask 自带一个用于测试和调试的开发服务器。虽然在开发过程中很方便,但由于它在处理并发请求上有限制,且不够健壮,这个服务器就不适合用在生产环境中了。
相比之下,实际部署通常涉及使用如 Gunicorn(也称 Green Unicorn)这样的 WSGI 服务器。Gunicorn 在提供 Flask 应用程序的生产服务方面表现出色,提供了可扩展性和高性能。
什么是将Flask生产化?将 Flask 应用程序部署到生产环境的过程称为生产化 Flask。这包括多个方面,包括搭建合适的服务器环境、管理依赖、配置类似 Nginx 的网络服务器,并通过配置 systemd 服务等措施确保应用程序的稳定性和健壮性。
要将Flask生产化吗?为什么?将 Flask 生产化至关重要:
- 可扩展性:Flask 自带的服务器没有针对处理大量并发请求进行优化。使用如 Gunicorn 等服务器来部署 Flask 可以提升其扩展能力。
- 安全性:生产环境中需要加强的安全措施,这可能无法由 Flask 的开发服务器充分提供。
- 可靠性:生产准备就绪后,您的 Flask 应用会更加稳定可靠,从而减少停机时间和性能下降。
如果你用的是Windows系统,下载WSL来运行Linux命令会更方便。相关指南可以在参考资料中找到。
我们来看看如何通过提供的命令将Flask应用投入生产:
1. 创建一个非 root 用户运行此命令以添加用户 nidhi: sudo adduser nidhi
.
确保你的 Python 和 Pip 已经安装好了。
运行以下命令来更新软件包列表并安装Python 3及其pip包管理器:
sudo apt update
sudo apt install python3 python3-pip
3. 创建一个虚拟环境
mkdir flask-gunicorn # 创建一个名为flask-gunicorn的目录
cd flask-gunicorn # 进入flask-gunicorn目录
python3 -m venv venv # 创建一个名为venv的虚拟环境
source venv/bin/activate # 这是在Unix/Linux系统中的命令
4.安装软件包.
pip install flask gunicorn
5. 设置好应用文件,并用 Gunicorn 运行
新建 app.py
、wsgi.py
和 wsgi_configs.py
文件:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
# wsgi.py
from app import app as application
# wsgi_configs.py
# Gunicorn配置示例(可选)
运行 Gunicorn:
gunicorn --config wsgi_configs.py wsgi:app
使用gunicorn启动应用,配置文件为wsgi_configs.py,应用名为app
或
gunicorn -w 4 --bind 0.0.0.0:8080 wsgi:app
6. 停用虚拟环境
停用
7. 创建一个Systemd单元文件
新建并编辑服务文件:
命令:`sudo vim /etc/systemd/system/app.service` (使用该命令编辑服务配置文件)
关于app.service
的内容。
[Unit]
Description=Gunicorn实例用于提供myproject.
After: network.target
[Service]
User=nidhi
Group=www-data
WorkingDirectory=/home/nidhi/flask-gunicorn/
Environment="PATH=/home/nidhi/flask-gunicorn/venv/bin"
ExecStart=/home/nidhi/flask-gunicorn/venv/bin/gunicorn --workers 3 --bind unix:app.sock
- 启用并开始服务
mkdir /tmp/my_app # 创建 /tmp/my_app 文件夹
sudo systemctl enable app --now # 使用 sudo 启用并立即启动 app 服务
sudo systemctl status app.service # 使用 sudo 检查 app.service 的状态
9. 如何设置 Nginx
安装 Nginx(一个 web 服务器),
sudo apt install nginx。可以使用这个命令`sudo apt install nginx`来安装nginx,之后你可以用`cd /etc/nginx`命令进入它的配置目录哦。
cd /etc/nginx。
10. 更新 NGINX 设置。
修改默认配置文件:
使用 sudo 命令获取管理员权限并打开 vim 文本编辑器,编辑 sites-available 目录下的 default 文件。
sudo vim sites-available/default
添加以下位置配置:
nginx
location {
将代理请求转发到本地的8080端口;
}
11. 重启 Nginx
sudo systemctl reload nginx
最后。
通过遵循这些步骤,您可以将 Flask 应用程序投入生产,确保其性能、可扩展性和可靠性最佳。从开发环境到生产环境不仅增强了应用程序的稳定性,也为未来的增长和扩展打下基础。
参考资料- 设置Ubuntu 20.04服务器教程 https://www.codewithharry.com/blogpost/setup-ubuntu-20-04-server/#google_vignette
- 使用Gunicorn和Nginx部署Flask应用教程 https://www.codewithharry.com/blogpost/flask-app-deploy-using-gunicorn-nginx/#google_vignette
- Flask-Gunicorn-Nginx实验环境 https://www.golinuxcloud.com/flask-gunicorn-nginx/#Lab_Environment
- 视频教程链接 https://www.youtube.com/watch?v=HrAsmXy1-78