打包运行环境
这里就要用到主角了:Conda Pack。官网地址:https://conda.github.io/conda-pack/。
官网文档安装Conda Pack的方法有三种,conda安装、pip包安装、pip源码安装。这里使用conda命令安装:
conda install -c conda-forge conda-pack
使用起来,也相对简单
# 该命令会将指定的名为my_env_name运行环境打包成my_env_name.tar.gz
conda pack -n my_env_name
我们也可以通过-o参数指定打包之后的名称
conda pack -n my_env_name -o out_name.tar.gz
将我们上面的2.7的环境打包
conda pack -n 2.7 -o 2.7.tar.gz
会在当前目录生成2.7.tar.gz。
创建一个名为2.7的目录
mkdir 2.7
将2.7.tar.gz解压到2.7目录下
tar -zxvf 2.7.tar.gz -C 2.7
执行如下命令激活环境
source 2.7/bin/activate
查看版本号
(2.7) [root@localhost flask-with-runtime-env]# python -V
Python 2.7.18 :: Anaconda, Inc.
将解压后的2.7文件夹重新打包成2.7.tar.bz2,用于我们flask程序的运行环境
tar -zcvf 2.7.tar.bz2 2.7/
移动到我们项目的env目录下
mv 2.7.tar.bz2 resources/env/
打包项目并测试
将运行环境放到env下之后,我们可以直接执行build.sh进行打包。
sh build.sh
#!/usr/bin/env bash
APP_HOME=$(cd $(dirname $0); pwd)
TARGET_DIR="$APP_HOME/target"
VERSION="1.0.0"
TARGET_APP_HOME="$TARGET_DIR/flask-with-runtime-$VERSION"
#TARGET_SCRIPTS
echo "Working directory is: $APP_HOME"
echo "Checkiing python version ..."
python_version=$(python -V 2>&1)
if [[ -z "$python_version" ]];then
echo "No Python!"
exit 1
else :
echo $python_version
fi
if [ -d "$TARGET_DIR" ];then
rm -rf $TARGET_DIR
fi
mkdir -p "$TARGET_APP_HOME"
cp -r $APP_HOME/application $TARGET_APP_HOME
echo "Compiling ..."
python -m compileall $TARGET_APP_HOME/application
find $TARGET_APP_HOME/application -name '*.py' -type f -print -exec rm {} \;
find $TARGET_APP_HOME/application -name '__pycache__' -exec rm -rf {} \;
echo "Copy runtime resources to target."
cp -r $APP_HOME/resources/* $TARGET_APP_HOME/
echo "Packaging ..."
COPYFILE_DISABLE=1 tar -zcf $TARGET_APP_HOME.tar.gz -C $TARGET_DIR flask-with-runtime-$VERSION
rm -rf $TARGET_DIR/flask-with-runtime-$VERSION
执行完成后,查看target目录:
[root@localhost flask-with-runtime-env]# ls target/
flask-with-runtime-1.0.0.tar.gz
这个压缩包就是我们最终打包的程序,它里面带有独立的运行环境。只需要将它复制到要部署的机器上,解压,然后执行install脚本即可。
将压缩包复制到/opt/目录下
cp target/flask-with-runtime-1.0.0.tar.gz /opt/
去/opt目录下解压
[root@localhost flask-with-runtime-env]# cd /opt/
[root@localhost opt]# tar -zxvf flask-with-runtime-1.0.0.tar.gz
flask-with-runtime-1.0.0/
flask-with-runtime-1.0.0/application/
flask-with-runtime-1.0.0/application/main.pyc
flask-with-runtime-1.0.0/bin/
flask-with-runtime-1.0.0/bin/start
flask-with-runtime-1.0.0/bin/stop
flask-with-runtime-1.0.0/env/
flask-with-runtime-1.0.0/env/2.7.tar.bz2
flask-with-runtime-1.0.0/scripts/
flask-with-runtime-1.0.0/scripts/flask.service.template
flask-with-runtime-1.0.0/scripts/install.sh
进入flask-with-runtime-1.0.0目录,执行安装脚本
cd flask-with-runtime-1.0.0
[root@localhost flask-with-runtime-1.0.0]# sh scripts/install.sh
Created symlink from /etc/systemd/system/multi-user.target.wants/flask-application.service to /usr/lib/systemd/system/flask-application.service.
Installed successfully.
Please run command 'systemctl status flask-application' for more information about service.
查看运行状态
systemctl status flask-application
访问目标主机:5000