Nginx+uwsgi+flask+centos7项目部署

一、确认服务器与客户端之间互通(检查网络 )

ping 192.168.184.131 

二、配置环境
1.检查防火墙状态

  systemctl  status  firewalld
  #(setenforce 0 次命令可暂时不使用)

  #暂停防火墙
  systemctl  stop  firewalld

2.将项目文件传到服务器上

mkdir ~/downloads 

#后面用于下载文件保存路径

mkdir  /home/conf  /home/logs  /home/env  /home/src

#/home目录下创建 conf logs env src四个目录:
#conf配置文件存放:nginx.conf ,uwsgi.ini文件
logs 日子文件,存放:nginx的启动和失败文件以及uwsgi的运行日子文件
env存放虚拟环境

src项目文件,存放目录代码

a 在本地电脑项目文件下生成package.txt需要包文件
进入项目环境下:

pip freeze > package.txt

b 使用xshell连接服务器,使用xftp将目标项目文件和package.txt
传到服务器:
/home/src/

3.安装python3和pip3

a.首先安装gcc编译器:

yum -y install gcc
gcc --version 

b.安装依赖包(python3.7.0以下版本可不装 libffi-devel):

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 libffi-devel

c. 下载 :
cd 到下载python3安装包的目录下

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

(在https://www.python.org/ftp/python/中选择自己需要的python源码包,这里下载的是python3.7.0 ,可以页面下载了直接拖到服务器里面去 )

d. 解压Python-3.7.0.tgz:

  tar -zxvf Python-3.7.0.tgz

f. 执行配置文件,编译,编译安装python3
源码编译安装

cd Python-3.7.0

./configure --prefix=/usr/local/python3

#配置文件放的位置

make && make install

#编译 安装
安装完成没有提示错误便安装成功了

g. 建立软连接

    ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
	ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3

h.查看版本

   python3 --version
   pip3 --version 

4 安装virtualenv
a. 安装

 yum install python-virtualenv

#创建虚拟环境env
#进入存放虚拟环境的目录

cd /home/env  

virtualenv  --no-site-packages  testenv 

(指定python3安装 :virtualenv -p /usr/bin/python3 --no-site-packages testenv)
cd testenv

#激活虚拟环境 (关闭环境命令:deactivate
这里是:

cd /home/env/testenv/bin/
deactivate )
source bin/activate
(source /home/env/testenv/bin/activate)

b. 安装项目所需要的包环境

  pip3 install -r package.txt  

(再激活环境情况下安装指定项目的包:

pip install -r /home/src/mintorFlask/package.txt )

5 在激活的虚拟环境下 测试flask服务

python3 manage.py runserver --host 127.0.0.1 -p 5000

正式环境部署时注意debug=False的修改

6 安装配置Uwsgi

a.安装uwsgi

/home/env/testenv/bin/python3/pip3 install uwsgi

b.创建uwsgi配置文件

cd  /home/conf
vim uwsgi.ini

编写如下内容: 注释去掉

[uwsgi]
socket= 127.0.0.1:5000  # http 协议对客户端开发的端口号,客户端通过此端口访问 flask web 服务接口
pythonpath = /home/src/my_project  # my_project应用整个目录,即python代码所在目录
wsgi-file = /home/src/my_project/manage.py # web 应用python主程序
callable = app  # 一般在主运行程序 run_app.py 里指定 app = Flask(__name__)
processes = 4
threads = 2
demonize = /home/log/uwsgi.log # 指定日志文件;如果使用 supervisors 需要注释掉,否则,supervisors 不能自动拉起 uwsgi 程序
home = /home/env/testvenv # python 虚拟环境目录

c.运行项目

进入/home/conf

/home/env/testenv/bin/python3/uwsgi --ini uwsgi.ini

 (关闭uwsgi命令 :pkill -f uwsgi -9)

如果没有报错 ls 可以查看当前目录下生成了 uwsgi.log日志文件

7 安装配置nginx

cd /home

a.安装nginx包:

wget -c https://nginx.org/download/nginx-1.12.2.tar.gz

b.解压包:

tar -zxvf nginx-1.12.2.tar.gz

c.切换到nginx-1.12.2下,编译安装配置

/opt/nginx-1.12.2
./configure \
>回车

d.编译安装

make && make install

#安装软连接 

ln -s  /usr/local/ngnix/sbin/nginx  /usr/bin/nginx

这里查看一下 nginx是在哪个目录下可以启动

e.测试

nginx   #没有任何提示就是成功了

f.备份配置文件

cd  /usr/local/nginx/conf   
cp nginx.conf nginx.conf.bak

g.进行配置

vim nginx.conf

server {
        listen       80;
        server_name  src; 
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        access_log  /home/log/flask.log;
        error_log  /home/log/flaskError.log;
        
        location / {
            include  uwsgi_params;
            uwsgi_pass 127.0.0.1:5000;  #这里要和uwsgi 端口ip一致

            uwsgi_param UWSGI_PYHOME /home/env/testenv;  //指向虚拟环境目录

 uwsgi_param UWSGI_CHDIR  /home/src;  #项目位置目录
            uwsgi_param UWSGI_SCRIPT  manage:app; #项目启动文件名
 这里是manage.py和主程序注册app 
            }    
}

检查nginx配置正确吗

nginx -t -c /usr/local/nginx/conf/nginx.conf

重启

  nginx -s reload

(关闭:nginx -s stop)

重新运行uwsgi

/home/env/testenv/bin/python3/uwsgi --ini /home/conf/uwsgi.ini

如果没有问题,上面就运行成功了!恭喜你!

访问:192.168.184.131 就可以成功了

防火墙相关:

(https://blog.csdn.net/Honnyee/article/details/81535464)

注意:如果起了服务发现,外部无法访问服务 telnet也不通

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

(–permanent永久生效,没有此参数重启后失效)

添加端口外部访问权限(这样外部才能访问)
firewall-cmd --add-port=5000/tcp

重新载入,添加端口后重新载入才能起作用

firewall-cmd --reload

这些之后,端口是开启成功的,如果没有成功,重启系统试试

开端口(加入访问规则,添加外部访问权限)-重启防火墙-重启虚拟机
最重要的是还需要有服务监听这个端口(就是服务使用这个端口),才可访问的通!!

发布了39 篇原创文章 · 获赞 11 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_41782332/article/details/104351452