网站首页 > 技术文章 正文
使用 flask + gunicorn + supervisor + nginx
创建项目
mkdir server先为应用创建一个路径
构建 Python 的虚拟环境
我们使用
virtualenv
来构建一个系统中不同的python
隔离环境,virtualenv
的使用十分的简单,安装和使用方法可以看这里virtualenvcd server // cd 切换到我们的项目目录virtualenv venv // 构建我们的虚拟环境创建了
venv
环境后,我们需要激活才能使用(有时是自动激活),激活后可以看见控制台前面有(venv)
source venv/bin/activate关闭环境直接使用
deactivate
deactivate
安装 flask 框架
安装的虚拟环境里面已经自动安装了 pip
,我们使用 pip
可以很简单快捷的安装 flask
pip install flask
flask 已经安装好了,我们可以通过一个小应用来测试一下我们的flask 框架, 'vim myapp.py' 创建一个 python 文件
from flask import Flask
启动脚本
python myapp.py
此时,使用浏览器访问 http://127.0.0.1:5000 就能看见网页显示的 hello world !
使用 gunicorn 部署 python web
刚才打开的是 flask
自带的服务器,完成了 web 服务的启动。但是 flask
自带的服务器一般是用来调试使用的,性能不佳。这里我们使用 gunicorn
作为 wsgi 的容器,用来部署 python。
安装 gunicorn
pip install gunicorn
pip 是 python 的管理包工具。随着项目增长,你会发现它的依赖列表也一并随着增长。在你能运行一个Flask应用之前,即使已经需要数以十记的依赖包也毫不奇怪。 管理依赖的最简单的方法就是使用一个简单的文本文件。 pip可以生成一个文本文件,列出所有已经安装的包。它也可以解析这个文件,并在新的系统(或者新的环境)下安装每一个包。
pip freeze > requirements.txt # 生成txt 文件pip install -r requirements.txt # 别人使用时可以直接安装所有的包
以后每次 pip 安装了新的库的时候,都需 freeze
一次,保证更新
接下来我们就是用 gunicorn
来启动 flask
gunicorn -w 4 -b 0.0.0.0:8000 myapp:app
此时我们使用8000端口进行访问,-w
表示开启了多少个 worker
, -b
表示访问地址。myapp
就是 myapp.py
的文件名,mypp.py
相当于一个库文件被 gunicorn
调用。app
则是 myapp.py
里创建的 app
,这样 gunicorn
才可以定位 flask
应用。
想结束 gunicorn
可以通过执行 pkill gunicorn
,有时还要找到 pid
才能 kill 掉。这样的操作过于繁琐,所以我们使用另一个神器 supervisor
, 用来专门管理系统的进程。
安装 supervisor
pip install supervisor
在 supervisor.conf
配置文件底部添加 (注意我的工作路径是/var/www/server)
[program:myapp]command=/var/www/server/venv/bin/gunicorn -w4 -b0.0.0.0:2170 myapp:app ; supervisor启动命令directory=/var/www/server ; 项目的文件夹路径startsecs=0 ; 启动时间stopwaitsecs=0 ; 终止等待时间autostart=false ; 是否自动启动autorestart=false ; 是否自动重启stdout_logfile=/var/www/server/log/gunicorn.log ; log 日志stderr_logfile=var/www/server/log/gunicorn.err
其中的 log 目录是用来记录日志的,我们需要先创建一个 log 目录,否则会碰见未找到目录的错误
mkdir log
supervisor 的基本使用命令
supervisord -c supervisor.conf 通过配置文件启动supervisor
部署 Nginx
nginx
是一个高性能的 HTTP
和 反向代理服务器,在高并发方面表现非常不错。
安装 nginx
sudo apt-get install nginx
nginx 安装完后,我们可以通过以下命令控制 nginx 的开启和关闭
sudo /etc/init.d/nginx restart // 重启sudo /etc/init.d/nginx start 开启
配置 nginx
cd /etc/nginx/sites-available/defaultcd /etc/nginx/sites-enabled/default
这是 nginx 的具体应用的配置文件,便于管理。修改默认的 default 文件
server { #侦听80端口
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
626062078,我们一起学Python!
猜你喜欢
- 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 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 架设网站:入门指南
- 2024-10-03 【flask】如何配置和使用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)