Linux 安装 openkm 并解决 mysql 8 数据库兼容问题
安装
手动配置十分麻烦,并且官方貌似已经弃疗,给出的文档明显缺东西, 并且要求使用一个最近几个版本中早已不再发布的openkm-6.x.x-community-tomcat-bundle.zip
。 因此奉劝大家不要以身试法。
现在的方法是,安装openjdk 8
, 然后下载官方给的OKMInstaller.jar文件,然后:
java -Dhttp.proxyHost=192.168.1.1 -Dhttp.proxyPort=7777 -Dhttps.proxyHost=192.168.1.1 -Dhttps.proxyPort=7777 -jar OKMInstaller.jar
相关信息
用户问题:运行这个账号显然是不应该有sudo
,但上面这一句又必须是root
权限,否则没法自动配置服务。 我的方法是建好一个没有sudo
的openkm
账号,用其他账户sudo bash
,然后把OKMInstaller.jar
放到openkm
账号的家目录下执行, 这样最后生成的服务是在openkm
账号下运行的。
猜想,先赋予sudo
身份,安装完了再删掉应该也行。
因为过程中是从sourceforge
下载,务必自己找个网速好的地方。如果已经很好则可以去掉上面命令中关于proxy
的东西。
除了网速比较慢,没什么坑,按说明搞就行了。
安装完成之后,就已经设置好了开机自启,不用自己折腾。细节可以systemctl status openkm
查看。
对数据库没有偏好的话,不要用mysql
,否则必须解决下文的问题。并且mysql
也不是默认值。
mysql 8 数据库兼容问题
Ubuntu 仓库的mysql
现在已经是 8 版本了,正常思维是买新不买旧。 但是,mysql 8
配合openkm
有一个十分诡异的问题,就是数据间歇性无法连接或者只能缓存在内存中(重启就没)。
具体表现为,按上面的方法装好之后,第一次登陆是 OK 的,甚至可以新建账号并生效(没有尝试上传文档)。 然而,尝试重启服务器验证开机自启情况时,发现网页能打开,但报错:

重建数据库链接
搜了一下,官方论坛和文档有要求在$TOMCAT_HOME/OpenKM.cfg
中修改配置的说法。 但是这个操作实际上十分讲究。
首先,要关闭tomcat
,但似乎不能用./bin/shutdown.sh
,这个可能会与systemd
的自动重启相冲突, 使得后续命令无法在tomcat
停机的安全状态下执行,造成混乱。 得用systemctl stop openkm
。
第二步,删除$TOMCAT_HOME/repository
目录。 由于是新实例,没去深究删了丢数据不,总之不删的话页面会有null乱码或者其他奇怪问题。
第三步,这时候才需要修改$TOMCAT_HOME/OpenKM.cfg
:
# hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
# hibernate.hbm2ddl=none
# 改为
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.hbm2ddl=create
注意,这个文件中的hibernate.hbm2ddl=create
这一行,会在修改后第一次成功建立连接之后被自动改回来。 不用管它,使用正常就可以。
以上操作完成后,如果正常则皆大欢喜。 如果还不正常,就需要先做完下面这一步,然后最好是回过头来把这一步再重复执行一遍。
mysql 的认证方式
经过排查和官方文档提示, 其他造成不正常的原因还包括mysql 8
的新授权机制的锅,会静默要求有些账户采用新的加密方式登陆。 出现这一问题的特征是:使用root
登录进去,use mysql
然后:
mysql> select User,plugin,authentication_string from user;
+------------------+-----------------------+------------------------------------------------------------------------+
| User | plugin | authentication_string |
+------------------+-----------------------+------------------------------------------------------------------------+
| debian-sys-maint | caching_sha2_password | |
| mysql.infoschema | caching_sha2_password | $asdf$005$ |
| mysql.session | caching_sha2_password | $A$asdf$ |
| mysql.sys | caching_sha2_password | $A$asdf$ |
| openkm | caching_sha2_password | $A$asdf$ |
| root | mysql_native_password | * |
+------------------+-----------------------+------------------------------------------------------------------------+
可以看到除了root
,其他账户都是caching_sha2_password
登陆,这个影响客户端而不影响操作方式。 用自带的mysql
客户端的话其实感受不到区别,但JDBC
就会出错。
修正方式是:
ALTER USER 'openkm'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
然后openkm
这个账户的plugin
列就会变成mysql_native_password
,然后重启服务来检查。
记得再多重启两次测试一下。
相关信息
也不排除一种可能:这个错误就我一个人遇见,因为我是先尝试手动安装,已经建好了数据库账户,再使用官方安装器安装的。