当前位置:   article > 正文

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

flask项目离线部署

写在开始

背景:生产环境是客户提供的华为虚拟机,经常出现莫名崩溃,而且还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
  • 3

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
  • 2

1.3 下载python3 离线安装包

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

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

在开发环境的 Terminal 中运行

pip3 freeze >requirements.txt
  • 1

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

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

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

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

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

cd /opt
mkdir -p ~/.pip
touch ~/.pip/pip.conf
vim ~/.pip/pip.conf
  • 1
  • 2
  • 3
  • 4

在pip.conf文件中录入

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
[download]
trusted-host=mirrors.aliyun.com
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

2.1 安装yum 依赖

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

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

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	# 安装
  • 1
  • 2
  • 3
  • 4
  • 5

安装成功后,设置软链接

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

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

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

mkdir yourproject/venv
cd yourproject/venv
python3 -m venv myenv
  • 1
  • 2
  • 3

激活虚拟环境

source myenv/bin/activate
  • 1

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

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

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

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

3. 部署Flask 应用

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

from app.app import create_app

application = create_app()

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.3 启动 gunicorn

gunicorn -c gunicorn.conf.py wsgi:application
  • 1

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

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/;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/73070
推荐阅读
相关标签
  

闽ICP备14008679号