由于服务器无法搭梯子访问外网,直接下载相关资源速度很慢。在PC上配置neo4j时,可能由于apple m1的问题,底层的java JNA会产生一些tmp文件不在universal wrapper中,导致neo4j server无法正常启动。所以不得不在服务器中配置,在本地中使用浏览器访问数据库。
版本选择
服务器版本
Linux version 4.15.0-041500-lowlatency (kernel@kathleen) (gcc version 7.2.0 (Ubuntu 7.2.0-8ubuntu3.1))
linux版本影响大不大我并不清楚。
neo4j版本
neo4j下载中心下载neo4j:
- 企业版enterprise
- 社区版community
- 桌面版desktop
我选的版本是4.2.4.
这里个人使用,无论服务器还是本地,选择community server就可以。桌面版完全可以用server版+浏览器代替,而且并不会避免配置server遇到的bug,相对的debug起来更费劲。
下载建议搭梯子。
java版本
neo4j要求使用openjdk11,但是亲测openjdk11无法正常运行neo4j。
也不要选最新的openjdk16,我没实际测试,但是很多博客说运行不了。
个人选择zulu集成的openjdk15版本zulu builds of openjdk。一般服务器就选择glibc v2.5 or higher的JDK版本,直接下载速度ok,梯子与否速度差别有限。
配置过程
首先说明JAVA配置需要有管理员权限,neo4j配置不需要管理员权限。
拷贝文件并解压
因为服务器的安全性原因,我这里使用scp命令远程传输java和neo4j文件:
scp 本地文件 用户名@服务器ip:工作目录
根据zulu下载网页给的how to install部分的指示,把java放到目标路径并解压
/usr/lib/jvm/
对于两份.tar压缩文件,用命令解压
tar xvf 文件名
配置JAVA环境变量
配置JAVA环境有几种方法,这里我们选择修改/etc/profile文件。
比如我们的JDK存放路径为:
/usr/lib/jvm/zulu15.29.15-ca-jdk15.0.2-linux_x64
我们将以下代码添加到/etc/profile的末尾,这里需要管理员权限,首先打开:
vim /etc/profile
然后添加
export JAVA_HOME=/usr/lib/jvm/zulu15.29.15-ca-jdk15.0.2-linux_x64
37 export CLASSPATH=.:$JAVA_HOME/lib/
38 export PATH=$JAVA_HOME/bin:$PATH
修改后source一下使其生效:
source /etc/profile
检测JAVA环境是否配置好:
命令:java -version
openjdk version "15.0.2" 2021-01-19
OpenJDK Runtime Environment Zulu15.29+15-CA (build 15.0.2+7)
OpenJDK 64-Bit Server VM Zulu15.29+15-CA (build 15.0.2+7, mixed mode, sharing)
命令:javac -version
javac 15.0.2
配置neo4j
需要配置neo4j的conf中deneo4j.conf文件内容,提供使用浏览器远程访问neo4j数据库的能力。
在neo4j的解压目录下打开conf文件:
# 修改前建议先备份
cp ./conf/neo4j.conf ./conf/neo4j.conf.backup
vim ./conf/neo4j.conf
参考文章,但仅保留我认为必要一些的修改项目:
#添加注释
#dbms.directories.import=import
# 设置JVM堆内存参数,数值仅供参考
# JVM最大堆内存越大越好,不能超过物理内存上限
dbms.memory.heap.initial_size=1g
dbms.memory.heap.max_size=2g
# 同上,数值仅供参考
dbms.memory.pagecache.size=5g
# 去掉注释,可以远程通过ip访问neo4j数据库
dbms.connectors.default_listen_address=0.0.0.0
# 去掉注释,允许从远程url来load csv
dbms.security.allow_csv_import_from_file_urls=true
# 修改254行,设置neo4j可读可写
dbms.read_only=false
完成配置后,进入neo4j目录中的bin:
# 启动neo4j
./neo4j start
# 查看状态
./neo4j status
#停止服务
./neo4j stop
# 启动console
./neo4j console
最后一个命令在许多debug场景用到,否则需要到log日志中去找错误。
使用neo4j
使用管理员权限启动neo4j,启动后在浏览器内输入http://IP:Port,具体打开那个端口要看服务器,这也是为什么启动命令用neo4j console更好。
用户名与密码默认都是neo4j,进入后需要修改密码。
到此在linux服务器上配置JAVA与neo4j的过程告一段落。
一些bug
JAVA环境变量配置不成功
修改/etc/profile后一定要source一下,另外确保路径正确。
2021-03-25 12:55:24.130+0000 ERROR Failed to start Neo4j on dbms.connector.http.listen_address, a socket address. If missing port or hostname it is acquired from dbms.default_listen_address.
...
该错误目前主要由两方面造成:
- conf文件配置问题:请按照配置neo4j说明;
- sudo权限问题:用su切换成root用户,or,自己账户配置sudo权限。
Exception in thread "main" java.lang.UnsatisfiedLinkError: /private/var/root/Library/Caches/JNA/temp/jna9871935425727491055.tmp: dlopen(/private/var/root/Library/Caches/JNA/temp/jna9871935425727491055.tmp, 1): no suitable image found. Did find:
/private/var/root/Library/Caches/JNA/temp/jna9871935425727491055.tmp: no matching architecture in universal wrapper
/private/var/root/Library/Caches/JNA/temp/jna9871935425727491055.tmp: no matching architecture in universal wrapper
at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2442)
at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2498)
at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2694)
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2627)
at java.base/java.lang.Runtime.load0(Runtime.java:768)
at java.base/java.lang.System.load(System.java:1837)
at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:1018)
at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:988)
at com.sun.jna.Native.<clinit>(Native.java:195)
at org.neo4j.internal.unsafe.UnsafeUtil.allocateMemory(UnsafeUtil.java:441)
这是我在本地配置neo4j时遇到的问题,目前无解,有待更进。