高级安装和配置

在单独的 Web 服务器上托管 Bloom Web 应用程序

您可能希望将 Bloom 客户端托管在单独的 Web 服务器上,而不是在 Neo4j 数据库服务器上。出于安全原因或出于负载平衡原因,这可能需要将定向到不同类型服务器的不同类型流量分开。在这种情况下,Bloom 客户端 UI(作为单独的软件包提供)由您自己的 Web 服务器托管,而 Bloom 服务器插件仍然安装在 Neo4j 数据库上(无论是单实例还是集群设置)。Bloom 客户端连接到 Neo4j 数据库,方法是通过提供包含 Neo4j 数据库发现 URL 的 json 文件,或者使用 connectURL 参数。这将在后面详细介绍。

web server hosted bloom client

对于希望将 Bloom 客户端托管在与 Neo4j 数据库服务器不同的 Web 服务器上的场景,Bloom 客户端 UI 可作为 Web 资产包获得。Bloom 插件仍然需要安装在 Neo4j 数据库服务器上,有关详细信息,请参见 安装服务器插件。按照以下步骤设置 Bloom 客户端

  1. 此处下载 Bloom 服务器包。

  2. 解压缩下载的 Bloom 服务器包。在 neo4j-bloom-<version>-assets.zip 形式中查找 Web 资产包。

  3. 解压缩并设置捆绑包中的文件,以便从您的 Web 服务器提供服务。

  4. 提供一个包含 Neo4j 数据库发现 URL 的 json 文件,Bloom 客户端使用它连接到目标 Neo4j 数据库服务器。发现 URL 应采用以下格式,并保存在 Web 服务器根文件夹中的 discovery.json 中。

    {
    	"bolt" : "bolt://<neo4j-database-server-address>:<bolt-port>"
    }

    提供的资产包 **不** 包含 discovery.json 文件,但需要在需要时创建一个文件,以指定正确的 Neo4j 服务器和端口信息。

  5. 用户应该能够通过使用您配置的 Web 服务器路径在 Web 浏览器中加载提供的 index.html 来访问 Bloom。

另一种将 Bloom 连接到 Neo4j 服务器的方法是使用 connectURL 参数。服务器地址需要正确 URL 编码,并采用以下格式:https://[bloom-hosted-location]/index.html?connectURL=[database.server.address]

例如,对于在 Aura 中托管的实例,connectURL 可能如下所示

https://bloom.neo4j.io/index.html?connectURL=neo4j%2Bs%3A%2F%2Fcf0e20ef.databases.neo4j.io

Web 服务器配置

Neo4j 对用于托管 Bloom 资产的 Web 服务器没有特定建议。由于它只提供静态文件,因此它可以是任何可以配置为这样做的 Web 服务器(例如 Apache、nginx、IIS)。唯一的要求是它可以处理您拥有的用户数量,因此可以处理您拥有的请求数量。Bloom 将以每用户每会话 10 次请求的顺序进行请求。

如果您已将 Neo4j 实例配置为仅接受安全 Bolt 连接,则需要将 Web 服务器配置为通过 https 提供资产,并确保所需的 TLS 证书可用。否则,Bloom 可能无法连接到 Neo4j 在许多 Web 浏览器中,因为安全策略禁止混合安全和不安全连接。

这是 nginx Web 服务器的示例配置

user       www www;
worker_processes  1;  # If this nginx instance is the only thing running on this machine this can be set to number of cores

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  my-bloom-domain;

        location / {
            root   /path/to/bloom/asset/files;
            index  index.html;
        }
    }

    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  my-bloom-domain;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   /path/to/bloom/asset/files;
    #        index  index.html;
    #    }
    #}
}

将 Bloom 与 LDAP 身份验证一起使用

为了将 Bloom 与使用 LDAP 身份验证的 Neo4j 安装一起使用,Neo4j 需要配置为同时使用本机和 LDAP 身份验证。这是因为 Bloom 的透视图共享功能需要能够列出所有配置的角色,而这在仅使用 LDAP 时是无法实现的。

请注意,Bloom 不支持 Neo4j 3.x 数据库。对所有使用 Neo4j 4.x 和 5 的安装使用以下配置

dbms.security.authentication_providers=native,ldap
dbms.security.authorization_providers=native,ldap

LDAP 示例场景

假设在 LDAP 中定义了以下用户

用户 属性

cn=Homer

memberOf: cn=bloom_group_1

memberOf: cn=bloom_reader

cn=Marge

memberOf: cn=bloom_group_2

memberOf: cn=bloom_reader

cn=Lisa

memberOf: cn=bloom_admin

可以在 neo4j.conf 中配置组到角色的映射,如下所示

dbms.security.ldap.authorization.group_to_role_mapping=   \
 "cn=bloom_group_1,dc=example,dc=com" = role_1;           \
 "cn=bloom_group_2,dc=example,dc=com" = role_2;           \
 "cn=bloom_admin,dc=example,dc=com"   = admin;            \
 "cn=bloom_reader,dc=example,dc=com"  = reader

最后,需要在数据库中创建角色 role_1role_2(通过使用 dbms.security.createRole 过程)。

