高级安装与配置

在独立的 Web 服务器上托管 Bloom Web 应用

您可以选择将 Bloom 客户端托管在独立的 Web 服务器上,而不是 Neo4j 数据库服务器上。出于安全考虑,或者为了负载均衡(将发送到不同类型服务器的流量进行分离),这样做是有必要的。在这种情况下,Bloom 客户端 UI(以单独的包形式提供)由您自己的 Web 服务器托管,而 Bloom 服务器插件则仍然安装在 Neo4j 数据库(无论是单实例还是集群设置)上。Bloom 客户端通过提供包含 Neo4j 数据库发现 URL 的 json 文件,或使用 connectURL 参数来连接到 Neo4j 数据库。详情见下文。

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 每个用户在每次会话中大约会产生数十次请求。

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

这是 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 身份验证

为了在采用 LDAP 身份验证的 Neo4j 安装中使用 Bloom,需要将 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 并创建两个透视图,例如 Nuclear wastePainting。如果 LisaNuclear waste 透视图分配给 role_1,将 Painting 分配给 role_2,那么当用户 Homer 登录时将获得 Nuclear waste 透视图,而 Marge 将获得 Painting 透视图。请参阅 操作手册 → LDAP 集成 以了解更多关于 Neo4j 中 LDAP 支持的信息。

Bloom 单点登录 (SSO)

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

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

  • Google

  • Keycloak

  • Microsoft Azure AD

  • Okta

Bloom 支持带有 PKCE 的授权码流 (authorization code flow)。

关于 OpenID Connect 和 OAuth 的更多信息,请访问 https://openid.net/connect/

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

配置好 SSO 提供商后,您需要将 Neo4j 配置为使用 OpenID Connect。请根据 操作手册 → 将 Neo4j 配置为使用 OpenId Connect 中的说明更新 neo4j.conf 文件。

请确保 neo4j.conf 文件中没有重复项。

Bloom 需要知晓可用的身份提供商。在 Neo4j v4.4+ 中使用时,如上所述,这需要在 neo4j.conf 文件中进行指定。

深层链接 (Deep links) 在支持的情况下也适用于 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 使用图数据科学 (GDS) 库,则 Bloom 必须连接到集群中安装了 GDS 库插件的服务器。

这可以通过连接到安装了 GDS 库插件并托管 Bloom 的服务器上的 Bloom 插件来实现,或者通过 connectURL 参数指定集群中的相应服务器。

安装了 GDS 的服务器很可能处于从节点模式下托管数据库,因此任何 操作都需要路由到集群中的数据库主节点。要实现这一点,需要启用服务器端路由,请参阅 操作手册 → 服务器端路由图数据科学手册 → Neo4j 集群中的 GDS 获取更多信息。

有关 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