搭建背景
随着技术发展的日新月异,人们对传统、低效、昂贵的技术嗤之以鼻,使得开源、普惠、高效的项目飞速发展,国内用户迅速拥抱开源。Nextcloud作为一款开源的云盘项目广受好评,同时以插件的形式支持onlyoffice多人编辑功能。而微软旗下的FS(Files servers) 不支持多人编辑文档,且不支持对外访问(需要VPN),所以基于以上情况 我决定在公网部署Nextcloud云盘 进行公测,后续迁移至内网机房。
环境准备
硬件清单:
- ECS云主机一台(腾讯、阿里都可以),节点选择中国香港(可访问国外资源),配置:v2CPU,4-8G内存,存储40-100G左右。
- 域名(配置SSL证书实现网站https安全加密访问) 当然你也可以选择公网IP直接访问。
- 阿里云ECS主机涉及到的准备工作:

操作系统:
ECS购买后直接安装centos7 或Ali Cloud os,重置密码后 通过ssh 远程连接。
软件安装:
ECS上安装docker和docker-compose
安全组:
这里需要开放80、443、3306、8000等,新手建议全部开放。

脚本及插件:
nextcloud.yaml 用于docker-compose 容器部署
config.php 用于nextcloud容器中配置文件
nginx.conf 用于nginx代理,配置SSL证书实现网站https安全加密访问。
nextcloud.yaml 内容如下,其中#注释需要自行修改的内容。
version: '3'
services:
db:
image: mysql
volumes:
- /root/nextcloud/mr:/var/lib/mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: nextcloud
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: nextcloud
nextcloud:
image: nextcloud
depends_on:
- db
volumes:
- /root/nextcloud/nc:/var/www/html
ports:
- "80:80"
environment:
NEXTCLOUD_TRUSTED_DOMAINS: x.x.x.x
#这里的x.x.x.x 写你的ECS公网ip
onlyoffice:
image: onlyoffice/documentserver
depends_on:
- db
volumes:
- /root/nextcloud/of:/var/www/onlyoffice/Data
ports:
- "8000:80"
environment:
JWT_ENABLED: 'true'
JWT_SECRET: '123456'
config.php内容如下:
<?php
$CONFIG = array (
'htaccess.RewriteBase' => '/',
'memcache.local' => '\\OC\\Memcache\\APCu',
'apps_paths' =>
array (
0 =>
array (
'path' => '/var/www/html/apps',
'url' => '/apps',
'writable' => false,
),
1 =>
array (
'path' => '/var/www/html/custom_apps',
'url' => '/custom_apps',
'writable' => true,
),
),
'upgrade.disable-web' => true,
'instanceid' => 'ocr0ifw6p1ir',
'passwordsalt' => 'WQ85EVPAZJkV1JqjySfd+WZDtdpl59',
'secret' => 'QtDrfHafNLVS685wLMnVrrgoU6tD/6CSOEsuct8cZtWfbwc6',
'trusted_domains' =>
array (
0 => 'www.xxx.com',#这里xxx更换成自己的域名
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '29.0.5.1',
'overwrite.cli.url' => 'https://www.xxx.com', #这里xxx更换成自己的域名
'overwritehost' => 'www.xxx.com:443', #这里xxx更换成自己的域名
'overwriteprotocol' => 'https',
'dbname' => 'nextcloud',
'dbhost' => 'x.x.x.x:3306', #这里xxx更换成ECS的公网ip
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextcloud',
'dbpassword' => 'nextcloud',
'installed' => true,
'files' => [
'ax_chunk_size' => 0,
'upload_max_size' => '-1',
],
);
nginx.conf 内容如下:
events {}
http {
client_max_body_size 0;
client_body_buffer_size 512k;
proxy_read_timeout 86400s;
server {
listen 443 ssl;
server_name xxx.com;
#这里xxx.com 写自己买的域名
ssl_certificate /etc/nginx/certs/xxx_bundle.crt;
ssl_certificate_key /etc/nginx/certs/xxx.com.key;
#同理,SSL证书解压后 具体路径和文件名称也要修改。
location / {
proxy_pass http://x.x.x.x:80; #这里写公网IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
插件:
SSL证书,从域名供应商后台下载,并解压上传到ECS中,后续通过docker的-v参数 挂载到nginx容器内。
onlyoffice插件,根据nextcloud的版本从官网链接下载,需要翻墙。下载链接:https://apps.nextcloud.com/apps/onlyoffice
正式部署
以上准备完毕后,首先去域名管理后台添加A记录(让ECS的公网ip指向域名) 等待DNS解析生效即可。
接下来ssh 登陆到ECS主机,在/root/路径下创建文件夹,用于volume的挂载:
cd /root/
mkdir -p /root/nextcloud/mr /root/nextcloud/of /root/nextcloud/nc

创建nextcloud.yaml 文件,把我上面的内容copy进去 里面#注释的地方 改成自己ECS的信息,:wq 保存退出。
接下来运行docker-compose 批量创建容器。
docker-compose -f nextcloud.yaml up -d
运行成功后,可以通过docker ps 查看容器状态。
[root@iZj6c60w7gahvfxraf9xbnZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60f445edfe23 nginx "/docker-entrypoint.…" 2 days ago Up About an hour 80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx-https
b0a97b9704c8 nextcloud "/entrypoint.sh apac…" 3 days ago Up 22 hours 0.0.0.0:80->80/tcp, :::80->80/tcp root-nextcloud-1
8f077e82e710 onlyoffice/documentserver "/app/ds/run-documen…" 3 days ago Up 2 days 443/tcp, 0.0.0.0:8000->80/tcp, :::8000->80/tcp root-onlyoffice-1
fdd2727a1da4 mysql "docker-entrypoint.s…" 3 days ago Up 2 days 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp root-db-1
理论上,你这里是看不到nginx的,因为我的yaml文件里面没有涵盖,稍后单独run 一个nginx容器。 其他三个容器 状态为UP即可。

恭喜你可以通过ECS主机的公网地址直接访问到nextcloud了,在初始化页面绑定mysql数据库信息 即可。(如果不能访问,检查下你的安全组是否放行了80、443、8000、3306等端口?)
最上面创建管理员用户名和密码 自己随便写,admin/admin ,下面数据库选mysql,用户、密码、数据库名均为nextcloud 详情可查看yaml文件,localhost这里 填ECS主机的IP:3306 。不出意外的话,你就能进入nextcloud的用户界面了。
接下来就是onlyoffice插件配置环节:
1、下载对应版本的onlyoffice文件
2、上传至ECS主机并解压
3、通过docker cp 命令将文件复制到nextcloud容器的apps路径下。(以下命令作为参考,自己修改容器ID 不要抄我的)
[root@iZj6c60w7gahvfxraf9xbnZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60f445edfe23 nginx "/docker-entrypoint.…" 2 days ago Up About an hour 80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx-https
b0a97b9704c8 nextcloud "/entrypoint.sh apac…" 3 days ago Up 22 hours 0.0.0.0:80->80/tcp, :::80->80/tcp root-nextcloud-1
8f077e82e710 onlyoffice/documentserver "/app/ds/run-documen…" 3 days ago Up 2 days 443/tcp, 0.0.0.0:8000->80/tcp, :::8000->80/tcp root-onlyoffice-1
fdd2727a1da4 mysql "docker-entrypoint.s…" 3 days ago Up 2 days 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp root-db-1
[root@iZj6c60w7gahvfxraf9xbnZ ~]# docker cp onlyoffice.tar b0a97b9704c8:/www/html/nextcloud/apps/
上传成功后,刷新nextcloud的web页面 ,点击右上角菜单-应用-您的应用-onlyoffice 点击启用。


右上角管理设置-onlyoffice 填写服务器地址和密钥。
服务器地址写你自己的ECS公网地址+端口号8000
密钥:123456(如果你没改我的yaml文件)

点击保存成功后,恭喜你可以在nextcloud的云盘上使用多人在线编辑协作功能了。赶紧找个小伙伴帮他创建账号,一起测试下吧。
接下来要部署nginx服务,并修改配置文件 实现https安全加密访问,同时解除文件上传大小的限制。
在/root/下面创建 2个文件夹
mkdir -p /root/ssl/certs
把下载好的SSL证书解压后上传到certs目录下,同时在/root/ssl下创建一个nginx.conf 文件,把我上面的nginx.conf配置内容copy进去。
运行下面的docker 命令 创建nginx容器
docker run --name nginx -p 443:443 -v /root/ssl/certs:etc/nginx/certs -v /root/ssl/nginx.conf:/etc/nginx/nginx.conf nginx
为了使nginx的https代理生效,nextcloud容器中的配置文件 config.php 也需要修改,具体参考我上面写的内容。
最后通过https:xxx.com 实现安全加密访问nextcloud云盘,同时大文件上传的限制也解除了。

Q&A
容器里面没有vim命令怎么办?
使用以下命令安装即可:
apt-get update
apt-get install vim
下载的SSL证书或插件怎么上传到ECS主机上呢?
通过scp命令 或者安装第三方工具 ,这里推荐MobaXterm。
下载链接:https://mobaxterm.org/mobaxtermhanhua.html
以上就是全部教程了,大家部署过程中有任何问题可以随时联系我,很乐意答疑解惑。在本文中,我倾尽全力分享了自己的技术见解和实践经验。希望读者能够从中获得启发和帮助。同时,郑重声明,本文为我的原创作品,未经授权,严禁任何形式的转载、抄袭、改编或商业使用。如发现侵权行为,我将保留追究法律责任的权利。尊重知识产权,从你我做起。让我们共同营造一个良好的技术交流和分享环境
1061

被折叠的 条评论
为什么被折叠?



