uwsgi+flask 部署网站

摘要: 采用uwsgi作为web服务,将flask框架开发的web程序运行在centos云服务器上

概要

本文主要是叙述用uwsgi作为web服务运行flask开发的网站。本人查阅网上很多资料。跟着他们的步骤做,总是出现各种问题。折腾好久后,终于能正常运行了。故记录下来,供自己和他人查阅。

开发环境

centos7 64bit 云服务器,python 3.5 , uwsgi 2.0

因为博主用flask开发的web使用的python3.5 ,所以,就在云服务器上安装了3.5.如果你的项目是其他版本python开发的,请安装对应的版本。这里不多加叙述安装问题。

安装uwsgi

因为我的python版本是3.5的。所以一下所有关于python的操作指令都是python3 和pip3.这个如果你的不是,请对应自己的来改。比如你的是python 2.7版本的,你的python指令的开头应该是python或者python2,安装包指令应该是pip2或者pip

有很多方式提供安装,比如yum 安装,手动下载安装包,编译安装,已经pip安装。这里我们选择pip安装。这种方式感觉更靠谱。因为我用yum install uwsgi指令安装,最后uwsgi指定的python版本是我的旧版本2.7.而不是最新的3.5。所以卸载 了,又重新采用了pip安装

安装uwsgi的指令如下:

pip3 install uwsgi

建立软连接

因为我的python3.5是手动下载安装的。所以上一步安装uwsgi,安装成功后,只在我指定的安装目录下。而这个目录下,没有设置环境变量。所以我再shell上输入uwsgi,是不被识别的。为了解决这个问题,我需要建立一个软连接,然后将软连接文件放在环境变量中有的路径下。比如/usr/bin下。

ln -s /usr/python3.5/bin/uwsgi /usr/bin/uwsgi
*如果你安装完后,在shell上面,输入uwsgi已经能够被识别了,那么上面的指令你可以不用操作了。

安装一些依赖包

有些资料上面写着

yum install build-essential 
yum install python-dev

这两条指令,但是这两条指令,在centos上是不叫这个名字的。所以会发现安装不成功。

以下是正确的安装指令:

安装build-essential需要下面的指令:

yum groupinstall "Development Tools"

yum install -y gcc 

yum install g++


yum kernel-devel

因为centos上面没有python-dev的包,而是要安装Python-devel

yum install Python-devel

flask程序包的目录结构

未分类

app是一个包,里面只有一个view.py文件和init文件.初始化文件是空的。下面贴出view.py文件的内容

# encoding: utf-8
#!/usr/bin/ python3
'''
@author: rabbit

@contact: [email protected]

@time: 2017/11/27 14:09

@desc:

'''

from flask import  Flask

app=Flask(__name__)

@app.route("/")
def hello():
    return "Hello World"


#if __name__ == "__main__":
#    app.run(host='0.0.0.0', port=5000)

manager.py的作用只是作为一个脚本启动入口,通过它启动flaskweb网站。比如你输入

python3 manage.py runserver --host 0.0.0.0

manager.py 内容也贴出来给大家

# encoding: utf-8
#!/usr/bin/env python
'''
@author: rabbit

@contact: [email protected]

@time: 2017/11/27 14:15

@desc:

'''

from flask_script import Manager, Shell

from app.view import app

manager=Manager(app)

def make_shell_context():
    return dict(app=app)

manager.add_command("shell",Shell(make_context=make_shell_context))

@manager.command
def deploy():
    '''run deployment tasks'''
    pass


if __name__=='__main__':
    manager.run()

使用ini文件配置uwsgi,使网站运行起来

我们可以看到项目里面有个叫config.ini文件,这个是我后期加到项目里的。不是该网站程序所自带的。

我们可以vim 去编辑这个config.ini并保存它。指令如下:

先创建一个新的文件,名字叫config.ini

vim config.ini

未分类

也给出文件内容,方便大家复制粘贴

[uwsgi]


#uwsgi启动时,所使用的地址和端口(这个是http协议的)
http=0.0.0.0:5000

#uwsgi 启动时所使用的地址与端口(这个是socke协议)
socket=0.0.0.0:8001


#指向网站目录
chdir=/root/deployTest

#python 启动程序文件

wsgi-file=manage.py

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

callable=app


#处理器数

processes=4

#线程数

threads=2

#状态检测地址

stats=127.0.0.1:9191

对上面的内容我稍微解释一下。因为本人当初看别人写的这个地方的 配置,说的太模糊了。一直运行不起来,也不晓得是uwsgi没有安装好,还是这个配置文件的问题。搞的很头疼。简要说明如下:

chdir=/root/deloyTest

这个一定要指定到你的项目的目录中

callable=app

这个最难理解。因为当时项目最开始建立了一个叫app的文件夹,同时也建立了一个app.py的文件。app.py文件里面又有一个变量叫app。所以看到有的资料这么写,我很懵逼。最后我才把项目的app.py改成了view.py.经过本人测试。这个app的意思是对应view.py文件里面的flask变量名app.如果view.py里面的变量名改成了application。那么这个配置文件里面也要把app换成application.

启动uwsgi 挂起网站

一起准备妥当,只差最后临门一脚了

指令如下:

未分类

正常运行,界面如上。

浏览器输入网址,应该就能得到我们网站的界面了。

截图如下:

未分类

最后祝你成功!