群晖Photos 同步照片到Google pixel 手机

23 min read

syncthing同步服务

Syncthing 是一个免费、开源的连续文件同步程序,它可以有效地同步文件夹之间的文件,无论设备在地理上相隔多远。它被设计为一种安全、分散的方式来同步文件,以替代传统的云存储服务。

要使用 Syncthing,需要在想要同步文件的每台设备上安装 Syncthing。然后,通过它的 Web GUI 添加并链接设备,并选择要同步的文件夹。设备之间会相互“发现”并开始同步选定的文件夹。可以配置同步的具体行为,如同步频率、同步文件类型等。

version: '3'
services:
  syncthing:
    image: ghcr.io/linuxserver/syncthing
    container_name: syncthing
    environment:
      - PUID=1026  # 替换为你的PUID
      - PGID=65536  # 替换为你的PGID
      - TZ=Asia/Shanghai  # 设置为上海时间
    volumes:
      - /var/services/homes/<yourname>/docker/syncthing/config:/config
      - /var/services/homes/<yourname>/Photos/:/data
    ports:
      - 8384:8384
      - 22000:22000/tcp
      - 22000:22000/udp
      - 21027:21027/udp
    restart: always

上面的配置文件有两点需要说明

1.挂载点

群晖Photos照片的存放路径为 /var/services/homes/<yourname>/Photos/

这里将/var/services/homes/<yourname>/Photos/ 挂载到容器内的/data

2.权限问题

在群晖 NAS (Synology NAS) 上安装 Docker 并运行容器时,PUIDPGID 是用来指定容器内运行进程的用户和组的身份。这是因为在 Linux 系统中,文件和进程的权限是通过用户 ID(UID)和组 ID(GID)来控制的。而群晖 NAS 也是基于 Linux 的,所以这同样适用。

这样做的原因是为了安全和权限管理。当 Docker 容器访问宿主机的文件系统时,您希望它以特定的用户权限来进行,以避免权限太高导致安全风险,或权限太低导致无法读写所需文件。

要找到您在群晖上的 PUIDPGID,您可以通过以下方法:

id

或者指定用户名来获取特定用户的 UID 和 GID:

id 用户名

这将输出类似于这样的信息:

uid=1026(yourname) gid=100(users) groups=100(users),101(administrators)

在这个例子中,1026 就是 PUID100 就是 PGID

找到 PUIDPGID,替换 docker-compose.yaml 文件中的相应行。

确保使用无特权的普通用户的 PUIDPGID,通常不建议使用管理员账号(例如 root)的 PUIDPGID,以免容器拥有过高的权限。

修改 docker-compose.yaml 文件后,需要重新启动 Docker 服务或容器来使更改生效。

docker-compose up -d

这条命令将在后台启动或更新您的 Docker 容器。

第一步: NAS 配置共享文件夹

这一步主要是为了将群晖NAS应用程序photos的照片内容同步给其它设备

syncthing安装完成后的相关配置如下:

常规选项下

  1. 文件夹标识:这里的“photos”是文件夹的唯一标识符,用于在Syncthing中区分不同的文件夹。
  2. 文件夹路径:指的是文件夹在设备上的存储位置,这里的“/data”表示文件夹位于根目录下的data文件夹中。也就是容器内的/data

这个文件用于指定同步过程中应该忽略的文件和目录。配置说明中包括了一些特殊的符号和它们在忽略规则中的作用:

  1. !:表示例外规则,即使之前的规则指定忽略,该规则之后的文件或文件夹仍会被同步。
  2. *:匹配任意数量的字符,但不包括目录分隔符。
  3. **:匹配任意数量的字符,包括目录分隔符。
  4. //:用于注释,注释的行将不会被Syncthing处理。

文件顶部列出的条目是实际的忽略规则示例:

  • Camera/@eaDir/
  • @eaDir
  • json

在文件夹类型里面选择仅发送: 表示NAS向pixel的单向传输

第二步: 添加远程设备

添加远程设备之前需要我们在其它设备上安装好syncthing的应用 打开应用后找到对应的设备编码,将其填入到如图所示的位置

其中

  1. 设备ID:这里需要输入想要连接的设备的唯一识别码。在Syncthing中,每个设备都有一个独特的ID,通常是一串由字母和数字组成的复杂代码。这个ID用于在设备间建立安全的连接。
  2. 设备名:可以为连接的设备指定一个名称,以便于在多设备管理中更容易识别。通常,这个名称可以是任何有助于用户识别设备的字符串,例如设备的类型、位置或用途等。

第三步: 同步

添加完设备后, pixel手机会自动弹出远程目录共享提示 点击通知提示后设置本地存储目录

需要注意的一点是目录设置为/storage/emulated/0/DCIM 方便Google Photos 的读取

接下来就可以使用 pixel 无限的免费照片同步

If you have a Pixel 1-5, photos uploaded from that device won’t be impacted. Photos and videos uploaded in High quality from that device will continue to be exempt from this change, even after June 1, 2021.