一、nextcloud 服务介绍
- 数据安全与隐私保护:部署在私有环境中,数据完全由用户掌控,可避免数据存储在公有云时可能出现的隐私泄露风险。同时,它提供多种加密方式,如文件加密、传输加密等,进一步保障数据的安全性。
- 高度可定制化:基于开源特性,用户能够自由地对其进行个性化定制和二次开发,以满足不同的业务需求和功能要求。例如,可以根据企业的特定工作流程定制文件管理功能,或者与其他内部系统进行集成。
- 丰富的功能插件:拥有大量的插件扩展,涵盖文件同步、共享、协作、日历、联系人管理等多个方面。比如通过相关插件,可以实现多人在线协作编辑文档,方便团队合作。
- 多平台支持:支持在多种操作系统上部署,包括 Linux、Windows、macOS 等,同时提供桌面端、移动端应用,方便用户在不同设备上随时随地访问和管理自己的数据。
- 良好的协作性能:支持用户之间方便地共享文件和文件夹,并可设置不同的权限,如只读、读写等。还能实现文件的版本控制,方便用户查看和恢复文件的历史版本,有利于团队协作中的文件管理和维护。
- 成本效益高:相比于一些商业的私有云解决方案,Nextcloud 是开源免费的,用户无需支付高昂的软件授权费用,降低了企业或个人搭建私有云存储的成本。
二、部署服务
基础信息
机器IP地址10.10.110.79 配置8C16G3T硬盘
系统内核优化至 5.16.13-1.el7.elrepo.x86_64 版本
Docker-Compose 服务 v2.30.3 版本 (安装过程省略)
docker-ce 服务 26.1.3-1 版本(安装过程省略)
docker-ce服务变更存储路径 Docker Root Dir: /data/dockerdb
硬盘挂载配置及扩展性验证
目前是3T硬盘,现在扩容到5T硬盘。在控制台修改后进入系统扩容,模拟有数据情况下扩容。硬盘挂载到/data目录下并写入fstab文件中。
硬盘挂载
mount /dev/sdb /data# 开机启动挂载
n]# cat /etc/fstab
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=xxxx02-cc66-4e12-929d-2xxxx2d95 /data xfs defaults 0 0
硬盘扩展性验证。进入系统观察硬盘是3T空间。扩容到5T空间。
# 查看现有的硬盘空间
/dev/sdb 3.0T 33M 3.0T 1% /data]# partprobe /dev/sdb #命令用于在不重启系统的情况下重新读取磁盘分区表
]# fdisk -l磁盘 /dev/sdb:5497.6 GB, 5497558138880 字节,10737418240 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节#扩容
]# xfs_growfs /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=201326592 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=805306368, imaxpct=5= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=393216, version=2= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 805306368 to 1342177280#验证查看硬盘容量
# df -lh
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 7.9G 0 7.9G 0% /dev
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 7.9G 8.7M 7.9G 1% /run
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 495G 3.8G 492G 1% /
tmpfs 1.6G 0 1.6G 0% /run/user/1002
/dev/sdb 5.0T 33M 5.0T 1% /data
部署nextcloud服务
创建数据目录和存放脚本的目录
mkdir -p /data/work/nextcloud
cd /data/work/nextcloud
vi docker-compose.yml
docker-compose.yml 文件
version : '3.8'
services:nextcloud:container_name: nextcloudimage: nextcloudrestart: alwaysvolumes:- ./nextcloud:/var/www/htmlports:- "80:80"depends_on:- mysqlmysql:container_name: mysqlimage: mysql:5.7.44restart: alwaysbuild:context: ./mysqlports:- "3306:3306"volumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/logs:/logs- ./mysql/data:/var/lib/mysqlcommand: ['mysqld','--innodb-buffer-pool-size=80M','--character-set-server=utf8mb4','--collation-server=utf8mb4_unicode_ci','--default-time-zone=+8:00','--lower-case-table-names=1']environment:MYSQL_DATABASE: 'nextcloud'MYSQL_ROOT_PASSWORD: root
编辑好配置文件后部署
docker-compose up -d
访问
第一次访问IP地址+端口80 需要有一个初始化的过程。根据提示配置就好了。
IP地址+80 可以出来页面说明部署没有问题。 账号密码 admin / 123456
到此服务已经部署好了。
三、备份数据
这里备份 数据库文件和用户上传的数据文件。编写一个备份脚本,用宿主机的crontab每天晚上执行一次,本地数据的数据库文件只保留7天的文件。(10.10.10.101 是一个备份服务器)
#!/bin/bash# 设置MySQL数据库用户名和密码,根据实际情况修改
DB_USER="root"
DB_PASS="root"# 获取当前日期,格式为YYYYMMDD
CURRENT_DATE=$(date +%Y%m%d)# 备份文件名
BACKUP_FILE="/data/backup/nextcloud${CURRENT_DATE}.sql"# 使用mysqldump进行备份
mysqldump -h10.10.110.79 -u ${DB_USER} -p${DB_PASS} nextcloud > ${BACKUP_FILE}# 检查备份文件是否生成
if [ -f ${BACKUP_FILE} ]; thenecho "备份成功,备份文件为:${BACKUP_FILE}"
elseecho "备份失败,未找到备份文件:${BACKUP_FILE}"
fi# 本地备份保留7天的文件
find /data/backup/ -type f -name "*.sql" -mtime +7 -exec rm -f {} \;# 给远程备份机器推送备份文件
rsync -art /data/backup/* 10.10.10.101:/data2/yunpan/# 给远程备份机器推送file备份文件
rsync -art /data/work/nextcloud/nextcloud 10.10.10.101:/data2/yunpan/
四、恢复数据
模拟恢复数据。原机器10.10.110.79 因为各种原因损坏,需要用备份数据启动备份服务,提前准备好一个机器10.10.110.100 。
在原机器上创建一个文件 , web页面上创建10.10.110.79 创建文件 " test0409"
在服务器上find查询文件
# 源数据IP地址 10.10.110.79上操作data]# find / -name test0409
/data/work/nextcloud/nextcloud/data/f32xxa7-2b57-49x9-b2f1-70xxxbbe/files/test0409
把数据同步备份至 10.10.110.100 上(这里 10.10.110.100上已有nextcloud服务)
# 源数据IP地址 10.10.110.79上操作rsync --delete -avz /data/work/nextcloud/nextcloud/ 10.10.110.100:/data/work/nextcloud/nextcloud/
备份数据机器上查看
# 备份数据IP地址 10.10.110.100上操作nextcloud]# find / -name test0409
/data/work/nextcloud/nextcloud/data/f3xxxa7-2b57-4xx9-b2f1-70dxxxbbe/files/test0409
这里看到上面底层数据已经备份迁移过来了,开始修改配置文件
/data/work/nextcloud/nextcloud/config/config.php
# 备份数据IP地址 10.10.110.100上操作# 这里文件是源数据服务器备份过来的文件, IP地址是10.10.110.79 这里全部替换为10.10.110.100 (备份迁移后的IP地址) 需要修改为
cd /data/work/nextcloud/nextcloud/config/
sed -i 's/10.10.110.79/10.10.110.100/g' config.php
数据库sql文件 传递到恢复备份机器上
# 源数据IP地址 10.10.110.79上操作# 备份数据库文件
mysqldump -uroot -proot -h10.10.110.79 nextcloud > nextcloud.tar# 备份数据库文件传到10.10.110.100上
scp nextcloud.tar 10.10.110.100:/root
备份服务器 上修改数据库 数据
# 备份数据IP地址 10.10.110.100上操作# 进入数据库
mysql -uroot -proot -h10.10.110.100
# 删除原有数据库 (这里我没有备份,选择直接删除掉)
drop database nextcloud;
# 创建数据库
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 进入数据库
use nextcloud;
# 导入数据
source /root/nextcloud.tar;
# 数据库授权
GRANT ALL PRIVILEGES ON *.* TO 'oc_admin'@'%' IDENTIFIED BY ')fD7GLsssxq=XOGxxxxV<I,|';
# 刷新权限
FLUSH PRIVILEGES;
重启服务
# 备份数据IP地址 10.10.110.100上操作# 重启nextcloud服务容器
docker restart 666
关闭原云盘服务器 容器
# 源数据IP地址 10.10.110.79上操作nextcloud]# docker stop 666 888
这里避免服务连接到原来的服务器上,干扰备份迁移。
五、数据验证
访问页面 10.10.110.100
登录后查看到有 test0409 文件。这里数据备份恢复已完成。