最近公司 iOS 项目需求暂时放缓,于是公司说让我学一下Python 弄一个股票回测,预警的功能,于是兴匆匆的去百度学习Python,然后开发ing
初级部署
项目写好了,因为对于Django也会的不多,就直接按照文档上的部署命令去部署项目了
nohup python3 -u manage.py runserver 0.0.0.0:8010
但是这样部署会出现一个问题,就是服务器上运行两个进程,于是做了一些修改
nohup python3 -u manage.py runserver 0.0.0.0:8010 --noreload
这样部署了,项目也正常运行了,但是后续继续开发的时候,出现了一些bug,但是因为没有日志文件,对于bug的排查很费劲,于是又去各种搜索,各种百度,于是新加了日志文件
python3 -u manage.py runserver 0.0.0.0:8010 --noreload > info_log.out 2>&1 &
中级部署
这样项目运行了一段时间,也正常运行,没有问题,但是因为要经常重新部署项目,需要先去执行命令
ps aux |grep python
获取到正在运行的pid,然后kill -9 pid 再去重新执行运行命令,这样去运行项目很麻烦,而且当时犯了个致命错误,获取项目pid 的时候,看错pid了,差点kill 另一个项目,于是我想着这样不行,要写个脚本才好,于是api_run.sh 文件诞生了
#!/bin/sh
APP_NAME=manage.py
APP_HOME=/pan/workspace/zfxf_py_data
stop(){
pid=`cat pid.txt`
pid=`cat pid.txt`
if [ -n "$pid" ];then
kill -9 $pid
echo "killed $APP_NAME"
fi
# rm -rf $APP_HOME/zfxf-app.pid
echo "$pid"
echo "$APP_NAME has been stopped"
}
deploy(){
cd $APP_HOME
stop
if [ -n "$APP_NAME" ]; then
mv $APP_NAME "$APP_NAME".bak
echo "$APP_NAME"
fi
cp build/$APP_NAME ./
sleep 2
start
ps -ef|grep $APP_NAME
}
start(){
nohup python3 -u manage.py runserver 0.0.0.0:8010 --noreload > info_log.out 2>&1 & echo $! > pid.txt
# echo $! > $APP_HOME/zfxf-app.pid
echo $!
echo "$APP_NAME has been started"
}
restart(){
stop
sleep 1
start
}
case $1 in
start)
# check_env
start
exit 0
;;
stop)
# check_env
stop
exit 0
;;
restart)
restart
exit 0
;;
deploy)
deploy
exit 0
;;
*)
echo "Usage: t1trade-push.sh {start|stop|restart}"
exit 0
;;
esac
这样每次运行的时候就执行start 命令,或者是restart命令,尽量避免出现人为的错误;
最终部署
使用上面的部署方案运行一段时间,测试也没有问题,这个时候需要部署到测试环境上,这时候出现了个问题,因为两台服务器的Python环境不一致,而且上面的一些Python 三方库版本不一致,出现了大问题,于是在后台的建议下说是弄成Docker 部署,于是又是各种搜索,各种查
Django项目使用Docker部署,先要创建Dockerfile文件
FROM python:3.10.6
MAINTAINER YuanJiaShuai
EXPOSE 8010
#设置环境变量
#ENV PROJECT_ENV test
ENV PYTHONUNBUFFERED 1
#设置pip源为国内源
#RUN pip3 install --upgrade pip -i https://pypi.douban.com/simple/ --trusted-host pypi.douban.com
#RUN pip3 install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/
#在容器内/var/www/html/下创建 PetHomeServer 文件夹p
RUN mkdir -p /pan/workspace/zfxf_py_data
#设置容器内工作目录
WORKDIR /pan/workspace/zfxf_py_data
#将当前目录文件加入到容器工作目录中(.表示当前宿主机目录)
ADD . /pan/workspace/zfxf_py_data
#利用pip安装依赖
RUN pip3 install -r requirements.txt -i https://pypi.douban.com/simple/ --trusted-host pypi.douban.com
#BUILD_TYPE='DOCKER'
ENTRYPOINT ["python3", "-u", "manage.py","runserver","0.0.0.0:8010", "--noreload"]
源于第二种部署的时候感觉到脚步的便捷性,于是对于Docker 部署也是用脚步执行,就创建了build.sh 文件
#!/bin/sh
# 定义应用组名
group_name='com.zfxf.py'
# 定义应用名称
app_name='zfxf-py-app'
# 定义应用版本
app_version='1.0.0'
# 定义应用环境 本地开发环境test, 测试服务器开发环境dev,正式服务器开发环境pro 切换环境时,注意修改
PROJECT_ENV='pro'
# 日志位置
app_log='/pan/workspace/test/zfxf_py_data/logs'
port=8010
#echo '----set profile_active----'
#sed -i 's/<active-profile>/$2/g' Dockerfile
echo '----copy jar----'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----rm image----'
# 打包编译docker镜像
docker build -t ${group_name}/${app_name}:${app_version} .
echo '----build image----'
docker run -it
--name ${app_name}
--restart always
--net=host
--env "PROJECT_ENV=${PROJECT_ENV}"
-p 8010:8010
-v ${app_log}:/pan/workspace/zfxf_py_data/logs
-e TZ="Asia/Shanghai"
-v /etc/localtime:/etc/localtime
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'
这样每次执行的时候就只需要sh build.sh 就可以部署完成了,即使是切换服务器也是懒人式执行,当然这个前提是服务器要已经部署过docker
—————
以上就是我这个新手对于Docker 部署Django 项目的全部实践路线,上面内容写的很简单,但是在实际开发中也遇到了很多问题,好在最后都一一解决,因为本人是独立开发,也算是属于闭门造车,如果有大佬有更好的方案,希望不吝赐教!
原文地址:https://blog.csdn.net/yjs_13597468160/article/details/128673214
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_40282.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!