Docker部署 Neo4j 及集成 APOC 插件:安裝與配置完整指南(docker-compose)

Docker部署 Neo4j 及集成 APOC 插件:分步驟指南

摘要

:本文將分兩部分詳細介紹相關內容。第一部分講解如何使用 Docker Compose 部署 Neo4j 圖數據庫,提供完整配置文件及常見問題解決方案;第二部分在前者基礎上,介紹 APOC 插件的集成方法,幫助開發者從零開始搭建完善的 Neo4j 環境。


第一部分:Docker Compose 部署 Neo4j 圖數據庫

一、前言

Neo4j 作為主流圖數據庫,在眾多領域有著廣泛應用。采用 Docker 部署能簡化流程、避免環境沖突,讓開發者快速搭建可用的 Neo4j 環境。本部分將聚焦于 Neo4j 本身的 Docker Compose 安裝方法。

二、環境準備

確保系統已安裝以下工具:

  • Docker(建議 20.10+)

  • Docker Compose(建議 v2.0+)

驗證安裝:

docker --versiondocker-compose --version

Ubuntu 系統快速安裝命令:

sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

三、項目結構創建

\# 創建項目目錄mkdir neo4j\_docker && cd neo4j\_docker\# 創建數據、日志、導入、插件目錄mkdir -p neo4j/{data,logs,import,plugins}

各目錄作用:

  • data:存儲數據庫數據,保障數據持久化

  • logs:存放日志,便于排查問題

  • import:用于數據導入,Neo4j 可直接訪問

  • plugins:預留用于存放擴展插件

四、編寫 Neo4j 基礎 docker-compose.yml 文件

在項目根目錄創建文件,內容如下:

version: '3.9'services:neo4j:image: neo4j:5.12.0container_name: neo4jports:- "18801:7474"- "18802:7687"volumes:- ./neo4j/data:/data- ./neo4j/logs:/logs- ./neo4j/import:/import- ./neo4j/plugins:/pluginsenvironment:# 認證配置NEO4J_AUTH: neo4j/neo4jrag# 內存配置NEO4J_dbms_memory_pagecache_size: 1GNEO4J_dbms_memory_heap_initial__size: 1GNEO4J_dbms_memory_heap_max__size: 1G# 時區配置NEO4J_db_temporal_timezone: Asia/Shanghai

五、關鍵配置解析

1. 基礎配置
  • 密碼設置NEO4J_AUTH 需使用 8 位以上密碼,格式為 “用戶名 / 密碼”,默認用戶名為 neo4j,首次登錄會強制修改密碼。

  • 端口映射7474 對應瀏覽器界面,7687 為 Bolt 協議端口,分別映射到宿主機 1880118802 端口。

  • 數據卷掛載:實現數據持久化,容器刪除后數據不丟失,且方便在宿主機操作文件。

2. 內存配置(易錯點)
配置項說明配置原則
NEO4J_dbms_memory_pagecache_size緩存磁盤數據,影響查詢性能建議為系統可用內存的 50% 左右
NEO4J_dbms_memory_heap_initial__sizeJVM 堆初始大小與堆最大大小一致,避免動態調整損耗性能
NEO4J_dbms_memory_heap_max__sizeJVM 堆最大大小建議為系統可用內存的 25%-30%

?? 注意:

pagecache_size

用單下劃線,

heap.initial_size

heap.max_size

因原配置有小數點,在環境變量中用雙下劃線代替,這是 Neo4j 5.x 的特殊規則。

六、啟動 Neo4j 服務及驗證

1. 啟動容器
docker-compose up -d
2. 查看狀態與日志
docker-compose ps  # 查看狀態,顯示 Up 則啟動成功docker-compose logs -f  # 查看日志,出現 Started. 表示啟動完成
3. 訪問驗證

打開瀏覽器訪問 http://localhost:18801,輸入用戶名 neo4j 和密碼 neo4jrag 登錄,首次登錄按提示修改密碼后進入界面。

最終安裝成功構建知識圖譜結果如下:
在這里插入圖片描述


第二部分:在 Neo4j 基礎上集成 APOC 插件

一、APOC 插件簡介

APOC(Awesome Procedures On Cypher)是 Neo4j 強大的擴展插件,提供數百個存儲過程和函數,彌補 Cypher 在復雜數據處理、導入導出等方面的不足,能顯著提升開發效率。

二、修改 docker-compose.yml 集成 APOC

在第一部分基礎配置上,添加 APOC 相關配置,完整文件如下:

