全断网环境下部署python3 生产环境和Flask应用程序-CentOS6.5

写在开始

背景:生产环境是客户提供的华为虚拟机,经常出现莫名崩溃,而且还TM在内网,所以本文是为了给现场工程师参照部署环境和应用程序使用。
环境:CentOS 6.5 【别问我为啥会这么老,这得问客户】
python 3.7.4
WSGI容器:Gunicorn
反向代理服务器:Nginx

1. 准备工作

此处参考了centos离线安装python3/pip3和项目所需模块
也记录下我们处理的过程

1.1 修改yum配置文件

通过修改联网机yum配置,在使用yum install xxx 的时候直接将这些依赖保存在指定目录中,而不是直接删除,便于后面将这些依赖包拷贝到离线服务器中。具体操作如下:

vim /etc/yum.conf
cachedir=/var/cache/yum # yum install xxx中xxx依赖的存储位置
keepcache=1	# 改为keepcache=1这样yum install xxx下载的rpm包就不会删除

1.2 下载yum 依赖

在联网的服务器上,使用yum install 安装相关依赖

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y
yum install libffi-devel -y

1.3 下载python3 离线安装包

Python官网下载离线安装包
在这里插入图片描述

1.4 打包下载python 应用程序需要的包

在开发环境的 Terminal 中运行

pip3 freeze >requirements.txt

工具会自动生成应用程序所需要的依赖文件及版本

在这里插入图片描述
然后将需要的依赖安装包下载到你本地的目录中

pip download  -r requirements.txt  -d yourprojectdir\whls
pip download guniorn -d yourprojectdir\whls

这里特别注意,如果你本机的开发环境是Win的话,需要在联网的CentOS服务器上运行以上语句,否则,你win下的安装包在离线服务器上是无法安装成功的。

download 的时候可以配置国内镜像,速度会快一些,配置方法如下:

cd /opt
mkdir -p ~/.pip
touch ~/.pip/pip.conf
vim ~/.pip/pip.conf

在pip.conf文件中录入

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
[download]
trusted-host=mirrors.aliyun.com

然后保存退出 pip.conf 文件即可。

2.离线服务器上生产环境安装

2.1 安装yum 依赖

将联网机中缓存在/var/cache/yum目录下的所有rpm包都拷贝至离线服务器。
运行 rpm

rpm -Uvh ./*.rpm --nodeps --force

2.2 安装python3

注意,yum 依赖一定要在本步骤前安装,否则会导致pip3 安装失败

将下载好的python3 安装包拷贝到离线服务器

tar -zxvf Python-3.7.4.tgz	# 解压python3安装包
cd Python-3.7.4 	# 进入python3安装包目录
./configure --prefix=/usr/local/python3 --with-ssl	# 将python3 安装在该目录,-ssl 是为了防止pip3 出问题
make  # 编译源码
make install	# 安装

安装成功后,设置软链接

ln -s /usr/local/python3/bin/python3 /usr/bin/python3	# 创建python3软连接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3	# 创建pip3的软连接

2.3 安装应用程序需要的依赖

将离线下载的虚拟环境安装工具和其他安装whl文件拷贝到离线服务器
从3.7版本开始,python已经自带venv工具,因此直接使用内部命令创建

mkdir yourproject/venv
cd yourproject/venv
python3 -m venv myenv

激活虚拟环境

source myenv/bin/activate

之后会看到你的命令行前面全部都有
(myenv) 前缀,就表示激活成功

然后在激活的虚拟环境中安装其他依赖包

cd /yourproject/
pip3 install --no-index --find-links= yourprojectdir\whls -r requirements.txt

安装完成后,生产环境就部署完成了。

3. 部署Flask 应用

3.1 编写应用启动脚本wsgi.py

from app.app import create_app

application = create_app()

if __name__ == '__main__':
    application.run(debug=False)

这个启动脚本替换原有的项目启动脚本即可

3.2 编写gunicorn.conf.py 配置文件

在项目根目录处增加gunicorn.conf.py 配置文件

bind = "127.0.0.1:5000"
# 监听队列
backlog = 512
worker_class = 'gevent'
loglevel = "error"
# 设置gunicorn访问日志格式,错误日志无法设置
access_log_format = (
    '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"')
accesslog = '/var/log/gunicorn/gunicorn.access.log'
errorlog = "/var/log/gunicorn/gunicorn.error.log"

3.3 启动 gunicorn

gunicorn -c gunicorn.conf.py wsgi:application

运行脚本后,应用就已经按照配置运行起来了

3.4 配置Nginx

worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen 80;
        server_name _;

        location /yourproject-prefix/ {
    	
	    	proxy_redirect          off;
	        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-Forwared-Proto        $scheme;
	        proxy_pass   http://127.0.0.1:5000/;
        }
    }
}

启动nginx后,就完成应用程序部署了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值