是否可搭建本地dbt deps仓库让dbt deps命令从本地拉取依赖?
dbt本地依赖仓库搭建方案(离线环境可用)
完全可以搭建本地私有dbt依赖仓库,适配无外网的客户环境,操作步骤如下:
前置准备
- 先在外网环境下载所有需要的dbt依赖包,包括dbt核心包、各适配器包、第三方dbt公共包(比如dbt-utils等),注意要匹配你使用的dbt版本,避免版本冲突
- 可以选择两种依赖存储方式:搭建本地私有PyPI服务,或者直接使用本地文件系统存储依赖包
方案1:基于本地私有PyPI仓库
适合多节点、多项目共用的离线环境
- 搭建本地私有PyPI服务,可选工具包括devpi、pypiserver、Nexus3等,按照对应工具的官方指引完成基础配置
- 把所有提前下载好的
.whl和.tar.gz格式的依赖包上传到私有PyPI仓库中 - 配置dbt所在环境的pip源为私有PyPI地址,在用户目录下新建/修改
pip.conf(Linux/macOS)或者pip.ini(Windows),内容参考:
[global]
index-url = http://你的私有仓库地址/simple/
trusted-host = 你的私有仓库域名/IP
- 配置完成后直接运行
dbt deps,dbt会自动调用pip从本地私有源拉取依赖,不会发起外网请求
方案2:基于本地文件目录的离线依赖源
适合单节点、临时测试的场景,不需要额外搭建服务
- 把所有下载好的依赖包统一放到一个固定本地目录,比如
/opt/dbt_deps_packages/ - 运行
dbt deps的时候指定pip参数即可,命令如下:dbt deps --pip-args "--no-index --find-links /opt/dbt_deps_packages/" - 也可以把参数写到dbt项目的
dbt_project.yml配置里,避免每次手动输入,配置参考:
vars:
deps_pip_args: "--no-index --find-links /opt/dbt_deps_packages/"
dbt公共包(非PyPI类包)的本地配置
如果你的依赖里包含存放在公共git仓库的dbt公共包,按以下方式调整:
- 在外网把对应版本的包仓库clone下来,打包成zip包放到本地目录,或者上传到本地私有git仓库
- 修改项目下的
packages.yml配置,把原公共git地址替换为本地路径或者私有git地址,示例:
packages:
- local: /opt/dbt_local_packages/dbt-utils-1.0.0
或者
packages:- git: "http://本地私有git地址/dbt-utils.git"
revision: 1.0.0
配置完成后可以断开外网测试运行dbt deps,确认所有依赖都能正常拉取即可。
内容的提问来源于stack exchange,提问作者Prakash Dutta
相关产品推荐
相关产品推荐

