私有网盘+在线文档:内网离线搭建NextCloud+OnlyOffice详细指南
背景
最近因为工作需要,一堆内网的虚拟机之间需要频繁cp一些文件、视频等,因为都是麒麟系统,有桌面版有服务器版,用scp这种工具也是比较繁琐,索性就搭建一套内网用的共享网盘和在线文档,既方便了自己,也方便了团队。
因为多年前使用过NextCloud,还比较好用,所以就继续用它吧,但这次添加了在线文档(OnlyOffice),没想到还是有一点坑的,搞一篇文档记录,方便以后有此需求的朋友们能快速搭建使用起来。
开始部署
如何选择部署方案?
单机
我这里因为使用人并不会特别多,也不会保存特别多的重要数据,并没有做服务和数据方面的高可用考虑,所以直接就采用docker部署,快捷,高效。
但需要注意,NextCloud官网给出了两种docker单机部署的方式,需要擦亮眼睛:
第一种:
All-In-One(AIO),顾名思义,就是将所有NextCloud所需的所有组件(或者逻辑)全部封装到了这一个镜像中,只需要自己手动的启动这一个服务,就OK了,但是这里有一个很坑的点,就是部署AIO的这台机器,必须可以访问外网,因为当AIO启动后,并不是说只会有这么一个容器运行,而是它服务内部会再有逻辑去拉取新的镜像,启动新的服务容器,或下载某些文件等,如果你的机器不可以连外网,那AIO将不能使用,所以如果是纯内网的环境,AIO这种方式是不可取的。
第二种:
就是正常的docker run或者docker-compose来运行nextcloud的镜像,这个不会再次依赖外网,只需你将使用到的镜像全部提前下载下来就可以,本次也是采用这种方式。
高可用集群
如果你有比较多的重要数据,且保存的时间也不会短,或者使用的人会很多,那建议将高可用考虑进去:
1.可以使用k8s或其他方式部署多个nextcloud和onlyoffice,用来保证服务的高可用性,需要注意,它们得用同一套数据存储
2.数据层面,mysql得搞个集群,如果用Redis了也搞个主从,另外存储再引进来对象存储(oss、ceph、minio任你挑),来保证不会出现数据丢失
Docker方面
Docker和docker-compose的部署就不再赘述了,大家都轻车熟路。
但是由于现在镜像拉取被禁了,所以很多人拉不到镜像,这个我认为要简单过一下,我这里用过的有两种方式:
第一种:配置镜像加速器(中转站)
把加速器配到docker engine中,也别一个两个了,全加:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://mirror.baidubce.com",
"https://docker.1panel.live",
"https://2epe3hl0.mirror.aliyuncs.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
第二种:如果你可以FQ的话
给docker设置http/https代理,然后打开梯子,就可以直接pull了。(地址、端口有变的话,记得改)
配置好重启一下,就可以了。
第三种:如果前两种方式你都不行,恰巧你还是x86架构的机器,那本次使用到的镜像可以直接来网盘这里取
链接: https://pan.baidu.com/s/1WKCywb4cKTFj9uDHSHe4Wg?pwd=24fc 提取码: 24fc
部署
先把最终用到的yaml文件提供出来:
vim docker-compose.yaml
version: '3'
volumes:
nextcloud_volume:
db_volume:
redis_volume:
office_volume:
services:
db:
image: mariadb:10.11
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
networks:
- nextcloud_netbridge
volumes:
- nextcloud_volume:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=nextcloud@1234
- MYSQL_PASSWORD=nextcloud@1234
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
redis:
image: redis:alpine
command: redis-server /etc/redis/redis.conf
restart: always
volumes:
- redis_volume:/data
- ./redis.conf:/etc/redis/redis.conf
environment:
- REDIS_PASSWORD=nextcloud@1234
networks:
- nextcloud_netbridge
app:
image: nextcloud:latest
depends_on:
- db
- redis
restart: always
ports:
- 9090:80
networks:
- nextcloud_netbridge
links:
- db
- redis
- onlyoffice
volumes:
- db_volume:/var/www/html
environment:
- MYSQL_PASSWORD=nextcloud@1234
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
- REDIS_HOST=redis
- REDIS_HOST_PASSWORD=nextcloud@1234
# 以下配置是nextcloud配置https需要设定的,如果不配可注释,但是nextcloud推荐配,不配有些限制打不开。
# https代理信任的ip地址,配置为nginx服务器ip
- TRUSTED_PROXIES=10.44.61.172
# https重写地址,配置为nginx服务ip+https的端口
- OVERWRITEHOST=10.44.61.172:9091
# 重写协议,https
- OVERWRITEPROTOCOL=https
# 客户端url,配置nginx https完整的访问地址
- OVERWRITECLIURL=https://10.44.61.172:9091
# 连接的地址,我这注释掉了,貌似没影响
#- OVERWRITECONDADDR=^10\\.44\\.61\\.172$
onlyoffice:
image: onlyoffice/documentserver:latest
restart: always
depends_on:
- db
- redis
volumes:
- office_volume:/var/www/onlyoffice/Data
ports:
# nextcloud如果使用的https,onlyoffice也要是https,80端口其实不用映射出来
- 9080:80
- 9443:443
environment:
# 打开认证
JWT_ENABLED: 'true'
JWT_SECRET: 'onlyoffice@1234'
networks:
- nextcloud_netbridge
networks:
nextcloud_netbridge:
driver: bridge
vim redis.coinf
port 6379
bind 0.0.0.0
maxmemory 8192mb
maxmemory-policy allkeys-lru
requirepass nextcloud@1234
timeout 0
databases 16
准备完毕后,直接启动即可:
docker-copmse up -d
配置https
NextCloud配置https
想配置https,必须要有证书,可以购买、可以阿里云申请个临时免费的、也可以搞个自签名的,长期内网的话,自签名的就够了:
mkdir -p /data/nextcloud/ssl/ && cd /data/nextcloud/ssl/
openssl genrsa -out nextcloud.key 2048
openssl req -new -key nextcloud.key -out csr.csr
openssl x509 -req -days 3650 -in csr.csr -signkey nextcloud.key -out nextcloud.crt
随后直接使用nginx来配置个反向代理即可,配置如下:
vim /etc/nginx/conf.d/nextcloud.conf
# nextcloud
server {
listen 9091 ssl http2;
listen [::]:9091 ssl http2;
#server_name yourdomain.com;
ssl_certificate /data/nextcloud/ssl/nextcloud.crt;
ssl_certificate_key /data/nextcloud/ssl/nextcloud.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!DHE:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
client_max_body_size 0;
client_body_timeout 3600s;
fastcgi_buffers 64 4K;
client_body_buffer_size 512k;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;
location / {
proxy_pass http://10.44.61.172:9090/;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 1800;
proxy_send_timeout 1800;
proxy_read_timeout 1800;
proxy_buffering off;
send_timeout 1800;
}
location ^~ /.well-known {
# The rules in this block are an adaptation of the rules
# in `.htaccess` that concern `/.well-known`.
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
location /.well-known/pki-validation { try_files $uri $uri/ =404; }
# Let Nextcloud's API for `/.well-known` URIs handle all other
# requests by passing them to the front-end controller.
return 301 /index.php$request_uri;
}
}
以上的配置都是必要的,最好不要进行删减,其中涉及了上传大小限制的修改、timeout的修改以及一些官方推荐要加的配置。
nginx -t
systemctl reload nginx
重新加载nginx配置后,理论上就可以通过https://ip:9091(没改端口的话)来访问nextcloud,并配置账号密码了:
OnlyOffice配置https
OnlyOffice配置https较为简单,只需docker中创建的office_volume卷下创建一个certs目录,然后将证书放置这个目录下,再重启服务即可。
例如,我的office_volume目录是:
# docker volume inspect nextcloud_office_volume
[
{
"Labels": {
"com.docker.compose.project": "nextcloud",
"com.docker.compose.version": "1.22.0",
"com.docker.compose.volume": "office_volume"
},
"Mountpoint": "/data/docker-home/volumes/nextcloud_office_volume/_data",
"Name": "nextcloud_office_volume",
}
]
那我仅需要:(证书和私钥必须是onlyoffice.crt和onlyoffice.key,注意是必须,不然没法识别,或者修改onlyoffice镜像中的nginx https的配置,修改证书和私钥的名称)
cd /data/docker-home/volumes/nextcloud_office_volume/_data
mkdir certs && cd certs
# 生成证书
openssl genrsa -out onlyoffice.key 2048
openssl req -new -key onlyoffice.key -out csr.csr
openssl x509 -req -days 3650 -in csr.csr -signkey onlyoffice.key -out onlyoffice.crt
创建完毕后,重启onlyoffice服务,访问https://ip:9443(如果你没改的话),出现以下页面,表示配置成功:
NextCloud配置OnlyOffice
nextcloud和onlyoffice都部署完毕后,需要在nextcloud下配置一下onlyoffice才可以识别。
首先要下载onlyoffice插件,并放置到nextcloud的指定位置,插件下载地址:https://apps.nextcloud.com/apps/onlyoffice
下载对应的版本,如果你是用的我提供的镜像,那就是30版本,下载9.5.0就可以,需要梯子,当然,包我也已经放置到上边的网盘中,可以直接拿。
加载onlyoffice插件
需要将下载后的插件解压到docker的中创建的db_volume卷下的apps目录下就可以了:
# docker volume inspect nextcloud_db_volume
[
{
"Labels": {
"com.docker.compose.project": "nextcloud",
"com.docker.compose.version": "1.22.0",
"com.docker.compose.volume": "db_volume"
},
"Mountpoint": "/data/docker-home/volumes/nextcloud_db_volume/_data",
"Name": "nextcloud_db_volume",
}
]
解压:(记得改为自己的目录路径)
tar xf onlyoffice.tar.gz -C /data/docker-home/volumes/nextcloud_db_volume/_data/apps/
# 验证
ls -d /data/docker-home/volumes/nextcloud_db_volume/_data/apps/onlyoffice
配置onlyoffice地址
以上操作完成后,进入nextcloud界面,点击右上角头像-->应用-->你的应用-->搜索onlyoffice:
能搜索到应用就表示插件加载成功,没有的话重启一下nextcloud服务,再来看一下。
加载好插件后,点击右上角头像-->管理设置-->ONLYOFFICE-->配置onlyoffice的https地址和密码(密码是上边compose文件中设定的):
点击保存,出现onlyoffice的设置界面,就表示配置成功了。
正常情况下,到此就算配置完成了,但是因为我们使用的是自签名证书,所以程序会出现不信任的情况,还要做几点修改,详看FAQ。
一定要看的FAQ
NextCloud打开在线文档时报错下载失败
onlyoffice服务报错:Error: self signed certificate
这个问题是因为我们的https证书是自签名的,有两种解决方案,第一种是跳过证书校验,第二种是买CA认证的证书,相信你会选择第一种:
# 进入onlyoffice容器内
docker exec -it nextcloud_onlyoffice_1 bash
# 修改默认配置文件将"rejectUnauthorized": true 修改为 "rejectUnauthorized": false
nano /etc/onlyoffice/documentserver/default.json
...
"requestDefaults": {
"headers": {
"User-Agent": "Node.js/6.13",
"Connection": "Keep-Alive"
},
"gzip": true,
"rejectUnauthorized": false
},
...
# 保存,退出,重启 onlyoffice 和 nextcloud 服务
docker-compose restart app onlyoffice
你也可以将文件映射到宿主机,方便保存和修改。
到此网盘功能和在线文档功能就可以正常使用了,开始吧:
分享的文档,不能复制共享链接?
我分享了一个文件或者目录,但是点击复制共享链接没反应?
这说明你NextCloud配置的https并没有生效,或者说你是通过http访问的,所以不能复制,想复制的话,必须https!
上传大文件时报错文件过大或超时?
想要上传大文件的话需要做一些参数调整优化:
1.一个是nginx反向代理中的客户端包大小和超时时间,这个如果直接复制的我上边的nginx配置,那就已经添加好了
2.第二个要配置PHP的上传大小限制,要在nextcloud服务的volume中,有个.user.ini文件,我的在/data/docker-home/volumes/nextcloud_db_volume/_data/.user.ini,添加以下配置:
php_value upload_max_filesize 16G
php_value post_max_size 16G
php_value max_input_time 3600
php_value max_execution_time 3600
保存后,重启nextcloud服务。
其他的一些奇奇怪怪的报错?
其他的一些报错,例如nextcloud配置https后还是访问不到啊,或者是nextcloud链接onlyoffice时一直报错地址连接错误等等。
这些问题首先要查看对应容器的日志,根据具体报错再进一步排查。
我在部署过程中也有遇到过,是因为我对参数的理解不太正确,或者其他误操作,但是在做上文总结时已经规避,如果你是按照这篇文档来一步步操作的话,理应是没有什么问题。
当然,如果真的遇到了其他问题,欢迎评论区留言一起解决。
私有网盘+在线文档:内网离线搭建NextCloud+OnlyOffice详细指南的更多相关文章
- PyQt(Python+Qt)帮助文档官网及文档下载
一.帮助文档下载 老猿在网上找到一个Qt 5.9的帮助文档,没有找到最新版的,并且这个文档官网上没有下载,不知道源头在哪里可以下载. 文档存放在百度网盘: 链接:https://pan.baidu.c ...
- dubbo官网和帮助文档
dubbo官网和帮助文档 https://github.com/apache/incubator-dubbo 内含帮助文档: http://dubbo.apache.org/books/dubbo-d ...
- 搭建私有YUM仓库_及_内网镜像站
搭建私有YUM仓库_及_内网镜像站 搭建私有YUM仓库(自己定制的rpm包)私有yum仓库环境系统版本:centos7.4 IP:192.168.1.47 #最好能上公网 私有yum仓库服务端配置 第 ...
- 在线文档预览方案-office web apps
最近在做项目时,要在手机端实现在线文档预览的功能.于是百度了一下实现方案,大致是将文档转换成pdf,然后在通过插件实现预览.这些方案没有具体实现代码,也没有在线预览的地址,再加上项目时间紧迫.只能考虑 ...
- [转载]在线文档预览方案-Office Web Apps
最近在做项目时,要在手机端实现在线文档预览的功能.于是百度了一下实现方案,大致是将文档转换成pdf,然后在通过插件实现预览.这些方案没有具体实现代码,也没有在线预览的地址,再加上项目时间紧迫.只能考虑 ...
- NotionAI - 文档领域的ChatGPT,一款 AI 加持的在线文档编辑和管理工具
简介 NotionAI - 文档领域的ChatGPT,一款 AI 加持的在线文档编辑和管理工具 作为国际领先的在线文档编辑和管理工具,Notion受到了广大用户的欢迎,尤其是程序员们.它不仅支持笔记. ...
- apidoc快速生成在线文档,apidoc生成静态文件的生成规则以及原理分析
在老大的指引下,需要将系统的json文件格式转换成apidoc的json格式,也就是json格式的重组,但是这个apidoc的生成格式是不固定的,因为apidoc有自己一套的生成规则,我需要研究一下是 ...
- swagger:API在线文档自动生成框架
传统的API从开发测试开始我们经常借用类似Postman.fiddle等等去做接口测试等等工具:Swagger 为API的在线测试.在线文档提供了一个新的简便的解决方案: NET 使用Swagger ...
- 腾讯在线文档发布:实现QQ、微信多平台多人协作编辑
18日,腾讯宣布推出专注多人协作的在线文档产品—腾讯文档,据介绍,腾讯文档是一款支持随时随地创建.编辑的多人协作式在线文档工具,拥有一键翻译.实时股票函数和浏览权限安全可控等功能,以及打通QQ.微信等 ...
- Mergely – 免费的在线文档对比和合并工具
任何类型的文件(无论是否代码),我们可能要比较不同的版本,看发生了什么变化. 有些编辑器都有这个内置功能,其中一些则没有. Mergely 是一个免费使用的 Web 应用程序,帮你你迅速作出文档的差异 ...
随机推荐
- 某小说解锁VIP
在User类中定位到这个方法,尝试直接返回true 可以发现apk显示了vip的到期时间,测试一下vip是否有效 显然这个vip是没起作用的,还有地方在控制这个vip的方法.在jadx中查看交叉引用 ...
- 在Vue3中如何实现四种全局状态数据的统一管理?
四种全局状态数据 在实际开发当中,会遇到四种全局状态数据:异步数据(一般来自服务端).同步数据.同步数据又分为三种:localstorage.cookie.内存.在传统的 Vue3 当中,分别采用不同 ...
- 0602-nn.Module
0602-nn.Module 目录 一.nn.Module 1.1 构建一层网络--全连接层 1.2 构建多层网络--多层感知机 pytorch完整教程目录:https://www.cnblogs.c ...
- java工具篇-IDEA
java的开发离不开好的开发工具,这就需要了解集成开发工具idea 背景黑白风格 设置方法File–>settings–>Appearance & Behavior–>App ...
- ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南
作者:运维有术 前言 知识点 定级:入门级 KubeKey 安装部署 ARM 版 KubeSphere 和 Kubernetes ARM 版 KubeSphere 和 Kubernetes 常见问题 ...
- 【2024.9.30】NOIP2024 赛前集训-刷题训练(4)
[2024.9.30]NOIP2024 赛前集训-刷题训练(4) Problem - 2000D - Codeforces 给一串数和一串LR字符,L 可以向右连接 R, 覆盖部分的LR不能再使用,但 ...
- 重温c语言之,7天开整,就是随便的写写,第三天+第四天版
一:指针 1.关于指针的含义---粗略 例如:int a=10; int* p=&a; 这里的*,是说明p是指针变量,int 说明p是指向的对象是int类型的 *p=20, 这里的*是解引用符 ...
- RAC:无训练持续扩展,基于检索的目标检测器 | ECCV'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Online Learning via Memory: Retrieval-Augmented Detector Adaptation 论文地 ...
- Air780E的I2C软件使用指南
今天我们学习合宙低功耗4G模组Air780E的I2C接口操作方法,文末[阅读原文]获取最新资料. 一.I2C概述 Air780E可支持1路I2C接口,如果复用的话最多有两路: I2C配置: 兼 ...
- (Python基础教程之四)Python中的变量的使用
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...