version: '3.9'services:neo4j:image: neo4j:5.12.0container_name: neo4jports:- "18801:7474"- "18802:7687"volumes:- ./neo4j/data:/data- ./neo4j/logs:/logs- ./neo4j/import:/import- ./neo4j/plugins:/pluginsenvironment:# 認證配置NEO4J_AUTH: neo4j/neo4jrag# 內存配置NEO4J_dbms_memory_pagecache_size: 1GNEO4J_dbms_memory_heap_initial__size: 1GNEO4J_dbms_memory_heap_max__size: 1G# 時區配置NEO4J_db_temporal_timezone: Asia/Shanghai# APOC插件配置 - 新增部分NEO4J_PLUGINS: '["apoc"]'  # 自動安裝APOC插件NEO4J_dbms_security_procedures_unrestricted: apoc.*  # 允許APOC執行所有操作NEO4J_apoc_export_file_enabled: "true"  # 啟用文件導出NEO4J_apoc_import_file_enabled: "true"  # 啟用文件導入NEO4J_apoc_import_file_use_neo4j_config: "true"  # 使用Neo4j配置的導入路徑

三、APOC 配置詳解

  • NEO4J_PLUGINS: '["apoc"]':容器啟動時自動下載安裝與 Neo4j 版本匹配的 APOC 插件,無需手動下載 JAR 包。

  • NEO4J_dbms_security_procedures_unrestricted: apoc.*:解除 APOC 的安全限制,因其包含部分系統級操作功能。

  • NEO4J_apoc_export_file_enabledNEO4J_apoc_import_file_enabled:啟用文件導入導出功能,方便批量處理數據。

  • NEO4J_apoc_import_file_use_neo4j_config: "true":讓 APOC 遵循 Neo4j 配置的導入目錄,確保能讀取 import 目錄文件。

四、重啟服務及驗證 APOC 安裝

1. 重啟容器
docker-compose down  # 停止并刪除當前容器docker-compose up -d  # 啟動新配置的容器
2. 驗證 APOC 安裝

在 Neo4j 瀏覽器中執行:

RETURN apoc.version()

若返回版本號(如 5.12.0),則安裝成功;若提示函數不存在,需排查問題。

在這里插入圖片描述

五、APOC 常用功能示例

1. 數據導入

導入 JSON 數據:

CALL apoc.load.json('import/data.json') YIELD valueCREATE (n:Node) SET n = value
2. 字符串處理
RETURN apoc.text.upper("hello world")  // 輸出 "HELLO WORLD"
3. 日期時間處理
RETURN apoc.date.format(timestamp(), 'ms', 'yyyy-MM-dd HH:mm:ss')  // 格式化當前時間
4. 路徑處理
MATCH (start:Node {name: 'Start'}), (end:Node {name: 'End'})CALL apoc.algo.allSimplePaths(start, end, '', 10) YIELD pathRETURN path

六、APOC 安裝常見問題與解決方案

? 問題:APOC 安裝失敗,提示函數不存在

原因及解決

  • 版本不匹配:通過 NEO4J_PLUGINS: '["apoc"]' 自動匹配版本,無需手動指定。

  • 網絡問題:下載失敗時,手動下載對應版本帶 -all 后綴的 APOC JAR 包,放入 neo4j/plugins 目錄后重啟容器。

  • 配置錯誤:檢查 NEO4J_dbms_security_procedures_unrestricted 是否包含 apoc.*

第三部分:根據APOC示例–保存實體

我不解釋這個函數具體用法,我直接給出如何使用APOC將其保存到neo4j數據庫中,其中entities就是一個字典理解就夠了。

 def _create_entities(self, tx, entities):"""創建或合并實體節點。- 若實體不存在:創建并設置所有屬性。- 若實體存在:- 與舊值拼接(用 '; ' 分隔,自動去重空值)使用APOC庫的apoc.create.setProperty處理動態屬性設置"""cypher = """MERGE (e:Entity {name: $name})WITH e, $props AS propsUNWIND keys(props) AS keyWITH e, key, props[key] AS new_val, properties(e)[key] AS old_valWHERE key <> 'name'  // name 不參與合并// 處理空值和修剪空格WITH e, key, old_val, trim(new_val) AS trimmed_new_val, trim(COALESCE(old_val, '')) AS trimmed_old_val// 拆分舊值為數組用于去重檢查WITH e, key, trimmed_new_val, trimmed_old_val,split(trimmed_old_val, '#; ') AS old_vals_array// 計算最終值WITH e, key,CASE // 舊值不存在或為空時,直接使用新值WHEN trimmed_old_val = '' THEN trimmed_new_val// 舊值存在且新值已在舊值中,保持舊值WHEN trimmed_new_val IN old_vals_array THEN trimmed_old_val// 舊值存在且新值不在舊值中,進行合并ELSE apoc.text.join([trimmed_old_val, trimmed_new_val], '#; ')END AS final_val// 使用APOC設置屬性,處理動態屬性名更可靠CALL apoc.create.setProperty(e, key, final_val) YIELD nodeSET e = node  // 將更新后的節點屬性寫回原節點"""for entity in entities:# 提取 entity_ 前綴屬性(去掉前綴)props = {k[7:]: v for k, v in entity.items() if k.startswith("entity_")}if "name" not in props:raise ValueError(f"實體缺少必填主鍵 'name':{entity}")# 處理可能的None值,轉換為空字符串for key, value in props.items():if value is None:props[key] = ""# 執行合并邏輯tx.run(cypher, name=props["name"], props=props)

