python项目部署

系统 1381 0

目录

一、方法一:通过正常方法(low)

二、通过脚本的方式进行项目部署

三、通过docker部署(完美的办法)


一、方法一:通过正常方法(low)

1、生成requirements文件,即项目依赖的包

            
              # cd 到项目目录下
pip freeze >requirements.txt
            
          

2、创建虚拟环境

            
              python -m  venv  venv(这个是虚拟环境名称)
            
          

3、激活虚拟环境

            
              # 进入venv虚拟环境下的bin目录,执行
source activate
            
          

4、上传项目到服务器(复制,git pull/clone都可以)

5、导入项目所需依赖包

            
              # 进入项目目录,执行
pip install -r requirements.txt
            
          

6、添加本地项目到环境变量

            
              export PYTHONPATH=$PYTHONPATH:{project_dir}

# 也可在程序代码中使用sys.path.append()进行追加
            
          

7、进入项目下执行main.py等主程序

二、通过脚本的方式进行项目部署

#### 首先创建虚拟环境

pip install virtualenv

virtualenv venv

source venv/bin/activate

pip install -r requirements

后续写的脚本文件中的python路径为:

venv/bin/python的绝对路径

 

1、编写脚本文件

示例:

            
              vim entity_extract.sh
            
          
            
              #!/usr/bin/env bash
# 第一行是说明使用的什么脚本语言,这里是 bash, 固定用法
# workdir 是一个路径,即先切换到这个目录下,然后启动服务 (启动命令: python app.py)。其实不切换应该也可以
workdir=/Users/llm/PycharmProjects/solar-clover-backend

# 启动函数,切换路径=》其实就是 python app.py 。 前面一段指明是哪个路径下的python, 后面是 app.py 的路径, & 表示以后台方式启动(这里还不是很了解)
daemon_start() {
    cd $workdir
    /Users/llm/env_workspaces/flask/bin/python /Users/llm/PycharmProjects/solar-clover-backend/app.py &
    echo "Server started."
}

# 停止函数,思路就是我们要找到这个进程号,然后把它 kill 掉
# 进程号寻找: 即 ps -ef|grep 命令, grep 用来过滤,awk 用来将过滤结果进行整理。 像这个命令,过滤出来有很多列,但我们只要进程号那一列,所以就是 {print $2}, 表示进程号那一列
# BEGIN{ ORS="," } 表示以逗号分隔每个进程号, 不写默认换行符分隔。
# 输出其实是一个字符串, 把它变为数组,因为我要取出第一个将进程杀死。 arr=... 这句话就是将 pid 变量里的内容转换为数组,存入arr。
# 接下来就是取到 arr 第一个进程号, 使用 kill 命令杀死

daemon_stop() {
    pid=`ps -ef | grep 'python /Users/llm/PycharmProjects/solar-clover-backend/app.py' | awk 'BEGIN{ ORS="," }{ print $2 }'`
    arr=(`echo ${pid} | tr ',' ' '`)
    echo ${arr[1]}
    kill ${arr[1]}
    sleep 3
    echo "Server killed."
}

# $1 表示命令行交互输入的第一个参数。 我们使用 ./dev.sh start 来运行脚本启动服务(因为此脚本文件名称为 dev.sh), start 位置上的变量就是传入的第一个位置上的参数,也可以变为 stop, restart
case "$1" in
  start)
    daemon_start
    ;;
  stop)
    daemon_stop
    ;;
  restart)
    daemon_stop
    daemon_start
    ;;
  *)
    echo "Usage: ./dev.sh {start|stop|restart}"
    exit 1
esac
exit 0
            
          

2、接下来的流程:

测试启动,停止,重启

            
              ./entity_extract.sh start 开启服务
./entity_extract.sh stop  停止服务
./entity_extract.sh restart 重启服务
            
          

 放到系统服务器清单内

            
              cp entity_extract.sh /etc/init.d    # 将脚本复制到init.d,这个目录里面放系统服务脚本文件
chkconfig --add entity_extract.sh    # 将davids.sh添加到系统服务清单内

chkconfig --list                 #查看davids.sh是否在系统服务清单内
            
          

重启服务器,查看Python脚本是否随系统启动而启动

重点:

            
              *****上述办法不能用
参考:https://blog.csdn.net/qq_42393859/article/details/88170761
参考2:https://zhidao.baidu.com/question/1958799616349768340.html
            
          

或者直接这样操作:

            
              # 服务器开机启动设置
sudo cp fw_service.sh /etc/init.d/      # 拷贝脚本到启动目录下
cd /etc/init.d/                         # 进入启动目录
sudo update-rc.d fw_service.sh defaults 90  # 设置启动等级


# 注:
1、其中的90表示启动顺序,取值范围是0-99。序号越大的越晚执行。

            
          

3、报错解决

            
              1、执行过程中出现/bin/bash^M: 坏的解释器:没有那个文件或目录错误,无法正常运行。这是因为windows和linux中的换行不一样

