Flask+uwsgi+nginx+CentOS部署

在租了一台服务器后面对SSH的黑框框,一筹莫展,不知道该干些啥。由于是第一次部署服务器,一切都是新的开始,这篇博文是我自己摸索了一个多星期后终于搭建好之后的一个记录吧,服务器的系统来回重置了二十多次,招的各个文章总有各种各样的问题,不是太适用。
下面步入正题.

在CentOS上安装Python3.7

由于CentOs自带的Python是2.7的,我们的项目是用Python3写的,所以到安装Python3
首选安装依赖包

yum update
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

安装完依赖包之后,我们下载并解压Python3安装包

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz

tar

进入Python-3.7.0文件中

cd

配置编译参数

./configure --prefix=/usr/python --enable-shared CFLAGS=-fPIC

编译安装

make
make install

进入安装文件,拷贝

cp

制作软连接

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

到这里,Python就安装完成了,大家可以输入

python3 --version

来查看是否安装成功

安装Flask,uwsgi,virtualenv以及项目所需要的一些依赖

下面我们安装虚拟环境

sudo pip3 install virtualenv
sudo pip3 install

下面我们创建虚拟环境,切换到项目的文件夹

virtualenv env1
source

安装flask以及依赖

pip3 install flask
pip3 install

安装项目的拓展包,在项目组导出requirments.txt

pip3 freeze >requirements.txt

在服务器上安装

pip3 install

然后进行一些简单的测试,测试flask和uwgsi是否能够正常运作

测试flask和uwsgi

Flask

我们先在项目目录下创建个简单的flask文件,​​如下hello.py​

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World"
if __name__ == "__main__":
app.run(host='0.0.0.0')

然后我们运行​​python3 hello.py​​​ 这时在浏览器中输入你服务器ip:5000,如果显示Hello World,则Flask是正常工作了
下面我测试uwsgi

uwsgi

我们使用​​uwsgi --socket 0.0.0.0:5000 --protocol=http -p 3 -w hello:app​​​来启动uwsgi。
这时在浏览器中输入你服务器ip:5000,如果显示Hello World,则uwsgi是正常工作的。

安装配置Nginx

下面我们来安装配置nginx,首先安装nginx

pip3 install

这样安装的nginx一般是在/usr/local/nginx下的
安装完我们进行配置,使用uwsgi+Nginx来部署flask项目
首先在项目目录下创建uwsgi.ini文件,并编辑

module = hello:app
master = true
processes = 3
chdir = /home/myproject/
socket = /home/myproject//myproject.sock
socket = 127.0.0.1:5000
logto = /home/myproject/myproject.log
chmod-socket = 660
vacuum = true

然后通过配置文件的方式启动uwsgi:
​​​uwsgi --ini uwsgi.in​​ 启动好之后我们这样是无法访问的,因为我们部署的是127.0.0.1:5000,需要用nginx来反向代理。我们来配置Nginx配置文件,创建nginx.ini并编辑

worker_processes 4;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name # 这里填你的域名,如果没有,可以把这行删掉
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
}
}
}

在这里千万不要忘记在项目文件下创建一个uwsgi_params文件,同时编辑:

uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_ADDR $server_addr;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;

这是基本固定的,但是不能漏,一开始我部署的时候就是uwsgi可以正常使用,nginx也可以,两个加到一起就无法使用,这就是因为没写这个文件的缘故。
好了这就Nginx配置好了,我们启动Nginx

/usr/local/nginx/sbin/nginx -c /home/myproject/nginx.ini

由于我们监听的是80端口,这时候你打开你服务器ip或者域名的时候,你就会看到Hello World.
这就是Flask+uwsgi+nginx+CentOS的一个简单的部署。