使用 Docker Compose

正如我们的 快速入门指南 中提到的,在 Linux 或 Mac OSX 计算机上本地尝试 Superset 的最快方法是使用 Docker Compose。Superset 不正式支持 Windows。它也是快速启动一个功能齐全的开发环境的最简单方法。
请注意,我们支持 3 种主要运行 docker compose
的方式
- compose.yml: 用于交互式开发,我们将您的本地文件夹与前端/后端文件进行挂载,您可以编辑这些文件并实时体验应用程序中的更改
- compose-non-dev.yml 我们仅根据本地分支构建一个更不可变的镜像,并运行所有必需的镜像。在您启动此镜像时,本地分支中的更改将得到体现,但在
up
期间对代码的更改将不会在应用程序中得到体现 - compose-image-tag.yml 我们从 Docker Hub 获取一个镜像,例如
5.0.0
版本的镜像,然后将其启动以便您试用。在这里,本地分支中的内容对正在运行的内容没有影响,我们只是从 Docker Hub 获取并运行预构建的镜像。为了使docker compose
能够与它启动的 Postgres 镜像一起工作,您需要指向一个带有-dev
后缀的 TAG,例如export TAG=5.0.0-dev
或export TAG=4.1.2-dev
,其中latest-dev
是默认值。dev
构建包含连接到作为docker compose
构建一部分启动的 Postgres 数据库所需的psycopg2-binary
。
在设置了这两种方法的要求之后,将详细介绍它们。
要求
请注意,本文档假定您已安装 Docker 和 git。另请注意,我们过去使用 docker-compose
,但它正在被弃用,因此我们现在使用 docker compose
。
1. 克隆 Superset 的 GitHub 仓库
使用以下命令在您的终端中 克隆 Superset 的仓库
git clone --depth=1 https://github.com/apache/superset.git
该命令成功完成后,您应该在当前目录中看到一个新的 superset
文件夹。
2. 通过 Docker Compose 启动 Superset
首先,我们假设您熟悉 docker compose
的机制。这里我们通常指 docker compose up
,尽管在某些情况下您可能希望使用 docker compose pull
强制检查更新的远程镜像,使用 docker compose build
强制构建,或者使用 docker compose build --pull
强制基于最新的基础镜像进行构建。但在大多数情况下,简单的 up
命令就足够了。有关此主题的更多信息,请参阅 docker compose 文档。
选项 #1 - 用于交互式开发环境
# The --build argument insures all the layers are up-to-date
docker compose up --build
在开发模式下运行时,superset-node
容器需要完成构建资产才能正确渲染 UI。如果您只想试用 Superset 而不进行任何代码更改,请按照下面针对 生产
或特定版本记录的步骤操作。
默认情况下,我们在此处挂载本地 superset-frontend 文件夹并运行 npm install
和 npm run dev
,这会触发 webpack 编译/打包前端代码。根据您的本地设置,特别是如果您的内存少于 16GB,执行这些操作可能会非常慢。在这种情况下,我们建议您将环境变量 BUILD_SUPERSET_FRONTEND_IN_DOCKER
设置为 false
,并在终端中本地运行它。只需触发 npm i && npm run dev
,这会快得多。
有时,您的 npm 相关状态可能会变得混乱,从 superset-frontend/
文件夹运行 npm run prune
将删除各种包的 node_module/
文件夹,帮助您重新开始。在 docker compose
的上下文中,在运行 docker compose up
之前设置 export NPM_RUN_PRUNE=true
将在 docker 内部触发此操作。这会减慢启动速度,但会解决各种 npm 相关问题。
选项 #2 - 从本地分支构建一组不可变镜像
docker compose -f compose-non-dev.yml up
选项 #3 - 启动官方版本
# Set the version you want to run
export TAG=5.0.0
# Fetch the tag you're about to check out (assuming you shallow-cloned the repo)
git fetch --depth=1 origin tag $TAG
# Could also fetch all tags too if you've got bandwidth to spare
# git fetch --tags
# Checkout the corresponding git ref
git checkout $TAG
# Fire up docker compose
docker compose -f compose-image-tag.yml up
在这里,各种发行标签、GitHub SHA 和最新的 master
都可以通过 TAG 环境变量引用。请参阅 Docker 相关文档,了解您可以从 Docker Hub 指向的现有标签。
对于选项 #2 和 #3,我们建议从 git 仓库中检出发布标签(即:git checkout 5.0.0
),以获得更可靠的结果。这确保了 docker-compose.*.yml
配置以及挂载的 docker/
脚本与您希望启动的镜像保持同步。
docker compose
技巧与配置
属于 Superset 实例的所有内容——图表、仪表板、用户等——都存储在其元数据数据库中。在生产环境中,此数据库应进行备份。使用 docker compose 的默认安装会将数据存储在 Docker 卷中包含的 PostgreSQL 数据库中,该卷不会被备份。
再次强调,默认情况下,DOCKER-COMPOSE 安装不适用于生产环境。
您应该会看到机器上正在启动的容器的日志输出流。一旦此输出变慢,您的本地机器上就应该有一个正在运行的 Superset 实例了!为避免以后运行时的长篇文字,请在 docker compose up
命令的末尾添加 -d
选项。
进一步配置
以下内容适用于希望配置 Superset 在 Docker Compose 中运行方式的用户;否则,您可以跳到下一节。
您可以通过遵循 docker/README.md 中提到的步骤来安装额外的 Python 包和应用配置覆盖。
请注意,docker/.env
为 docker compose
使用的所有 Docker 镜像设置了默认环境变量,并且 docker/.env-local
可以用于覆盖这些默认值。另请注意,docker/.env-local
在我们的 .gitignore
中被引用,防止开发人员将潜在敏感配置提交到仓库的风险。
一个重要的变量是 SUPERSET_LOAD_EXAMPLES
,它决定了 superset_init
容器是否会将示例数据和可视化填充到元数据数据库中。这些示例有助于学习和测试 Superset,但对于有经验的用户和生产部署来说是不必要的。加载过程有时可能需要几分钟和大量的 CPU,因此您可能希望在资源受限的设备上禁用它。
对于通常在您的 PYTHONPATH
中名为 superset_config.py
文件中进行管理的高级或动态配置,请注意,可以通过提供一个 docker/pythonpath_dev/superset_config_docker.py
来实现,该文件将被 git 忽略(防止您将本地配置提交/推送到仓库)。其机制在 docker/pythonpath_dev/superset_config.py
中,您可以看到其中逻辑运行了 from superset_config_docker import *
用户通常希望从 Superset 连接到其他数据库。目前,最简单的方法是修改 compose-non-dev.yml
文件,并将您的数据库添加为其他服务依赖的服务(通过 x-superset-depends-on
)。其他人尝试在 Superset 服务上设置 network_mode: host
,但这通常会破坏安装,因为配置需要使用 Docker Compose DNS 解析器来解析服务名称。如果您有更好的解决方案,请告诉我们!
Superset 使用 Scarf Gateway 收集遥测数据。了解不同 Superset 版本的安装数量有助于项目决定打补丁和长期支持。Scarf 会清除个人身份信息 (PII),仅提供聚合统计数据。
要选择退出您的基于 Docker Compose 的安装通过 Scarf Gateway 下载的包的数据收集,请编辑 compose.yml
和 compose-non-dev.yml
文件中的 x-superset-image:
行,将 apachesuperset.docker.scarf.sh/apache/superset
替换为 apache/superset
,以直接从 Docker Hub 拉取镜像。
要禁用 Scarf 遥测像素,请在您的终端和/或 docker/.env
文件中将 SCARF_ANALYTICS
环境变量设置为 False
。
3. 登录 Superset
您的本地 Superset 实例还包含一个 Postgres 服务器来存储您的数据,并且已经预加载了 Superset 附带的一些示例数据集。您现在可以通过访问 http://localhost:8088
在网页浏览器中访问 Superset。请注意,许多浏览器现在默认使用 https
- 如果您的浏览器是其中之一,请确保它使用 http
。
使用默认用户名和密码登录
username: admin
password: admin
4. 将 Superset 连接到本地数据库实例
当使用 docker
或 docker compose
运行 Superset 时,它会在其自己的 Docker 容器中运行,就好像 Superset 完全在另一台机器上运行一样。因此,尝试使用主机名 localhost
连接到本地数据库将不起作用,因为 localhost
指的是 Superset 正在运行的 Docker 容器,而不是您的实际主机。幸运的是,Docker 提供了一种从容器内部访问主机网络资源的简便方法,我们将利用此功能连接到本地数据库实例。
这里的说明是如何从 Superset(在 Docker 容器中运行)连接到 PostgreSQL(在您的主机上运行)。其他数据库的配置可能略有不同,但要点是相同的,归结为 2 个步骤 -
- (Mac 用户可以跳过此步骤) 配置本地 PostgreSQL/数据库实例以接受公共传入连接。默认情况下,PostgreSQL 只允许来自
localhost
的传入连接,在 Docker 下,除非您使用--network=host
,否则localhost
将分别指向主机和 Docker 容器中的不同端点。允许 PostgreSQL 接受来自 Docker 的连接需要对postgresql.conf
和pg_hba.conf
文件进行单行更改;您可以在网上轻松找到针对您的操作系统/PG 版本量身定制的有用链接来完成此任务。对于 Docker,只需将 IP172.0.0.0/8
列入白名单,而不是*
,但在任何情况下都警告您,在生产数据库中这样做可能会带来灾难性后果,因为您正在向公共互联网开放您的数据库。 - 连接数据库时,尝试使用
host.docker.internal
(Mac 用户,Ubuntu)或172.18.0.1
(Linux 用户)作为主机名,而不是localhost
。这是一个 Docker 内部细节——在 Mac 系统中,Docker Desktop 为主机名host.docker.internal
创建了一个 DNS 条目,该条目解析为主机的正确地址,而在 Linux 中则不是这种情况(至少默认情况下不是)。如果这两个主机名都不起作用,您可能需要找到确切要使用的主机名,为此,您可以运行ifconfig
或ip addr show
并查看 Docker 为您创建的docker0
接口的 IP 地址。或者,如果您甚至看不到docker0
接口,请尝试(如果需要使用 sudo)docker network inspect bridge
并查看是否有"Gateway"
条目并记下 IP 地址。
4. 构建与否
当运行 docker compose up
时,Docker 会在后台构建所需的内容,但如果资产已存在,可能会使用 Docker 缓存。在 docker compose up
之前运行 docker compose build
或等效的快捷方式 docker compose up --build
可确保您的 Docker 镜像与仓库中的定义匹配。这仅适用于主要的 compose.yml 文件(默认),不适用于上面定义的替代方法。