linux下gunicorn+flask项目的部署

首先要有一台服务器,我用的是亚马逊的EC2云服务器,具体的服务器购买使用就不细说了。在接触到部署之前,我也和大多数人一样,觉得部署是一件很难的事情,其实部署无非就是使用linux命令来完成我们之前在本机windows系统的工作。主要是运行环境的搭建和将本地数据(数据库、代码)拷贝至云服务器。接下来看看具体的操作步骤



安装mysql

数据库的安装取决于你的项目需要,如果是没有使用到数据库的项目可以忽略...

1、在EC2直接使用yum命令安装MySQL:(参考资料)

yum install mysql mysql-server mysql-libs 

2、修改mysql root的密码,登录mysql即可( 参考资料)

3、创建数据库,备份本地数据库数据导入到新建的数据库中(参考资料)


安装python3.5+pip+virtualenv

先介绍一下pip和virtualenv的作用,pip是python的一个安装工具,可以用来下载安装项目中用到的python第三方库,virtualenv是python的运行环境,像一座房子一样,你可以用virtualenv建立一个独立的项目运行的环境(房子),然后使用pip在这个环境下安装第三方库(家具)。具体的安装方法如下:

1、查找python安装包

sudo yum list | grep python 

2、安装python 3.5  

 sudo yum install python35.x86_64

安装pip 

 sudo yum install python35-pip.noarch 

安装 virtualenv 

 sudo yum install python35-virtualenv.noarch 

创建virtualenv +下载第三方库(flask、gunicorn)

进入想要创建虚拟环境的目录,用virtualenv 命令创建虚拟环境,只需要指定一个虚拟环境的名称(venv)即可,-p指定python版本

virtualenv venv -p python3.5

如果把virtualenv比做房子,那第三方库可以看成是房子里面的家具,接下来我们看看如何充实我们的房子。

在上一步创建好虚拟环境后,我们要激活这个环境,linux系统里有默认的python环境,我们必须要激活创建的环境才能使用它。

激活环境的命令: source 环境目录/bin/activate  

source venv/bin/activate

安装flask、gunicorn

pip install flask

pip install gunicorn

.....用类似的方法可以安装其他的三方库,查询安装包可用如下的命令:

pip list | grep 关键字  (查看更多pip使用方法)

 

将本机项目传输到服务器

不一样的服务器远程传输文件的方法不太一样,不过换汤不换药,无非是使用linux的远程文件传输的命令。需要注意的是这些命令是在本机执行的。EC2下的文件传输可以点击这里查看


启动服务

终于到了最后一步启动服务了,首先if __name__ == '__main__':下添加下面两行代码

from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
并在app.run()中设置host的ip为本地静态ip,已和简单的flak项目代码如下
 
  
 
  
然后进入项目目录 用gunicorn启动项目(请先确认使用的虚拟环境在激活的状态)
 
  

最简单的运行方式就是:

gunicorn main:app

其中code就是指main.py,app就是那个wsgifunc的名字。

这样运行的话, gunicorn 默认作为一个监听 127.0.0.1:8000 的web server,可以在本机通过: http://127.0.0.1:8000 访问。

如果要通过网络访问,则需要绑定不同的地址(也可以同时设置监听端口),设置0.0.0.0可以监听到所有ip的请求:

gunicorn -b 0.0.0.0:8080 main:app 

在多核服务器上,为了支持更多的并发访问并充分利用资源,可以使用更多的 gunicorn 进程:

gunicorn -w 8 main :app 

 
  
以上我们的部署就完成啦!但是外网还是不能访问,研究了好久发现是防火墙的设置问题,需要设置防火墙的入站规则,具体就不详细讲了,当设置完成后,将访问的url中的ip改成服务器的外网ip就可以访问咯~~~
 
  
 
  
因为我的项目没有用到静态文件,没有对nginx进行说明,有项目需要的可以对nginx进行了解,以下是我部署时查阅的一些资料。
http://blog.csdn.net/raptor/article/details/8681357
http://www.cnblogs.com/Ray-liang/p/4837850.html
http://www.codexiu.cn/python/Explore%20Flask%E4%B8%AD%E6%96%87%E7%89%88/344/

你可能感兴趣的:(python)