一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Django+Vue项目打包部署脚本怎么写 一键安装启动教程来了

时间:2026-07-24 09:12:56 编辑:袖梨 来源:一聚教程网

最近搞项目部署,编写项目打包执行脚本,踩了跟多坑,先写思路,后面会更新.sh脚本写法和问题细节。

一、dajngo端

  1. 收集python包(库),pip3 install进行安装;
  2. 创建临时文件;
  3. 拷贝到发布路径;

二、vue端

  1. 安装node_modules依赖库,node.js环境;
  2. npm install 安装;
  3. npm run build打包;

三、脚本在项目整体的位置

Django+Vue项目打包部署脚本怎么写?一键安装启动教程来了

四、shell脚本详情

1.主打包脚本/sus/packet_bin_linux:

#!/bin/bash
if [ ! -d "../../10-common/version/release/linux/sus" ]; then
  mkdir ../../10-common/version/release/linux/sus
fi
# packet susmgr
echo "begin packet susmgr.. "
cd susmgr
chmod +x package.sh
./package.sh
cd ..
# packet sussrv_py
echo "begin packet sussrv_py.. "
cd sussrv_py
chmod +x package.sh
./package.sh
cd ..
# packet sussrv
rm -rf sus
rm -f sus.tgz
mkdir sus
cp -f sussrv/prj_linux/sus sus/sus
if [ $? != 0 ]
then
echo " sus was not copied.. "
fi
cp -rf sussrv/prj_linux/conf sus/
cp -rf sussrv/prj_linux/shells sus/
tar -czf sus.tgz sus
cat sussrv/prj_linux/install.sh sus.tgz > sus.bin
mv sus.bin               ../../10-common/version/release/linux/sus
cp sussrv/prj_linux/sus ../../10-common/version/release/linux/sus
rm -rf sus

其中# packet susmgr是启动susmgr模块的启动脚本package.sh

2.susmgr模块启动打包脚本/sus/susmgr/package.sh

#!/bin/bash
version=6.0.0.4.0
myDate="${version}-`date '+%Y%m%d%H%M'`"
mkdir -p .files_temp/
ls build
cp -a build .files_temp/
mkdir -p .files_temp/build/susmgr
ls | grep -v ".files_temp" | grep -v "release" | xargs -i cp -a {} .files_temp/build/susmgr
cp -a ../../../10-common/version/release/linux/python/certifi-2019.11.28-py2.py3-none-any.whl  .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/chardet-3.0.4-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/django_conn_pool-2.0.3-py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/django_cors_headers-3.0.2-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/django_redis-4.10.0-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/Django-2.1.4-py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/djangorestframework-3.9.4-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/hiredis-1.0.0-cp35-cp35m-manylinux1_x86_64.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/idna-2.8-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/lupa-1.8-cp35-cp35m-manylinux1_x86_64.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/pbr-5.4.3-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/PyMySQL-0.9.3-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/python_dateutil-2.8.0-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/pytz-2019.1-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/setuptools-42.0.2-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/six-1.12.0-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/SQLAlchemy-1.3.8.tar.gz .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/sqlparse-0.3.0-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/stevedore-1.31.0-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/requests-2.22.0-py2.py3-none-any.whl .files_temp/build/python3/package/
cp -a ../../../10-common/version/release/linux/python/uwsgi-2.0.18.tar.gz .files_temp/build/python3/package/
# python3 模块打包
cd .files_temp/build/python3/
PACKAGE_PATH=$(pwd)
./package.sh ${PACKAGE_PATH}
rm -rf package
zip -r susmgr_python3.zip susmgr_python3/
rm -rf susmgr_python3
cd -
# 前端打包
cd .files_temp/build
dist_path=$(pwd)/susmgr/susweb
./susweb/package.sh ${dist_path}
cd -
# 后端打包
cd .files_temp/build/
echo ${myDate} > susmgr/version
zip -r susmgr.zip susmgr/
rm -rf susmgr
cd - 
#make susmgr.bin
cd .files_temp
chmod +x build/install.sh
makeself.sh build/  susmgr.bin  "Installing susmgr_client..." ./install.sh
cd - 
cp -a .files_temp/susmgr.bin ../../../10-common/version/release/linux/sus/susmgr.bin
rm -rf .files_temp

值得提的地方就是-我们把项目用到的python包提前下载拷贝到我们统一管理的目录

/10-common/version/release/linux/python

下,进行拷贝来收集python库(包)。

3.接着进行进行安装搜集的库,执行脚本/sus/susmgr/build/python3/package.sh

