构建与运行

本文档适用于 Neo4j Labs 中不受支持的 NeoDash 版本。对于受支持的 NeoDash 版本用户,请参阅NeoDash 商业版

要开始开发应用程序,您需要设置开发环境。

使用 yarn 运行和构建

NeoDash 使用 React 构建。您需要安装 yarn 才能运行 Web 应用程序。

请使用最新版本的 yarnnode 来构建 NeoDash。该应用程序已使用 yarn 1.22.17 和 node v18.8.0 进行测试。

要在开发模式下运行应用程序

  • 克隆此存储库。

  • 打开终端并导航到您刚克隆的目录。

  • 运行 yarn install 以安装必要的依赖项。

  • 运行 yarn run dev 以在开发模式下运行应用程序。

  • 应用程序应在 http://localhost:3000 可用。

要构建用于生产的应用程序

  • 按照上述步骤克隆存储库并安装依赖项。

  • 执行 yarn run build。这将在您的项目目录中创建一个名为 build 的文件夹。

  • 将 build 文件夹的内容部署到 Web 服务器。然后您应该能够运行 Web 应用程序。

使用 Docker 本地运行

从 Docker Hub 拉取最新镜像以在本地运行应用程序

# Run the application on http://localhost:5005
docker pull neo4jlabs/neodash:latest
docker run -it --rm -p 5005:5005 neo4jlabs/neodash

# If you want to run on a custom port, set an environment variable
export NGINX_PORT=5008
docker run -it --rm -e NGINX_PORT=5008 -p 5008:5008 neo4jlabs/neodash

Windows 用户可能需要在 docker run 命令前加上 winpty

构建 Docker 镜像

预构建的 Docker 镜像可在 DockerHub 上获取。此镜像使用默认配置构建(以编辑器模式运行,不带 SSO)。

要自行构建镜像

确保您已安装最新版本的 docker,以便构建多阶段 NeoDash 镜像并运行它。

在 Unix (Mac/Linux) 系统上

docker build . -t neodash

如果您使用 Windows,您可能需要在命令前加上 winpty

winpty docker build . -t neodash

构建完成后,您可以使用以下命令运行镜像

docker run -it –rm -p 5005:5005 neodash

在 Kubernetes 上运行

要使用 YAML 文件进行部署

YAML 示例可在 NeoDash 存储库 中找到。以下是一个 pod 定义 YAML 文件的示例,用于在集群中创建 NeoDash pod

apiVersion: v1
kind: Pod
metadata:
  name: neodash
  labels:
    project: neodash
spec:
  containers:
    - name: neodash
      image: neo4jlabs/neodash:latest
      ports:
        - containerPort: 5005

创建 Kubernetes 服务以暴露应用程序

apiVersion: v1
kind: Service
metadata:
    name: neodash-svc
spec:
    type: LoadBalancer
    ports:
    - port: 5005
      targetPort: 5005
    selector:
      project: neodash

要使用 Helm Charts 进行部署

Kubernetes Helm chart 可在 NeoDash 存储库 中找到,以下是 Helm chart values.yaml 文件的完整示例,

# Name override or full name override
nameOverride: ''
fullnameOverride: neodash-test

# Number of pods
replicaCount: 1

# Image Details
image:
  repository: neo4jlabs/neodash
  pullPolicy: IfNotPresent
  tag: 'latest'
imagePullSecrets: [] # Image pull secret if any

# Pod annotations, labels and security context
podAnnotations: {}
podLabels: {}
podSecurityContext: {}

# Mode configuration using environment variables
# Set reader mode environment variables when enable_reader_mode is true
enable_reader_mode: true
env:
  - name: "ssoEnabled"
    value: "false"
  - name: "standalone"
    value: "true"
  - name: "standaloneProtocol"
    value: "neo4j+s"
  - name: "standaloneHost"
    value: "localhost"
  - name: "standalonePort"
    value: "7687"
  - name: "standaloneDatabase"
    value: neo4j
  - name: "standaloneDashboardName"
    value: "test"
  - name: "standaloneDashboardDatabase"
    value: neo4j
  - name: "standaloneAllowLoad"
    value: "false"
  - name: "standaloneLoadFromOtherDatabases"
    value: "false"
  - name: "standaloneMultiDatabase"
    value: "false"

# Environment variable from secret
envFromSecrets: []
  # standaloneUsername:
      # secretName: "neo4j-connection-secrets"
      # key: "username"
  # standalonePassword:
      # secretName: "neo4j-connection-secrets"
      # key: "password"

# Service details
service:
  type: LoadBalancer # Can also be ClusterIP or NodePort
  port: 5005 # For the service to listen in for Traffic
  targetPort: 5005 # Target port is the container port
  annotations: {} # Service annotations for the LoadBalance

# Ingress
ingress:
  enabled: false # Enable Kubernetes Ingress
  className: 'alb' # Class Name
  annotations: {} # Cloud LoadBalancer annotations
  hosts: []
    # - host: neodash.example.com
    #   paths:
    #     - path: '/'
    #       pathType: Prefix
  tls: []

# Pod resources request, limits and health check
resources:
  requests:
    memory: "64Mi"
    cpu: "250m"
  limits:
    memory: "128Mi"
    cpu: "500m"
livenessProbe:
  httpGet:
    path: /*
    port: 5005
readinessProbe:
  httpGet:
    path: /*
    port: 5005

# Pod Autoscaler
autoscaling:
  enabled: false
  # minReplicas: 1
  # maxReplicas: 100
  # targetCPUUtilizationPercentage: 80

# Pod Volumes
volumes: []
volumeMounts: []

# Service Account
serviceAccount:
  create: true
  automount: true
  # annotations: {}
  # name: ''
© . All rights reserved.