使用Nextcloud+Frp搭建外部可访问的私有云盘,使用Onlyoffice实现在线编辑文档。
概述
我一直想设置一个团队用的共享目录,目录内文件按照PARA模式组织。可选的方案有两个:在局域网内设置共享磁盘,或使用云盘服务。前者优点是文件保密性好,缺点是外部无法访问;后者方便访问,缺点是保密性差,毕竟有些工作文件放在互联网上,心里不踏实。有没有两全其美的办法呢?Nextcloud + Frp 为最佳方案。
基本思路是,在内网操作系统为ubuntu的电脑上安装Nextcloud,使用frp内网穿透,使公网VPS上的端口映射到内网Nextcloud端口,从而实现外部对内部网盘的访问。手机端、客户端安装Nextcoud,地址指向公网VPS的映射端口。
Nextcloud是一款开源的文件同步和共享软件,适用于个人、企业和服务提供商。用户可以在自己控制的服务器上共享一个或多个文件和文件夹,并使用Nextcloud桌面同步客户端、Android应用或iOS应用将它们与服务器和其他设备同步。Nextcloud提供安全、可靠、合规的文件同步和共享解决方案,让您可以控制自己的数据。您可以将文件放在本地共享目录中,这些文件将立即同步到服务器和其他设备上。
FRP是一款内网穿透软件,它是一个快速的反向代理工具,可以帮助用户将位于NAT或防火墙后的本地服务器暴露到互联网上。FRP支持TCP、UDP、HTTP和HTTPS协议,可以通过域名将请求转发到内部服务。除了基本的代理功能外,FRP还提供了P2P连接模式等特性。用户可以通过FRP实现多种用途,如通过SSH访问局域网中的计算机、共享相同端口的多个SSH服务、使用自定义域名访问内部Web服务等。FRP还支持配置文件、环境变量、加密和压缩、TLS、负载均衡、服务健康检查等功能,为用户提供了灵活且强大的内网穿透解决方案。
我还安装了onlyoffice,使用户在网页端访问云盘的时候,可以在线查看、编辑文件,而不必下载到本地。ONLYOFFICE是一款功能强大的办公套件,提供在线文档处理服务。ONLYOFFICE Docs是其核心组件,具有完整的在线文档编辑功能,高度兼容Microsoft Office和OpenDocument等文件格式。ONLYOFFICE Docs可以作为独立的生产力套件使用,也可以轻松集成到自己的SaaS或本地解决方案中。用户可以使用ONLYOFFICE Docs创建、编辑和共享文档、表格和演示文稿,实现团队协作和文档管理。ONLYOFFICE还提供了丰富的功能和特性,使用户能够高效地处理文档工作。
安装Nextcloud
使用snap安装nextcloud:1
sudo snap install nextcloud
nextcloud默认监听本机80端口,使用如下命令修改你想要的端口:1
sudo snap set nextcloud ports.http=8080
现在,使用本机浏览器访问http://localhost:8080
应该可以看到nextcloud页面了。
nextcloud的默认可访问地址是本机地址,若想从外网访问,需要修改config.php增加VPS公网地址。1
sudo vim /var/snap/nextcloud/41514/nextcloud/config/config.php
修改内容如下:1
2
3
4array (
0 => 'localhost:8080',
1 => 'VPS公网IP地址:8081', // 增加的内容,我监听8081端口
),
安装Frp
服务端
登录你的VPS,在这个地址下载适合你CPU架构的源文件。
使用下面的命令解压.tar.gz文件1
tar -zxvf 压缩文件名.tar.gz
进入解压后的文件夹,编辑frps.toml
文件,内容如下:1
2bindPort = 7000
vhostHTTPPort = 8081 // 我监听8081端口
为了设置为开机自启动,在/ilb/systemd/system/
下新建frps.service
文件,内容如下:1
2
3
4
5
6
7
8
9
10
11[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=frp所在目录/frps -c frp所在目录/frps.toml
[Install]
WantedBy=multi-user.target
保存后执行下面命令启动开机自启动1
2
3sudo systemctl daemon-reload
sudo systemctl start frps.service
sudo systemctl enable frps.service
客户端
下载、解压同上一个步骤。编辑frpc.toml
文件内容如下:1
2
3
4
5
6
7
8serverAddr = "VPS公网IP地址"
serverPort = 7000
[[proxies]]
name = "nextcloud web"
type = "http"
localPort = 8080
customDomains = ["VPS公网IP地址"]
服务设置同上一步。现在,访问公网IP的8081端口,应该可以显示Nextcloud
页面了。
Onlyoffice 安装
我安装的是docker版的onlyoffice,若你机器上没有docker请自行安装。运行以下命令安装onlyoffice:1
sudo docker run -i -t -d -p 8088:80 --restart=always -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data -v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice -v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql -e JWT_ENABLED=false onlyoffice/documentserver
上述命令是在Docker中运行一个容器,具体参数的含义如下:
sudo
: 使用超级用户权限执行该命令,因为Docker需要特权来运行容器。docker run
: 启动一个新的容器。-i
: 保持标准输入打开。-t
: 分配一个伪终端。-d
: 使容器在后台运行(detach 模式)。-p 8088:80
: 将容器的80端口映射到宿主机的8088端口。--restart=always
: 当容器退出时,始终重新启动容器。-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice
: 挂载本地目录/app/onlyoffice/DocumentServer/logs
到容器内部的/var/log/onlyoffice
,用于存储日志文件。-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data
: 挂载本地目录/app/onlyoffice/DocumentServer/data
到容器内部的/var/www/onlyoffice/Data
,用于存储数据。-v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice
: 挂载本地目录/app/onlyoffice/DocumentServer/lib
到容器内部的/var/lib/onlyoffice
,用于存储程序库文件。-v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql
: 挂载本地目录/app/onlyoffice/DocumentServer/db
到容器内部的/var/lib/postgresql
,用于存储数据库文件。-e JWT_ENABLED=false
: 设置环境变量JWT_ENABLED
为false
。onlyoffice/documentserver
: 要运行的Docker镜像的名称。
此时若访问本机的8088端口,应该显示onlyoffice的欢迎页面。当Nextcloud连接onlyoffice的时候,需要onlyoffice的外部网络可以访问的地址,所以还需使用frp
将本机onlyoffice接口(8088)映射到VPS上。修改本机的frpc.toml
如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15serverAddr = "VPS公网IP地址"
serverPort = 7000
[[proxies]]
name = "nextcloud web"
type = "http"
localPort = 8080
customDomains = ["VPS公网IP地址"]
[[proxies]]
name = "onlyoffice"
type = "tcp"
localPort = 8088
remotePort = 8088
localIP = "127.0.0.1"
重启frp
服务,现在应该可以通过VPS访问onlyoffice了。
安装Nextcloud-Onlyoffice连接器
onlyoffice-nextcloud.git项目让用户能够在 Nextcloud 中使用 ONLYOFFICE Document Server 进行协作编辑和管理办公文档。
找一个目录,下载连接器到onlyoffice目录:1
git clone https://github.com/ONLYOFFICE/onlyoffice-nextcloud.git onlyoffice
进入onlyoffice目录,运行:1
2git submodule update --init --recursive
npm install
解释一下上面的命令:
git submodule update --init --recursive
: 这个命令用于在Git仓库中初始化子模块并更新它们的内容。--init
: 初始化子模块,将子模块的配置文件中指定的URL拉取到本地。--recursive
: 递归地初始化子模块的子模块,即初始化所有嵌套的子模块。- 综合起来,这个命令会初始化并更新主项目中的所有子模块,确保它们都处于最新的状态。
npm install
: 这个命令用于在Node.js项目中安装项目的依赖项。- 当在一个包含
package.json
文件的目录中执行npm install
命令时,npm会查找package.json
文件中列出的所有依赖项,并自动下载和安装它们。 - 这个命令通常在第一次获取项目、切换分支或者其他人更新了项目依赖项时运行,以确保项目的依赖项是最新的,同时会在项目根目录生成
node_modules
文件夹来存储这些依赖项。 npm install
也可以带有不同的选项,例如--save
或--save-dev
,用来将安装的依赖项记录到package.json
文件中的dependencies
或devDependencies
部分。
- 当在一个包含
注意,我在运行npm的时候遇到一个坑,系统提示/lib64/lib.c.so.6
中缺少GLIBC
的某个版本。解决方案是使用nvm
安装16.15.1
版本的node
。
卸载当前node:1
sudo apt remove nodejs
安装nvm
:1
2
3sudo apt update
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.bashrc
安装node
:1
2nvm install node
nvm install 16.15.1
现在需要将onlyoffice拷贝到nextcloud目录内去。我的系统nextcloud的第三方app目录在/var/snap/nextcloud/current/nextcloud/extra-apps
,切换到root
用户进入这个目录,运行:1
cp -r /你刚才下载的onlyoffice连接器路径/onlyoffice ./
重启nextcloud服务:1
sudo snap restart nextcloud
在Nextcloud中配置onlyoffice
打开Nextcloud页面,以管理员账户登录,右上角菜单栏点击“管理设置”,左面“管理”下会显示有ONLYOFFICE,点击,右方服务器设置ONLYOFFICE Docs 地址
填入http://VPS的IP地址:8088/
,下方勾选关闭证书校验(不安全)
。现在,可以在Nextcloud中在线编辑文档了。