失踪人口回归,时隔5年又来折腾吃灰的树莓派了。这次的需求是摆脱手机厂商的云服务,实现跨平台的照片备份。


准备工作

  • 树莓派3b一只
    考虑到能快速搭建且尽可能少踩坑,所以使用现成的Docker进行部署。

架设环境

首先我们在官方的Raspberry OS上安装Docker。

安装docker图形化界面

sudo docker pull cr.portainer.io/portainer/portainer-ce

sudo docker volume create portainer_data

sudo docker run -d -p 9000 : 9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data cr.portainer.io/portainer/portainer-ce

通过Docker Compose生成

编辑 docker-compose.yml

services:
  db:
    image: ibex/debian-mysql-server-5.7  # mysql 镜像文件
    restart: always
    volumes:
      - ./cloud/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=******  # root 账号密码,根据需要更改 
      - MYSQL_PASSWORD=****** # 普通账号密码,根据需要更改 
      - MYSQL_DATABASE=nextcloud  # 数据库名
      - MYSQL_USER=nextcloud  # 普通用户名
  app:
    image: nextcloud  # nextcloud 镜像文件
    privileged: true  # 拥 有root 权限
    ports:
      - 8888:80  # 端口映射,将 Docker 的80端口,映射成主机的 8888 端口,根据需要更改
    links:
      - db  # db 是别名,使用该别名访问 前面定义的 db。nextcloud 启动时数据库的链接填 db。
    volumes:
      - /mnt/sda1/cloud/config:/var/www/html/config
      - /mnt/sda1/cloud/data:/var/www/html/data  # 因为树莓派本身存储太小,这里是映射到一个外置硬盘
      - /mnt/sda1/cloud/apps:/var/www/html/apps
    restart: always

  redis:
    image: redis  # redis
    container_name: redis-d  # 别名
    privileged: true  # 拥有 root 权限
    restart: always
    command: --appendonly yes  --requirepass "******"  # appendonly 持久化的模式, requirepass 设置密码 password
    ports:
            - 16379:6379  # redis 6379 映射到主机的 16379 端口
    volumes:
            - /mnt/sda1/cloud/redis/data:/data  # 数据目录映射点
            - /mnt/sda1/cloud/redis/conf:/usr/local/etc/redis/redis.conf  # 配置文件映射点

执行 docker-compose up -d


启用服务

登录NextCloud的后台

微信截图_20220609200702


额外

  • 为了提高网页访问速度,我们配置redis对资源进行缓存
    修改config.php
  'memcache.local' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array(
    'host' => 'redis',
    'port' => 6379,
    'password' => '******'
  ),
  • 解除文件上传时 “块大小” 的限制

    image-20220614112318297

    occ config:app:set files max_chunk_size --value 0
    
  • 同时我们可以为图片、视频等开启缩略图

    首先记得安装ffmpeg apt install ffmpeg -y

    修改config.php

  'enable_previews' => true,
  'enabledPreviewProviders' =>
  array (
    0 => 'OC\\Preview\\Image',
    1 => 'OC\\Preview\\Movie',
  ),

总结

总的体验下来,NextCloud的备份可以满足需求,上传速度最高能达到10M,基本上可以跑满3B的百兆小水管。不过看到Nextcloud的同步逻辑是以云端为主,删除云端本地会同步删除,本地删除后会自动同步到本地,这一点还未测试。等后续再体验几天,再来更新一波。


更新

今天重装了系统,但是之前上传的照片数据还在硬盘上,于是可以将原来的data目录下的上传数据进行复制,随后重建NextCloud索引即可。

nextcloud php occ files:scan --all # www-data 用户下执行
docker exec -u www-data nextcloud php occ files:scan --all # 或者从外部指定docker用户操作

微信截图_20220613160937