一、功能对比
| 特征 | LibrePhotos | Photoview | Photoprism | immich | photonix | Damselfly | Synology |
| 照片 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 视频 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❔ | ✔️ |
| Raw 照片 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❔ | ✔️ |
| HEIC 照片 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❔ | ✔️ |
| Live Photo | ❌ | ✔️ | ✔️ | ✔️ | ❌ | ❔ | ✔️ |
| X265 视频 | ❌ | ✔️ | ✔️ | ✔️ | ❌ | ❔ | ❔ |
| 时间轴 | ✔️ | ✔️ | ❌ | ✔️ | ✔️ | ❔ | ✔️ |
| 水平滚动搜索 | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❔ | ❔ |
| 不改变文件夹结构 | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❔ | ✔️ |
| 相册管理 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❔ | ✔️ |
| 地点 | ✔️ | ❌ | ✔️ | ✔️ | ✔️ | ❔ | ✔️ |
| 地图搜索相片 | ❌ | ✔️ | ✔️ | ❌ | ✔️ | ❔ | ✔️ |
| 自动相册 | ✔️ | ❌ | ✔️ | ❌ | ❌ | ❔ | ✔️ |
| 人脸识别/人脸分类 | ✔️ | ✔️ | ✔️ | ❌ | ✔️ | ❔ | ✔️ |
| 人脸聚类 | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❔ | ✔️ |
| 反向地理编码 | ✔️ | VIP | ✔️ | ✔️ | ✔️ | ❔ | ❌ |
| 场景检测 | ✔️ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ |
| 属性检测 | ✔️ | ❌ | ❌ | ❌ | ✔️ | ❔ | ❔ |
| 类别检测 | ✔️ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ |
| 物体检测 | ✔️ | ❌ | ✔️ | ✔️ | ✔️ | ❔ | ✔️ |
| 语义图像搜索 | ✔️ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ |
| 按元数据搜索 | VIP | ❌ | ✔️ | ✔️ | ✔️ | ❔ | ✔️ |
| 按元数据编辑 | VIP | ❌ | ✔️ | ❌ | ❌ | ❔ | ❔ |
| 将元数据同步到文件 | ✔️ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ |
| 多用户支持 | ✔️ | ✔️ | VIP | ✔️ | ❌ | ❔ | ✔️ |
| 用户之间共享 | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ❔ | ✔️ |
| 分享为唯一链接 | ❌ | ✔️ | ✔️ | ❌ | ❌ | ❔ | ✔️ |
| 分享为公共页面 | ✔️ | ❌ | ❌ | ❌ | ❌ | ❔ | ✔️ |
| 上传图片和视频 | ✔️ | ❌ | ✔️ | ✔️ | VIP | ❔ | ✔️ |
| 删除图像和视频 | ✔️ | ❌ | ✔️ | ✔️ | ❌ | ❔ | ✔️ |
| 网站 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❔ | ✔️ |
| iOS应用程序 | ❌ | ✔️ | ❌ | ✔️ | ✔️ | ❔ | ✔️ |
| 安卓应用程序 | ✔️ | ❌ | ❌ | ✔️ | ✔️ | ❔ | ✔️ |
| 深色模式 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❔ | ❔ |
| 从应用程序自动备份 | ❌ | ❌ | ❌ | ✔️ | ❌ | ❔ | ✔️ |
| 多语言支持 | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❔ | ✔️ |
| 支持较旧的 CPU | ✔️ | ✔️ | ✔️ | ❌ | ✔️ | ❔ | ✔️ |
优缺点总结:
| 特点 | LibrePhotos | Photoview | Photoprism | immich | photonix | Damselfly | Synology |
| 优点 | 支持客户端 人脸识别快速 | 支持客户端但只能上传 | 支持live photo 支持客户端 | 完美 | |||
| 缺点 | 界面排版及中文支持不好 网页版只能上传为jpeg | 只能导入不能上传 不支持识别物体 界面排版及中文支持不是很好 | 缺少时间线查看 没有全选按钮 归档功能有BUG | 破坏文件结构、依赖数据库 网页版不支持中文 默认地图底图被屏蔽无法显示(可更换国内解决) 容器镜像难拉取且容易报错误 | 付费 |
二、安装相册:
#docker-compose.yml文件为创建容器配置文件, env文件为docker配置文件的调用环境变量文件
#修改*.env.txt 文件为 .env 修改*.yml.txt文件为 docker-compose.yml
#编辑配置文件时,请注意相关值必须在 YAML 文件中以相同的缩进级别开始,并且不允许使用制表符缩进,建议使用空格
#进入到docker-compose.yml文件夹内,运行命令进行安装
#加载容器配置,取消-d参数可在前台运行查看日志
docker compose up -d
#如更改配置后请重启配置
docker compose stop
docker compose up -d
#docker compose请注意,我们的示例默认使用新命令。
#如果您的服务器尚不支持它,您仍然可以使用docker-compose或podman-compose与 Red Hat 兼容的 Linux 发行版。
1、LibrePhotos
2、Photoview
3、Photoprism
3.1 官网推荐安装方式
3.1.1 下载docker示例配置文件(参考官网配置说明)
wget https://dl.photoprism.app/docker/docker-compose.yml
3.1.2 将准备好的docker配置文件上传至主机内
3.1.3 打开终端并切换至配置文件所在文件夹
3.1.4 启动服务(不影响已存在的容器)
3.2 纯代码创建
3.2.1 docker拉取镜像
docker pull photoprism/photoprism:latest
3.2.2 docker 运行镜像
docker run -d \
--name photoprism \
--security-opt seccomp=unconfined \
--security-opt apparmor=unconfined \
-p 2342:2342 \
-e PHOTOPRISM_UPLOAD_NSFW="true" \
-e PHOTOPRISM_ADMIN_PASSWORD="[管理密码]" \
-v /photoprism/storage \
-v [本地目录]:/photoprism/originals \
photoprism/photoprism
3.3 Nginx代理
#photoprism
server {
listen 80;
listen 443 ssl ;
server_name [自定义域名];
client_max_body_size 500M;
ssl_certificate [ssl证书].pem;
ssl_certificate_key [ssl证书].key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
proxy_intercept_errors on;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass [本地ip:端口];
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 500M;
}
}
4、immich
默认使用的ghcr.io源网络原因无法拉取,可以使用项目进行中转之后再进行
参考togettoyou的项目(感谢)
多合一镜像(仍然需要中转)
#docker-compose
---
version: "2.1"
services:
immich:
image: ghcr.io/imagegenius/immich:latest
container_name: immich
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- DB_HOSTNAME=192.168.1.x
- DB_USERNAME=postgres
- DB_PASSWORD=postgres
- DB_DATABASE_NAME=immich
- REDIS_HOSTNAME=192.168.1.x
- DISABLE_MACHINE_LEARNING=false #optional
- DISABLE_TYPESENSE=false #optional
- DB_PORT=5432 #optional
- REDIS_PORT=6379 #optional
- REDIS_PASSWORD= #optional
- MACHINE_LEARNING_WORKERS=1 #optional
- MACHINE_LEARNING_WORKER_TIMEOUT=120 #optional
volumes:
- path_to_appdata:/config
- path_to_photos:/photos
- path_to_machine-learning:/config/machine-learning #optional
ports:
- 8080:8080
restart: unless-stopped
# This container requires an external application to be run separately to be run separately.
# Redis:
redis:
image: redis
ports:
- 6379:6379
container_name: redis
# PostgreSQL 14:
postgres14:
image: postgres:14
ports:
- 5432:5432
container_name: postgres14
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: immich
volumes:
- path_to_postgres:/var/lib/postgresql/data
#docker-cli
docker run -d \
--name=immich \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e DB_HOSTNAME=192.168.1.x \
-e DB_USERNAME=postgres \
-e DB_PASSWORD=postgres \
-e DB_DATABASE_NAME=immich \
-e REDIS_HOSTNAME=192.168.1.x \
-e DISABLE_MACHINE_LEARNING=false `#optional` \
-e DISABLE_TYPESENSE=false `#optional` \
-e DB_PORT=5432 `#optional` \
-e REDIS_PORT=6379 `#optional` \
-e REDIS_PASSWORD= `#optional` \
-e MACHINE_LEARNING_WORKERS=1 `#optional` \
-e MACHINE_LEARNING_WORKER_TIMEOUT=120 `#optional` \
-p 8080:8080 \
-v path_to_appdata:/config \
-v path_to_photos:/photos \
-v path_to_machine-learning:/config/machine-learning `#optional` \
--restart unless-stopped \
ghcr.io/imagegenius/immich:latest
# This container requires an external application to be run separately.
# Redis:
docker run -d \
--name=redis \
-p 6379:6379 \
redis
# PostgreSQL 14:
docker run -d \
--name=postgres14 \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=immich \
-v path_to_postgres:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:14
国内地图参考更换
#更换高德:https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}
#https://www.cnblogs.com/lucio110/p/17310054.html
#https://www.cnblogs.com/googlegis/p/14986844.html