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

 更新时间:2026年07月22日 10:35:20   作者:前热火球员LeBron James  
还在为Django和Vue项目部署发愁?本文分享了从Python包收集、pip安装到Vue前端npm build打包的完整Shell脚本编写思路,并详解项目位置结构与一键启动脚本,帮你轻松实现自动化打包部署,避开常见坑点

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

一、dajngo端

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

二、vue端

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

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

四、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服务的脚本:

四、结语

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

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

相关文章

  • python利用platform模块获取系统信息

    python利用platform模块获取系统信息

    这篇文章主要介绍了python利用platform模块获取系统信息,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-10-10
  • pytorch分类模型绘制混淆矩阵以及可视化详解

    pytorch分类模型绘制混淆矩阵以及可视化详解

    混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法,下面这篇文章主要给大家介绍了关于pytorch分类模型绘制混淆矩阵以及可视化的相关资料,需要的朋友可以参考下
    2022-04-04
  • 详解PyAutoGUI 的 press() 方法与替代方案

    详解PyAutoGUI 的 press() 方法与替代方案

    pyautogui.press()是PyAutoGUI 库中用于模拟键盘按键按下和松开的简单方法,本文就来介绍一下press()方法实现,感兴趣的可以了解一下
    2026-07-07
  • python使用devpi实现镜像源代理完整指南

    python使用devpi实现镜像源代理完整指南

    这篇文章主要为大家详细介绍了如何使用devpi实现python镜像源代理,包括缓存加速,私有仓库和版本控制,文中的示例代码讲解详细,有需要的可以了解下
    2025-05-05
  • 使用Python实现屏幕截图的两种方法

    使用Python实现屏幕截图的两种方法

    Python作为一种高效的编程语言,可以通过一些库来实现对屏幕的截图操作,本文主要介绍了使用Python实现屏幕截图的两种方法,具有一定的 参考价值,感兴趣的可以了解一下
    2023-12-12
  • Python文件操作与数据处理实战指南

    Python文件操作与数据处理实战指南

    文件操作与数据处理是Python编程中最基础也是最重要的技能之一,无论是数据分析、Web开发还是自动化脚本编写,都离不开对文件的读写和各种数据处理操作,本文将全面介绍Python中的文件操作方法和常用数据处理技巧,需要的朋友可以参考下
    2025-04-04
  • Tensorflow获取张量Tensor的具体维数实例

    Tensorflow获取张量Tensor的具体维数实例

    今天小编就为大家分享一篇Tensorflow获取张量Tensor的具体维数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python+pygame简单画板实现代码实例

    python+pygame简单画板实现代码实例

    这篇文章主要介绍了python+pygame简单画板实现代码实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Python数据库sqlite3图文实例详解

    Python数据库sqlite3图文实例详解

    SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎,下面这篇文章主要给大家介绍了关于Python数据库sqlite3的相关资料,需要的朋友可以参考下
    2022-09-09
  • Python实现i人事自动打卡的示例代码

    Python实现i人事自动打卡的示例代码

    这篇文章主要介绍了Python实现i人事自动打卡的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01

最新评论