#!/bin/bash
PYTHON_PATH=/opt/midware/python3
export LC_ALL="en_US.UTF-8"
pythonpath=$1/susmgr_python3
mkdir -p ${pythonpath}/lib/python3.5/site-packages
export PYTHONPATH=${pythonpath}/lib/python3.5/site-packages
INSTALL="--prefix=${pythonpath}"
package_list=`${PYTHON_PATH}/bin/pip3 list`
if [[ ${package_list} =~ "certifi" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/certifi-2019.11.28-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "chardet" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/chardet-3.0.4-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "PyMySQL" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/PyMySQL-0.9.3-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "pytz" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/pytz-2019.1-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "sqlparse" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/sqlparse-0.3.0-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "Django" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/Django-2.1.4-py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "django_cors_headers" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/django_cors_headers-3.0.2-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "django_conn_pool" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/django_conn_pool-2.0.3-py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "django_redis" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/django_redis-4.10.0-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "djangorestframework" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/djangorestframework-3.9.4-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "hiredis" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/hiredis-1.0.0-cp35-cp35m-manylinux1_x86_64.whl ${INSTALL}
fi
if [[ ${package_list} =~ "idna" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/idna-2.8-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "lupa" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/lupa-1.8-cp35-cp35m-manylinux1_x86_64.whl ${INSTALL}
fi
if [[ ${package_list} =~ "pbr" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/pbr-5.4.3-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "PyMySQL" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/PyMySQL-0.9.3-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "six" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/six-1.12.0-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "python_dateutil" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/python_dateutil-2.8.0-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "setuptools" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/setuptools-42.0.2-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "django-cors-headers" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install django_cors_headers-3.0.2-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "SQLAlchemy" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/SQLAlchemy-1.3.8.tar.gz ${INSTALL}
fi
if [[ ${package_list} =~ "stevedore" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/stevedore-1.31.0-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "requests" ]];then
    :
else
    ${PYTHON_PATH}/bin/pip3 install package/requests-2.22.0-py2.py3-none-any.whl ${INSTALL}
fi
if [[ ${package_list} =~ "uWSGI" ]];then
    :
else
    cd package
    tar -zxf uwsgi-2.0.18.tar.gz
    cd uwsgi-2.0.18
    sed -i 's/^xml.*$/xml = false/g' buildconf/base.ini
    ${PYTHON_PATH}/bin/python3 setup.py install ${INSTALL}
    cd ..
    rm -rf uwsgi-2.0.18
    cd ..
fi

3.进行前端打包,执行脚本/sus/susmgr/build/susweb/package.sh:

#!/bin/bash -x
PS4='$(date "+%s.%N ($LINENO) + ")'
cd $1
WORK=$(pwd)
rm -rf node_modules*
rm -rf node-v8.11.2-linux-x64*
cp -a ../../../../../../../10-common/version/release/linux/vue/node_modules.tar ./
cp -a ../../../../../../../10-common/version/release/linux/vue/node-v8.11.2-linux-x64.tar ./
tar -xf node-v8.11.2-linux-x64.tar
tar -xf node_modules.tar
export PATH=$PATH:$WORK/node-v8.11.2-linux-x64/bin
npm install
npm run build
rm -rf node_modules*
rm -rf node-v8.11.2-linux-x64*
cd -

4.执行生成.bin包脚本/sus/susmgr/build/install.sh:

#!/bin/bash
BASE_PATH=/opt/mcu/susmgr
mkdir -p /opt/log/susmgr
mkdir -p /opt/data/susmgr
mkdir -p $BASE_PATH
# susmgr_python3
rm -rf ${BASE_PATH}/susmgr_python3
unzip -d ${BASE_PATH}/ python3/susmgr_python3.zip
# susmgr
rm -rf ${BASE_PATH}/susmgr
unzip -d ${BASE_PATH}/ susmgr.zip
# 复制shells文件
rm -rf ${BASE_PATH}/shells
cp -a ${BASE_PATH}/susmgr/shells ${BASE_PATH}/
chmod 0755 ${BASE_PATH}/shells/*

shells文件夹放的是启动和停止uwsgi服务的脚本:

Django+Vue项目打包部署脚本怎么写?一键安装启动教程来了

四、结语

最后也是通过把生成的bin包拷贝到发布路径,执行.bin文件便可以一键安装启动服务。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

您可能感兴趣的文章:
  • vue与django集成打包的实现方法
  • 手把手教你如何使用Vue+Django实现RBAC权限管理
  • vue+django项目部署全过程
  • vue前端获取django后端数据实现方式
  • Vue3前端与Python(Django)后端接口简单代码示例
  • django vue3实现大文件分段续传(断点续传)

热门栏目