nginx 是一个高性能的web服务器,通常用来在前端做反向代理服务器。所谓正向与反向(reverse),只是英文说法翻译。代理服务,简而言之,一个请求经过代理服务器从局域网发出,然后到达互联网上服务器,这个过程的代理为正向代理。如果一个请求,从互联网过来,先进入代理服务器,再由代理服务器转发给局域网的目标服务器,这个时候,代理服务器为反向代理(相对正向而言)。nginx的作用就是分流,转发,负载均衡,来分到服务器的压力。
webservice 的方式同样也有很多方式。常见的有FastCGI
,WSGI
等。我们采用gunicorn
为 wsgi容器。
python为服务器script,采用flask
框架。同时采用supervisor管理服务器进程。也就是最终的部署方式为:
1、创建一个文件夹,存放你的项目
mkdir myproject
2、创建虚拟环境
用来在一个系统中创建不同的 python 隔离环境。相互之间还不会影响,使用简单到令人发指。
进入项目文件夹,并创建虚拟环境
cd myproject
virtualenv venv
创建虚拟环境之后就可以激活了
source venv/bin/activate
通过deactivate退出虚拟环境
3、项目测试
安装flask框架
pip install flask
测试我们的 flask 安装是否成功,并使用 flask 写一个简单的 web 服务。
vim myapp.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world'
if __name__ == '__main__':
app.debug = True
app.run()
启动flask
python myapp.py
这样在127.0.0.0:5000就能看到你的本地项目了
4、使用gunicorn部署python web
现在我们使用 flask 自带的服务器,完成了 web 服务的启动。生产环境下,flask 自带的 服务器,无法满足性能要求。我们这里采用 gunicorn 做 wsgi容器,用来部署 python。
安装gunicorn
pip install gunicorn
pip 是一个重要的工具,python 用来管理包。还有一个最佳生产就是每次使用 pip 安装的库,都写入一个 requirement 文件里面,既能知道自己安装了什么库,也方便别人部署时,安装相应的库。
pip freeze > requirements.txt
以后每次 pip 安装了新的库的时候,都需freeze 一次。
如果有很多包的话,我们就不用手动安装了,通过执行requirements.txt
就可以一次性安装了。
pip install -r requirements.txt
当我们安装好 gunicorn 之后,需要用 gunicorn 启动 flask,注意 flask 里面的name里面的代码启动了 app.run(),这个含义是用 flask 自带的服务器启动 app。这里我们使用了 gunicorn,myapp.py 就等同于一个库文件,被 gunicorn 调用。
gunicron -w4 -b0.0.0.0:8000 myapp:app
此时,我们需要用 8000 的端口进行访问,原先的5000并没有启用。其中 gunicorn 的部署中,,-w 表示开启多少个 worker,-b 表示 gunicorn 开发的访问地址。
5、安装Nginx
Gunicorn对静态文件的支持不太好,所以生产环境下常用Nginx作为反向代理服务器。
安装
sudo apt-get install nginx
启动
sudo /etc/init.d/nginx start |
修改配置文件
先找到文件/etc/nginx/sites-available/default,将原来的default删除,然后重新新建一个default文件,文件内容如下:
# 如果是多台服务器的话,则在此配置,并修改 location 节点下面的 proxy_pass
upstream flask {
server 127.0.0.1:5000;
server 127.0.0.1:5001;
}
server {
# 监听80端口
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# 请求转发到gunicorn服务器
proxy_pass http://127.0.0.1:5000;
# 请求转发到多个gunicorn服务器
# proxy_pass http://flask;
# 设置请求头,并将头信息传递给服务器端
proxy_set_header Host $host;
# 设置请求头,传递原始请求ip给 gunicorn 服务器
proxy_set_header X-Real-IP $remote_addr;
}
}
在浏览器的网址上输入你的服务器地址,就能访问到你的项目了
如上是检验的测试代码是否能正确部署,如果要部署自己的项目,那就通过git clone http:// 你的git项目地址
gunicron -w4 -b0.0.0.0:8000 此处为项目的主程序入口:app
注:在部署到服务器时,由于版本的问题,MySQLdb模块显示无法安装,并且pip安装也提示版本问题,
原因在于python2和python3在数据库模块支持这里存在区别,python2是mysqldb,而到了python3就变成mysqlclient,pip install mysqlclient即可。
文章参考:
python3提示错误“ImportError: No module named 'MySQLdb'”_importerror: no module named 'mysqldb' 3.5.2-优快云博客
https://www.jianshu.com/p/be9dd421fb8d