最近搞项目部署,编写项目打包执行脚本,踩了跟多坑,先写思路,后面会更新.sh脚本写法和问题细节。
一、dajngo端:
- 收集python包(库),pip3 install进行安装;
- 创建临时文件;
- 拷贝到发布路径;
二、vue端:
- 安装node_modules依赖库,node.js环境;
- npm install 安装;
- 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文件便可以一键安装启动服务。