Flask+uWSGI+Nginx项目部署

Posted ishtarin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask+uWSGI+Nginx项目部署相关的知识,希望对你有一定的参考价值。

?写完项目总不能一直在本地跑,我也是第一次部署项目,这里把部署过程记录一下,暂且把坑略去,遇到的错误之后在整理发出来。

准备工作

  1. 云服务器一台(这里以阿里云服务器为例,系统装的Centos7)
  2. 代码仓库(我用的gitee)

开始部署

初始化系统环境

uWSGI不能使用root用户,所以添加个新的用户:

  • adduser xxx
  • passwd username
  • gpasswd -a username wheel (添加到sudo用户组)

切换到自己创的用户下:

  • sudo -iu username

初始化环境:(ubuntu系统的用对应的apt命令就行)

  • sudo yum install epel-release
  • sudo yum install gcc nginx

安装python

这里使用的是anaconda,因为比装python要方便。

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.07-Linux-x86_64.sh

安装你下载下来的文件,路径就照它默认的来

  • sh Anaconda3-2019.07-Linux-x86_64.sh

给要部署的项目创建python虚拟环境

  • source anaconda3/bin/activate (激活anaconda)
  • pip install virtualenv (下载慢的话自行添加别的源)
  • mkdir flask_project
  • cd flask_project
  • 这里用git把你的项目拉下来,git使用不在这片笔记记录的范围之内
  • virtualenv venv (创建虚拟环境目录)
  • source venv/bin/activate (激活虚拟环境)
  • pip install ... (安装你的项目用到的库,用requirements.txt较为方便)

配置uWSGI服务器

  • pip install uwsgi

  • vim mywsgi.ini (自定义服务器的配置文件)

    ‘‘‘ #一个简单的ini文件,更多的参数名可以自己查询

 

    [uwsgi]

    module = ... # 启动程序所在的文件

    master = true processes = ... # 分配的进程数

    threads = ... # 线程数

    http = 0.0.0.0:5000 # 改成自己的ip和想要运行的端口

    virtualenv = ... # 刚才创建的venv的路径

    die-on-term = true

   ‘‘‘

 

  • uwsgi mywsgi.ini(如果想要在后台运行可以用命令 uwsgi -d --ini mywsgi.ini来代替) 至此,uwsgi服务器已经启动了,在浏览器输入对应ip和端口就能访问了。

使用nginx反向代理

来到安装nginx的文件夹下,查看nginx.conf内容(如果没有这个配置文件,那可能是在sites-enabled文件夹中的default文件,不同版本文件放的位置还是略有不同) 在http{}部分中你会看见这么一句:include ...,意思是在这个路径下的文件都会被当作配置文件加载。so,我们来到这个include对应的文件夹下

  • vim myconf.conf (创建自己的配置)

  ‘‘‘ #还是给个简单的配置

   server {

     listen ...; # 你要监听的端口

     server_name ...; # 你的域名或者ip

     location / {

       include /etc/nginx/uwsgi_params; # 这个路径改成你自己nginx下uwsgi_params文件的路径

       uwsgi_pass 0.0.0.0:....; # 与刚才配置 mywsgi.ini 时指定端口一致

     }

   } ‘‘‘

  • nginx -s reload (重新加载nginx配置)

到这里,就可以用nginx配置中指定的地址+监听的端口来访问你的uwsgi服务器了。

顺带一提,如果使用了nginx,那么在uwsgi的配置文件中,http这个名字要改成socket。另外,如果uwsgi不是后台在运行,那你断开与服务器的连接时uwsgi就会自动关闭,如果是以后台方式运行,那要关掉只能杀掉对应进程。

以上是关于Flask+uWSGI+Nginx项目部署的主要内容,如果未能解决你的问题,请参考以下文章

用uWSGI和Nginx部署Flask项目

Ubuntu18部署uwsgi+flask应用

部署flask应用到nginx+uwsgi+linux服务器

nginx+uwsgi阿里云ubuntu服务器上简单部署flask RESTful风格项目

python部署-Flask+uwsgi+Nginx

Flask + uWSGI + Nginx 项目部署方案