www.zhblog.net

centos7上部署flask:gunicorn + nginx

1. centos7 上默认安装的是python2.7,所以首先将python2升级到python3

yum groupinstall 'Development Tools' 
yum install zlib-devel bzip2-devel openssl-devel ncurese-devel

准备好上面的编译环境,下载python3

wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz

开始编译

tar Jxvf Python-3.6.4.tar.xz 
cd Python-3.6.4 
./configure --prefix=/usr/python3 
make && make install

更换系统默认python版本

1)备份旧版python,python2.7系统还有其它地方使用

mv /usr/bin/python /usr/bin/python2.7

2)新建指向新版本 Python 以及 pip 的软连接

ln -s /usr/python3/bin/python3.6 /usr/bin/python ln -s /usr/python3/bin/pip3 /usr/bin/pip

3)检验 Python 及 pip 版本

python -V
pip -V

显示均为3则代表更换成功。

2.更改python相关设置

vim /usr/libexec/urlgrabber-ext-down 
vim /usr/bin/yum 
vim /usr/bin/firewall-cmd 

以上开头中均改成 /usr/bin/python2.7

3.升级结束,开始准备部署flask

sudo yum install epel-release 
sudo yum install gcc nginx

1)mkdir blog 创建项目目录

2)python -m venv venv 安装隔离环境

3)source venv/bin/activate 激活环境

4)pip install flask, gunicorn, simplejson, pymysql 安装项目依赖库

5)python app.py 启动项目 flask默认本地访问 服务器上需要 app.run(host='0.0.0.0')

6)firewall-cmd --zone=public --add-port=5000/tcp --permanent  防火墙需开放5000端口

7)firewall-cmd --reload 刷新防火墙

4.使用正式的web框架 gunicorn

gunicorn -w 2 -b 0.0.0.0:5000 app:app

1)设置系统自动启动gunicorn

vim /etc/systemd/system/app.service

[Unit] 
Description=Gunicorn instance to serve app 
After=network.target 

[Service] 
User=root 
Group=nginx WorkingDirectory=/home/zhanh/blog Environment="PATH=/home/zhanh/blog/venv/bin" ExecStart=/home/zhanh/blog/venv/bin/gunicorn -w 2 -b 127.0.0.1:8000 app:app 

[Install] WantedBy=multi-user.target

保存并退出。

sudo systemctl start app 
sudo systemctl enable app

这时候项目应该运行起来了。

5.配置nginx代理请求

vim /etc/nginx/nginx.conf

server { 
  listen 5000; 
  server_name localhost; 
  # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; 
  location / { 
    proxy_set_header Host $http_host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_pass http://localhost:8000/; 
  } 
} 

注释掉原来的 server,添加我们的新server。

sudo systemctl start nginx 
sudo systemctl enable nginx

这样系统可以自启动项目了。

总结:

  flask运行在虚拟环境中的gunicorn,nignx代理请求。其中系统自启动和nignx代理不是必要的,可以不配置,到gunicorn启动即可。

中间各种错误,基本都是python2升级python3造成的,同用解决办法:yum下载库,然后重新编译python3.注意要修改系统工具中原来的python为python2.7

展开阅读全文

评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 心情