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 ...
随机推荐
- python字符串的格式化
# -*- coding:utf-8 -*- """ @Author:janson @Date:2018/8/1 @File:StrFormat.py "&qu ...
- mysql中别名(列别名和表别名)
1.介绍 使用MySQL别名来提高查询的可读性.MySQL支持两种别名,称为列别名和表别名. 有时,列的名称是一些表达式,使查询的输出很难理解.要给列一个描述性名称,可以使用列别名.用法: SELEC ...
- vue 错误处理
https://sentry.io/for/vue/ https://cn.vuejs.org/v2/guide/deployment.html#跟踪运行时错误
- swoole 编程环境安装
安装linux debian 9.8 购买阿里云vps web目录规划 lnmp/source lnmp/soft lnmp/data 源码安装php apt install gcc make apt ...
- day15-python之变量和递归
1.局部变量与全局变量 #!/usr/bin/env python # -*- coding:utf-8 -*- # name='lhf' # def change_name(): # global ...
- Farthest Nodes in a Tree (求树的直径)
题目链接,密码:hpu Description Given a tree (a connected graph with no cycles), you have to find the farthe ...
- SpringMVC的删除功能
Dao层 package net.roseindia.dao; import java.util.Date; import java.util.List; import net.roseindia.m ...
- 集合框架学习之List接口
Java语言的java.util包中提供了一些集合类,这些集合类又被称为容器.用来完善数组的不足之处.集合类与数组的不同之处是,数组的长度是固定的,集合的长度是可变的:数组用来存放基本类型的数据,集合 ...
- Java基础学习总结(92)——Java编码规范之排版、注释及命名
为使开发人员养成良好的开发习惯,编写可读性强.易维护的程序,结合以往资料,现整理Java编码规范,将之作为开发人员的参照依据. 一.排版 1.相对独立的程序块之间必须加空行 下列情况应该使用一个空行: ...
- sprintboot + mybaits + mysql + html5 + thymeleaf 个人笔记
参考:https://github.com/daleiwang/moxi service @Mapper 与 @Select 等 @Mapper似乎是一个myBaits 注解,表示将java方法和sq ...