type
Post
status
Published
date
Dec 19, 2023
slug
使用Immich搭建云端相册
summary
搞了个小主机,浅浅当个NAS机吧doge
tags
Nginx
Immich
category
技术分享
icon
password
 

前言

 
以前觉得NAS是伪需求,是因为觉得QQ空间就足够
……
当QQ空间宣布非会员无法原画质上传照片和文件后,我转而使用了阿里云盘
……
当阿里云盘“做出了一个艰难的决定”后,我觉得,也该搞搞NAS了
 
 
notion image
 
83闲鱼入了一个Mini ITX工控机板,CPU是AMD A8 7410,四核,挺老的,不过比J1900、1037U好一点感觉
板载两个sata口,一个minipcie槽,一个msata口,扩展很少但也够用
 
后续:🥲后来才发现,两个sata口和一个msata口只能三选二……
 
我给它配了一块2.5寸256的SSD,一根8G DDR3L 1600MHz的RAM,还有一块64G的msata硬盘,都是手上有的,另外闲鱼17块买了一个60W的12V DC电源适配器,硬件以后不够再升级,主打一个能用就行😋
 
 
 

基础配置

 
接下来就是装系统
 
我没有选择流行的NAS系统,比如黑裙、UNRAID、OMV、TrueNAS等
 
