docker 安装superset

发布时间 2023-09-26 13:46:55作者: 赵财进宝

docker 安装superset

1. 安装 docker和docker compose

2. 克隆 Superset 的 GitHub

git clone https://github.com/apache/superset.git

该命令成功完成后,您应该superset在当前目录中看到一个新文件夹。

3.通过 Docker Compose

导航到您在步骤 1 中创建的文件夹:

cd superset

在 master 分支上工作时,运行以下命令以运行development模式docker compose

docker compose up

在 master 分支上工作时,运行以下命令以运行production模式docker compose

docker-compose -f docker-compose-non-dev.yml pull
docker-compose -f docker-compose-non-dev.yml up

docker-compose或者,您也可以通过首先检查分支/标签,然后从变量开始来运行 Superset 的特定版本TAG。例如,要运行2.1.0版本,请运行以下命令:

git checkout 3.0.0
TAG=3.0.0 docker-compose -f docker-compose-non-dev.yml pull
TAG=3.0.0 docker-compose -f docker-compose-non-dev.yml up

提示

请注意,某些配置对于 Superset 的生产实例是强制性的。特别是,如果没有用户指定的值,Superset 将不会启动SECRET_KEY。请参阅配置超级集

警告

属于 Superset 实例的所有内容(图表、仪表板、用户等)都存储在其元数据数据库中。在生产中,应该备份该数据库。docker-compose 的默认安装将将该数据存储在 Docker卷中包含的 PostgreSQL 数据库中,该数据库未备份。为了避免数据丢失的风险,请使用托管数据库来存储元数据(推荐),或者通过从卷中提取和存储默认 PostgreSQL 数据库的内容来执行您自己的定期备份(以下是如何转储和恢复的示例

您应该会看到计算机上启动的容器的日志输出墙。一旦此输出变慢,您的本地计算机上应该有一个正在运行的 Superset 实例!为了避免将来运行时出现文本墙,请将该-d选项添加到命令末尾docker-compose up

注意:这将在非开发模式下启动超集,对代码库的更改将不会反映出来。如果您想在开发模式下运行 superset 来测试本地更改,只需将之前的命令替换为:docker-compose up,然后等待superset_node容器完成资产构建。

4.配置 Docker Compose

以下内容适用于想要配置 Superset 如何在 Docker Compose 中运行的用户;否则,您可以跳到下一部分。

您可以按照docker/README.md中提到的步骤安装其他 python 包并应用配置覆盖

docker/.env您可以分别使用和为开发模式和非开发模式配置 Docker Compose 环境变量docker/.env-non-dev。这些环境文件为 Docker Compose 设置中的大多数容器设置环境,某些变量影响多个容器,而其他变量仅影响单个容器。

一个重要的变量SUPERSET_LOAD_EXAMPLES决定superset_init容器是否将示例数据和可视化填充到元数据数据库中。这些示例有助于学习和测试 Superset,但对于有经验的用户和生产部署来说则不必要。加载过程有时可能需要几分钟时间并占用大量 CPU,因此您可能需要在资源受限的设备上禁用它。

笔记

用户经常希望从 Superset 连接到其他数据库。目前,最简单的方法是修改该docker-compose-non-dev.yml文件并将数据库添加为其他服务所依赖的服务(通过x-superset-depends-on)。其他人尝试设置network_mode: hostSuperset 服务,但这些通常会破坏安装,因为配置需要使用 Docker Compose DNS 解析器来解析服务名称。如果您对此有好的解决方案,请告诉我们!

笔记

Superset 使用Scarf Gateway收集遥测数据。了解不同 Superset 版本的安装数量可以帮助项目做出有关修补和长期支持的决策。Scarf 会清除个人身份信息 (PII),并仅提供汇总统计数据。

要在基于 docker-compose 的安装中选择退出此数据收集,请编辑和文件x-superset-image:中的行,替换为直接从 Docker Hub 提取映像。docker-compose.yml``docker-compose-non-dev.yml``apachesuperset.docker.scarf.sh/apache/superset``apache/superset

5.登录Superset

您的本地 Superset 实例还包括一个用于存储数据的 Postgres 服务器,并且已经预加载了 Superset 附带的一些示例数据集。您现在可以通过网络浏览器访问 Superset http://localhost:8088。请注意,许多浏览器现在默认为https- 如果您的浏览器是其中之一,请确保它使用http.

使用默认用户名和密码登录:

username: admin
password: admin

6. 将 Superset 连接到本地数据库实例

当使用 Superset 运行时,docker或者docker-compose它在自己的 docker 容器中运行,就好像 Superset 完全在单独的机器中运行一样。因此,尝试使用主机名连接到本地数据库localhost将不起作用,因为localhost它指的是运行 Superset 的 docker 容器,而不是您的实际主机。幸运的是,docker 提供了一种从容器内部访问主机中网络资源的简单方法,我们将利用此功能连接到本地数据库实例。

这里的说明是从 Superset(在其 docker 容器中运行)连接到 postgresql(在您的主机上运行)。其他数据库的配置可能略有不同,但要点是相同的,可归结为 2 个步骤 -

  1. (Mac 用户可以跳过此步骤)配置本地 postgresql/数据库实例以接受公共传入连接。默认情况下,postgresql 只允许来自 Docker 和 Docker 下的传入连接localhost,除非您使用--network=host,localhost将分别引用主机上和 Docker 容器中的不同端点。允许 postgresql 接受来自 Docker的连接需要对文件进行一行更改postgresql.confpg_hba.conf您可以在网络上轻松找到适合您的操作系统/PG 版本的有用链接来完成此任务。对于 Docker,只需将 IP 列入白名单172.0.0.0/8即可*,但无论如何,您都会被警告,在生产数据库中执行此操作可能会当您向公共互联网开放数据库时,会产生灾难性的后果。
  2. 尝试连接到数据库时,localhost尝试使用host.docker.internal(Mac 用户、Ubuntu)或(Linux 用户)作为主机名,而不是。172.18.0.1这是 Docker 的内部细节——发生的情况是,在 Mac 系统中,Docker Desktop 为主机名创建一个 dns 条目,host.docker.internal该条目解析为主机的正确地址,而在 Linux 中情况并非如此(至少通过默认)。如果这两个主机名都不起作用,那么您可能需要找到您想要使用的确切主机名,为此您可以执行ifconfigip addr show并查看docker0Docker 必须为您创建的接口的 IP 地址。或者,如果您甚至没有看到docker0界面,请尝试(如果需要使用 sudo)docker network inspect bridge并查看是否有一个条目"Gateway"并记下 IP 地址。

7.解决无法登录一直还在登录界面问题

内容安全策略 (CSP )

Superset 使用Talisman扩展来实现 内容安全策略 (CSP),这是一个附加的安全层,有助于检测和缓解某些类型的攻击,包括跨站点脚本 (XSS) 和数据注入攻击。

CSP 使服务器管理员可以通过指定浏览器应视为有效可执行脚本源的域来减少或消除可能发生 XSS 的向量。然后,兼容 CSP 的浏览器将仅执行从这些允许的域接收的源文件中加载的脚本,而忽略所有其他脚本(包括内联脚本和事件处理 HTML 属性)。

策略是使用一系列策略指令来描述的,每个策略指令都描述特定资源类型或策略领域的策略。您可以 在此处检查可能的指令。

在部署 Superset 时,正确配置内容安全策略对于防止多种类型的攻击非常重要。Superset 提供了两个config.py用于部署 CSP 的变量:

  • TALISMAN_ENABLED默认为True;设置此项False以禁用 CSP
  • TALISMAN_CONFIG保存实际的策略定义(参见下面的示例)以及要传递给 Talisman 的任何其他参数。

在生产模式下运行时,Superset 将在启动时检查 CSP 是否存在。如果没有找到,就会发出安全风险警告。对于使用其他软件在 Superset 外部定义 CSP 策略的环境,管理员可以使用CONTENT_SECURITY_POLICY_WARNING中的键禁用此警告config.py

8.此处为修改的文件内容

[root@localhost superset-latest]# pwd
/opt/superset-latest
[root@localhost superset-latest]# vim docker/.env-non-dev 

DATABASE_HOST=db
DATABASE_PASSWORD=superset
DATABASE_USER=superset

# database engine specific environment variables
# change the below if you prefer another database engine
DATABASE_PORT=5432
DATABASE_DIALECT=postgresql
POSTGRES_DB=superset
POSTGRES_USER=superset
POSTGRES_PASSWORD=superset
#MYSQL_DATABASE=superset
#MYSQL_USER=superset
#MYSQL_PASSWORD=superset
#MYSQL_RANDOM_ROOT_PASSWORD=yes

# Add the mapped in /app/pythonpath_docker which allows devs to override stuff
PYTHONPATH=/app/pythonpath:/app/docker/pythonpath_dev
REDIS_HOST=redis
REDIS_PORT=6379

FLASK_ENV=production
SUPERSET_ENV=production
SUPERSET_LOAD_EXAMPLES=yes
#此处为修改内容
SUPERSET_SECRET_KEY=nmR02PK1iF9NaC3WCgEcizct9FyPLpGTHzCRdwINrswQmlKm/YCY/xd3
CYPRESS_CONFIG=false
SUPERSET_PORT=8088
MAPBOX_API_KEY=''
#此处为添加内容 禁用安全策略
TALISMAN_ENABLED=False