最近整理了几块旧硬盘,看到了很多十几年前的老照片,很是感慨!于是想用旧笔记本搭建一个私有的网盘,将这些美好的照片管理起来。下面记录本次搭建的过程。
1. 环境与版本
1.1 基本信息
• 宿主机:Ubuntu 20.04• Nextcloud:21.0.1• 测试时间:2021-05
1.2 参考链接
•Nextcloud-DockerHub[1]•Nextcloud-官方文档[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

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 优化后台任务
点击用户头像,在下拉列表中选中“设置”选项;

在“管理”菜单项下,点击“基本设置”功能,我们可以看到 “后台任务”功能。后台任务默认是以“AJAX”的形式执行的,所以我们访问页面时会觉得很慢。我们选择推荐配置,选中“Cron”。利用系统的定时任务执行相关的后台任务,提高页面的响应速度。
AJAX:调度方法是默认选项。不幸的是,它也是最不可靠的。每次用户访问Nextcloud页面时,都会执行一个后台作业。这种机制的优点是它不需要访问系统也不需要注册第三方服务。与Webcron服务相比,这种机制的缺点是它需要定期访问页面才能触发它。
Webcron:通过在外部webcron服务(例如,easyCron)上注册Nextcloud cron.php脚本地址,可以确保定期执行后台作业。要在服务器上使用此类服务,您必须能够使用Internet访问服务器。
Cron:使用操作系统cron功能是执行常规任务的首选方法。此方法可以执行预定作业,而不会受到Web服务器可能具有的固有限制。

通过命令对当前用户添加自动任务:
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中定义的容器名称,可根据实际情况调整
添加完成后,可以在“基本设置”页面观察后台任务的执行情况。

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

如果安装失败,我们根据提示,把对应的下载地址复制出来,通过其他方式下载之后,解压到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',
],

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

执行索引命令:
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” 启用即可。

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

4. 总结
以上安装和优化之后,软件部分基本告一段落。但是如果想获得更佳的使用体验,还需要搭配 千兆路由器、5G网卡 等硬件。软硬兼备之后,才能提供更佳的局域网访问速度。
References
[1]
Nextcloud-DockerHub: https://hub.docker.com/_/nextcloud[2]
Nextcloud-官方文档: https://docs.nextcloud.com/server/latest/admin_manual/[3]
应用商店: https://apps.nextcloud.com/apps/previewgenerator




