使用 Docker Compose
正如我们的 快速入门指南 中所述,在 Linux 或 Mac OSX 计算机上本地试用 Superset 的最快方法是使用 Docker Compose。Superset 没有对 Windows 的官方支持。这也是快速启动功能齐全的开发环境的最简单方法。
请注意,我们支持 4 种主要方式来运行 docker compose
- docker-compose.yml: 用于交互式开发,我们将本地文件夹与您可以编辑的前端/后端文件挂载,并实时体验您在应用程序中所做的更改
- docker-compose-light.yml: 包含最少服务(数据库、Superset 应用程序和前端开发服务器)的轻量级配置,用于开发。它使用内存缓存而不是 Redis,专为同时运行多个实例而设计
- docker-compose-non-dev.yml 我们只是基于本地分支构建一个更不可变的镜像,并运行所有必需的镜像。启动时本地分支中的更改将反映出来,但在
up期间对代码的更改将不会反映在应用程序中 - docker-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 而不进行任何代码更改,请按照下面针对 production 或特定版本记录的步骤操作。
默认情况下,我们在此处挂载本地 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 - 具有多个实例的轻量级开发
用于更轻量级、更少资源并支持运行多个实例的开发设置
# Single lightweight instance (default port 9001)
docker compose -f docker-compose-light.yml up
# Multiple instances with different ports
NODE_PORT=9001 docker compose -p superset-1 -f docker-compose-light.yml up
NODE_PORT=9002 docker compose -p superset-2 -f docker-compose-light.yml up
NODE_PORT=9003 docker compose -p superset-3 -f docker-compose-light.yml up
此配置包括
- PostgreSQL 数据库(仅限内部网络)
- Superset 应用程序服务器
- 带 webpack 热重载的前端开发服务器
- 内存缓存(无 Redis)
- 每个实例的隔离卷和网络
通过 https://:{NODE_PORT} 访问每个实例(例如,https://:9001)。
选项 #3 - 从本地分支构建一组不可变镜像
docker compose -f docker-compose-non-dev.yml up
选项 #4 - 启动正式版本
# 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 docker-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 连接到其他数据库。目前,最简单的方法是修改 docker-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 下载的软件包的数据收集,请编辑您的 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://: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 镜像与存储库中的定义匹配。这应该只适用于主 docker-compose.yml 文件(默认),而不适用于上面定义的替代方法。