首页 > 编程语言 >Python 发布部署

Python 发布部署

时间:2023-05-06 22:56:38浏览次数:42  
标签:容器 Python 部署 发布 yum install 镜像 docker 安装

原文:https://blog.csdn.net/qq_41466440/article/details/115321381

一、本地打包
1.生成项目依赖文件
在idea中的项目根目录打开Terminal,执行以下命令(前提已经配置好python环境),会在根目录下生成requirements.txt依赖文件

pip freeze > requirements.txt
1

2.打成压缩包

二、发布到服务器
1.直接部署
1.服务器上安装配置好python相关环境
2.压缩项目源码为zip包,上传到服务器
3.服务器上解压缩包,cd进项目根目录,执行以下命令安装依赖,执行命令可以看到正在下载文件中的各个依赖,需要一定时间

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn -r requirements.txt
1
4.普通python项目直接运行。运行项目启动文件,执行以下命令,执行项目入口文件,我这里的入口文件为app.py

python app.py
1
5.flaskweb项目。
扩展:flask部署到服务器并对外开放接口,需要如下操作:

1.Web服务器:Nginx、Apache 用于处理和响应HTTP请求
nginx这个Web服务器做一个反向代理 当用户访问你的域名时 nginx通过代理转到本地的5000端口
2.WSGI容器:uWsgi、Gunicorn
Web框架(Flask)和Web服务器(Nginx)之间的通信,需要一套双方都遵守的接口协议。而WSGI协议就是用来统一这两者的接口的(WSGI是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口)
Gunicorn和uWSGI是常用的WSGI容器,Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多,所以这里我也选择用Gunicorn作为容器。(uWSGI让我更迷糊 Gunicorn简单点)
1
2
3
4
5
(1).安装Flask、Gunicorn

//flask
pip3 install flask //flask通过requirements.txt也会安装,此处可忽略

//gunicorn
pip3 install gunicorn
ln /usr/local/python3/bin/gunicorn /usr/bin/gunicorn
1
2
3
4
5
6
(2).安装并配置nginx
安装教程此处略过。做完如下配置后重启nginx

