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的主要目标是“BuildShip 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. 任务清单

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

最后实现内网穿透。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