在阿里云上使用Nginx+uWSGI部署Flask应用

阿里云高性能服务器2折起:点我购买

前面我们已经成功用Flask生成了word文件,具体请看Flask生成word文件。用Flask的目的就是可以为了将程序做成网页,放在网上让更多的人使用,可是Flask自身所带的Web仅可作为调试,不能用在生产环境。

在生产环境中,通常采用uWSGI+Nginx的方式部署Flask程序。我们就拿一台新的阿里云服务器,从零看一看如何部署一个Flask程序。

首先要说明的是,虽然Ubuntu已经更新到了16版本,但是在最新版本下进程管理软件supervisor在我测试的服务器重启后不会自启动,至今没有搞清楚原因。而我在生产环境中,要用supervisor管理uWSGI,所以我采用了Ubuntu14.04版本。

下面正式开始我们的部署之旅:

一、安装virtualenvwrapper

Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:

1、将所有虚拟环境整合在一个目录下

2、管理(新增,删除,复制)虚拟环境

3、快速切换虚拟环境

因为现在大部分linux服务器都预装了python2和python3,我采用python3开发,所以安装命令是:

pip3 install virtualenvwrapper

如果是python2,用pip install 即可

安装完毕后,修改linux环境变量配置文件,方便我们启动shell后,可以直接使用virtualenvwrapper:

vim ~/.bash_profile

向里面添加下列内容(每行的作用,上面已经标明,根据自己需要更改即可):

export WORKON_HOME=$HOME/.virtualenvs   # 虚拟环境创建的地方
export PROJECT_HOME=$HOME/workspace
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 # 指定虚拟使用的python解释器路径
source /usr/local/bin/virtualenvwrapper.sh # 每次登陆用户自动执行下脚本

下面建立一个虚拟环境,用作运行flask的python环境:

mkvirtualenv flask_python3_formal 

启动虚拟环境:

workon flask_python3_formal

二、安装uWSGI

之前一直对Nginx和uWSGI到底是什么很模糊,其实对于编程新手在前期大不可去纠结它们到底是什么。Nginx就是一个软件,软件为我们提供服务,它提供静态文件访问的web服务(当然还有其他服务,这里我们只需要了解这么多即可)。然而,它不能直接执行托管Python应用程序,而uWSGI解决了这个问题。

在我们的python虚拟环境里运行安装命令:

pip install uwsgi

这里因为我们在虚拟环境flask_python3_formal中只有python3,所以直接使用pip即可。

随后,我们将我们的项目文件夹上传到服务器,并在其中建立uWSGI的配置文件config.ini,写入下面的内容:

[uwsgi]

# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8001 

# 指向网站目录
chdir = /tmp 

# python 启动程序文件
wsgi-file = app_mac.py 

# python 程序内用以启动的 application 变量名
callable = app 

# 处理器数
processes = 4

# 线程数
threads = 2

#状态检测地址
stats = 127.0.0.1:9191

运行uWSGI:

uwsgi config.ini

如果一切正常,会得到uWSGI正常运行的提示,我们先ctrl+c结束掉。因为在生产环境,必须有一个软件来监控uWSGI,保证服务器重启后或者其本身Crash掉可以自动重启。

三、安装supervisor

supervisor就解决上面所描述的问题,它可以监控多个应用,保证其稳定运行,安装:

apt-get install supervisor

其配置文件位置在/etc/supervisor/supervisor.conf

正常情况下,我们只需要在配置文件最下面加入两行(如有其它配置需要,可以查阅相关文档):

[include]
files = /etc/supervisor/*.conf

这样supervisor就会监控/etc/supervisor目录下所有conf文件,我们在此目录下建立文件my_flask_supervisor.conf:

[program:my_flask]
command= /root/.virtualenvs/flask_python3_formal/bin/uwsgi /tmp/app_mac/config.ini  #要执行的命令,这里就是运行uWSGI配置文件
directory= /tmp/app_mac
user=root
autostart=true
autorestart=true
stdout_logfile=/tmp/app_mac/uwsgi_supervisor.log   #日志文件

随后,启动supervisor:

supervisord -c /etc/supervisor/supervisord.conf

至此,uWSGI配置完毕

四、安装Nginx

离最终目标仅剩最后一步,安装Nginx:

apt-get install nginx

安装完成后,在项目目录新建一个Nginx的配置文件flask.conf用于我们的Flask应用。向其键入以下内容(根据说明自行修改配置):

server {
   listen  80;       #监听端口  
   server_name X.X.X.X;    #服务器公网IP


   location  /  {
      include      uwsgi_params;
      uwsgi_pass   127.0.0.1:8001;  # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理,8001对应uWSGI启动的端口
      uwsgi_param  UWSGI_PYHOME /root/.virtualenvs;  # 指向虚拟环境目录
      uwsgi_param  UWSGI_CHDIR  /tmp/app_mac;   # 指向网站根目录
      uwsgi_param  UWSGI_SCRIPT manage:app;   # 指定启动程序
   }
  }

最后,将刚建立的配置文件使用符号链接到Nginx配置文件文件夹中,重启Nginx:

ln -s /tmp/app_mac/flask.conf /etc/nginx/conf.d/
service nginx restart

至此,如果一切顺利,则访问http://X.X.X.X,就可以正常看到你的Flask程序了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容