sed -i 's/\r$//' startup.sh

2、如果没有权限
chmod +x davids.sh


            
          

三、通过docker部署(完美的办法)

1、编写Dockerfile文件

在与项目目录同级的目录下,新建Dockerfile文件

            
              vi Dockerfile
            
          

2、编辑Dockerfile,最好手打,最后保存退出

            
              #基于的基础镜像
FROM python:3.6
#代码添加到code文件夹
ADD ./test /code
# 设置code文件夹是工作目录
WORKDIR /code
# 安装支持
RUN pip install flask -i https://pypi.douban.com/simple/
CMD ["python", "/code/main.py"]

            
          

3、在Dockerfile同级目录, build该Dockerfile

            
              # 镜像名为:flask_entity_extract 
docker build -t flask_entity_extract .

            
          

出现
Successfully built a69e5b09b454 #镜像id
Successfully tagged flask_entity_extract :latest #镜像名字
即为成功

查看:

            
              docker images
            
          

4、通过创建的镜像创建容器,同时开启端口映射

            
              docker run -it -p 9000:9000 --name flask_entity_extract_server flask_entity_extract
#  it:创建并进入; -p 端口映射; --name 容器名;  最后面的是镜像名
            
          

5、此时flask服务已经启动,其他的docker操作如下:

            
              一、安装
地址:https://docs.docker.com/install/linux/docker-ce/ubuntu/
卸载:$ sudo apt-get remove docker docker-engine docker.io containerd runc
更新apt:
	$ sudo apt-get update	# 公司服务器一般别搞
	
	$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
	
	$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
	
	$ sudo apt-key fingerprint 0EBFCD88
	
	$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
   
   # 安装docker ce
   $ sudo apt-get install docker-ce docker-ce-cli containerd.io
   
   # 查看版本
	docker version
	
	# 卸载当前版本
	sudo yum remove docker-ce
	sudo rm -rf /var/lib/docker
	

	systemctl start docker		# 启动docker
	systemctl stop docker		# 停止docker
	systemctl restart docker	# 重启docker
	systemctl status docker		# 装态docker
	systemctl enable docker		# 开机启动docker
	
	docker info	# 查看docker信息
	docker --help  # docker命令
	
	
	docker images  # 列出所有的镜像
	docker search centos	# 查询镜像
	
	docker pull hello-world		# 默认从docker hub下载镜像
	
	
	docker rmi 镜像id/镜像名:标签名
	docker rmi 'docker images -q'	# 删除所有的docker镜像
	docker rmi 'docker images -qa'	# 删除所有的docker镜像
	
	docker ps  # 查看启动的容器
	docker ps -a # 查看所有容器
	docker ps -f status=exited	# 查看停止的容器
	
	# 通过镜像开启容器
					容器名			镜像名	  进入容器
	docker run -it --name=mycentos centos:7 /bin/bash	# 交互式容器的创建
		
	
	docker run -id --name=mycentos1 centos:7 
	docker exec -it mycentos1 /bin/bash
	
	exit	# 关闭容器并退出
	ctr+p+q 	# 退出容器,不关闭
	
	docker start 容器名/容器id  # 启动容器
	docker stop 容器名/容器id  # 停止容器
	docker restart 容器名/容器id  # 重启容器
	
	docker attach 容器名/容器id    # 进入容器
	
	docker rm  容器名/容器id		# 删除容器,前提是该容器处于关闭状态
	docker rm -f $(docker ps -q)	# 强制(-f)删除所有
	
	# 目录挂载 -v
	docker run -it --name=a3 -v home/docker_data/gaofei_data:/tmp tfgpu1.13.1-ubuntu16.04-cuda10.0-v1.0:latest /bin/bash		# 如果报错,执行下面命令
	docker run -it --name=a3 -v home/docker_data/gaofei_data:/tmp tfgpu1.13.1-ubuntu16.04-cuda10.0-v1.0:latest /bin/bash --privileged=true
	
	docker cp 宿主机文件路径  容器名:容器路径
	docker cp 容器名:容器路径  宿主机文件路径
	注意:容器之间不可以拷贝
	
	
	# 查看容器详细信息
	docker inspect 容器名/容器id
	查看挂载:docker inspect 容器名/容器id | grep Mounts -A 100
	
	# 备份和迁移
	docker commit 容器名  保存的镜像名
	# 将镜像转换为压缩文件导出
	docker save -o 输出的压缩文件名(.tar) 镜像名
	# 通过压缩文件恢复镜像
	docker rmi 镜像名
	docker load -i 压缩文件名
	docker images 查看镜像名
	
	# 继承容器
	docker run -it --name 容器2名称 --volumes-from 容器1名称 镜像名
						  新建容器     继承自       被继承容  镜像的名称
						  
						  
						  
	
	
	
            
          

 

 

 

参考:

web项目部署:http://www.jiaochengku.net/ITjiaocheng/ruanjianbiancheng/12805.html

python项目部署(全):https://www.lanshiqin.com/d8d0505b/

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论