参考文章来自这篇文章,https://post.smzdm.com/p/735879/
但实际安装过程中发现不少不一致和没写清楚的地方,进行补充。当前时间是2020-5-15,使用的nextcloud版本是18.04,先说下这个版本在哪看,找这个找了半天,在概览里面。
以下为正文:
一、nextcloud私有云的docker安装
首先,在群晖docker应用的注册表里面,搜索并下载wonderfall/nextcloud的docker镜像,如下图所示:
和参考文不同,直接下载的第一个星最多的。
下载好nextcloud的docker镜像以后,我们在“映像”标签页中选择启动这个镜像,并在弹出的对话框中选择“高级设置”。这里我们对“卷”和“端口设置”里面的内容进行设置。
卷设置,这个和参考文不一样,参考文里是app2,估计这和他下载的镜像有关。我查到的配置参数是这样的
因此我的卷配置为,注意这里给外部的文件夹读写权限。
端口设置
成功后访问对应的18082端口
首次访问,要设置一个管理员账号和密码,同时需要配置数据库,默认的话是sqllaite,这里还有mysql和mariaDB,postageSql可以选择。
因为我的群晖中已经有MariaDB10 数据库,所以打算就用这个。
然后安装一个phpmyadmin来登陆这个数据库。数据的密码年代久远,已经忘了,试下和nas的密码,居然进来了,或者点击MariaDb也可以修改密码。这里还能查到端口号,后面有用。
使用phpmyadmin新建一个数据库,名称nextcloud
回到nextcloud页面填入新建的参数
注意还需要填数据库的端口号。然后这里又有坑,
软件是安装在docker里的,数据再nas里也就是宿主机内,这个网络不通。搜索这个问题的解决方法,网上一堆登陆到ssh里修个的办法,太麻烦,直接在phpadmini输入这句接可以了。
GRANT ALL PRIVILEGES ON . TO 'root'@'%'IDENTIFIED BY '你的密码' WITH GRANT OPTION;
然后耐心等待系统把套件下载安装完成。
安装完成后将地址映射到外网,通过外网访问,出现以下错误。
按提示是说要配置config/php文件,看了以下映射的文件夹内,是有这个文件存在。
打开配置文件里内容
加一条自己的域名
然后系统奔溃了,到处是坑。
这恶心的问题在于,当外部修改后的文件放入时读写权限发生了变化,nas里查看新config.php文件的权限。
在看一下其他配置的权限
所以要给改的文件重新读写权限设置。然后通过外网就可以访问了
----分割-- 以下安装插件
比较适合安装的插件是
- draw.io
- mind
- onlyoffice
先去nextcloud的cloud的商店下载下来,记住版本是的选择,我这是18.
https://apps.nextcloud.com/ 这个网站下载,速度有点慢。
下载完后放到刚才映射的app的文件夹里
如果映射没问题,那么在nextcloud的应用里就多处这四个插件。
启用这4个插件。
成功后在新建文件这就会有多两按钮,设置保存就可以了。
---onlyoffice
安装部分网上很多,就不描述,也是按docker安装的,已经能看到服务了。
在nextcloud的设置里,会多一个onlyoffice的设置按钮
这里又遇到问题,在内网的话可以正确连接到服务器,把服务器地址放外网一直提示连接失败。
加了上面那个也没用,在这git上有答案
https://github.com/ONLYOFFICE/onlyoffice-owncloud/issues/181
按红色 的临时方案解决,进入到onlyoffice的镜像里改这个值。
找到了,但是设备上没有vi,没法改。
曲线救国先把文件复制到映射文件夹,拿到外部改完了再放回去。
外部修改。
以上的所有操作证明都无效,这个问题网络上有很多的提问,但是一直没找到答案,经过2天的分析,终于明白了失败的具体原因,和我当前的组网有关系,下面先画一个目前组网的示意图。另外需要知道这两设备有两个过程要做:1.nextcloud连接onlyoffice 2.onlyoffice到nextcloud拉取文件
第一种情况:配置onlyoffice地址为192.168.x.x
服务地址配置192.168.x.x,能正常连接也能正常访问,数据不通过外部网络,不过这时候只能局域网自己玩玩,如果从外网的某一主机连入,会出现加载服务器错误,因为这时候配置的是192.168.x.x,此时外部发起的请求,onlyoffice还是会去连接192.168.x.x地址。
第二种情况:配置onlyoffice地址外部映射地址115.xxx.xx.xx
在这个情形会出现另一种情况,在局域网内我们通过192.168.xx.xx的地址去访问nextcloud和onlyoffice的服务都是可以正常的,但是在内网通过115.xxx.xx.xx地址访问,直接会找不到服务器。这里涉及到另一个问题,就是在局域网内通过自身公网访问自己,路由器在收到这类地址的时候好像是为了安全,丢弃这类数据的,这就导致了如果给nextcloud配置onlyoffice外网地址路由器这关都过不去。配置的时候会提示连接失败,网上很少改host的方法,对路由要求太高,容易弄乱网络。
配置外网地址,在外网访问会出现文件拉取错误。
这问题在当前网络环境下难以解决,只想到了两个办法
1.在另一台云主机安装配置onlyoffice
方案一很简单,网络示意如下图
这个情形下很好理解,不过在配置的时候有一个地方需要注意,在外网时没问题,但如果通过内外访问,会出现无法拉取文件的问题,查看onlyoffice的文件错误提示(文件在docker 镜像内部/root/onlyoffice/logs/documentserver/converter/out.log里)
[2020-05-15T19:56:40.301] [ERROR] nodeJS - error downloadFile:url=http://192.168.1.110:18082/apps/onlyoffice/empty?doc=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhY3Rpb24iOiJlbXB0eSJ9.IFkknNDAekyomrhunK1KvdH29qv89XNNYE1vfIxvkQk;attempt=1;code:ETIMEDOUT;connect:true;(id=conv_check_1570064549_docx)
也就是说在onlyoffice是根据访问过来的地址去生成文件的下载url,如果在外部访问生成的就是外部访问的url,针对这个问题nextcloud的有一个高级配置,可以解决。
Server address for internal requests from the Document Editing Service这个值相当于是告诉onlyoffice实际的访问地址是哪个,这样能保证内网外网都可以访问使用。
2.通过sockt 端口转发来实现
这个方式实际是绕过了内网不能访问自身公网地址web的问题,在尝试连接onlyoffice时走到外网,然后转到内网的onlyoffice,onlyoffice通过内部网络拉取文件。(这里使用了rinetd,安装简单)
这个配置上有一点区别,现在的nextcloud和onlyoffice在同个内网,因此在配置Server address for internal requests from the Document Editing Service时填的是内网地址192.168.x.x,文件通过内网拉取,连接走外网。
总结:两个方法都可以,问题解决了,成本增加了,本人目前使用方法2。
补充:经过研究,有了第三种解决方案
通过在NAS内建立dns服务器,来做域名欺骗,是内网机器在使用外网域名访问时候直接翻译成内网地址,网络逻辑如下
具体的做法:
1.现在nas里安装dns server,如果是其他系统可以使用类似的软件,我用的是群晖所以直接安装了。
2.配置dns server,增加一条master区域的域名,因为用的是ddns.net的域名,加这么一条。
3.配置一个A类解析,将我真正使用的域名解析为nas的地址,这样如果在内网使用域名访问就会解析为12.168.1.110
4.启动解析服务,不需要解析的还是都送网关解析
5.为nextcloud和onlyoffice配置dns域名,指向192.168.1.110.
第一次修改的时候通过登录到docker里面修改/ect/ resolv.conf 里的地址来做,每次一重启就丢失,然后网上说的其他固定resolv的方法在docker镜像里指令都没有。后来经过研究发现docker里的这个值是直接映射宿主机的,所以直接在宿主机上加了一条dns规则。
重启后docke就能按110的地址先进行域名解析。
6.重新配置参数,按如下配置就可以。
接上文,解决了网络部署的问题,就需要解决下字体的问题,这个好像是个通病,我现在安装的onlyoffice是5.5版本,确认过我们常用的宋体是没有的。
步骤一:
先把电脑中的字体拷贝出来,在windows/Fonts里。
步骤二:
因为是安装在nas的docker里,所以步骤比一般的linux安装麻烦一点,需要先把文件放到nas里,然后通过docker cp指令拷贝到docker里。所以,先把文件拷贝到nas的一个共享文件夹里,这里借用了共享的video文件夹,然后通过ssh指令登录到nas里。
如图,字体拷贝到nas里,输入命令
docker cp /volume1/video/download/Fonts/ 808322bcaa6d:/usr/share/fonts/truetype/custom
输入命令docker exec -it 808322bcaa6d /bin/bash 到docker里检查一下,然后再镜像内,进入/usr/bin目录 输入
但是这样操作后会有一个问题,原来的字体和新加入的字体都在,默认情况下中文宋体还是选择Calibri字体来加载,所以还是需要将核心库的字体也删除,重复上面的工作,核心字体在这里
/var/www/onlyoffice/documentserver/core-fonts全部删除 rm -rf *