Docker秒级启动NextCloud个人网盘存储办公系统_nextcloud docker
1. 项目背景知识
1.1. 系统需求
由于现有网盘费用较高且安全性得不到保证,需要在本地部署个人网盘存储系统。 为了便于使用,通过容器技术来实现,并部署在线 office 编辑工具,以实现个人云存储和移动办公。 1.2. docker 概述 1.2.1. 为什么会有 docker 出现 假定您在开发一个商城类的软件,您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开 发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 此外,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多 在本地模拟这些环境而不产生重新创建服务器环境的开销。 请问:您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版 本、配置问题,也无需重新编写代码和进行故障修复? 答案就是使用容器。 Docker 之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案 ----- 系统平 滑移植,容器虚拟化技术 。 环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题, 软件可以带环境安装? 也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以 消除协作编码时“ 在我的机器上可正常工作 ” 的问题 。 之前在服务器配置一个应用的运行环境,要安装各种软件,就拿电商类项目的环境来说, Java/RabbitMQ/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如 我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。况且就算不跨操作系统,换另一台同样操 作系统的服务器,要移植 应用也是非常麻烦的。 传统上认为,软件编码开发 / 测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等 (java 为例) 。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程 式,开发需要清楚的告诉运维部署团队,用的全部配置文件 + 所有软件环境。不过,即便如此,仍然常常发 生部署失败的状况。Docker 的出现使得 Docker 得以打破过去「程序即应用」的观念。透过镜像 (images) 将 作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨 运作。 简单的理解, Docker 类似于集装箱,各式各样的货物,经过集装箱的标准化进行托管,而集装箱和集装箱 之间没有影响。也就是说,Docker 平台就是一个软件集装箱化平台,这就意味着我们自己可以构建应用程 序,将其依赖关系一起打包到一个容器中,然后这容器就很容易运送到其他的机器上进行运行,而且非常 易于装载、复制、移除,非常适合软件弹性架构。 1.2.2. docker 理念
- Docker是基于Go语言实现的云开源项目。
- Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、 部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能 够做到“一次镜像,处处运行”。
- Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜 像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现 了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
- 一句话定义docker:解决了运行环和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟
- 化技术。
1.2.3. docker 三要素
- 容器:可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间 等)和运行在其中的应用程序。
- Docker 镜像(Image):就是一个只读的模板,镜像可以用来创建 Docker 容器,一个镜像可以创建很多 容器。它也相当于是一个root文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还 包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
- 仓库:集中存放镜像文件的地方,镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的 服务。
1.2.4. docker常用命令
docker version # 查看 docker 版本号等信息 docker info # 查看 docker 版本号等信息 docker images # 查看镜像 docker search 镜像名 # 仓库中查看镜像 docker pull 镜像名 # 拉取镜像 docker run 镜像名 # 运行镜像 docker rmi -f 镜像名 / 镜像 ID # 强制删除一个镜像 docker ps -a # 查看容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] # 创建容器 -d : 后台运行容器并返回容器 ID -it :启动交互式容器 -p : 指定端口映射 docker start 容器名 # 启动容器 docker stop 容器名 # 停止容器 docker restart 容器名 # 重启容器 docker inspect 容器名 :latest | grep -i version # 查看容器 latest 具体版本号 docker rm -f 容器 ID # 强制删除容器
1.3. Nextcloud
- 众所周知,国内很多网盘都关停了,现有的百度云还限速,甚至网盘里的文件还会被删除,网盘使用体验 差、安全性堪忧。
- 团队内部分享文件,用微信传输有大小限制,且只能通过公网上传下载;用 QQ 传输虽然可以通过内网传 输,但是有的文件是公司的机密,直接传输有泄露的风险,打包加密传输又太麻烦;并且不同部门对文档 的操作权限也应该是不同的。
- Nextcloud就是这么一套系统,既能够部署在局域网环境,又可以设置不同用户组对文档的访问权限,还可 以实现内网 + 公网访问
- Nextcloud是一套用于创建网络硬盘的客户端-服务器软件。其功能与Dropbox相近,但Nextcloud是自由 及开放原始码软件,每个人都可以在私人服务器上安装并执行它。在安全性,多客户端支持与多应用支持 上也非常具有优势。
1.4. onlyoffice
- 网址:https://www.onlyoffice.com/zh/
- OnlyOffice是一款开源的办公套件,提供了文档编辑、电子表格和演示文稿等功能,支持在线协作和文件共 享。它通过网页浏览器即可访问和编辑各种文档,适合企业和个人用户在不同地点高效工作
1.5. cpolar
- 一款免费的内网穿透软件
- 只需一行命令,就可以将内网站点发布至公网,方便给客户演示。高效调试微信公众号、小程序、对接支 付宝网关等云端服务,提高您的编程效率
2. 软硬件环境清单
使用单台虚拟机实现

