使用 Docker Compose
如我们的 快速入门指南 中所述,在 Linux 或 Mac OSX 计算机上使用 Docker Compose 是在本地尝试 Superset 的最快方法。Superset 不提供对 Windows 的官方支持。它也是快速启动完全功能的 **开发环境** 的最简单方法。
请注意,我们支持三种主要方法来运行 docker-compose
- docker-compose.yml: 用于交互式开发,我们在此挂载包含前端/后端文件的本地文件夹,您可以编辑这些文件并实时体验您在应用程序中所做的更改
- docker-compose-non-dev.yml 我们在此仅基于本地分支构建更不可变的镜像,并运行所有必需的镜像。您启动时本地分支中的更改将反映出来,但
up
期间对代码的更改不会反映在应用程序中 - docker-compose-image-tag.yml 我们在此从 docker-hub 获取镜像,例如
3.0.0
版本的镜像,并启动它,以便您可以尝试使用它。此处本地分支中的内容对正在运行的内容没有影响,我们只是从 docker-hub 获取并运行预构建的镜像
在设置任一方法的要求后,将详细介绍这两种方法。
要求
请注意,本文档假设您已安装 Docker、docker-compose 和 git。
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 - 用于交互式开发环境
docker compose up
在开发模式下运行时,superset-node
容器需要完成构建资产才能使 UI 正确呈现。如果您只想尝试使用 Superset 而不进行任何代码更改,请按照下面针对 production
或特定版本记录的步骤操作。
默认情况下,我们在此挂载本地 superset-frontend 文件夹,并运行 npm install
以及 npm run dev
,这将触发 webpack 编译/捆绑前端代码。根据您的本地设置,尤其是如果您拥有不到 16GB 的内存,执行这些操作可能会非常慢。在这种情况下,我们建议您将环境变量 BUILD_SUPERSET_FRONTEND_IN_DOCKER
设置为 false
,并在终端中本地运行它。只需触发 npm i && npm run dev
,这应该快得多。
选项 #2 - 从本地分支构建一组不可变的镜像
docker compose -f docker-compose-non-dev.yml up
选项 #3 - 启动官方版本
export TAG=3.1.1
docker compose -f docker-compose-image-tag.yml up
这里,各种发布标签、github SHA 和最新的 master
可以通过 TAG 环境变量进行引用。有关您可以从 Docker Hub 指向的现有标签的更多信息,请参阅与 docker 相关的文档。
docker-compose 提示和配置
属于 Superset 实例的所有内容(图表、仪表板、用户等)都存储在其元数据数据库中。在生产环境中,应该备份此数据库。使用 docker compose 的默认安装将该数据存储在 Docker 卷 中的 PostgreSQL 数据库中,该数据库不会备份。
再次强调,**不要将此用于生产环境**
您应该看到从在您的机器上启动的容器中流出的日志输出。此输出变慢后,您应该在本地机器上拥有一个正在运行的 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 连接到其他数据库。目前,最简单的方法是修改 docker-compose-non-dev.yml
文件,并将您的数据库添加为其他服务依赖的服务(通过 x-superset-depends-on
)。其他人尝试在 Superset 服务上设置 network_mode: host
,但这些通常会破坏安装,因为配置需要使用 Docker Compose DNS 解析器来解析服务名称。如果您有好的解决方案,请告诉我们!
Superset 使用 Scarf Gateway 收集遥测数据。了解不同 Superset 版本的安装数量可以帮助项目做出有关修补和长期支持的决策。Scarf 会清除个人身份信息 (PII),只提供汇总统计信息。
要选择退出通过 Scarf Gateway 下载的软件包的此数据收集,请编辑 docker-compose.yml
和 docker-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
的 Web 浏览器访问 Superset。请注意,许多浏览器现在默认使用 https
- 如果您的浏览器是其中之一,请确保它使用 http
。
使用默认用户名和密码登录
username: admin
password: admin
4. 将 Superset 连接到您的本地数据库实例
当使用docker
或docker compose
运行 Superset 时,它会在自己的 Docker 容器中运行,就像 Superset 运行在完全独立的机器上一样。因此,尝试使用主机名localhost
连接到本地数据库将无法正常工作,因为localhost
指的是 Superset 运行所在的 Docker 容器,而不是您实际的主机。幸运的是,Docker 提供了一种简单的方法,可以从容器内部访问主机上的网络资源,我们将利用此功能连接到本地数据库实例。
以下是将 Superset(运行在 Docker 容器中)连接到 postgresql(运行在您的主机上)的说明。其他数据库可能会有略微不同的配置,但本质上都是一样的,可以归结为两个步骤:
- (Mac 用户可以跳过此步骤) 配置本地 postgresql/数据库实例以接受来自公共网络的传入连接。默认情况下,postgresql 仅允许来自
localhost
的传入连接,而在 Docker 中,除非您使用--network=host
,否则localhost
将分别指向主机和 Docker 容器中的不同端点。允许 postgresql 接受来自 Docker 的连接需要对postgresql.conf
和pg_hba.conf
文件进行一行更改;您可以在网上轻松找到针对您的操作系统/PG 版本的帮助链接来完成此任务。对于 Docker,只需将 IP 地址列入白名单172.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 地址。