前言:之前为了工作方便,在团队的小局域网里用台小主机装Windows Server系统部署了Onlyoffice工作区(Workspace)的社区版。最近终于整了台服务器,就想着把当前的工作区迁移到服务器上去,毕竟服务器的稳定性不是主机所能比拟的,但是这台服务器是一台龙芯3C5000L处理器的国产服务器,Onlyoffice官网现有的所有版本工作区和协作空间全都无法部署上去,
本着不折腾就难受的想法,在查阅了一些资料后,决定用自己的三脚猫Linux水平来试一试。
修订版本:V1.2(2025-06-07)
因为旧世界版的Nextcloud里附带的Apache组件漏洞太多,加上旧世界软件生态已经不如新世界,所以近期正在摸索向新世界迁移,迁移完毕后也会第一时间写好记录。
配置环境
服务器CPU:龙芯3C5000L(双路/Loongarch64架构) 详细参数戳这里
内存:128GB DDR4
硬盘:略
一、虚拟机方案(弃用)
提示:如果需要直接看最终解决方案,请直接跳转到第二节Docker方案
1.系统选择
这台服务器到手的时候内置的是中科方德高可信服务器操作系统,但是是试用版,所以果断弃用。然后选用了麒麟信安的服务器系统,麒麟信安服务器系统3.5.2是目前能在官网唯一能下载到适配loongarch64架构的系统,下载,导入到服务器中,安装完毕。
2.QEMU模拟X86_64?
通过查询相关资料,知道了loongarch64架构是可以使用qemu创建虚拟机的,而且还支持X86_64架构的模拟。初步设想是,安装完后,是不是可以通过在X86架构下的虚拟机中部署Onlyoffice工作区?这样就可以将学习成本压缩到最低。
再说了,就算loongarch64架构模拟X86的效率再低,也应该架不住我双路32核和128G的运行内存啊,力大还能飞砖呢 。
于是决定按照这个思路,开干!
3.开始踩坑(麒麟信安服务器系统)
3.1.QEMU版本问题?
麒麟信安的软件源中有编译好的qemu-6.2.0-70.ky3_5.kb3.loongarch64.rpm,用DNF指令直接安装即可,没网的话就下载导入再dnf install就行,但是如果只安装QEMU的话是只能模拟loongarch64架构的,需要额外安装麒麟信安源里的qemu-system-x86_64-6.2.0-70.ky3_5.kb3.loongarch64.rpm才能模拟X86架构,安装完毕后,为了测试,导入了Windows Server 2012 R2和CentOS 7.9的镜像。
使用系统自带的虚拟机管理器,先新建了CentOS的虚拟机,分配8个核,16G运存,开始安装,然后……就卡死了,跑了几句代码,就跑不动了,虚拟机管理器也根本没办法看到CPU使用情况,麒麟信安系统也没有可视化的资源查看工具,很不方便。
于是琢磨着,是不是因为QEMU版本太低了?毕竟QEMU官网最新版已经更新到9.2了,新版应该都集成了很多新特性,没准性能表现就会好很多。
于是,按照B站kingclark的教程,从QEMU官网下载QEMU9.2版本,开始编译安装。
3.2.configure卡住
一开始使用./configure的时候,遇到的缺失依赖和视频里的差不多,都可以通过麒麟信安软件源补齐,直到卡在了这么一句话上:
Library FDT found : NO
通过百度和Bing的交叉搜索,确定应该是缺失libfdt这个链接库,查了一下,麒麟信安软件源是有的:python3-libfdt-1.6.1-2.kb1.ky3_5.loongarch64.rpm
安装完,依旧报错,百思不得其解。
于是抱着瞎猫碰死耗子的心态又跑到PyPI去下载了fdt 0.3.3,用pip install安装,装完再跑./configure,还是报错,开始头大。
各种搜索后,开始怀疑是不是链接库没链接上,去/lib64下看了一眼:
libfdt.so.1 -> libfdt-1.6.1-2.so.2
这不是有吗,怎么就是找不到呢?
思索半天,难道是这个so.1有问题?
于是加了一个软链接:
ln -sf libfdt-1.6.1-2.so.2 libfdt.so
再跑./configure,不报错了。
3.3.make卡住
本来开始make的时候觉得应该没啥问题了,结果在编译到大概700的时候,报了这么个错:
FAILED: libqemuutil.a.p/bufferiszero.c.o
(……)
/tmp/xxxxx.s:Assembler messages:
/tmp/xxxxx.s:xxxx: 错误:no match insn: vld $vr0,$r14,0
/tmp/xxxxx.s:xxxx: 错误:no match insn: vst $vr0,$r14,0
/tmp/xxxxx.s:xxxx: 错误:no match insn: xvld $xr0,$r13,480
(……)
百度和bing完全搜不到,CSDN搜了一下,有个类似的报错:龙芯3a5000部署nacos 1.4低版本方法
看了半天,貌似也不适用于我现在的情况。
最后通过各种资料查询,问题大概率在gcc上,麒麟信安源上最新的gcc版本是10.3.1,我猜测是gcc版本低的原因导致make失败。
3.4.make又卡住
那我就去编译个旧版本试试?
既然9.2.0不行,那我就试一试9.1.2。
9.1.2报错,报错原因同9.2.0。
9.0.4报错,报错原因同9.2.0。
8.2.8报错,报错原因同9.2.0.
7.2.15……在700多的时候居然没报错了,这让我看到了一丝希望,看来真是gcc版本问题。
没想到,在1000多时候又卡了。
fatal error : libfdt.h :No such file or directory
不是哥们,怎么每次报错都有你啊?装也装了,链也链了,还是有问题。
搜索一下,依旧毫无结果。思索良久,算了,弃了弃了。
因为这个make排错花了很长时间,也不想花时间耗在从头编译新版gcc上,最终决定弃用麒麟信安系统,改用龙芯中科自家的Loongnix系统继续配置。
4.继续踩坑(Loongnix系统)
4.1.真·毛坯房
本次安装的是龙芯开源社区里的Loongnix-server-23.1系统,安装时默认附带的GUI是GNOME。
不过让我比较疑惑的是,安装选项里明明有DDE的选项,我选完DDE安装好却是命令行界面,不选DDE的话反而是GNOME,没看懂是什么操作。
而且,不知道是GNOME的原因还是Loongnix的原因,GUI界面操作起来卡卡的,而且GNOME的设置里也读不到CPU信息……(lscpu倒是能读)
4.2.make成功了,但是代价是什么?
由于Loongnix的软件源都比较新,gcc也来到了12.3.0版本,这时候再次使用./configure和make就相当丝滑了,解决了基础的依赖问题,全程没有任何报错。
最后make install,完毕。打开虚拟机管理器,开始操作。
报错,没得网桥。
参考brctl 命令,建个网桥。
打开虚拟机管理器,继续。
然后选择CentOS,一气呵成,结果……
一样的卡
为了排除CentOS本身的问题,又换上了Windows Server 2012 R2的镜像继续上,并且直接分配了16核,32G运存,进了安装界面后,不仅卡,而且直接自己读不到自己的安装程序了。
仔细想了想,没有KVM加速,又是跨架构模拟,确实是巧妇难为无米之炊。
为了自己有限的水平不至于在虚拟机这棵树上吊的太死,于是毅然决然决定换个方向。
二、Docker方案
1.换系统!
在查询资料的同时,发现了几个不错的网站,推荐想详细了解loongarch生态的同学们收藏起来:
龙芯爱好者社区、LA UOSC社区、咱龙了吗?
经过各种研判,最后决定还是换Docker方案,一来是loongarch64生态已经有了不少兼容的容器,二来是使用Docker方案的话,容器相互独立,对系统的影响可以降到最小,又方便后期运维。
至于系统,Loongnix就是有一种说不上来的、用着怪怪的感觉,所以换个开源社区里比较成熟的发行版,然后就让我找到了阿里云家的Anolis OS 8.9(龙蜥OS)
注:因为部分原因,本次全程选用的所有系统基本都是「旧世界」软件体系(除了Loongnix-server-23.1不确定是哪个世界的),但不影响大致的流程,docker方案是新旧世界通用的。
有关“旧世界与新世界”体系的详细解释,可以戳这里看
安装完Anolis OS后,选用DDE作为GUI方案,这个相比Loongnix的话就能正常安装用了,深度的东西还是符合国人使用习惯的,好使!
2.安装Docker
Docker部分的教程主要参考了这篇文章
关于安装Docker应该不需要多说吧,直接安装Anolis OS软件源里编译好的docker就ok
dnf install docker
没网/没离线源的话,这里有RPM包指北:
docker-20.10.16-2.an8.loongarch64.rpm
docker-client-20.10.16-2.an8.loongarch64.rpm
docker-engine-20.10.16-2.an8.loongarch64.rpm
如果还缺啥依赖,可以去Anolis OS的在线软件源里边找边补,这里不多赘述了。
2.安装Docker-Compose
Anolis OS软件源里没得Docker-Compose,所以还得自己去找适配的版本,不过Github就有:compose-loongarch64,从Releases里下载最新版的docker-compose-linux-loongarch64就行。
注:该Docker-Compose是针对旧世界(Abi1.0)适配的版本,新世界可能不适用
把这个文件拷到服务器的/usr/local/bin/里,并将文件改名为docker-compose,给个执行权限:
chmod +x /usr/local/bin/docker-compose
验证一下docker-compose能不能用:
docker-compose -v
如果返回版本号就说明Docker-Compose装好了。
3.下载Docker镜像到本地并导入服务器
因为要进行离线部署,所以需要整一台能连接互联网的、安装了docker的电脑来下载镜像,比如我的电脑是Windows的,去docker官网下载最新的docker-desktop安装就行。
docker-desktop安装完,看一下主界面的左下角,这样就是正常启动了。
对于支持loongarch64架构的容器,龙芯官方提供了一个镜像仓库,进去搜就行。
我们需要的只有三个:onlyoffice/documentserver、mariadb和nextcloud,统统下载最新版就ok。
注:nextcloud支持的数据库方案有SQLite、MySQL、Mariadb和PostgreSQL,这个可以根据自己实际情况酌情选用,这里使用Mariadb仅作为示例。
截至这篇文章写完时,镜像仓库中三个镜像的最新版分别是:
nextcloud:19
mariadb:10.11.7
onlyoffice/documentserver:7.1.1.76
虽然都算不上最新,但是有的用肯定比没得用强。
下载方法:在终端里分别输入这三行(最好指定版本号,别用默认的latest,龙芯镜像仓库里nextcloud和documentserver都没设定latest,会报错)
docker pull cr.loongnix.cn/onlyoffice/documentserver:7.1.1.76
docker pull cr.loongnix.cn/library/mariadb:10.11.7
docker pull cr.loongnix.cn/library/nextcloud:19
下载完可以在Images里看到这三个镜像,还专门标注了LOONG64架构。
逐个打包就行:
docker save -o (这里是你的导出路径+导出的tar文件名).tar cr.loongnix.cn/onlyoffice/documentserver:7.1.1.76
docker save -o (这里是你的导出路径+导出的tar文件名).tar cr.loongnix.cn/library/mariadb:10.11.7
docker save -o (这里是你的导出路径+导出的tar文件名).tar cr.loongnix.cn/library/nextcloud:19
打包完就可以把这三个tar文件导入到服务器里了。
进入服务器导入tar的路径,打开终端,导入服务器里的docker:
docker load -i (导入的tar文件名).tar
等待导完。
4.创建Docker映射文件夹(建议)
为了方便后期运维和数据备份,建议在本地创建几个映射点(多么痛的领悟),但不是必须。
4.1.映射Nextcloud相关文件
mkdir -p /(你需要存放的路径)/nextcloud/db # 存放nextcloud相关数据库文件
mkdir -p /(你需要存放的路径)/nextcloud/app # 存放nextcloud相关插件,相关的php配置文件也在里面
4.2.映射onlyoffice相关文件
mkdir -p /(你需要存放的路径)/onlyoffice/DocumentServer/logs:/var/log/onlyoffice
mkdir -p /(你需要存放的路径)/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data
mkdir -p /(你需要存放的路径)/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice
mkdir -p /(你需要存放的路径)/onlyoffice/DocumentServer/db:/var/lib/postgresql
5.创建Docker-Compose脚本并启动容器
这个文件最好找一个能记得住的路径存放,后面如果有什么需求要重新部署的话还是相当方便,比如我就是直接存在nextcloud文件夹里。
cd /(你需要存放的路径)/nextcloud/
vim docker-compose.yaml
然后照着下面的内容复制就行,可根据备注酌情自定义:
version: '2'
#volumes:
#nextcloud:
#db:
services:
db:
image: cr.loongnix.cn/library/mariadb:10.11.7 #这里要输完整的镜像名,不清楚自己镜像名的可以用docker images指令看一下
restart: always #这里用于定义跟随Docker启动自启容器,如果没有特殊要求建议加上
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
networks:
- nextcloud_netbridge
volumes:
- /nextcloud/db:/var/lib/mysql #这里定义映射点,冒号左边的路径就是上一步创建的映射文件夹
environment:
- MYSQL_ROOT_PASSWORD=123456 #数据库ROOT账户的密码,可自定义
- MYSQL_PASSWORD=nextcloud #数据库User账户的密码,可自定义
- MYSQL_DATABASE=nextcloud #数据库的名字,可自定义
- MYSQL_USER=nextcloud #数据库User账户的的名字,可自定义
app:
image: cr.loongnix.cn/library/nextcloud:19 #同上,检查一下镜像名
restart: always
ports:
- 8080:80 #将容器里的80端口映射到左边的物理机8080端口,用于访问nextcloud,物理机的端口可自定义,有需要可以改成其他
networks:
- nextcloud_netbridge
links:
- db
volumes:
- /nextcloud/app:/var/www/html #自定义映射点,同上
environment:
- MYSQL_PASSWORD=nextcloud #如果上面有修改,这里记得要和上面一致
- MYSQL_DATABASE=nextcloud #如果上面有修改,这里记得要和上面一致
- MYSQL_USER=nextcloud #如果上面有修改,这里记得要和上面一致
- MYSQL_HOST=db
networks:
nextcloud_netbridge:
driver: bridge
先按Esc,再:wq,退出vim编辑器。
这时候就可以直接执行这个docker-compose脚本了
docker-compose -f /(自定义的路径)/nextcloud/docker-compose.yaml up -d
等待两个容器创建并启动。
如果不确定的话,这里可以用docker ps
指令检查一下容器是否启动。
然后打开浏览器,输入http://你的ip:8080
访问nextcloud,看看是否能正常访问。
5.1.踩坑记录(可略过)
刚开始配置到这里的时候,我并没有给服务器连到局域网里,想着先用localhost应付一下,结果后面牵引出了一堆有关用了localhost或是127.xx.0.1所引发的问题,所以建议配置到这里的话有条件一定要把服务器接入到局域网里,用局域网ip来继续配置。
5.1.1.通过不被信任的域名访问
第一个踩坑情况就是第一次连接nextcloud并配置的时候域名用的localhost来配置,后面再使用局域网ip连接就会报这个错:
解决方案:
使用docker exec -it (容器ID) /bin/bash
指令进入容器终端里,找到nextcloud的配置文件/var/www/nextcloud/config/config.php(不确定是不是这个路径了,反正能找得到)
不知道容器ID就用docker ps
看一下。
config.php里面有个参数是‘trusted_domains’ ,用nano编辑器按照格式配置被信任的域名就行:
'trusted_domains' =>
array (
0 => '你访问用的ip:端口',
1 => '你的域名/localhost:端口(可选)',
),
保存,退出,刷新nextcloud页面,能够正常访问。
6.Docker安装Onlyoffice-DocumentServer
输入以下命令,配置并启动Onlyoffice-DocumentServer容器。
这里也能用Docker-Compose配置
docker run -i -t -d -p 6060:80 --restart=always \ #这里6060的onlyoffice的端口可以自定义
-v /(前面创建的路径)/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
-v /(前面创建的路径)/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
-v /(前面创建的路径)/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
-v /(前面创建的路径)/onlyoffice/DocumentServer/db:/var/lib/postgresql --name onlyoffice --restart="always" cr.loongnix.cn/onlyoffice/documentserver:7.1.1.76 #记得检查一下镜像名
用docker ps
检查一下容器是否启动。
启动之后输入http://你的ip:6060
,出现“ONLYOFFICE Docs Communituy Edition installed”的提示就代表部署成功了
7.配置nextcloud连接onlyoffice
去nextcloud的插件中心下载onlyoffice连接器:https://apps.nextcloud.com/apps/onlyoffice
根据nextcloud的版本下载对应版本的连接器,比如我们部署的nextcloud版本是19,那下载6.4.2的连接器就行
把下载好的onlyoffice.tar.gz导入到服务器/映射的目录/nextcloud/app/apps
里,解压缩
tar -zvxf onlyoffice.tar.gz
如果你配置时使用的系统账户不是root用户,可能需要再给个权限
chown -R root:root onlyoffice
进入Nextcloud,点击右上角的头像→应用,在“已禁用的应用”处可以看到安装上去的onlyoffice连接器,点击“启用”,再点击右上角的头像→设置,左边一栏里找到ONLYOFFICE,输入ONLYOFFICE Docs地址:http://你的ip:6060
这里如果用的是localhost:6060的话又会出现好几个问题,而且我尝试解决了半天也没能解决,所以一定一定要用局域网ip
单击保存按钮,右上角出现设置成功提示,下面出现文档详细设置的时候,就代表配置已经成功,回到nextcloud的网盘界面,就可以在局域网里线协作office文档了。
三、总结
虽然说前后花了我大概七天时间吧,但是还是很欣慰配置成功了。
同时也惊叹于龙芯目前日益丰富的生态,和几年前完全没法同日而语。
信创的道路,就像《黑神话:悟空》制作人冯骥所说:“踏上取经路,比抵达灵山更重要。”
不过,取经路已至,灵山还会远吗?