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 ...
随机推荐
- POJ 2251-Dungeon Master (三维空间求最短路径)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- Eclipse设置反编译插件
有些项目我们想看看引入的包的源码的时候,因为打包好的.class文件的内容我们是看不懂的,但是又懒得去找源码文件的时候,就会用到反编译工具. 步骤: 1.安装反编译插件. 2.设置使用的反编译工具. ...
- Spring拓展接口之BeanPostProcessor,我们来看看它的底层实现
前言 开心一刻 小明:“妈,我被公司开除了”,妈:“啊,为什么呀?”, 小明:“我骂董事长是笨蛋,公司召开高层会议还要起诉我”,妈:“告你诽谤是吧?”,小明:“不是,他们说要告我泄露公司机密” Bea ...
- Java学习之集合框架的迭代器--Iteratorjk及ListItertor接口
通常情况下,你会希望遍历一个集合中的元素.例如,显示集合中的每个元素.一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象 ...
- .NET Core使用log4Net记录日志
1.引入Nuget包 log4net 2.添加log4Net配置文件 <?xml version="1.0" encoding="utf-8" ?> ...
- xtu DP Training C.炮兵阵地
炮兵阵地 Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 11856 ...
- python022 Python3 面向对象
Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触 ...
- XV6锁
锁 xv6 运行在多处理器上,即计算机上有多个单独执行代码的 CPU.这些 CPU 操作同一片地址空间并分享其中的数据结构:xv6 必须建立一种合作机制防止它们互相干扰.即使是在单个处理器上,xv6 ...
- Cake(凸包+区间DP)
You want to hold a party. Here's a polygon-shaped cake on the table. You'd like to cut the cake into ...
- bzoj 2721[Violet 5]樱花 数论
[Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 671 Solved: 395[Submit][Status][Discuss ...