如何扩展代码块依赖库
依赖库持久化
以下操作需要在服务运行中状态下进行,仅需首次完成一次即可,后续安装扩展库时无需操作
-
创建依赖库挂载目录(实际目录可自定义),如:
mkdir -p /data/hap/script/volume/command/package/python-3.6/
mkdir -p /data/hap/script/volume/command/package/nodejs-10.18.0/ -
获取预置依赖库
- 微服务版本>=5.1.0
- 微服务版本<5.1.0
docker cp $(docker ps | grep command | awk '{print $1}'):/usr/local/lib/python3.6/site-packages/ /data/hap/script/volume/command/package/python-3.6/
docker cp $(docker ps | grep command | awk '{print $1}'):/usr/local/node-10.18.0/lib/node_modules/ /data/hap/script/volume/command/package/nodejs-10.18.0/docker cp $(docker ps | grep community | awk '{print $1}'):/usr/local/lib/python3.6/site-packages/ /data/hap/script/volume/command/package/python-3.6/
docker cp $(docker ps | grep community | awk '{print $1}'):/usr/local/node-10.18.0/lib/node_modules/ /data/hap/script/volume/command/package/nodejs-10.18.0/ -
修改
docker-compose.yaml
,将宿主机的依赖库目录挂载到容器内- 微服务版本>=5.1.0
- 微服务版本<5.1.0
services:
command:
volumes:
- ./volume/command/package/python-3.6/site-packages/:/usr/local/lib/python3.6/site-packages/
- ./volume/command/package/nodejs-10.18.0/node_modules/:/usr/local/node-10.18.0/lib/node_modules/services:
app:
volumes:
- ./volume/command/package/python-3.6/site-packages/:/usr/local/lib/python3.6/site-packages/
- ./volume/command/package/nodejs-10.18.0/node_modules/:/usr/local/node-10.18.0/lib/node_modules/ -
管理器根目录下执行以下命令,重启服务
bash ./service.sh restartall
在线安装扩展库
- 必须先完成“依赖库持久化”步骤,将容器内的依赖库目录持久化挂载到宿主机上,否则容器重启后扩展库需要重新安装
- 在线安装扩展库需确保服务器可以访问互联网
Python
以安装 python-dateutil
扩展库为例:
- 微服务版本>=5.1.0
- 微服务版本<5.1.0
-
进入 command 容器
docker exec -it $(docker ps | grep command | awk '{print $1}') bash
-
在 command 容器中安装
python-dateutil
扩展库pip3 install --target=/usr/local/lib/python3.6/site-packages/ python-dateutil
-
进入 community 容器
docker exec -it $(docker ps | grep hap-community | awk '{print $1}') bash
-
在 community 容器中安装
python-dateutil
扩展库pip3 install --target=/usr/local/lib/python3.6/site-packages/ python-dateutil
安装完成后可在宿主机默认路径 /data/hap/script/volume/command/package/python-3.6/site-packages/
下查看新安装的扩展库。
JavaScript (基于 Nodejs)
以安装 dayjs
扩展库为例:
- 微服务版本>=5.1.0
- 微服务版本<5.1.0
-
进入 command 容器
docker exec -it $(docker ps | grep command | awk '{print $1}') bash
-
在 command 容器中安装
dayjs
扩展库/usr/local/node-10.18.0/bin/npm -g install dayjs
-
进入 community 容器
docker exec -it $(docker ps | grep hap-community | awk '{print $1}') bash
-
在 community 容器中安装
dayjs
扩展库/usr/local/node-10.18.0/bin/npm -g install dayjs
安装完成后可在宿主机默认路径 /data/hap/script/volume/command/package/nodejs-10.18.0/node_modules/
下查看新安装的扩展库。
离线安装扩展库
- 必须先完成“依赖库持久化”步骤,将容器内的依赖库目录持久化挂载到宿主机上,否则容器重启后扩展库需要重新安装
- 在服务器无法访问互联网 或 提供的扩展库是离线包文件时可以参考离线安装扩展库的方法
Python
以安装 pycryptodome
扩展库为例:
-
在可访问互联网的环境下,获取扩展库的离线文件
pip3 download pycryptodome -d "/package"
- 在 /package 目录下会生成 pycryptodome 依赖库的离线文件
-
将离线库文件上传到 HAP 服务所在的服务器
-
将离线库文件拷贝到容器内并安装
- 微服务版本>=5.1.0
- 微服务版本<5.1.0
-
将 pycryptodome 依赖库的离线文件拷贝到 command 容器内 /tmp 路径下
docker cp pycryptodome-3.15.0-cp35-abi3-manylinux1_x86_64.whl $(docker ps | grep command | awk '{print $1}'):/tmp
-
进入 command 容器
docker exec -it $(docker ps | grep command | awk '{print $1}') bash
-
在 command 容器中安装 pycryptodome 扩展库离线包
pip3 install --target=/usr/local/lib/python3.6/site-packages/ /tmp/pycryptodome-3.15.0-cp35-abi3-manylinux1_x86_64.whl
-
将 pycryptodome 依赖库的离线文件拷贝到 community 容器内 /tmp 路径下
docker cp pycryptodome-3.15.0-cp35-abi3-manylinux1_x86_64.whl $(docker ps | grep community | awk '{print $1}'):/tmp
-
进入 community 容器
docker exec -it $(docker ps | grep community | awk '{print $1}') bash
-
在 community 容器中安装 pycryptodome 扩展库离线包
pip3 install --target=/usr/local/lib/python3.6/site-packages/ /tmp/pycryptodome-3.15.0-cp35-abi3-manylinux1_x86_64.whl
JavaScript (基于 Nodejs)
以安装 dayjs
扩展库为例:
-
在可访问互联网的环境下,获取扩展库的离线文件
npm install dayjs -save
- 在当前目录下会生成
node_modules/dayjs
依赖库的目录
- 在当前目录下会生成
-
打包 dayjs 扩展库目录
cd node_modules
tar czf dayjs.tar.gz dayjs -
将扩展库的打包文件
dayjs.tar.gz
上传到 HAP 服务所在的服务器 -
将离线库文件解压到容器依赖库已持久化的路径下
tar xf dayjs.tar.gz -C /data/hap/script/volume/command/package/nodejs-10.18.0/node_modules
- 如有修改过 HAP 默认数据路径,解压路径则以实际环境路径为准