django+vue项目一键部署脚本打包文件

最近搞项目部署,编写项目打包执行脚本,踩了跟多坑,先写思路,后面会更新.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文件便可以一键安装启动服务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值