docker部署neo4j
環境:ubuntu16.04LTS
docker安裝
docker國內鏡像源配置
第一步,進入阿里雲,登陸后點擊左側的鏡像加速,生成自己的鏡像加速地址。
第二步,選擇ubuntu,執行阿里雲推薦的終端命令,即可更新docker的鏡像源為阿里雲鏡像。
docker部署neo4j
拉取neo4j鏡像
第一步,從鏡像源中找合適的鏡像
docker search neo4j
第二步,拉取鏡像源
docker pull neo4j(:版本號) //缺省 “:版本號” 時默認安裝latest版本的
第三步,查看本地鏡像,檢驗是否拉取成功
docker images
構建neo4j容器
第一步,在你根目錄的任意一個子目錄(我這里是/home)下建立四個基本的文件夾
- data——數據存放的文件夾
- logs——運行的日志文件夾
- conf——數據庫配置文件夾(在配置文件neo4j.conf中配置包括開放遠程連接、設置默認激活的數據庫)
- import——為了大批量導入csv來構建數據庫,需要導入的節點文件nodes.csv和關系文件rel.csv需要放到這個文件夾下)
docker run -d --name container_name \ //-d表示容器后台運行 --name指定容器名字
-p 7474:7474 -p 7687:7687 \ //映射容器的端口號到宿主機的端口號
-v /home/neo4j/data:/data \ //把容器內的數據目錄掛載到宿主機的對應目錄下
-v /home/neo4j/logs:/logs \ //掛載日志目錄
-v /home/neo4j/conf:/var/lib/neo4j/conf //掛載配置目錄
-v /home/neo4j/import:/var/lib/neo4j/import \ //掛載數據導入目錄
--env NEO4J_AUTH=neo4j/password \ //設定數據庫的名字的訪問密碼
neo4j //指定使用的鏡像
一個可以直接復制粘貼到終端執行的代碼模板
docker run -d --name container_name -p 7474:7474 -p 7687:7687 -v /home/neo4j/data:/data -v /home/neo4j/logs:/logs -v /home/neo4j/conf:/var/lib/neo4j/conf -v /home/neo4j/import:/var/lib/neo4j/import --env NEO4J_AUTH=neo4j/password neo4j
其中container_name可以自己指定,掛載在根目錄下的子目錄可以根據你自己的實際情況進行替換,我這里是/home。另外NEO4J_AUTH也是你自己來進行設置。
執行完上述命令后就在后台把neo4j容器啟動起來了,這個時候你就能在宿主機的瀏覽器中輸入
localhost:7474
輸入用戶名和密碼就能登錄到數據庫了。
neo4j配置
上述方式啟動的neo4j是按照默認的配置進行啟動的,而默認的數據庫配置是不允許遠程登陸的,這樣對於在服務器上使用docker搭載neo4j的同學來說,就很不方便了。所以我們對默認配置進行一些改變,改變如下:
// 進入容器配置目錄掛載在宿主機的對應目錄,我這里是/home/neo4j/conf
cd /home/neo4j/conf
// vim編輯器打開neo4j.conf
vim neo4j.conf
// 進行以下更改
//在文件配置末尾添加這一行
dbms.connectors.default_listen_address=0.0.0.0 //指定連接器的默認監聽ip為0.0.0.0,即允許任何ip連接到數據庫
//修改
dbms.connector.bolt.listen_address=0.0.0.0:7687 //取消注釋並把對bolt請求的監聽“地址:端口”改為“0.0.0.0:7687”
dbms.connector.http.listen_address=0.0.0.0:7474 //取消注釋並把對http請求的監聽“地址:端口”改為“0.0.0.0:7474”
保存后退出,重啟neo4j容器,可以使用容器的省略id或者生成容器時指定的容器名進行重啟。
docker restart 容器id(或者容器名)
防火牆設置
// 查看當前防火牆狀態,若為“inactive”,則防火牆已關閉,不必進行接續操作。
sudo ufw status
// 若防火牆狀態為“active”,則使用下列命令開放端口
sudo ufw allow 7474
sudo ufw allow 7687
// 重啟防火牆
sudo ufw reload
neo4j數據導入
neo4j數據的批量導入方法
為了加快速度,使用官方的Neo4j-import進行導入
// 數據准備
清空data/databases/graph.db文件夾(如果有),將清洗好的結點文件nodes.csv和關系文件rel.csv拷貝到宿主機/home/neo4j/import中
// docker以exec方式進入容器的交互式終端
docker exec -it container_name(or container_id) /bin/bash
// 停掉neo4j
bin/neo4j stop
//使用如下命令導入
bin/neo4j-admin import \
--database=graph.db \ //指定導入的數據庫,沒有系統則會在data/databases下自動創建一個
--nodes ./import/nodes.csv //指定導入的節點文件位置
--relationships ./import/rel.csv //指定導入的關系文件位置
--skip-duplicate-nodes=true //設置重復節點自動過濾
--skip-bad-relationships=true //設置bad關系自動過濾
//可執行一行式終端命令
bin/neo4j-admin import --database=graph.db --nodes ./import/nodes.csv --relationships ./import/rel.csv --skip-duplicate-nodes=true --skip-bad-relationships=true
// 容器內啟動neo4j
bin/neo4j start
// 退出交互式終端但是保證neo4j后台繼續運行
ctrl + P + Q
//保險起見,重啟neo4j容器
docker restart container_name(or container_id)
重啟后使用另一台主機向服務器發送http請求進行遠程登陸,在瀏覽器中輸入
服務器ip:7474
切換連接模式為 bolt:/ ,輸入用戶名和密碼進行登陸,登陸成功發現在數據庫一欄沒找到新導入的數據庫graph.db
這是因為配置不夠全,繼續進到容器掛載到宿主機的/home/neo4j/conf中對neo4j.conf進行配置
//在文件末尾添加默認的數據庫
dbms.active_database=graph.db
// 保存后重啟容器
docker restart container_name(or container_id)
重新進行遠程連接,此時數據庫的默認選擇應該就切換到了新導入的graph.db。
數據清洗
數據如何清洗成兩個符合neo4j-import導入格式的csv文件?