作为一个萌新小白也想搭个内网照片站,转了一圈,也挑花了眼,最终还是选则了 Immich ,各种踩坑之后,算是基本跑起来了,贴一下我的部署方案吧,也算是做个笔记,刚入坑,非科班专家,求大佬们多多指点,轻喷 [Grin]
设备:
思路:本着分散计算和存储的 Old-School 传统,没把 Immich 直接扔到威联通的 Container Station 里面,而是把 Server 端,Maching-Learning ,Redis 这些都放到 AIO 上了,威联通上仅仅跑了 PostgreSQL 一个容器,然后为了方便查看,我还在 AIO 上启了 pgadmin4 这个 Container ,Immich 和 pgadmin4 都用 Nginx 做了反代,基本这样。
流程:
AIO 里面安装 Docker (按官方教程装的,需要配置 apt 源)
AIO 里面 apt 安装 Redis
AIO 里面 Redis 配置文件修改,绑定 docker 桥接网卡地址,并开启密码模式( Redis 非 lo 接口连接都需要密码)
AIO 里面 apt 安装 Nginx
TS216 装载 M2 Nvme SSD 并新建静态卷,静态卷里面创建名为 Container 的共享文件夹( PostgreSQL 数据库会放到这里)
TS216 里面安装 Container Station ,指定容器卷存储位置为上一步静态卷上的 Container 文件夹
TS216 Container Station 里面部署 Immich 要求的加了 vector extention 的 PostgreSQL
AIO Docker 启动 pgadmin4 Container (方便随后建库给 Immich 用,账号密码用上一步 compose 里面的,下面有贴出来)
AIO 登录 pgadmin4 web 界面,连接上 TS216 的 PG 后建库 immich
, 配置用默认的,我还 grant all 权限了
AIO 里面新建用户 immich:immich (记下 uid 和 gid ,通常一样的)
TS216 里面 ssh 登录,sudo 模式指定 uid 新建完全一致用户 immich:immich (重点是 uid 和 gid 与 AIO 上完全一致,否则后面 nfs 挂载会对不上权限)
TS216 QFirewall 防火墙里面新建规则,放行内网网段 5432/TCP 入站
TS216 新建 Shared Folder 名称为 /Immich
,导出为 NFS ,NFS 权限选 all squash 到 immich:immich 这个用户
AIO 里面递归创建目录 /var/lib/immich-app/library
把 immich 官方文档里面的 docker-compose.yml 和 example.env 下载下来到 immich-app 目录,example.env 重命名为 .env
用 chmod -R 模式把 library 目录变更用户为 immich:immich
编辑 /etc/fstab 并挂载从 TS216 导出的 NFS 目录到 /mnt/Immich
执行 systemctl daemon-reload 重新挂载 fstab
执行 mount -a 测试是否成功挂载 /Immich
nfs 文件夹(没报错表示成功)
把 library 目录移入 /mnt/Immich
注意此时 /mnt/Immich 在 TS216 上是指定的 immich:immich 用户,所以不能放其他用户的文件进去,我没试过,但应该是有权限问题的
Nginx 添加 /etc/nginx/conf.d/immich.conf 反代 Immich 到 80 端口(我还有其他的服务都部署的 80 ,而且也不想用端口访问 Immich )
大体上就是这些了,然后就是一些关键配置:
version: '3' services: postgres: image: tensorchord/pgvecto-rs:pg16-v0.1.11 restart: unless-stopped ports: - 5432:5432 volumes: - postgres_db:/var/lib/postgresql/data environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres volumes: postgres_db:
这里面重要的点主要是三个:
tensorchord/pgvecto-rs:pg16-v0.1.11
这个,用 PG 官方镜像的话不支持,因为 Immich 用到了 PG 的 vector 特性/var/lib/immich-app/docker-compose.yml
配置,用于 Immich server 端version: "3.8" name: immich services: immich-server: container_name: immich_server user: "${UID}:${GID}" image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} command: [ "start.sh", "immich" ] volumes: - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - 127.0.0.1:2283:3001 restart: unless-stopped immich-microservices: container_name: immich_microservices user: "${UID}:${GID}" image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # extends: # file: hwaccel.yml # service: hwaccel command: [ "start.sh", "microservices" ] volumes: - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env restart: unless-stopped immich-machine-learning: container_name: immich_machine_learning user: "${UID}:${GID}" image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} volumes: - model-cache:/cache env_file: - .env restart: unless-stopped volumes: model-cache:
这里注意的点主要是:
/var/lib/immich-app/.env
环境配置文件# Immich 照片和视频上传的物理存放位置,这里指到 nfs 文件夹了 UPLOAD_LOCATION=/mnt/Immich/library # Immich 部署的版本,我用了部署时候的最新版本 IMMICH_VERSION=v1.93.3 # 这里是我的 TS216 在内网环境的域名,换成 ip 也行 DB_HOSTNAME=nas.home # PG 的用户名和密码,这个在 TS216 compose 文件里面就可以指定 DB_USERNAME=postgres DB_PASSWORD=postgres # 这个库名就是前面 AIO 部署好 pgadmin4 之后在 web 界面里建好的 DB_DATABASE_NAME=immich # AIO 宿主环境部署好的 Redis # 重点,这里要写 docker 桥接网卡的地址,否则 docker 内部连不上宿主环境的 Redis REDIS_HOSTNAME=172.17.0.1 # 这个是前面 Redis 配置里就改好的 REDIS_PASSWORD=redis # 这个是 AIO 里面 Immich compose 运行的所有容器里面使用的用户,就是 immich:immich, id 查出来我的是 1003 UID=1003 GID=1003
/etc/redis/redis.conf
重点修改...其他默认配置 # 重点是后面的 docker 桥接网卡地址,如果不 bind ,docker 内部连不到宿主环境的 6379 # bind 之后,内部连接 6379 就等于连接宿主环境的 6379 了 bind 127.0.0.1 172.17.0.1 # 这个是开启 Redis 密码连接模式,密码为 redis ,随便写,docker env 里面填这个 requirepass redis
/etc/nginc/conf.d/immich.conf
Immich 反代配置server { listen 80; server_name immich.aio.home; # logging access_log /var/log/nginx/immich.access.log; error_log /var/log/nginx/immich.error.log error; # https://github.com/immich-app/immich/blob/main/nginx/templates/default.conf.template#L28 client_max_body_size 50000M; location / { proxy_pass http://localhost:2283/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # http://nginx.org/en/docs/http/websocket.html proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; } }
/etc/nginx/conf.d/pgadmin4.conf
pgadmin4 反代配置server { listen 80; server_name pgadmin4.aio.home; # logging access_log /var/log/nginx/pgadmin4.access.log; error_log /var/log/nginx/pgadmin4.error.log error; location / { proxy_set_header Host $host; proxy_pass http://localhost:5050/; proxy_redirect off; } }
嗯,基本上就这些了。
![]() | 1 ValerioAlex084 OP 基本上最后的效果如图吧(我用的安卓,iphone14 我也看了,比我安卓要流畅) - Web 端 i 。imgur 。com / y2h2U0f.jpg - 移动端(安卓) i 。imgur 。com / m38vQta.jpg |
2 GUSNYpU376k4Sx2V 2024-01-25 05:40:53 +08:00 我现在面临的问题是如何把 Immich 上图片原版不动灌回到手机上(空白手机) |
![]() | 3 libook 2024-01-25 10:05:37 +08:00 via Android photoprism 、immich 都用过,前几天还特意用了用 immich 看看新版咋样,人脸识别调整不是很灵活,外部照片库的使用也比较麻烦。 建议试用一下 MT Photos 。 |
![]() | 4 totoro625 2024-01-31 13:22:59 +08:00 Immich 我会卡在人脸识别等后台操作上 大概 300GB 20w 照片,可能是配置不当 PVE 下的 VM CPU 是 11400 host 模式 |
![]() | 5 1101x1 2024-02-03 14:35:37 +08:00 immich MT Photos 都试了 细节 mt 更好用 识别 immich 强一点 先用免费的 以后再说 |
![]() | 6 1101x1 2024-02-06 20:35:18 +08:00 识别 immch 强很多 照片中的证件照也找出来了 mt 则很多没识别(同一手机照片库) |
7 babyedi31996 2024-06-01 01:36:17 +08:00 我也是,immich 是我用过所有相册应用最强的. 速度快,AI 识别准确.我自己有白群晖,都是 SMB 分享 homes 出去只读,然后让 immich 获取分析相册. 这样就不用在 immich 重建相册,备份也很安全. 而且 immich 可以用远程服务器的 GPU 来识别人脸和视频解码,这个实在太爽.NAS 性能一般都比较弱,平时开电脑,就用主力电脑运算 immich 的缩略图什么的 |
8 ztallstar 2024-06-27 10:03:18 +08:00 @babyedi31996 大佬麻烦问一下我部署了 immich 之后人脸检测非常慢,然后人脸识别这里一直没有动静。在 app 里面也没有人物被识别出来是什么情况呢? |
9 fenildf 2024-10-10 19:57:52 +08:00 |
10 babyedi31996 2024-10-21 02:50:33 +08:00 @fenildf NAS 白群性能实在太弱了,黑群应该可以,但是没必要了 |