请记住,按照 安装服务器插件 部分中的说明,将所有需要 Bloom 访问权限的角色授权到 neo4j.bloom.authorization_role(使用 Neo4j 4.x)/dbms.bloom.authorization_role(使用 Neo4j 5)配置属性。

现在应该可以使用用户 Lisa 登录 Bloom,并创建两个透视图,例如 核废料绘画。如果 Lisa 然后将 核废料 透视图分配给 role_1,将 绘画 透视图分配给 role_2,那么当用户 Homer 登录时,他将获得 核废料 透视图,而 Marge 将获得 绘画 透视图。有关 Neo4j 中 LDAP 支持的更多信息,请参见 操作手册 → LDAP 集成

Bloom 单点登录 (SSO)

Neo4j Bloom 提供对单点登录 (SSO) 提供者的支持。这是一项企业功能,需要特定配置以及(自托管)Neo4j 服务器 v4.4 及更高版本。此外,您还需要已配置的兼容 SSO 提供者(本地或外部)。有关配置的更多信息,请参见 操作手册 → OIDC 配置设置

目前支持的提供者包括 OpenID Connect (OIDC) OAuth 2.0 提供者

  • 谷歌

  • Keycloak

  • 微软 Azure AD

  • Okta

Bloom 支持带 PKCE 的授权码流。

有关 OpenID Connect 和 OAuth 的更多信息,请参见 https://openid.net/connect/

安全信息应始终使用加密传输进行交换,因此应使用 HTTPS。单点登录不支持混合 HTTP/HTTPS 流。

配置好 SSO 提供商后,您需要配置 Neo4j 使用 OpenID Connect。这可以通过根据 neo4j.conf 文件中的说明更新该文件来完成,具体操作请参见 操作手册 → 配置 Neo4j 使用 OpenId Connect

确保在 neo4j.conf 文件中避免重复条目。

Bloom 需要了解可用于身份验证的提供商。在 Neo4j v4.4+ 版本中,可以使用上述方法在 neo4j.conf 文件中指定。

深层链接也支持 SSO 身份验证(如果可用)。

在 Docker 容器中安装 Bloom

也可以使用标准的 Neo4j Enterprise Docker 镜像在 Docker 容器中安装 Bloom。您可以 在此 找到所有 Neo4j Docker 镜像。有关 Neo4j Docker 镜像的更多信息,请参见 操作手册 → 使用 Neo4j Docker 镜像

在 Docker 容器中安装 Bloom 插件仅适用于 Neo4j Enterprise 4.2.3 或更高版本。

Neo4j Docker 镜像包含一个启动脚本,该脚本会在运行时自动下载并允许您配置 Bloom 插件,有关更多信息,请参见 操作手册 → 配置 Neo4j Labs 插件

使用 Bloom 插件需要许可证,该许可证可以作为共享卷提供给您的 Docker 容器。

docker run -it --rm \
  --publish=7474:7474 --publish=7687:7687 \
  -v $HOME/bloom.license:/licenses/bloom.license \
  --env NEO4J_AUTH=neo4j/test \
  --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
  --env NEO4J_PLUGINS='["bloom"]' \ (1)
  neo4j:enterprise
1 之前是 NEO4JLABS_PLUGINS,在 Neo4j 5 中已弃用,将在未来版本中移除。

在数据库集群中安装 Bloom 服务器

在数据库集群中设置 Bloom 服务器时,需要将 Bloom 插件添加到托管数据库的所有服务器中,包括主服务器和辅助服务器(如果有)。

此外,如果集群还用于托管 Bloom 客户端,则选择集群中的任何一个服务器作为指定的 Bloom 服务实例。确保启用 HTTP 或 HTTPS,并让用户在 URL 中使用该特定实例的地址。例如:

http://<cluster-instance-address>:<http-port>/bloom/

https://<cluster-instance-address>:<https-port>/bloom/

如果您打算在数据库集群中与 Bloom 一起使用 Graph Data Science 库,则 Bloom 必须连接到集群中安装了 GDS 库插件的服务器。

可以通过连接到安装了 GDS 库插件的服务器上的 Bloom 插件来托管 Bloom,或者使用 connectURL 参数指定集群中的适当服务器来实现此目的。

安装了 GDS 的服务器很可能以辅助模式托管数据库,因此任何 write 操作都需要路由到集群中的数据库主服务器。为了实现这一点,需要启用服务器端路由,有关更多信息,请参见 操作手册 → 服务器端路由Graph Data Science 手册 → GDS 与 Neo4j 集群

有关 Neo4j 集群的更多信息,请参见 操作手册 → 集群

bloom in a neo4j cluster

产品分析设置

在设置抽屉中,您可以控制是否要与 Neo4j 共享来自 Bloom 的遥测数据。但是,如果您从 Neo4j Desktop 或 Aura 运行 Bloom,则这些选项将被禁用,因为同意设置将从这些系统继承。此外,在 Neo4j v4.4 及更高版本中,可以在 neo4j.conf 文件中指定同意设置。在 Neo4j 5 中,您将包含 client.allow_telemetry 如下所示:

client.allow_telemetry=true|false

在 Neo4j 4.4 中,请改用 clients.allow_telemetry

clients.allow_telemetry=true|false