我选择了PC系统,Debian12,因为熟悉(反正不装Arch
 
notion image
 
 
机箱到了,买小了,没买挡板,忘了
 
notion image
 
 
《理线》🤣,勉强能盖上盖就可以了(SATA线:我吃柠檬)
 
notion image
 
 
连上WIFI,SSH启动!
 
发现个问题,休眠没关
 
notion image
 
按网上说的关闭休眠
 
 
仍旧休眠,但是SSH会话还在活跃
 
notion image
 
不管了🫢
 
 
 

配置远程访问

 
Kill掉IPv6的临时地址
 
/etc/sysctl.conf上写入以下内容
 
重载配置
 
 

DDNS

 
在Cloudflare配置域名解析后
 
使用ddns-go自动更新域名绑定
 
 
 
notion image
 
Domains一栏是填域名
 
 

Tailscale

 
顺便把Tailscale也配置了,双重保险,后期子网路由功能也能用得上
 
安装脚本
 
notion image
 
 

代理工具

 
 
 
 

相册备份-Immich

 
关于相册备份软件
 
我一开始考虑Syncthing,用了一会,备份速度挺快的,但是操作逻辑不够直观,而且看不到远端备份的照片,就单纯是个备份软件
 
后来看到Photoprism,有在线相册功能,功能界面也还好,有中文,就是手机端APP不能上传照片,只能通过网页端上传,有点鸡肋
 
货比三家后,最终选择了Immich
 
 
notion image
 
 
Immich官方有个Demo展示
 
notion image
 
notion image
 
 
看着挺不错的,除了没有中文,还有更新很频繁,几乎一周一个版本 🤥
 
 

安装需求

 
 
硬件
 
  • At Least 4GB RAM
  • 2 Cores of CPU
(btw……我在我的电视盒子上装过,S905L3A的芯片,2GB RAM,也可以运行……🤔)
 
 
软件
 
  • docker
  • docker compose
 
docker官方一键安装脚本
 
 

安装过程

 
官方推荐使用docker compose运行Immich
 
  • 找个地方放一下Immich
 
  • 下载 docker-compose.yml.env 文件
 
  • 修改 .env 文件参数,主要是修改UPLOAD_LOCATION ,这是你的照片上传后存放的位置,使用绝对路径
 
  • 一切准备就绪后,运行docker compose
 
 
我在运行 sudo docker compose up -d 时大概是遇到了网络问题,很慢……失败了好几次都提示 Error: unexpect EOF
 
然后第二天我又来装一遍,发现他更新版本了,再次 up,又可以了😅
 
就是装得有点久
 
notion image
 
 
 
2024.2.15 UPDATE 经测试,确实是网络问题,跟什么版本没关系,docker不走系统代理,需要单独配置代理
很快,3-4分钟就pull完了
很快,3-4分钟就pull完了
 
 
 
  • 更新Immich命令是这个
 
  • 停止Immich命令是这个
 
 
 

备份使用

 
 
官方文档说得挺详细的了,还是很简单的
 
简单传了一些照片,效果不错,还支持多用户管理
 
notion image
 
 
 

配置HTTPS加密访问

 
由于我是外网访问,且域名没有备案也没有SSL证书,只能通过HTTP访问,浏览器会警告
 
公网明文传输肯定是不安全的
 
notion image
 
 
想要实现HTTPS访问,需要给域名配置SSL证书反向代理
 
 

获取SSL证书

 
SSL证书可以在Let’s Encrypt获得,免费
 
这里我们使用第三方工具:acmesh (简单,有自动续签)
 
 
 
按着教程来
 
  • 获取脚本 | 运行脚本
 
  • 生成证书,这里我使用手动DNS方式,因为我的不是网站
 
运行后,等待一会,acme.sh会生成一个DomainTXT value
 
notion image
 
去你的域名控制台或者DNS解析控制台,添加一个TXT解析记录
 
notion image
 
确定TXT解析记录生效后,重新生成证书
 
等待一小会儿……☕
 
 
生成证书成功后,会生成四个文件,分别是:
 
 
证书更新是自动的,只需要确保acmesh创建的定时任务正常运行,查看定时任务:
 
 
 

配置反向代理

 
 
这里我用的是Nginx
 
对于Nginx,证书文件只需要 <mydomain.com>.keyfullchain.cer 两个即可
 
  • 在Nginx工作目录下新建ssl文件夹,将两个证书安装在ssl目录
 
  • 配置反向代理,进入/etc/ngxin/sites-available目录,备份原文件,编辑immich_service
 
immich_service文件内容
 
  • 保存文件,进入/etc/nginx/sites-enabled目录,建立一个软链接
 
notion image
 
  • 测试文件语法是否错误
 
notion image
 
  • 如果显示 ok,重启Nginx服务
 
 
如果重启没有报错,那么此时Immich可以以HTTPS的方式访问了
 
notion image
 
可以看到,“连接是安全的“
 
 
异常情况
 
如果启动Nginx时出现这个报错
 
notion image
 
 
说明 80 端口被占用了,使用lsof -i:80查看端口占用情况
 
notion image
 
 
像我这样的就是80端口被apache占用了,如果apache不使用的话,可以停止掉apache的服务
 
如果不能停止apache的话,就在/etc/nginx/sites-enabled目录下删除default文件的软链接,因为default文件监听的是80端口
 
 
 

移动端APP

 

下载

 
immich 可以在 Google PlayApple StoreGithub 获得
 
 

使用

 
进入APP连接页面,填写服务器IP和端口号,然后填写邮箱账号和密码
 
notion image
 
 
APP首页
 
notion image
 
 
新版本加入了相册分类
 
notion image
 
 
除了没有中文,其他都挺好的🥲
 
😂Fine…把手机语言换成简体中文就好了
 
 
 

双重备份-rsync

 
 
单个硬盘用来备份数据肯定是不安全的,一旦这个盘寄了,数据就莫得了🥲
思考片刻后,我决定用那块msata硬盘测试一下,64G的容量注定用不久,后面再换掉
 
挂载上硬盘后,安装rsync
rsync很轻量化,功能也很多,支持远程备份,这里我只用来本地备份
 
示例
 
notion image
 
尝试了一下,很快,备份速度取决于I/O速度,而且支持增量备份,不会重复备份,写个脚本,定期执行就好了
 
 
 

服务/数据库崩溃的解决办法

 
2024.2.22 UPDATE 前面已经说过了,这个软件极其不稳定,不知道哪次更新就崩掉了…… 是的我今天就体会到了😅
 
当我的immich更新到v1.95.1的时候,我像往常更新它一样,重新启动容器,发现服务一直在restart
 
上Github项目查看issues,有两个issue是关于v1.95.1服务不能正常启动的,这两个issue距离v1.95.1发布仅仅过了4个小时
 
随后我就看到开发者回应了
notion image
 
🥲fine
 
然后我就想着回退版本,结果发现还是这样,可能是数据库崩掉了,没办法,只能重装
 
注意这里是重装
 
一定要做好数据备份!!!
一定要做好数据备份!!!
一定要做好数据备份!!!
 
 
 

备份资产

 
备份一下原来的照片,原来的照片在UPLOAD_LOCATION/library里,整个文件夹移走就行,像我是直接用rsync给它复制到其他地方
 

删除旧的容器

 
停止并删除docker容器
 

重新拉取镜像

 
新建一个空目录,作为待会使用的UPLOAD_LOCATION,原来的上传目录不可用了,换一个新的上传目录
 
重新安装一遍immich,保险起见我使用目前更稳定的v1.93.3版本,.env稍加更改
 
启动容器,sudo docker compose up -d
 
成功启动后,此时的immich是全新状态,之前的设置全部都没有了,只能重头再来(悲)
 

安装Immich CLI

 
 
不过好消息是,照片还可以一键导进去,虽然本质还是重新上传重建数据库,不过相比手动一张一张上传还是方便多了
 
使用官方的终端工具执行上传任务
 
安装nodejsnpm
 
安装immich CLI
 
获取用户的API Key,按照docs说的去获取,要上传哪个用户的就获取哪个用户的
 
账号登陆
 

上传资产

 
上传之前传过的照片,一条命令即可
 
等待上传完后,照片就都回到immich上了,如果还有其他用户的照片需要上传,再次登录再上传照片即可
 
遗憾的是,之前设置的相册和共享都不见了,虽然不是什么事,照片回来了就好
 
 
 

清除旧镜像

 
删掉之前拉取的镜像,释放空间
 
 
 
 
在docker中部署firefox浏览器基于IPv6的在线编程
Loading...