有用 Python 编写的流行服务器来容纳 WSGI 应用并提供 HTTP 服务。这些服务器在运行时是独立的:你能够从你的 web 服务器设置到它的代理。 Gunicorn ‘Green Unicorn’ 是一个给 UNIX 用的 WSGI HTTP 服务器。python
sudo apt-get install python-pip python-virtualenv
复制代码
sudo apt-get install nginx
复制代码
在 '/var/www/' 下新建测试项目文件夹:nginx
cd /var/www
sudo mkdir test
复制代码
使用scp上传本地项目文件至远程服务器:web
scp -r test.py root@your.ip.address:/var/www/test //@后填服务器的公网IP
复制代码
这里,咱们用一个最小项目来测试,test.py:flask
# file_name='test.py'
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
app.run(host='0.0.0.0',port=5000) # 设置外部访问限制,本例表示全部ip都可访问,端口为5000
复制代码
这里推荐使用virtualenv和pip工具来配置咱们项目的环境,pip能够方便的安装Python有关的工具、框架等,virtualenv能够为咱们每一个项目都配置一个独立的工做环境,使不一样项目的依赖相互隔离,更方便管理,互相不影响。安全
在项目路径 '/var/www/test' 下建立virtualenv环境:bash
virtualenv -p /usr/bin/python3.6 venv //这里我使用了python3.6的版本,若是使用的是系统默认的python版本,则只需输入:virtualenv venv
复制代码
而后激活环境:服务器
source venv/bin/activate
复制代码
若是命令行前面多出来一个: '(venv)' 则表示环境激活成功。app
而后,如下安装的全部框架、工具都是只针对这个项目,与其余项目无关。框架
pip install flask
复制代码
pip install gunicorn
复制代码
pip install -r requirements.txt
复制代码
gunicorn test:app
复制代码
这里的test是咱们的入口模块名,app是flask实例名称。工具
gunicorn -w 4 -b 127.0.0.1:5000 test:app
复制代码
nohup gunicorn -w 4 -b 127.0.0.1:5000 test:app& //关闭远程链接时程序在后台继续运行
复制代码
用四个 worker 进程来运行一个 Flask 应用( -w 4 ),绑定到 localhost 的5000 端口( -b 127.0.0.1:5000 )
注意: 若是是部署在服务器上,除了须要设置相关端口(如5000)的安全组,还须要将上面的启动代码中的地址:'127.0.0.1' 改成你的服务器的私有IP,或者'0.0.0.0',不然外部没法访问到项目!
有时咱们须要nginx代理请求,接下来咱们配置nginx以实现经过请求80端口获取flask项目的服务:
首先备份nginx的配置文件:
sudo cp /etc/nginx/sites-available/default default.bak
复制代码
而后修改nginx的配置文件:
sudo nano /etc/nginx/sites-available/default
复制代码
将其改成:
# file_name=default
server {
listen 80;
server_name example.org; # 这是HOST机器的外部域名,用地址也行
location / {
proxy_pass http://your.私有IP:5000; # 指向 gunicorn host 的服务地址,注意,这里填咱们服务器的私有IP
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
复制代码
其中的location块代码表示将80端口的请求传送到proxy_pass表示的地址,这里咱们要填入咱们的私有IP和项目所在的端口!
如今,咱们对公网IP的http请求就能够映射到咱们的部署在Gunicorn的flask项目上了。
退出虚拟环境:
deactivate
复制代码
关闭gunicorn:
pkill gunicorn //关闭gunicorn
复制代码
查看gunicorn进程:
pstree -ap|grep gunicorn
复制代码