Flask采用Virtualenv+Supervisor+Nginx部署应用
Flask采用Virtualenv+Supervisor+Nginx部署应用
--
首先是概念解释
- WSGI服务器,负责我们的app与服务器的交互,常用的有Gunicorn
- Web服务器,是个HTTP服务器,就相当于tomacat于Java,常用的有Nginx
Web服务器中,Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。
部署工具:
- Virtualenv,用户创建独立的虚拟的Python运行环境,可以解决版本,依赖等问题
- Supervisor,负责管理应用:应用的开启,关闭,以及多应用的管理等
Virtualenv
安装
sudo pip install virtualenv
使用
#创建虚拟环境
virtualenv venv
#启动虚拟环境
source venv/bin/activate
#停止虚拟环境
deactivate
Supervisor
安装
sudo apt-get install supervisor
使用
配置Supervisor的配置文件的路径:/etc/supervisor/conf.d/*conf
cd /etc/supervisor/conf.d/*conf
在这里目录下,我们创建我们应用的配置文件,这样Supervisor才能读取到
sudo vim app.conf
里面的内容输入(内容其实就是执行我们的Python文件):
[program:app]
command = python /home/tengfei/api01/test/TestTo/TODO-orm/app.py
//注,这个配置是和后文中Nginx配置好后对象的9000的转发端口执行的操作
[program:todo]
command = /home/tengfei/api01/test/TestTo/TODO-orm/venv/bin/gunicorn -b 127.0.0.1:9000 app:app
directory = /home/tengfei/api01/test/TestTo/TODO-orm
更改配置文件后,要让supervisor的配置文件生效,执行
supervisorctl reload
启动supervisor:
sudo service supervisor start
重启:
sudo service supervisor restart
查看supervisor程序当前的状态
sudo supervisorctl
这里面可以使用status指令来查看程序的运行状态
app名字:就是刚才配置配置文件中[program:app]的,比如我这里输入 start app就可以了,以后同上:
start app名字 # 启动app
stop app # 停止app
需要注意的是supervisor发生错误的话,需要它的日志中才能看到
supervisor错误日志地址:
/var/log/supervisor/supervisord.log
Nginx
安装
sudo apt-get update
sudo apt-get install nginx
配置
nginx的也是把程序运行需要的配置文件放到指定的目录下即可
cd /etc/nginx
在/etc/nginx子目录下,有两个文件要格外关注关注一下:
sites-available :可用的配置文件
sites-enabled :生效的配置文件
1:先在sites-available 目录下创建配置文件vim api_app
里面写上:
# api_app内容
server {
listen 81;
location /static {
alias /home/tengfei/api01/test/TestTo/TODO-orm/;
}
location / {
proxy_pass http://127.0.0.1:9000;
}
}
注,listen 81;:意思是nginx监听的是81端口,我开始监听80端口,结果和默认的冲突了;location /static:是把静态文件转发到后文中的目录下;location / :是把动态请求转发到本机(服务器)的9000端口,上面文件的内容的格式可自行百度。我开始
然后创建软连接到sites-enabled
sudo ln -s ../sites-available/api01_app .
然后重新启动nginx
sudo service nginx reload
//这代表nginx重启成功
* Reloading nginx configuration nginx [ OK ]
使用
启动
sudo service nginx restart
重启
sudo service nginx reload
查看nginx的状态
sudo service nginx status
参考:How To Install Nginx on Ubuntu 14.04 LTS
gunicorn
安装
apt-get install gunicorn
使用
gunicorn -b 0.0.0.0:8080 run:app
尝试在虚拟环境中运行一下程序,看看是否可以成功
//注意下面语句前面的run是指运行的python文件的的名字为run.py的话,执行run:app,如果为app.py那就是app:app
参考文档
“error: command 'x86_64-linux-gnu-gcc' failed with exit status 1” in virtualenv
how to install the SQLALchemy on the ubuntu?
声明本文内容来源于:Flask应用部署与运维
特地感谢极客学院的shin0922老师,真的受益匪浅,如果涉嫌侵权,请告知我,我将删除文章
Flask采用Virtualenv+Supervisor+Nginx部署应用的更多相关文章
- CentOS下实现Flask + Virtualenv + uWSGI + Nginx部署
一.项目简介 在本文中,将一步一步搭建一个简单的Flask + Virtualenv + uWSGI + Nginx 架构的Web服务,可以作为新手的学习也可作为记录备忘. 如果你安装好了环境并有一定 ...
- ubuntu下python+tornado+supervisor+nginx部署
由于项目需要,老师让我写一个小web系统,之前都是用java写web,想到自己最近学机器学习要用python,所以用python来写一下,此外,因为想用点新东西,也介于程序比较小,所以考虑用mongo ...
- nginx+uwsgi+flask+supervisor 项目部署
环境 - Linux: Ubuntu 16.04 - uWSGI 2.0.18 - Flask 1.0.2 - supervisor 3.2.0 - nginx/1.8.1 首先区分几个概念 WSGI ...
- Flask + Gunicorn + Nginx 部署
最近很多朋友都在问我关于 Flask 部署的问题,说实在的我很乐意看到和回答这样的问题,至少证明了越来越多人开始用 Flask 了. 之前我曾发表过一篇在 Ubuntu 上用 uwsgi + ngin ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器
nginx+uWSGI+django+virtualenv+supervisor发布web服务器 导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以 ...
- 通过Nginx部署flask项目
用Flask开发之后,很多人,喜欢用nohup python manage.py & 这样的形式,放到后台运行,其实这样只是个发开模式,很简陋,无法支持并发,进程监控等功能.所以采用nginx ...
- Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器
目录 Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器 crm django项目部署流程 使用supervisro启动uwsgi,退出虚 ...
- 使用Flask+uwsgi+Nginx部署Flask正式环境
环境准备 在开始正式讲解之前,我们将首先进行环境准备. Step1:安装Python,pip以及nginx: sudo apt-get update sudo apt-get install pyth ...
- 使用virtualenv, uwsgi, nginx来布署flask
本文讲述了怎样使用virtualenv, uwsgi, nginx来布署flask的步骤. 升级软件包 运行下面命令,保证你的机器安装了最新的软件包. sudo apt-get update sudo ...
随机推荐
- Firefox--摄像头麦克风权限
在自动化测试的过程中,可能会遇到来自浏览器的权限提示(摄像头.麦克风),今天,就讨论一下如何结局这个问题. 先来认识一下来自Firefox的权限提示,访问一个需要摄像头或者麦克风的网站 你可能觉得,一 ...
- 同一SQL语句在PLSQL Developer与SQL * PLUS工具中执行结果不一致
背景 今天遇到如下问题,同一sql语句在PLSQL Developer与SQL*PLUS工具中执行结果不一致, sql语句如下 SELECT 'GROUPHEALTH_SEND_EMAIL' as i ...
- python基础(一)—— 核心数据类型
Hello World程序 [root@mysql ~]# python3 Python 3.6.5 (default, Jul 8 2018, 11:41:23) [GCC 4.4.7 20120 ...
- 部署安装lnmp
链接:http://pan.baidu.com/s/1skMSgDv 密码:h8rn 此安装包可在阿里云所有linux系统上部署安装.此安装包包含的软件及版本为:nginx:1.0.15.1.2.5. ...
- angularjs ng-repeat下验证问题
angularjs验证要求name唯一,repeat情况,name 等通过${index}等绑定,也无法获取值 通过ng-from的方法,这样验证name重复也可以了. <ng-form nam ...
- 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一]-CodeForces 237C,素数打表,二分查找
C. Primes on Interval time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 数列分段Section II(二分)
洛谷传送门 输入时处理出最小的答案和最大的答案,然后二分答案即可. 其余细节看代码 #include <iostream> #include <cstdio> using na ...
- K/3Cloud 分页报表示例参考
分页报表首先需要实现的方法就是GetList,这个方法用来获得分页的条件. 其他的就和其他报表类似了. using System; using System.Collections.Generic; ...
- controller跳到另一个controller
1.无参数: return "redirect:park/findByTag"; 2/有参数: public String addChild(Model model2) model ...
- 毕业bg--hdu1881(01背包)
http://acm.hdu.edu.cn/showproblem.php?pid=1881 01 背包 先按发起人离开的时间从小到大排序 然后再套01背包的模板 #include <iost ...