3.1. 项目环境搭建
- 新建OpenEuler22.03 SP4 虚拟机
- 按照规划,最小化部署系统,关闭防火墙,禁用SELinux,确保能够联网。
3.2. docker 设置
- 安装docker源及docker服务
- 配置docker镜像加速器
- docker拉取镜像
- 配置并启动容器
3.3. 配置数据库
- 新建nextcloud数据库及所需表
- 创建账户和密码设置权限
3.4. 配置 nextcloud
- 安装nextcloud
- 设置其选项
- 测试访问
3.5. 配置 onlyoffice
- 启动容器
- 下载onlyoffice连接器插件
- 配置
- 测试
3.6. 配置内网穿透
4. 项目实施
4.1. 环境搭建
- 安装虚拟机及OpenEuler22.03 SP4系统 ,过程略
- 关闭安全软件
sed -i \'7s/enforcing/disabled/\' /etc/selinux/config systemctl stop firewalld systemctl disable firewalld
修改主机名
hostnamectl set-hostname nextcloud reboot
下载需要的软件
yum install vim tar tree net-tools -y
安装docker
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i \'s+download.docker.com+mirrors.aliyun.com/docker-ce+\' /etc/yum.repos.d/docker-ce.repo # 更换为阿里开源镜像站源 [root@nextcloud ~] # sed -i \'s/$releasever/7/g\' /etc/yum.repos.d/docker-ce.repo # 由于阿里开源中没有 Euler 系统版本,但其源自 Centos 则改为 7 即可 yum install docker-ce -y
配置docker源(找自己的华为镜像加速器)
vim /etc/docker/daemon.json
{ \"registry-mirrors\": [ \"https://5834b5be590a4327bf3ca51c04ad64ec.mirror.swr.myhuaweicloud.com\" ]}
{ \"exec-opts\" : [ \"native.cgroupdriver=systemd\" ], \"registry-mirrors\": [ \"https://5834b5be590a4327bf3ca51c04ad64ec.mirror.swr.myhuaweicloud.com\" , \"https://docker.1ms.run\" , \"https://docker.1panel.live/\" ] }
启动docker
systemctl enable --now docker
查看docker版本
docker --version
docker info
拉取镜像
docker pull nextcloud
docker pull mysql:8.0.37
docker pull onlyoffice/documentserver
查看docker拉取
docker images
数据库配置
docker run -p 3306:3306 --name mysql --restart=\"always\" -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/logs:/logs -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.37 docker ps | grep mysql docker exec -it 28027aa1eded /bin/bash
mysql -uroot -p mysql> grant all PRIVILEGES on *.* to root@ \'%\' WITH GRANT OPTION; mysql> ALTER USER \'root\' @ \'%\' IDENTIFIED BY \'123456\' PASSWORD EXPIRE NEVER; mysql> ALTER USER \'root\' @ \'%\' IDENTIFIED WITH mysql_native_password BY \'123456\' ; mysql> FLUSH PRIVILEGES; mysql> create database nextcloud; mysql> exit root@4b97fc214522:/ # exit
nextclou配置
docker run -d -v /root/nextcloud/html:/var/www/html -v /root/nextcloud/apps:/var/www/html/custom_apps -v /root/nextcloud/config:/var/www/html/config -v /root/nextcloud/nextcloud/data:/var/www/html/data -v /root/nextcloud/themes:/var/www/html/themes -p 80:80 --name nextcloud -- restart=\"always\" nextcloud docker ps#查看容器 # 浏览器输入本机 ip 进行配置:
onlyoffice
启动
docker run -i -t -d -p 9010:80 --restart=always \\ -v /usr/docker/onlyoffice/log:/var/log/onlyoffice \\ -v /usr/docker/onlyoffice/data:/var/www/onlyoffice/Data \\ -v /usr/docker/onlyoffice/lib:/var/lib/onlyoffice \\ -v /usr/docker/onlyoffice/db:/var/lib/postgresql onlyoffice/documentserver docker ps
安装onlyoffice连接器
离线下载 onyoffice 插件: https://apps.nextcloud.com/apps/onlyoffice/releases?platform=30#30 查看当前 nextcloud 版本
docker inspect nextcloud:latest | grep -i version
下载对应的版本号
下载后,复制插件到宿主机并解压插件
cd /root/nextcloud/apps # 使用 xftp 将下载插件压缩包上传
tar xf onlyoffice.tar.gz # 解压缩
启用插件onlyoffice
配置onlyoffice
在onlyoffice7.2版本之后,需要使用秘钥才能连接上,浏览器输入:http://ip:9010 , 查看获取密钥方法:
复制代码获取秘钥
sudo docker exec e6dba7428a81 /var/www/onlyoffice/documentserver/npm/json -f /etc/onlyoffice/documentserver/local.json \'services.CoAuthoring.secret.session.string\'
秘钥:dmC1SnaG4GrpV0nMU8f8M93Dw98dL58u
nextcloud 中点击右上角用户图标 -> 点击管理设置 -> 点击左侧侧边栏的 onlyoffice ,进行服务器配置,如 图:
测试:
nextcloud->文件->新建word文件或excel文件
内网穿透
网址:https://www.cpolar.com/
wget https://www.cpolar.com/static/downloads/releases/3.3.18/cpolar-stable-linux-amd64.zip?_gl=1*1jl2h5f*_ga*OTQ5NjA2MTMxLjE3NDQ3OTcwNTU.*_ga_WF16DPKZZ1*MTc0NDc5NzA1NS4xLjEuMTc0NDc5NzIxMC40Ni4wLjA.
--2025-04-16 17:54:51-- https://www.cpolar.com/static/downloads/releases/3.3.18/cpolar-stable-linux-amd64.zip?_gl=1*1jl2h5f*_ga*OTQ5NjA2MTMxLjE3NDQ3OTcwNTU.*_ga_WF16DPKZZ1*MTc0NDc5NzA1NS4xLjEuMTc0NDc5NzIxMC40Ni4wLjA.
放到/目录下
cd /
连接账户:
./cpolar authtoken MGRhZDA2YWQtNjUzYS00NGM2LWFiMDEtMDY2NTZjODc2Yjcx
(添加nextcloud域名)
./cpolar http 80
切换到另一个终端,添加域名信任
vim /root/nextcloud/config/config.php
通过域名在浏览器登录
http://76a94ea2.r5.cpolar.top/login
最后实现内网穿透。