自建照片/视频管理方案(Immich)

发表于 更新于

前言

Immich 是一个开源的照片/视频管理方案,它的功能和用途类似于 Google 相册或 iCloud 照片。任何个人都可以利用 Immich 搭建自己私有的云同步相册,并支持多端/多人使用。

本文将告诉你怎么部署。这是一篇新手向教程。过程十分简单!

效果

Immich 各端截图

过程

建议使用内网的路由器/软路由或 NAS 等设备,这样安全、速度快。路由器需使用 OpenWrt 或与之类似的 Linux 发行版,因为我们将使用 Docker 和 Docker Compose 部署,便于迁移和升级。

配置文件

假定你部署在 immich 目录,它最好在机械硬盘所在的目录。首先在此目录下创建 docker-compose.yml 文件:

services:
  server:
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:
      - ./upload:/usr/src/app/upload
    ports:
      - 2283:3001
    env_file:
      - .env
    depends_on:
      - redis
      - database
    restart: always

  machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    volumes:
      - ./model_cache:/cache
    env_file:
      - .env
    restart: always

  redis:
    image: redis:7
    healthcheck:
      test: redis-cli ping || exit 1
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    restart: always

  database:
    image: tensorchord/pgvecto-rs:pg16-v0.2.1
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: "--data-checksums"
    volumes:
      - ./data:/var/lib/postgresql/data
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_period: 5m
    command:
      [
        "postgres",
        "-c",
        "shared_preload_libraries=vectors.so",
        "-c",
        'search_path="$$user", public, vectors',
        "-c",
        "logging_collector=on",
        "-c",
        "max_wal_size=2GB",
        "-c",
        "shared_buffers=512MB",
        "-c",
        "wal_compression=on",
      ]
    restart: always

先不要部署,我们还需要创建 .env 文件:

IMMICH_VERSION=v1.106.4
DB_DATABASE_NAME=immic_prod
DB_USERNAME=postgres
DB_PASSWORD=数据库密码

使用 openssl rand -hex 16 命令生成数据库密码(或其它方式生成随机字符串)将其填入 .env 文件,替换“数据库密码”。记得将 IMMICH_VERSION 换成最新的版本。

还需要 Redis 的配置文件:

touch redis.conf

这是一个空的配置文件,有经验的用户可按需调整。

不要修改 docker-compose.yml 中任何一个容器的名称,它们通常是该服务默认的 host 地址。

部署

现在执行 docker-compose up -d 命令部署。稍等片刻使用 docker compose logs server 查看日志,如果有报错例如 Redis 连接错误,再进一步查看 Redis 容器的日志。

如果你在 arm64 设备部署,可能会遇到 Redis 拒绝启动的错误,例如:

Redis will now exit to prevent data corruption. Note that it is possible to suppress this warning by setting the following config: ignore-warnings ARM64-COW-BUG

这就是我为什么要挂载一个 Redis 配置在外部的原因。我们编辑 redis.conf 文件,添加以下内容:

ignore-warnings ARM64-COW-BUG

使用命令 docker-compose restart 重启即可成功。

Immich 服务端是由官方的 Server 程序、Redis 和 Postgres 三个服务共同支撑的,外加一个机器学习服务。对于路由器等小型设备可能不是很适合,建议使用内存更大的设备。

访问

用浏览器访问 2283 端口,正确的情况下会看到注册页面。注册后即可使用。如果无法访问,需进一步检查容器日志中的错误。

假设你的 Immich 部署在 192.168.1.1 上,那么浏览器访问地址是 192.168.1.1:2283,API 地址是 http://192.168.1.1:2283/api

其它 Immich 客户端需输入 API 地址才能使用,这里整理了一些客户端下载地址:

通常在初次启动客户端以后,输入 API 地址就能使用了。

数据位置

按照我的 Docker Compose 模板部署后,各种数据的位置如下:

  • 数据库数据(如帐号、链接、照片分类等)保存到部署目录的 data 文件夹下
  • 照片/视频等文件数据保存在部署目录的 upload 文件夹下
  • 机器学习模型缓存保存在部署目录的 model_cache 文件夹下

若要迁移数据,使用 docker compose stop 命令停止所有服务,再将 data/upload 两个目录连带配置文件转移即可。

升级

修改部署目录的 .env 文件,将 IMMICH_VERSION 的值改为最新版本,最后执行 docker-compose up -d 即可。

结束语

我的配置模板基于官方的 docker-compose.yml 做了一些调整、清理和升级。本文可能不会总是更新,如果配置过时请参考此仓库:Hentioe/dockerized-apps(这里会同步我的最新配置)。

作者头像 一点点入门知识 打赏作者
本文由作者按照 CC BY 4.0 进行授权
分享: