
最近越来越觉得数据安全的重要性,百度网盘、腾讯微云这些公有云虽然方便,但数据放在别人服务器上总是不太放心。特别是一些个人照片、工作文档、学习资料什么的,还是想放在自己的服务器上。于是就想着搭建一个私有云盘,把数据完全掌握在自己手里。
在选择操作系统的时候,我对比了 CentOS、Ubuntu Server 和 openEuler,最终选择了 openEuler。这是一个非常正确的决定!

openEuler 是什么?
openEuler 是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,是一个面向数字基础设施的操作系统。它支持服务器、云计算、边缘计算、嵌入式等多种应用场景,是真正意义上的"全场景"操作系统。
为什么我选择 openEuler?
实际使用体验:
我从今年开始用 openEuler 22.03 LTS-SP1,到现在已经跑了好几个月了,部署了 WordPress、MySQL、Nextcloud 等多个应用,系统一次都没出过问题。稳定性真的很赞!而且对 Docker 的支持特别好,容器启动速度快,资源调度也很合理。
搜了一圈,发现 Nextcloud 挺火的。这玩意儿是开源的,功能很全,文件同步、在线编辑、日历、联系人啥都有,关键是部署简单,用 Docker Compose 几分钟就能跑起来。而且 Nextcloud 的 Docker 镜像在 openEuler 上运行特别流畅,兼容性完美。
这次实战目标:
服务器还是上次那台,配置没变:

从上图可以看到服务器的基本信息,系统是 openEuler 22.03 (LTS-SP1),内核版本是 5.10.0。这个环境在第一篇文章里已经搭建好了,这次可以直接用。
Docker 环境是现成的,之前部署 WordPress 的时候已经装好了:

从图中可以看到 Docker 26.1.4 已经安装好了,服务状态是 active (running)。如果你还没装 Docker,可以参考我之前写的那篇文章,里面有详细的安装步骤。这里就不重复了。
Nextcloud 是一个开源的私有云存储解决方案,可以理解为自己搭建的"百度网盘"。主要功能有:
个人用来搭建私有云盘、家庭云存储都挺合适的。Nextcloud 在 GitHub 上有 27K+ 的 star,社区很活跃,插件生态也很丰富。
这次部署包含两个容器:
两个容器通过自定义网络互联,数据通过数据卷持久化。这种架构的好处是:即使容器重启或删除,数据也不会丢失。
先创建一个项目目录。我喜欢把所有 Docker Compose 项目都放在统一的目录下,方便管理:
# 创建 Nextcloud 项目目录
mkdir -p acowbo/docker-compose-project/nextcloud
cd acowbo/docker-compose-project/nextcloud
# 确认当前路径
pwd
从截图可以看到,项目目录创建成功。同时也能看到之前的 wordpress 目录,说明我们的项目结构很规范。用 docker ps 查看了一下,之前部署的 WordPress 容器还在跑着,这次部署 Nextcloud 不会影响它。
我们新部署的 Nextcloud 用的是 8090 端口,和 WordPress 的 8080 端口不冲突。这就是容器化的好处,多个应用可以在同一台服务器上和平共处,互不干扰。
接下来编写 Docker Compose 配置文件。配置很简单,两个服务 + 两个数据卷 + 一个网络:
version: '3.8'
services:
db:
image: mariadb:10.11
container_name: nextcloud_mariadb
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
environment:
MYSQL_ROOT_PASSWORD: nextcloud_root_pass
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: nextcloud_pass
volumes:
- db_data:/var/lib/mysql
networks:
- nextcloud_net
nextcloud:
image: nextcloud:latest
container_name: nextcloud_app
restart: always
depends_on:
- db
ports:
- "8090:80"
environment:
MYSQL_HOST: db
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: nextcloud_pass
NEXTCLOUD_ADMIN_USER: admin
NEXTCLOUD_ADMIN_PASSWORD: admin123
NEXTCLOUD_TRUSTED_DOMAINS: '*'
volumes:
- nextcloud_data:/var/www/html
networks:
- nextcloud_net
volumes:
db_data:
nextcloud_data:
networks:
nextcloud_net:
driver: bridge配置文件说明几个关键点:
数据库服务(db):
Nextcloud 服务(nextcloud):
NEXTCLOUD_TRUSTED_DOMAINS: '*' 允许任意域名访问(生产环境建议改成具体域名)数据卷(volumes):
db_data:存储 MariaDB 数据nextcloud_data:存储 Nextcloud 文件和配置配置文件写好后,一行命令就能启动所有服务:
# 启动容器(后台运行)
docker-compose up -d
# 查看容器状态
docker ps第一次启动会拉取镜像,Nextcloud 镜像大概 1GB 左右,MariaDB 大概 400MB,根据网速可能要等几分钟。我这边网速还行,大概3分钟就下载完了。

