Docker秒级启动NextCloud个人网盘存储办公系统

概述

在数字化时代,数据存储与协同办公的安全性、便捷性愈发重要。国内网盘普遍存在限速、隐私风险等问题,企业内部文件共享也面临权限管理、传输限制等挑战。本文将手把手教你通过 Docker 容器技术,在本地快速部署一套功能完备的 NextCloud 个人网盘系统,并集成 OnlyOffice 实现在线协同编辑,结合内网穿透实现公网访问,全程仅需一周即可完成,适合个人用户与中小企业搭建私有云解决方案。

项目组织方式及时间

  • 时间:建议一周内完成所有的项目搭建、功能测试、问题总结
  • 方式:通过VmWare17虚拟机实现平台搭建

一、项目背景知识

日常工作与生活中,我们常面临这些痛点:

  • 公共网盘限速严重、隐私数据有被泄露或删除的风险;
  • 微信 / QQ 传输文件有大小限制,企业机密文件直接- 传输存在安全隐患;
  • 团队内部文件共享需要精细化权限管理,不同部门访问权限需隔离;
  • 跨设备办公时,文件同步与在线编辑需求强烈,但传统方案配置复杂。

NextCloud + Docker 的组合为这些问题提供了完美解决方案:

- NextCloud 是开源的私有云存储系统,支持本地部署,数据完全自主掌控;  
- 支持多设备同步、精细化权限管理,可集成在线办公工具实现协同编辑;
- Docker 容器技术确保环境一致性,简化部署流程,实现    "一次配置,处处运行"。

二、技术基础:Docker 容器技术核心概念

1.Docker 解决的核心问题

  • 开发与部署中最常见的问题是 “在我电脑上能运行,换台机器就报错”。这源于环境配置的差异(如依赖库版本、系统参数等)。Docker 通过 “软件带环境安装” 的思路,将应用及其依赖的系统环境打包成标准化容器,实现跨平台、跨设备的无缝移植。
  • 简单说,Docker 就像 “数字化集装箱”:无论内部装的是 Web 应用、数据库还是办公工具,都能通过统一的容器格式运输、部署,避免环境差异导致的兼容问题。

image-20250221115657927

2.docker理念

  • Docker是基于Go语言实现的云开源项目。
  • Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。
  • Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
  • 一句话定义docker:解决了运行环和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

image-20250221115501216

3.docker三要素

  • 镜像(Image):只读模板,包含运行应用所需的所有文件(代码、库、配置等),是容器的 “源代码”。
  • 容器(Container):镜像的运行实例,可理解为一个轻量的 Linux 环境(包含进程空间、网络等),应用在容器中独立运行。
  • 仓库(Repository):集中存储、分发镜像的平台(如 Docker Hub),方便用户获取现成的应用镜像。

4.为什么选择 Docker 部署 NextCloud?

  • 部署高效:无需手动配置复杂依赖(如 PHP、数据库、Web 服务器),拉取镜像即可启动;
  • 环境隔离:NextCloud、数据库、OnlyOffice 等组件通过容器隔离,互不干扰,便于维护;
  • 迁移灵活:容器可快速复制到其他设备,只需保证 Docker 环境,即可一键启动,避免重复配置。

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			 # 强制删除容器

Nextcloud

image-20250221115349344

  • 众所周知,国内很多网盘都关停了,现有的百度云还限速,甚至网盘里的文件还会被删除,网盘使用体验差、安全性堪忧。

  • 团队内部分享文件,用微信传输有大小限制,且只能通过公网上传下载;用 QQ 传输虽然可以通过内网传输,但是有的文件是公司的机密,直接传输有泄露的风险,打包加密传输又太麻烦;并且不同部门对文档的操作权限也应该是不同的。

  • Nextcloud就是这么一套系统,既能够部署在局域网环境,又可以设置不同用户组对文档的访问权限,还可以实现内网 + 公网访问

  • Nextcloud是一套用于创建网络硬盘的客户端-服务器软件。其功能与Dropbox相近,但Nextcloud是自由及开放原始码软件,每个人都可以在私人服务器上安装并执行它。在安全性,多客户端支持与多应用支持上也非常具有优势。

