其他

Nextcloud的一些Tips

1.可以从下面的Docker找到NextCloud的各种版本


https://hub.docker.com/_/nextcloud/tag

命令的例子

docker pull nextcloud:28.0.1

docker run -d --name nextcloud -p 8080:80 -v /mnt/nextcloud:/var/www/html nextcloud:28.0.1

2.Python调用nextcloud api


Python 接口调用例子

# -*- coding: utf-8 -*-
from nextcloud import NextCloud

NEXTCLOUD_URL = 'http://localhost'
NEXTCLOUD_USERNAME = 'admin'
NEXTCLOUD_PASSWORD = 'admin'
to_js = True

nxc = NextCloud(endpoint=NEXTCLOUD_URL, user=NEXTCLOUD_USERNAME, password=NEXTCLOUD_PASSWORD, json_output=to_js)
# 获取用户的列表
a = nxc.get_users()
print(a.data)


# 获取用户的文件夹信息
c = nxc.list_folders('admin')
print(c.data)

# 上传图片
local_filepath = '/Users/zexin.zhang/Pictures/pap.er/8.jpg'
upload_filepath = 'Photos/8.jpg'

b = nxc.upload_file('admin', local_filepath, upload_filepath)
print(b.data)

# 分享图片拿到公共链接
d = nxc.create_share('Photos/8.jpg', 3)

print(d.data)

d_data = {'id': '1', 'share_type': 3, 'uid_owner': 'admin', 'displayname_owner': 'admin', 'permissions': 1,
          'stime': 1566884948, 'parent': None, 'expiration': None, 'token': 'nc5kJe8k7ATCHy2',
          'uid_file_owner': 'admin', 'note': '', 'label': '', 'displayname_file_owner': 'admin',
          'path': '/Photos/8.jpg', 'item_type': 'file', 'mimetype': 'image/jpeg', 'storage_id': 'home::admin',
          'storage': 2, 'item_source': 151, 'file_source': 151, 'file_parent': 8, 'file_target': '/8.jpg',
          'share_with': None, 'share_with_displayname': None, 'password': None, 'send_password_by_talk': False,
          'url': 'http://localhost/s/nc5kJe8k7ATCHy2', 'mail_send': 1, 'hide_download': 0}

3. Nextcloud优化


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

  • 3.1 优化后台任务

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

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

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

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

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

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

crontab -e

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

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

其中nextcloud为定义的容器名称,可根据实际情况调整

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

  • 3.2 生成图片缩略图:Preview Generator

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

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

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

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

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

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

# 每天23点执行缩略图
0 23 * * * docker exec --user www-data nextcloud php occ preview:pre-generate
  • 3.3 生成视频缩略图

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

# 换源
docker exec -it --user root nextcloud sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
docker exec -it --user root nextcloud apt-get update
# 安装ffmpeg
docker exec -it --user root nextcloud apt-get -y  install ffmpeg
# 验证
docker exec -it nextcloud 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', 
],

重启容器即可生效

  • 3.4 设置自动扫描文件

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

执行索引命令:

docker exec --user www-data nextcloud php occ files:scan --all
  --path                #限制扫描路径
  --all                 #扫描所有已知用户的所有文件
  --quiet               #不输出统计信息
  --verbose             #在扫描过程中显示正在处理的文件和目录
  --unscanned           #仅扫描以前未扫描过的文件

执行命令后未进行扫描并列出扫描信息。

如果不想显示扫描信息,可以在后面加上 –quiet ,如下:

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

总是扫描全部信息并不是那么有必要,还会白白消耗服务器资源,可以用–path扫描指定的目录

当使用 --path

选项时,该路径必须包含以下部分:
   "user_id/files/path"
重要:其中 /files/ 是必须要加上的,不可忽略。

#例子 指向用户ChengYe的Photos文件夹
docker exec --user www-data nextcloud php occ files:scan --path="/ChengYe/files/Photos" 

如果添加完文件删除不了,往往是权限问题,可以执行下面的命令修改文件夹和文件权限。

chown -R 33:tape /mnt/nextcloud/data/ChengYe/files/AI

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

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

4. 挂载本地或者远程磁盘


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

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

支持好多种连接方式