网站首页 > 技术文章 正文
Flask是Python编程中一款Web框架,因其开发高效且支持的插件丰富,使用比较广泛。这里聊一聊如何上线Flask开发的Web服务。Flask本身是内置Web服务的,不过它的性能不够强健,安全性也不高,官方仅推荐在开发或测试环境中使用,正式上线一般需配合Gunicorn或uWSGI,本文介绍使用Gunicorn和Nginx部署Flask Web服务。
环境介绍
操作系统:Debian 10.10
Python版本:3.7.3
代码准备
为了减少项目间的干扰,Python程序一般在虚拟环境中开发。
创建虚拟环境,
mkdir flask-example
cd flask-example
python3 -m venv venv
. venv/bin/activate
安装Gunicorn,
pip install gunicorn
样例程序flask-example/myapp.py,
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "hello world"
if __name__ == "__main__":
app.run()
Gunicorn
使用Gunicorn创建WSGI入口点,文件flask-example/wsgi.py
from myapp import app
if __name__ == "__main__":
app.run()
启动Gunicorn,
gunicorn --bind 0.0.0.0:5000 wsgi:app
上面命令管理Gunicorn比较麻烦,使用Systemd来管理,Unit服务文件如下,
[Unit]
Description=Gunicorn instance to serve myapp
After=network.target
[Service]
User=aneirin
Group=aneirin
WorkingDirectory=/home/aneirin/flask-example
Environment="PATH=/home/aneirin/flask-example/venv/bin"
ExecStart=/home/aneirin/flask-example/venv/bin/gunicorn --workers 3 --bind unix:myapp.sock -m 007 wsgi:app
[Install]
WantedBy=multi-user.target
开启三个工作线程,为了安全起见,设置了Gunicorn可写文件的umask为007。启动后,显示如下,
(venv) aneirin@debian-1:~/flask-example$ systemctl status myapp
● myapp.service - Gunicorn instance to serve myapp
Loaded: loaded (/lib/systemd/system/myapp.service; disabled; vendor preset: enabled)
Active: active (running) since Sat 2022-09-10 21:35:53 HKT; 7min ago
Main PID: 17542 (gunicorn)
Tasks: 4 (limit: 400)
Memory: 54.6M
CGroup: /system.slice/myapp.service
├─17542 /home/aneirin/flask-example/venv/bin/python3 /home/aneirin/flask-example/venv/bin/gunicorn --workers 3 --bind unix:myapp.sock -m 007 wsgi:app
├─17544 /home/aneirin/flask-example/venv/bin/python3 /home/aneirin/flask-example/venv/bin/gunicorn --workers 3 --bind unix:myapp.sock -m 007 wsgi:app
├─17545 /home/aneirin/flask-example/venv/bin/python3 /home/aneirin/flask-example/venv/bin/gunicorn --workers 3 --bind unix:myapp.sock -m 007 wsgi:app
└─17546 /home/aneirin/flask-example/venv/bin/python3 /home/aneirin/flask-example/venv/bin/gunicorn --workers 3 --bind unix:myapp.sock -m 007 wsgi:app
可以看到主线程fork了三个工作线程。
Nginx
Web服务生产环境一般都使用Nginx作为反向代理,Nginx可以配置https,并有缓存功能,这里配置也很简单,加入下面配置文件,
server {
listen 80;
server_name example.xyz www.example.xyz;
location / {
include proxy_params;
proxy_pass http://unix:/home/aneirin/flask-example/myapp.sock;
}
}
Nginx和Gunicorn的通信使用本地套接字文件效率比较高,当然也可以选择使用地址+端口的方式。如果需要使用https方式访问,可以在Lets Encrypt上申请免费的证书,这里不涉及了。
- 上一篇: 服务器部署概述(服务器部署方式有哪些)
- 下一篇: 如何将机器学习模型部署到NET环境?
猜你喜欢
- 2024-10-03 不改一行代码!快速部署流行框架到腾讯云 Serverless
- 2024-10-03 Flask 基础理解(flask基础入门)
- 2024-10-03 AI界最危险武器GPT-2使用指南:从Finetune到部署
- 2024-10-03 解决Flask-SocketIO部署遇到的问题
- 2024-10-03 Python Web 部署(pythonweb服务器部署)
- 2024-10-03 Python Flask 大型应用的架构(python的flask案例)
- 2024-10-03 python 解析二维码(ZBar) flask开发 Dockerfile 打包部署
- 2024-10-03 使用Docker部署Python Flask Web应用的最佳实践
- 2024-10-03 带你认识 flask 错误处理(flask errorhandler)
- 2024-10-03 使用 Python 和 Flask 架设网站:入门指南
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)