server {
listen 9082;
server_name 10.221.2.21.xip.io;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
proxy_pass http://127.0.0.1:8777;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(3).nohup启动python应用

nohup python3 -u app.py >> app.log 2>&1 &
1
2.Docker部署
参考自,未做实际验证:https://blog.csdn.net/qq_38531706/article/details/109922180

1.Linux安装Docker
这里使用的是CentOS7系统。在系统中安装Docker可以安装系统中CentOS-Rxtras库中已自带有Docker(但不是最新版本,版本为1.13),也可以安装指定版本,或者安装最新的版本,由于前期自己测试中发现自带得到Docker版本过低会带来一定问题,后期为了处理还作升级比较麻烦,所以采用的是指定版本安装。以下是三种安装方式:

方式1:使用CentOS-Rxtras库中已自带有Docker直接安装

yum install docker
1
方式2:安装最新版本

//1.安装基础工具
yum -y install yum-utils device-mapper-persistent-data lvm2

//2.配置yum镜像库
yum-config-manager --add-repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

//3.安装最新版本
yum install docker-ce
1
2
3
4
5
6
7
8
9
方式3:指定版本安装

//1.安装基础工具
yum -y install yum-utils device-mapper-persistent-data lvm2

//2.配置yum镜像库
yum-config-manager --add-repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

//3.查看可安装版本信息
yum makecache fast
yum list docker-ce.x86_64 --showduplicates | sort -r

//4.安装指定版本
yum install docker-ce-19.03.13 -y
1
2
3
4
5
6
7
8
9
10
11
12
13
上述安装后,查看版本信息确认安装成功,并设置开机自启动

docker -v
systemctl start docker
systemctl enable docker
1
2
3
2.创建Dockerfile
一个docker容器的运行基础是镜像,实际上镜像就是代码与运行环境打包生成的。docker创建镜像有三种方式,分别是基于已有容器创建、基于本地模板创建、dockerfIile创建,这里就不一一赘述每种方式了,我采用的是dockerfile创建方式。
在项目根目录创建Dockerfile,编写执行脚本

# 设置基础镜像
FROM python:3.7
# 设置代码文件夹工作目录 /app
WORKDIR /app
# 复制当前代码文件到容器中 /app
ADD . /app
# 设置时间
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 安装所需的包,这里的requirements文件名需和项目生成的一致
RUN pip install --trusted-host mirrors.tuna.tsinghua.edu.cn -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
# 执行入口文件
CMD ["python", "app.py"]
1
2
3
4
5
6
7
8
9
10
11
12

3.压缩打包上传
(1)本地压缩打包后缀名为.zip包

(2)上传服务器
使用xhell+xftp(或其他工具)将包上传到指定目录
(3)解压缩

4.生成镜像
cd进项目根目录,app.py启动文件需要同Dockerfile放置在同一目录下,执行以下命令生成镜像,注意命令后的 ‘.’ 符号指的是在当前目录下执行创建,不要遗漏了该符号。创建会去执行下载基础镜像和各个依赖,需要等待一定时间。

docker build -t 镜像名称 .
1


5.启动容器
在我的项目中启动的端口是5002,在启动容器时候把该端口映射到9001,这样我们就可以通过该端口访问项目了

docker run --name 容器名称 -d -p 9001:5002 镜像名称
1
另外,还可以通过以下几个命令保存镜像或者导入镜像,进入容器,退出容器等

docker save 容器id > 路径文件名
1
导入本地镜像

docker load -i 文件名.tar
1
进入容器

docker exec -it 容器名 /bin/bash
1
退出容器

exit
————————————————
版权声明:本文为CSDN博主「Learn Forever」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41466440/article/details/115321381

标签:容器,Python,部署,发布,yum,install,镜像,docker,安装
From: https://www.cnblogs.com/bruce1992/p/17378636.html

相关文章

  • Python将目录添加到环境变量
     importsys,ossys.path.append(os.getcwd())#将当前工作目录加入path#sys.path.append:添加环境变量#os.getcwd:返回当前工作目录(注意是工作目录cwd哦)importsys,ossys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))#将当前文件的上级目录......
  • python网络通信:IP/端口基础知识
    1.学习网络编程的目的将多个设备通过网络连接在一起,进行数据共享2.IP地址作用:在逻辑上标记一台电脑特点:没有重复的3.通过收发数据理解IP地址的作用destip表示目的ip/srcip表示源ipIP的版本:ipv4:特点:当下通用的地址,但是已经用光了       ipv6:特点:比较新,用的设备......
  • python 串口读取IMU
    #coding:UTF-8#Version:V1.0.1importserialACCData=[0.0]*8GYROData=[0.0]*8AngleData=[0.0]*8FrameState=0#WhatisthestateofthejudgmentBytenum=0#ReadthenumberofdigitsinthisparagraphCheckSum=0#Sumcheckbita=[0.0......
  • Zabbix 3.0 发布:加强了云端运行监视的安全性
    拉脱维亚的Zabbix于2016年2月16日发布开源系统运用监视软件最新版本「Zabbix3.0」。改善了通信加密和预测检测功能实现等100个以上的项目。Zabbix是用于监视服务器或网络设备等的软件。支持广泛的架构,能监视数十万台以上的设备状况和性能。因为是作为GPL(GNUGeneralPublicLic......
  • python - mock 处理
    前言在现在的软件开发过程中,特别是app的部分,需要的很多数据以及内容,都是来自server端的API,但是不能保证在客户端开发的时候,api在server端已经开发完成,专门等着前端来调用,理想的情况是前端在开发的时候,已经有人写好了接口,直接调用就可以了。但往往是页面写好了,后端接口没有写好,这......
  • python 制作奥运五环 (turtle模块)
     importturtle#第一个圈turtle.width(10)#画笔宽度10turtle.color("black")#画笔的颜色turtle.circle(50)#半径50的圆#第二个圈turtle.penup()#抬笔turtle.goto(110,0)#去到坐标(110,0)turtle.pendown()#放笔turtle.width(10)turt......
  • 使用Python扩展PAM(part 1)
    0、使用Python扩展PAM实现一些额外的功能,比如ssh、vpn等二次验证。1、准备工具实现这个功能需要用到pam_python pam-python 注意!是pam-python不是python_pamPam-python是一个开源的Python模块,用于编写自定义PAM模块。Pam-python使用Python脚本来扩展PAM功能。它使用Cython和Pyt......
  • python给onnet上报数据
      #!/usr/bin/envpython#-*-coding:utf-8-*-#@Time:2021/2/2423:01#@Author:LiShan#@Email:[email protected]#@File:OneNet_Post.py#@Note:https://blog.csdn.net/lishan132/article/details/114044902importurllib.requesti......
  • python中怎么输出字典中字典的值
    #T要求输出'./a/text()url_gglb_xpath_dic={'中国邮政储蓄银行':{'发行公告':['https://www.psbc.com/cn/grfw/tzlc/lc/ywgg/lcxsgg/index_页码.html','https://www.psbc.com/cn/grfw/tzlc/lc/ywgg/lcxsgg&#......
  • python中判断多个元素是否在列表中
    判断单个元素是否在列表中时可以通过in>>>'a'in['a','b','c']True但如果是多个元素,就不能通过in进行判断此时我们可以通过集合中的issubset和issuperset方法顾名思义,issubset是判断某集合是否是另外一个集合的子集,issuperset是判断某集合是否是另外一个集合的超集>>>......