onlyoffice

  • 网址:https://www.onlyoffice.com/zh/
  • ‌OnlyOffice是一款开源的办公套件,提供了文档编辑、电子表格和演示文稿等功能,支持在线协作和文件共享。它通过网页浏览器即可访问和编辑各种文档,适合企业和个人用户在不同地点高效工作

image-20250221115254669

cpolar

  • 一款免费的内网穿透软件
  • 只需一行命令,就可以将内网站点发布至公网,方便给客户演示。高效调试微信公众号、小程序、对接支付宝网关等云端服务,提高您的编程效率

三、项目规划:目标与环境准备

项目目标

  • 搭建基于 OpenEuler 系统的虚拟机环境;
  • 利用 Docker 部署 NextCloud 网盘、MySQL 数据库、OnlyOffice 在线编辑器;
  • 实现本地访问测试、多用户权限管理、在线文档编辑功能;
  • 配置内网穿透,实现公网访问私有网盘。

软硬件环境清单

  • 使用单台虚拟机实现
主机名IP地址硬件软件
nextcloud192.168.88.203cpu:1颗2核
内 存:4GB
HDD:20GB
网 络:NAT
VmWare17
OpenEuler22.03sp4
docker26.1.4
mysql8.0.37
nextcloud30.0.6
OnlyOffice24.04
OnlyOffice connector9.6

任务清单

项目环境搭建

  • 新建OpenEuler22.03 SP4 虚拟机

  • 按照规划,最小化部署系统,关闭防火墙,禁用SELinux,确保能够联网。

docker设置

  • 安装docker源及docker服务

  • 配置docker镜像加速器

  • docker拉取镜像

  • 配置并启动容器

配置数据库

  • 新建nextcloud数据库及所需表
  • 创建账户和密码设置权限

配置nextcloud

  • 安装nextcloud
  • 设置其选项
  • 测试访问

配置onlyoffice

  • 启动容器
  • 下载onlyoffice连接器插件
  • 配置
  • 测试

配置内网穿透

四、部署步骤:从环境搭建到功能实现

阶段 1:基础环境准备

1.虚拟机与系统安装
  • 安装虚拟机及OpenEuler22.03 SP4系统 ,过程略
2. 关闭安全组件(关键步骤)
[root@localhost ~]# vim  /etc/selinux/config
修改为:SELINUX=disabled
[root@localhost ~]# systemctl  stop  firewalld   
[root@localhost ~]# systemctl  disable  firewalld  
3. 配置主机名与基础工具
[root@localhost ~]# hostnamectl  set-hostname  rch
[root@localhost ~]# reboot
[root@rch ~]# yum  install  vim  tar  tree  net-tools  -y

阶段 2:Docker 环境配置

1. 安装 Docker 服务

OpenEuler 基于 CentOS 内核,可直接使用 CentOS 的 Docker 源:

# 添加阿里云 Docker 源
[root@rch ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@rch ~]# ls /etc/yum.repos.d/
docker-ce.repo  openEuler.repo
# 替换源为阿里云(因 OpenEuler 未在官方源中,需适配 CentOS 7 版本)
[root@rch ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo   # 更换为阿里开源镜像站源
[root@rch ~]# sed -i 's/$releasever/7/g' /etc/yum.repos.d/docker-ce.repo
# 安装 Docker
[root@rch ~]# yum install docker-ce  -y
2.配置 Docker 镜像加速器
# 创建/修改 Docker 配置文件,这里我用的华为镜像加速器
# 添加以下内容(加速器地址需替换为自己的华为云加速器地址,可在华为云控制台获取)
[root@rch ~]# vim /etc/docker/daemon.json      # 添加如下
{
    "registry-mirrors": [ "https://1a4b64e3bac642e18f2c42e791d607eb.mirror.swr.myhuaweicloud.com" ]
}
[root@rch ~]# systemctl  enable  --now docker     # 启动 Docker 并设置开机自启
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@rch ~]# docker  version					  # 验证安装(出现 Client 和 Server 版本信息即为成功)
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:32:04 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:31:02 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
# 重启 Docker 使配置生效
[root@rch ~]# systemctl restart docker

# 验证加速器配置(出现 Registry Mirrors 即为成功)
[root@rch ~]# docker info | grep "Registry Mirrors"