總結

本文第一部分詳細介紹了 Neo4j 的 Docker Compose 部署流程,包括環境準備、配置編寫、啟動驗證及問題解決;第二部分在其基礎上,講解了 APOC 插件的集成方法、配置解析、功能示例及相關問題處理。通過這種分步方式,開發者可先搭建基礎的 Neo4j 環境,再根據需求集成 APOC 插件,逐步構建完善的圖數據庫系統。實踐中若遇其他問題,可參考官方文檔獲取更多支持。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92900.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TLSv1.2協議與TCP/UDP協議傳輸數據內容差異

一、Wireshark中常見的TLSv1.2在用Wireshark抓包時&#xff0c;除了看到課堂上教過的經典的TCP/UDP協議&#xff0c;還有一個協議經常出現——TLSv1.2。并且這個協議的Info解釋是Application data&#xff0c;其實看到這個解釋&#xff0c;我大概猜出來了TLSv1.2是用來給用戶數…

51c自動駕駛~合集14

自己的原文哦~ https://blog.51cto.com/whaosoft/11707335 #Text2LiDAR 文本引導的無條件點云生成新SOTA 論文題目&#xff1a;《Text2LiDAR: Text-guided LiDAR Point Cloud Generation via Equirectangular Transformer》 論文地址&#xff1a;https://arxiv.o…

k8s基本概念

k8s 的基本概念 Kubernetes是一個可以移植、可擴展的開源平臺&#xff0c;使用 聲明式的配置 并依據配置信息自動地執行容器化應用程序的管理。在所有的容器編排工具中&#xff08;類似的還有 docker swarm / mesos等&#xff09;&#xff0c;Kubernetes的生態系統更大、增長更…

Easysearch 數據遷移之數據比對

上一篇我們通過 INFINI Gateway 進行了索引數據遷移&#xff0c;對索引遷移結果進行了初步且直觀的校驗--對比索引的文檔數是否一致。今天介紹個實實在在的數據比對方法&#xff0c;通過網關對比索引文檔的內容在兩個集群是否一致。話不多說&#xff0c;就拿上次遷移的兩個索引…

Codeforces Round 1042 (Div. 3)

ABCD 略E注意到每個操作最多執行一次&#xff0c;ifa[i]!b[i]&#xff0c;要么a[i]^a[i1]要么a[i]^b[i1]G設消除1~i的數的操作次數為f[i]&#xff0c;可以推出f[i]2*f[i-1]1&#xff0c;那么消除1~i的數的分數乘的數為g[i]&#xff0c;g[i]g[i-1]*g[i-1]*i s雖然很大&#xff0…

AJAX:讓你的網頁“靜悄悄”變聰明,體驗絲滑升級

大家好&#xff0c;今天想聊聊一個讓網頁“活”起來的小秘密——AJAX。你可能遇到過這種情況&#xff1a;點個按鈕&#xff0c;頁面就刷新&#xff0c;等得心急火燎。但用了AJAX的網站&#xff0c;比如購物車更新或搜索建議&#xff0c;數據嗖嗖就來了&#xff0c;整個頁面卻紋…

【iOS】Block基礎知識和底層探索

文章目錄前言Block的聲明和創建問題引入Block的底層結構Block的執行流程Block的創建與存儲Block的傳遞與調用Block的捕獲機制捕獲局部變量捕獲全局變量小結Block的類型__block修飾符__block變量的包裝結構體block的實例結構體block的執行邏輯Block循環引用造成的原因解決方法小…

1.Ansible 自動化介紹

1-Ansible 自動化介紹 Ansible 自動化介紹 手動執行任務和自動化執行任務 手動執行任務的麻煩事&#xff1a; 很容易漏掉某個步驟&#xff0c;或者不小心執行錯步驟&#xff0c;而且很難驗證每個步驟是不是真的按預期完成了。管理一大堆服務器時&#xff0c;很容易出現配置…

2025年云手機場景適配的行業觀察

