使用 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 compose
能够与它启动的 Postgres 镜像一起工作,您需要指向以-dev
结尾的 TAG,例如export TAG=4.0.0-dev
或export TAG=3.0.0-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 - 用于交互式开发环境
docker compose up
在开发模式下运行时,superset-node
容器需要完成构建资产才能使 UI 正确呈现。如果您只想尝试 Superset 而不做任何代码更改,请按照下面针对生产
或特定版本的步骤进行操作。
默认情况下,我们在这里挂载本地 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 相关的文档,以详细了解您可以从 Docker Hub 指向的现有标签。
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 的安装收集的数据,请编辑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 附带的一些示例数据集。您现在可以通过访问https://127.0.0.1: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,仅将 IP172.0.0.0/8
列入白名单就足够了,而不是*
,但无论如何,我们提醒您,在生产数据库中执行此操作可能会产生灾难性的后果,因为您正在将数据库开放到公共互联网。 - 不要使用
localhost
,而尝试使用host.docker.internal
(Mac 用户,Ubuntu)或172.18.0.1
(Linux 用户)作为主机名来尝试连接到数据库。这是 Docker 的内部细节——发生的情况是,在 Mac 系统中,Docker Desktop 会为主机名host.docker.internal
创建一个 dns 条目,该条目解析为主机的正确地址,而 Linux 中则不是这样(至少默认情况下)。如果这两个主机名都不起作用,那么您可能需要找到要使用的确切主机名,为此,您可以执行ifconfig
或ip addr show
并查看docker0
接口的 IP 地址,该接口应该是 Docker 为您创建的。或者,如果您甚至没有看到docker0
接口,请尝试(如果需要使用 sudo)docker network inspect bridge
并查看是否有"Gateway"
条目,并记下 IP 地址。