在这里插入图片描述

阶段 3:拉取核心镜像

通过 Docker 拉取 NextCloud、MySQL、OnlyOffice 三大核心组件的镜像:

# 拉取 NextCloud 镜像(个人网盘核心,不用跟版本号)
[root@rch ~]# docker pull nextcloud 

# 拉取 MySQL 镜像(数据存储,要跟版本号)
[root@rch ~]# docker pull mysql:8.0.37

# 拉取 OnlyOffice 镜像(在线文档编辑)
[root@rch ~]# docker pull onlyoffice/documentserver

# 查看已拉取的镜像
[root@rch ~]# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
nextcloud                   latest    93bfd883730b   11 days ago     1.42GB
onlyoffice/documentserver   latest    57c28621b213   2 weeks ago     3.79GB
mysql                       8.0.37    8279f68ee77d   13 months ago   567MB

阶段 4:配置 MySQL 数据库

NextCloud 需要数据库存储用户信息、文件元数据等,需提前配置 MySQL:

1. 启动 MySQL 容器
[root@rch ~]# 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   # 数据库 root 密码
    -d mysql:8.0.37  # 后台运行
4790bdba643980730c69fa484936b3c99913ef0593e023f8fe50740fc4022f46
2. 初始化 NextCloud 数据库

进入 MySQL 容器,创建专用数据库与用户:

[root@rch ~]# docker ps | grep mysql
4790bdba6439   mysql:8.0.37   "docker-entrypoint.s…"   11 seconds ago   Up 10 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
[root@rch ~]# docker exec -it 4790bdba643980730c69fa484936b3c99913ef0593e023f8fe50740fc4022f46 /bin/bash   # 进入 MySQL 容器
bash-5.1# mysql -uroot -p
Enter password:    # 登录 MySQL(输入密码 123456)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.37 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

# 允许 root 远程访问(开发环境简化配置,生产环境建议创建专用用户)
mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

# 创建 NextCloud 专用数据库(名称为 rch)
mysql> create database rch;
Query OK, 1 row affected (0.00 sec)

# 验证数据库创建成功
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| rch                |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql> exit
Bye
bash-5.1# exit
exit

阶段 5:部署 NextCloud 网盘

