ubuntu16.04+nginx+gunicorn部署flask项目
前期准备配置服务器上的环境:
1.我们部署项目需要使用到虚拟环境,因此下载一个虚拟环境包
sudo apt-get install python-dev python-pip python-virtualenv
如果不行使用这两种方法试试
python2/3创建方法;
1.pip install python3-env 安装虚拟环境包
2.python3 -m venv <虚拟环境文件名> 或者 python -m venv <虚拟环境名字>
3.进入该虚幻环境 并激活 激活指令activate
4.退出虚拟环境直接就是 deactivate
python2/3创建方法:
1.pip install virtualenv
2.virtualenv <虚拟环境名>
3.进入该虚幻环境 并激活 激活指令 进入bin文件内 source activate
(进入成功的话有个标志(venv))
4.退出虚拟环境直接就是 deactivate
2.安装nginx
sudo apt-get install nginx
3.进入虚拟环境安装gunicorn
(venv) $ pip install gunicorn
安装完之后就是上传项目文件
1.使用xftp传文件到服务器,项目就放到之前创建的虚拟环境目录内。
进入虚拟环境,安装第三方库,使用清单的方式。
2.先生成我们所需要安装的第三方库
pip freeze >> requirements.txt
说明:>>这个符号意思是增加内容,这里是将需要安装的第三方库安装到requirements.txt中
还有一个符号> 是覆盖的意思。
3.使用清单方式安装库
pip install -r requirements.txt
4.配置nginx
进入 /etc/nginx/sites-available
将default删除,重新写一个配置文件
这里写的是基本配置
注意“ ; ”不能省略
#负载均衡,说明本地项目运行的路径
upstream upstream_name{
ip_hash;
server 127.0.0.1:5000; #这里是自己项目运行的服务器+端口
}
server{
listen 80; #你需要监听的端口
listen 443 ssl; #装证书需要https时候添加 端口号一定是443
server_name zhangsan.com ; #填写域名或者这里填你的服务器的公网ip ,那么最后打开网址 zhangsan.com:80就能打开你的项目,80可以不写,如果监听其他端口不得省略。
location /static{
alias /home/venv/flask-test/app/static; #这里配置静态文件的地址 如果访问的链接是以/static结尾的,那么服务器就会自动从 /home/venv/falsk-test/app/static/上面找文件资源
}
location /{
proxy_pass http://upstream_name; #使用upstream
proxy_set_header Host $host; #这里就是默认的一样就可以。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#需要ssl证书的时候添加 以下配置
ssl_certificate /etc/myapp/ssl/ssl.crt; # 改为自己申请得到的 crt 证书文件的绝对路径 pem文件也如此
ssl_certificate_key /etc/myapp/ssl/ssl.key; # key文件证书的绝对路径
}
#这里是重定向跳转,监听80端口默认是http的链接,那么我们就跳转到https
server{
listen 80;
server_name zhangsan.com;
rewrite ^/(.*)$ https://zhangsan.com:443/$1 permanent;
}
5.启动gunicorn
进入虚拟环境启动,还有进入到当前项目的启动程序的目录
(venv) $ gunicorn -w 4 -b 127.0.0.1:9000 run:application
That’s all! 它的安装就这么简单。不过这里得作一个解释。就是最后的那个参数 run:application
表示启动flask程序。 run是这个项目启动程序的文件名,application是flask项目实例,即application=Flask(_name__)
6.结束
当然,就使用gunicorn启动完程序之后就可以了,不过也可以使用supervisor进程管理工具,使得项目可以更好的管理。
还可以参考:https://www.cnblogs.com/ray-liang/p/4837850.html
7.注意
如果不能启动,可能是你端口被占用,或者防火墙开启了,或者端口没有打开。
nginx基本使用
进程查看 ps aux|grep nginx
1.基本命令:
nginx 启动nginx服务
nginx -s reload 重启nginx
nginx -s quit 优雅退出 (此时执行此命令之时,若是有人在访问资源,要等到其访问完之后,nginx就会停止)
nginx -s stop 强行停止服务
2.nginx配置文件在
/etc/nginx/
sites-available 配置文件,在这里配置,然后链接文件到sites-enabled
sites-enabled 是sites-availablez中的文件执行的配置文件
3.基本的配置
进入 /etc/nginx/sites-available
将default删除,重新写一个配置文件
这里写的是基本配置
注意“ ; ”不能省略
server{
listen 80; //你需要监听的端口
server_name zhangsan.com ; //填写域名或者这里填你的服务器的公网ip
location /static{
alias /home/venv/flask-test/app/static ; //这里配置静态文件的地址
}
location /{
proxy_pass http://127.0.0.1:9000 //这里http一定不能省略 还有自己执行这个项目运行的端口
proxy_set_header Host $host; //这里就是默认的一样就可以。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
4.日志记录
nginx服务器执行日志在
/var/log/nginx中,
gunicorn说明
这是一个支持wsgi协议的一个服务器,他能能够与各种wsgi web框架协作。而flask是一个基于wsgi协议的web框架,所以我们这里使用了gunicorn。。 还有支持wsgi协议的服务器。比如uwsgi。不过不建议使用,比较复杂。
重启gunicorn
先查询gunicorn进程号关闭
ps -aux| grep gunicorn
根据pid杀死进程
kill -9 pid号
supervisor
一个进程管理工具。
supervisor命令行启动
supervisorctl -c /etc/supervisor/supervisord.conf.dpkg-new
一些命令
start <需要运行的进程>
stop 《需要停止的进程》
reload 重新加载