从截图可以看到,两个容器都成功启动了:
容器名称、端口映射、运行状态都很清晰。这就是 Docker Compose 的魅力,复杂的多容器应用管理起来很轻松。
容器启动后,在浏览器里访问:http://<服务器IP>:8090

看到这个页面说明 Nextcloud 已经成功跑起来了。这是 Nextcloud 的登录/初始化页面。因为我们在 docker-compose.yml 里已经配置了管理员账号和数据库连接,Nextcloud 会自动完成初始化,不需要手动填写那些配置了。
登录信息:
adminadmin123直接用这个账号密码登录就行。首次登录可能需要等待1-2分钟,Nextcloud 在后台初始化数据库表结构。
登录成功后就能看到 Nextcloud 的主界面了:

界面很清爽,功能也很全。左侧是导航菜单,可以看到:
中间是文件列表区域,可以上传、下载、分享文件,就像操作本地文件夹一样。右上角有用户信息和搜索功能。
整体使用体验和百度网盘差不多,但这是自己的服务器,数据完全掌握在自己手里。
我简单测试了几个功能:
上传文件:
创建文件夹:
分享文件:
这些基础功能都很流畅,没有什么问题。
部署完成后,记录几个常用的管理命令:
# 查看容器状态
docker-compose ps
# 查看日志
docker-compose logs nextcloud
docker-compose logs -f nextcloud # 实时查看
# 停止服务
docker-compose stop
# 启动服务
docker-compose start
# 重启服务
docker-compose restart
# 停止并删除容器(数据不会丢失)
docker-compose down
# 停止并删除容器和数据卷(慎用!)
docker-compose down -v看了下容器的资源占用情况:
docker stats --no-stream

Nextcloud 和 MariaDB 两个容器加起来,内存占用大概 500MB 左右,CPU 基本可以忽略。这个资源消耗在可接受范围内,16GB 内存的服务器跑十几个这样的应用都没问题。
从创建目录到能正常使用,整个过程不到 10 分钟。Docker Compose 确实很方便,一个配置文件就能管理多容器应用,比手动安装配置 Nextcloud + MariaDB 省事太多了。
openEuler 的表现真的让我印象深刻:
对比其他发行版:
我之前在 CentOS 7 和 Ubuntu 20.04 上也部署过类似的应用,对比下来:
写在最后:
这次部署 Nextcloud 的经历让我对容器化部署有了更深的认识。同一台服务器上跑着 WordPress、Nextcloud,两个应用各自独立,互不干扰,资源占用也在合理范围内。这就是云原生的魅力所在。
强烈推荐 openEuler!
作为一个用过 CentOS、Ubuntu、Debian 的老用户,openEuler 真的给了我太多惊喜:
建议:
如果你也想尝试 openEuler + Docker Compose 部署应用:
openEuler 现在已经是我的首选服务器操作系统了。无论是个人学习、私有云部署,还是生产环境使用,openEuler 都是一个值得信赖的选择。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。