1. 启动 NextCloud 容器
[root@rch ~]# 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     # 映射 80 端口(网页访问)
--name nextcloud 
--restart="always"   # 开机自启
nextcloud
5bfca407bd23200e58749128d67b61f377fcf63c364c10c0e0d72c41a900e0d7
[root@rch ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
5bfca407bd23   nextcloud      "/entrypoint.sh apac…"   10 seconds ago   Up 10 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp                      nextcloud
4790bdba6439   mysql:8.0.37   "docker-entrypoint.s…"   4 minutes ago    Up 4 minutes    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
2.初始化 NextCloud 配置
  • 浏览器输入本机ip进行配置:
  • 创建管理员账号(如用户名 rch,密码自定义);
  • 选择 “MySQL/MariaDB” 数据库;
  • 填写数据库信息:
    - 数据库用户:root
    - 数据库密码:123456
    - 数据库名称:rch
    - 数据库主机:虚拟机IP:3306(如 192.168.88.203:3306)
  • 点击 “安装完成”,等待初始化完成。
    image-20250221111526785

image-20250221111735235

阶段 6:集成 OnlyOffice 实现在线协同编辑

1. 启动 OnlyOffice 容器
[root@rch ~]# docker run -i -t -d 
-p 9010:80  \ # 映射 9010 端口(OnlyOffice 服务)
--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
[root@rch ~]# docker ps
CONTAINER ID   IMAGE                       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
6111c0314377   onlyoffice/documentserver   "/app/ds/run-documen…"   5 seconds ago    Up 5 seconds    443/tcp, 0.0.0.0:9010->80/tcp, :::9010->80/tcp         wonderful_jackson
5bfca407bd23   nextcloud                   "/entrypoint.sh apac…"   39 minutes ago   Up 39 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp                      nextcloud
4790bdba6439   mysql:8.0.37                "docker-entrypoint.s…"   44 minutes ago   Up 44 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

2. 安装 OnlyOffice 连接器
[root@rch ~]# docker inspect  nextcloud:latest | grep -i version
        "DockerVersion": "",
                "PHP_VERSION=8.3.23",
                "NEXTCLOUD_VERSION=31.0.7"   # nextcloud版本号
  • 当前docker的nextcloud镜像是31版本,所以下载对应31版本插件

image-20250220163054668

  • 下载后,复制插件到宿主机并解压插件
[root@rch ~]# cd  /root/nextcloud/apps
[root@rch apps]# ls
# 使用xftp将下载插件压缩包上传
[root@rch apps]# ls
onlyoffice.tar.gz
[root@rch apps]# tar -xvf onlyoffice.tar.gz 
  • 启用插件

image-20250221113001079

3. 配置 OnlyOffice 密钥(关键步骤)
  • 在onlyoffice7.2版本之后,需要使用秘钥才能连接上,浏览器输入:http://ip:9010 , 查看获取密钥方法:

在这里插入图片描述

  • 复制上图方框中代码,进入onlyoffice容器,获取密钥
[root@rch apps]# sudo docker exec 6111c0314377 /var/www/onlyoffice/documentserver/npm/json -f /etc/onlyoffice/documentserver/local.json 'services.CoAuthoring.secret.session.string'
Q197Gz02BDhjzbAMGVYmKjqxtIZmzsPp
# 注意:每次重启后密钥会发生变化
  • nextcloud中点击右上角用户图标 -> 点击管理设置-> 点击左侧侧边栏的onlyoffice,进行服务器配置,如图:(记得保存)

在这里插入图片描述

测试
  • 在 NextCloud 中点击 “文件"→"新建"→"文档 / 表格 / 幻灯片”,能正常打开并编辑,说明集成成功。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

阶段 7:配置内网穿透,实现公网访问

  • 网址:https://www.cpolar.com/
    在这里插入图片描述
# xftp上传cpolar
[root@rch ~]# ls
anaconda-ks.cfg  cpolar-stable-linux-amd64.zip  nextcloud
[root@rch ~]# unzip cpolar-stable-linux-amd64.zip 
Archive:  cpolar-stable-linux-amd64.zip
  inflating: cpolar                  
[root@rch ~]# ./cpolar authtoken OWQ2MTA2MGMtNzIw...................ZjAzOWU3
Authtoken saved to configuration file: /root/.cpolar/cpolar.yml

# 将本地 80 端口(NextCloud 服务)映射到公网
# 启动后,cpolar 会生成一个公网地址(如 https://309c8671.r7.cpolar.top),通过该地址即可在公网访问你的 NextCloud 网盘。
[root@rch ~]# ./cpolar http 80

# 切换到另一个终端,为避免公网访问时出现 "不信任域名" 错误,需修改 NextCloud 配置:
[root@nextcloud ~]# vim  /root/nextcloud/config/config.php
…………
array (
          0 =>'192.168.120.129', #本机IP
          1 =>'309c8671.r7.cpolar.top',  #公网域名
   # 添加域名信任
  ),
……

在这里插入图片描述

  • 用手机访问试试

在这里插入图片描述

五、 总结

  • 通过这次项目,我掌握了用 Docker 部署 NextCloud 个人网盘系统的完整流程。从搭建 OpenEuler 虚拟机环境开始,学习了如何关闭防火墙和 SELinux 以确保环境通畅,接着安装并配置 Docker,包括设置镜像加速器来提升拉取镜像的速度。

  • 在实际操作中,我成功拉取了 NextCloud、MySQL 和 OnlyOffice 的镜像,依次配置并启动了这些容器。其中,MySQL 数据库的配置让我熟悉了数据持久化的重要性,通过挂载目录确保数据不会因容器删除而丢失;NextCloud 的初始化设置让我了解了网盘系统的基本配置逻辑;OnlyOffice 的集成则实现了在线文档编辑功能,还学会了获取和配置密钥来保证连接安全。

  • 最后,通过 cpolar 实现内网穿透,让我明白了如何将本地服务暴露到公网访问,同时掌握了修改 NextCloud 配置文件以信任公网域名的方法。整个过程巩固了我对容器技术、服务部署和系统配置的知识,也提升了实际动手能力,为今后的相关学习和实践积累了经验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值