2025年的市場中&#xff0c;云手機品牌百花齊放&#xff0c;不同品牌在性能、功能和場景適配性上的差異日益顯著。隨著云計算技術的快速發展&#xff0c;云手機已從 嘗鮮工具 演變為游戲、辦公、企業運營等場景的剛需工具。現市面上也有著更多的云手機品牌&#xff0c;結合實測…

Date/Calendar/DateFormat/LocalDate

作用說明Date用于定義時間&#xff0c;提供date對象間的比較方法Calendar(日歷類),提供對時間的運算方法DateFormat是接口&#xff0c;它的實現類SimpleDateFormat用來規范時間輸出形式LocalDate&#xff0c;在JDK1.8之后引入&#xff0c;方便了對時間的運算方法介紹Date常用方…

在Python 3.8環境中安裝Python 3.6兼容包的方法

在Python 3.8環境中安裝Python 3.6兼容包的方法 用戶的需求是&#xff1a;在Python 3.8環境中重新安裝原本為Python 3.6設計的包。這通常涉及兼容性問題&#xff0c;因為Python 3.8可能引入了一些語法或API變更&#xff0c;導致舊包無法直接運行。以下是逐步解決方案&#xff…

三種DuckDB電子表格插件的union all查詢性能對比

我選取了最穩定、兼容性最好的三種&#xff1a;官方excel對應函數read_xlsx()、官方spatial對應函數st_read()、rusty_sheet對應函數read_sheet。 1.建立兩個包含前50萬和后54萬的xlsx文件&#xff0c;用于比較。利用官方excel的copy()to進行。 D copy (from v1 order by l_ord…

Python 中使用多進程編程的“三兩”問題

文章目錄一、簡介二、選擇合適的啟動方式三、手動終止所有的進程小結一、簡介 這里簡單介紹在Python中使用多進程編程的時候容易遇到的情況和解決辦法&#xff0c;有助于排查和規避某類問題&#xff0c;但是具體問題還是需要具體分析&#xff0c;后續會補充更多的內容。 二、…

Ansible部署應用

目錄Ansible概述1&#xff1a;什么是Ansible2&#xff1a;Ansible的架構組成3&#xff1a;Ansible與SaltStack的對比安裝部署Ansible服務1&#xff1a;系統環境設置2&#xff1a;安裝Ansible&#xff08;第一臺&#xff09;2&#xff1a;配置主機清單3&#xff1a;修改Ansible配…

疏老師-python訓練營-Day44預訓練模型

浙大疏錦行 知識點回顧&#xff1a; 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰&#xff1a;resnet18 作業&#xff1a; 嘗試在cifar10對比如下其他的預訓練模型&#xff0c;觀察差異&#xff0c;盡可能和他人選擇的不同嘗試通過ctrl進…

AI入門學習--如何寫好prompt?

寫好Prompt&#xff08;提示詞&#xff09;是駕馭AI模型的核心技能。以下是結合測試工程師需求的 結構化方法論 和 黃金模板一、prompt設計金字塔終極心法&#xff1a; Prompt 對AI的測試需求文檔&#xff0c;需像設計測試用例一樣&#xff1a;可執行&#xff1a;明確輸入輸出…

Linux編程 IO(標準io,文件io,目錄io)

標準IO C語言標準IO概述標準IO&#xff08;Standard Input/Output&#xff09;是C語言中用于處理文件和數據流的一組函數庫&#xff0c;定義在<stdio.h>頭文件中。與低級IO&#xff08;如read/write&#xff09;相比&#xff0c;標準IO提供了緩沖機制&#xff0c;提高了數…

C# WPF本地Deepseek部署

模型下載地址 using LLama; using LLama.Common; using System; using System.IO; using System.Threading.Tasks; using System.Windows; using System.Windows.Input;namespace YF_Talk {public partial class MainWindow : Window{private LLamaWeights _model;private LLa…

【Abp.VNext】Abp.Vnext框架模塊學習

1、Abp.Vnext-集成 Volo.Abp.Core2、Abp.vNext-Web模塊 Volo.Abp.AspNetCore.MVC框架&#xff08;framework文件夾&#xff09; 七、Abp.vNext-應用模塊-Identity身份認證 業務模塊&#xff08;modules文件夾->identity&#xff09; 1、添加領域模型 Volo.Abp.Identity.Doma…

【完整源碼+數據集+部署教程】火柴實例分割系統源碼和數據集:改進yolo11-rmt

背景意義 研究背景與意義 在計算機視覺領域&#xff0c;實例分割技術作為一種重要的圖像處理方法&#xff0c;近年來得到了廣泛的關注和應用。實例分割不僅能夠識別圖像中的物體類別&#xff0c;還能精確地分割出每個物體的輪廓&#xff0c;提供更為細致的視覺信息。這一技術在…