白粥

技术乐园

0%

Nextcloud 一站式体验

最近整理了几块旧硬盘,看到了很多十几年前的老照片,很是感慨!于是想用旧笔记本搭建一个私有的网盘,将这些美好的照片管理起来。下面记录本次搭建的过程。

1. 环境与版本

1.1 基本信息

  • 宿主机:Ubuntu 20.04

  • Nextcloud21.0.1

  • 测试时间:2021-05

1.2 参考链接

2. Docker 部署 Nextcloud

2.1 docker-compose.yml

version: '2'

services:
db:
image: mariadb
container_name: nextcloud-db
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- /{宿主机挂载路径}/nextcloud-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD={ROOT密码:xxxx}
- MYSQL_DATABASE={数据库名:xxxx}
- MYSQL_USER={用户:xxx}
- MYSQL_PASSWORD={密码:xxxx}

redis:
image: redis:alpine
container_name: nextcloud-redis
restart: always

app:
image: nextcloud
container_name: nextcloud-app
restart: always
ports:
- 80:80
links:
- db
- redis
volumes:
- /{宿主机挂载路径}/nextcloud-data:/var/www/html
environment:
- MYSQL_DATABASE={数据库名:xxxx}
- MYSQL_USER={用户:xxx}
- MYSQL_PASSWORD={密码:xxxx}
- MYSQL_HOST=db
- REDIS_HOST=redis

将以上示例文件中的“{xxxx}”替换成真实的值之后,执行命令即可启动NextCloud:

docker-compose up -d

image-20210518144147130

2.2 添加Docker用户组

安装Docker之后,如果当前用户不是管理员,在执行docker命令时需要加上 “sudo”。此时把当前用户加入到Docker用户组即可正常访问。

# 1. 新建docker组
sudo groupadd docker

# 2. 将当前用户加入到docker组
sudo gpasswd -a $USER docker

# 3. 更新用户组
sudo newgrp docker

# 4. 测试
docker images

3. Nextcloud优化

由于我们是通过旧设备搭建的Nextcloud,在通过浏览器访问Nextcloud会发现特别慢。别担心,这并不一定是硬件老旧的原因,我们可以通过以下尝试来优化nextcloud的速度,提升用户体验。

3.1 优化后台任务

点击用户头像,在下拉列表中选中“设置”选项;

image-20210518144359678

在“管理”菜单项下,点击“基本设置”功能,我们可以看到 “后台任务”功能。后台任务默认是以“AJAX”的形式执行的,所以我们访问页面时会觉得很慢。我们选择推荐配置,选中“Cron”。利用系统的定时任务执行相关的后台任务,提高页面的响应速度。

AJAX:调度方法是默认选项。不幸的是,它也是最不可靠的。每次用户访问Nextcloud页面时,都会执行一个后台作业。这种机制的优点是它不需要访问系统也不需要注册第三方服务。与Webcron服务相比,这种机制的缺点是它需要定期访问页面才能触发它。

Webcron: 通过在外部webcron服务(例如,easyCron)上注册Nextcloud cron.php脚本地址,可以确保定期执行后台作业。要在服务器上使用此类服务,您必须能够使用Internet访问服务器。

Cron: 使用操作系统cron功能是执行常规任务的首选方法。此方法可以执行预定作业,而不会受到Web服务器可能具有的固有限制。

image-20210518144504974

通过命令对当前用户添加自动任务:

crontab -e

-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

在文字编辑器中添加命令,5分钟执行一次容器内的cron.php文件:

*/5 * * * * docker exec --user www-data nextcloud-app php /var/www/html/cron.php

其中nextcloud-app为docker-compose.yml中定义的容器名称,可根据实际情况调整

添加完成后,可以在“基本设置”页面观察后台任务的执行情况。

image-20210518145536519

3.2 生成图片缩略图:Preview Generator

应用商店

Preview Generator是Nextcloud应用商店中提供的插件,可以提前生成图片的缩略图,提升系统性能,提高加载速度。

image-20210518150058464

如果安装失败,我们根据提示,把对应的下载地址复制出来,通过其他方式下载之后,解压到nextcloud的 “/var/www/html/apps”**目录下,然后再回到应用安装界面,点击“启用”**即可。

安装完成后,我们执行以下命令,生成图片的缩略图即可:

docker exec --user www-data nextcloud-app php occ preview:generate-all

对应的缩略图会存储在 “/var/www/html/data/appdata_ocjvg36ftk1b/preview”目录下。

3.2.1 设置自动任务

我们可以通过添加自动任务来自动生成图片的缩略图,向之前一样,执行 “crontab -e”命令,添加如下条目即可:

# 每天23点执行缩略图
0 23 * * * docker exec --user www-data nextcloud-app php occ preview:pre-generate

3.3 生成视频缩略图

Nextcloud默认不会开启 视频和PDF 的缩略图,在使用时多有不便。下面我们给它添加视频缩略图功能。该功能依赖 ffmpeg,可通过以下命令为 容器 安装依赖:

# 换源
docker exec -it --user root nextcloud-app sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
docker exec -it --user root nextcloud-app apt-get update
# 安装ffmpeg
docker exec -it --user root nextcloud-app apt-get -y install ffmpeg
# 验证
docker exec -it nextcloud-app ffmpeg

“/var/www/html/config/config.php”最后添加配置(注意逗号):

'enabledPreviewProviders' => [
'OC\Preview\PNG',
'OC\Preview\JPEG',
'OC\Preview\GIF',
'OC\Preview\HEIC',
'OC\Preview\BMP',
'OC\Preview\XBitmap',
'OC\Preview\MP3',
'OC\Preview\TXT',
'OC\Preview\MarkDown',
'OC\Preview\OpenDocument',
'OC\Preview\Krita',
'OC\Preview\Movie',
],

image-20210518153727358

重启容器即可生效:

docker-compose restart

3.4 设置自动扫描文件

如果我们有非常多的资料需要加入到Nextcloud中,显然自带的上传功能并不能满足需求。我们可以把资料直接复制到对应的用户目录下:“/var/www/html/data/{用户}/files”,然后让Nextcloud自动扫描即可加入到索引中。

image-20210518154157426

执行索引命令:

docker exec --user www-data nextcloud-app php occ files:scan --all

3.4.1 设置自动扫描任务

我们可以通过添加自动任务来自动生成文件的索引,向之前一样,执行 “crontab -e”命令,添加如下条目即可:

# 每30分钟扫描目录
*/30 * * * * docker exec --user www-data nextcloud-app php occ files:scan --all

3.5 挂载本地或者远程磁盘

在 “应用 > 您的应用”中,将“External storage support” 启用即可。

image-20210518155020410

在“设置 > 管理 > 外部存储”中即可管理外部存储。

image-20210518155200523

4. 总结

以上安装和优化之后,软件部分基本告一段落。但是如果想获得更佳的使用体验,还需要搭配 千兆路由器5G网卡 等硬件。软硬兼备之后,才能提供更佳的局域网访问速度。