centos7从零开始通过uwsgi+nginx部署flask项目

折腾了大半天,终于通过uwsgi和nginx将项目部署成功,期间查了好多资料,现将过程记录一下,希望能有幸帮助到有同样需求的人。

一、各项软件安装

我使用的是CentOS7系统,首先安装各类软件,主要有:

1.安装编译相关工具
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install libffi-devel -y
2.下载安装包解压
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
tar -xvJf  Python-3.7.3.tar.xz
3.编译安装
mkdir /usr/local/python3 #创建编译安装目录
cd Python-3.7.0
./configure --prefix=/usr/local/python3
make && make install
4.创建软连接
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
5.验证是否成功
python3 --version
pip3 --version

二、安装项目需要的各项依赖

pip3 install flask flask-bootstrap(其他你项目用到的各项依赖)
pip3 install uwsgi 

创建软连接

ln -s /usr/local/python3/bin/uwsgi /usr/local/bin/uwsgi

三、安装nginx

yum -y install nginx 

如果未找到nginx则需要先添加yum源,步骤如下:

1.进入/etc/yum.repo.d/文件夹下添加yum源,名字自己起,为便于识别就叫做Nginx.repo吧
vim Nginx.repo
2.输入以下配置内容:
[Nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
3.重新加载yum源:
yum clear all
yum makecache
4.安装nginx
yum -y install nginx

四、uwsgi 配置

1.首先将项目拷贝到服务器,假设项目位置为/root/myapp,在项目根目录下创建uwsgi配置文件
vim uwsgi.ini

内容如下

[uwsgi]
# Uwsgi's ip and port when it is loaded by Nginx
socket=127.0.0.1:5000
# Point to the main directory of the Web Site
chdir=/root/myapp
# Python startup file
wsgi-file=app/run.py
 # The application variable of Python Flask Core Oject 
callable=app
# The maximum numbers of Processes
processes=4
# 后台运行,并输出日志
daemonize = /var/log/uwsgi/myapp_uwsgi.log

注意:此处wsgi-file填写相对位置即可,run.py为你项目的启动文件,即创建应用实例所在的文件。由于我的项目使用了flask的应用工厂,所以此文件为单独建立的用于uwsgi服务器的文件,内容如下:

  from myflask import create_app
  import os

  env_dist = os.environ
  config = env_dist.get('MY_FLASK_ENV', 'default')
  app = create_app(config)

然后即可通过命令启动服务:

uwsgi uwsgi.ini

五、nginx配置及启动

1.上文已经安装好了nginx,接下来进入nginx配置,首先进入nginx配置文件目录,一般为/etc/nginx,具体可通过以下命令查看:
whereis nginx
2.进入/etc/nginx/conf.d文件夹,创建配置文件flask.conf,编写内容:
server{
 listen 8001;
 server_name 0.0.0.0;
 }
 
 location / {
  include uwsgi_params;
  uwsgi_pass 127.0.0.1:5000;
 }
}
3.放开8001端口

首先,查看http允许访问的端口:

semanage port -l | grep http_port_t

其次,将要启动的端口加入到如上端口列表中

semanage port -a -t http_port_t  -p tcp 8001

如果semanage命令未安装,则先安装semanage,具体方法可自行百度。

4.启动nginx
systemctl start nginx

可通过

systemctl status nginx

查看nginx服务运行情况

六、防火墙配置

centos7推荐使用firewall命令设置防火墙

firewall-cmd --zone=public --add-port=8001/tcp --permanent

重启防火墙

systemctl restart firewalld

至此,整个项目就部署成功了,如果访问时出现502 bad gateway错误,则可通过/var/log/nginx/error.log 查看出错信息。我遇到的是connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client错误。解决方案为:

getsebool -a | grep httpd

设置httpd可以连接到网络,执行命令:

setsebool httpd_can_network_connect on -P
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。