neo4j部署

创建neo4j数据挂载目录

1
2
3
4
5
# 创建neo4j用户
$ useradd neo4j

# 创建neo4j使用的数据及log目录
$ mkdir /data/neo4j/{data,logs,import,plugins,conf} -p

创建neo4j配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 创建neo4j配置文件
cat > /data/neo4j/conf/neo4j.conf <<EOF
dbms.directories.import=import
dbms.connector.bolt.enabled=true
dbms.connector.http.enabled=true
dbms.connector.https.enabled=true
dbms.jvm.additional=-XX:+UseG1GC
dbms.jvm.additional=-XX:-OmitStackTraceInFastThrow
dbms.jvm.additional=-XX:+AlwaysPreTouch
dbms.jvm.additional=-XX:+UnlockExperimentalVMOptions
dbms.jvm.additional=-XX:+TrustFinalNonStaticFields
dbms.jvm.additional=-XX:+DisableExplicitGC
dbms.jvm.additional=-Djdk.tls.ephemeralDHKeySize=2048
dbms.jvm.additional=-Djdk.tls.rejectClientInitiatedRenegotiation=true
dbms.windows_service_name=neo4j
dbms.jvm.additional=-Dunsupported.dbms.udc.source=docker
dbms.connector.bolt.listen_address=0.0.0.0:7687
dbms.connector.https.listen_address=0.0.0.0:7473
dbms.connectors.default_listen_address=0.0.0.0
dbms.memory.pagecache.size=512M
dbms.connector.http.listen_address=0.0.0.0:7474
wrapper.java.additional=-Dneo4j.ext.udc.source=docker
dbms.tx_log.rotation.retention_policy=100M size
dbms.directories.logs=/logs
HOME=/var/lib/neo4j
EDITION=community

# 配置db系统的时区
dbms.jvm.additional=-Duser.timezone=GMT+08
dbms.db.timezone=SYSTEM
db.temporal.timezone=Asia/Shanghai
EOF

修改neo4j数据持久化目录的权限

1
2
# 修改neo4j目录的权限
$ chown -R neo4j:neo4j /data/neo4j/*

通过dokcer启动neo4j服务

1
2
3
4
5
6
7
8
9
10
11
12
# 通过docker启动。
docker run -d --name neo4j \
--restart=always \
-v /etc/localtime:/etc/localtime \
-p 7474:7474 -p 7687:7687 \
-v /data/neo4j/data:/var/lib/neo4j/data \
-v /data/neo4j/conf:/var/lib/neo4j/conf \
-v /data/neo4j/logs:/logs \
-v /data/neo4j/import:/var/lib/neo4j/import \
-v /data/neo4j/plugins:/var/lib/neo4j/plugins \
-e NEO4J_AUTH=neo4j/dev-neo4j \
neo4j:3.5.26

修改neo4j默认数据库,不自定义数据库名称可以不用修改。

1
2
3
4
5
6
7
# 将默认数据库graph.db改为culture_test.db
$ vim /data/neo4j/conf/neo4j.conf
# 增加或者修改要使用的数据库名称
dbms.active_database=culture_test.db

# 重启neo4j容器
docker restart neo4j

浏览器访问http://ip:7474即可访问到web页面,账号密码前面设置了变量为neo4j/dev-neo4j,如果未设置默认为neo4j/neo4j

neo4j迁移

注意:数据迁移时neo4j的版本要一致,否则会出现错误。

neo4j-docker迁移参考文档

neo4j 官方文档有说明,使用 neo4j-admin restore / dump 导出和恢复数据库的时候需要停掉数据,否则会报数据库正在使用的错误:

1
command failed: the database is in use — stop Neo4j and try again

但问题是docker容器中是没办法停止neo4j进程的,现在进入容器shudown的话,neo4j容器会停掉(docker-run)或者重启数据库(docker-compose),所以这里采用的迂回的方法:

首先停掉neo4j的容器

1
$ docker stop neo4j

启动一个带有TTY新的容器,如果使用了数据持久化,需要使用-v参数挂载原有的data目录

1
2
3
4
5
6
7
# 通过docker启动。
$ docker run --rm --user root -it --name neo4j-import \
-v /data/neo4j/data:/var/lib/neo4j/data \
-v /data/neo4j/conf:/var/lib/neo4j/conf \
-v /data/neo4j/import:/var/lib/neo4j/import \
-v /data/neo4j/plugins:/var/lib/neo4j/plugins \
neo4j:3.5.26 bash

在这里执行导入导出的命令

docker下导出原有数据库

1
2
3
4
5
# 导出graph.db数据库
$ /var/lib/neo4j/bin/neo4j-admin dump --database=graph.db --to=/var/lib/neo4j/import/neo4j-graph.db

# 导出culture_test.db数据库
$ /var/lib/neo4j/bin/neo4j-admin dump --database=culture_test.db --to=/var/lib/neo4j/import/neo4j-culture_test.db

docker下导入数据

1
2
3
4
5
6
$ /var/lib/neo4j/bin/neo4j-admin load --from=/var/lib/neo4j/import/neo4j-graph.db --database=graph.db --force

$ /var/lib/neo4j/bin/neo4j-admin load --from=/var/lib/neo4j/import/neo4j-culture_test.db --database=culture_test.db --force

# 退出临时容器
$ exit

重新启动原有的neo4j容器即可看到迁移后的数据

1
$ docker start neo4j