Immich安装部署及更换默认数据库帐号及更新错误

应用简览

Immich 是一个高性能的自托管照片和视频备份方案,和 iCloud 类似,你可以自行搭建云服务。它支持移动端和网页。

部署完成后可以实现照片和视频自动备份到你自己的服务器上,数据安全可控。

主要特性

  1. 多平台支持: Immich 提供了移动端和 Web 端的版本,你可以随时随地访问相关的媒体内容。
  2. 自动备份: 和 iCloud 一样,Immich 支持后台自动备份照片和视频。
  3. 选择性备份: Immich 还支持备份特定的相册,而不必备份所有的照片和视频。
  4. 高级搜索功能: Immich 提供了强大的搜索功能,用户可以根据元数据、对象、人脸等条件进行搜索,轻松找到照片。
  5. 安全性: Immich 完全开源,且数据存储在你自己的服务器上。数据安全可控,同时还支持 OAuth 进行身份验证。
  6. 多用户支持和分享: Immich 支持多用户,并允许用户创建共享相册,与朋友、家人或合作伙伴分享照片和视频。
  7. 地理位置信息: 应用程序提供了地图视图,允许用户查看和浏览地理位置信息,以及在地图上查看媒体内容。
  8. 人脸识别和聚合: Immich 可以识别人脸并进行聚合,使用户能够更轻松地组织和查找他们的照片。
  9. 离线支持: 移动端应用程序提供离线支持,允许在没有网络的情况下查看照片和视频。

应用特色

一、多平台支持

Immich 提供了移动端和 Web 端的版本,你可以随时随地访问相关的媒体内容。且所有照片和视频都可以做到多端同步。

二、自动备份、选择目录备份

不用再担心数据丢失。Immich 可以在打开程序时自动备份照片和视频,还支持后台自动备份,确保每一张珍贵的照片和视频都得到保护。

同时,你还可以自由选择备份哪些相册,而不必备份所有内容。这种个性化的备份策略更灵活且占用资源更少。

三、人脸识别和聚合

Immich 采用了机器学习技术,它可以自动识别照片中的人脸,并将它们与特定的个体相关联。

在识别完成后,Immich 会自动将相同人脸的照片分组在一起。这样可以帮助你快速浏览某个人的所有照片,而不必手动搜索。

同时 Immich 也会根据照片的地理信息,将同一个地点的照片进行分组。这两种方式都能使用户更轻松地组织和浏览照片。

四、全局地图展示

Immich 能根据照片的地理信息,在地图上绘制出你所有照片的轨迹,你可以查看到所有照片在地图上的位置,且某处有哪些照片。

 

安装Immich

Immich支持脚本一键安装和Docker安装,但一键脚本事件还是使用Docker来安装的,核心是配置好.env中的各种变量,具体操作如下。

1、一键脚本安装

curl -o- https://raw.githubusercontent.com/immich-app/immich/main/install.sh | bash

这个脚本将执行以下操作:
1、从存储库的主分支下载docker-compose.yml.env文件。
2、根据当前目录路径,使用必要的信息填充.env文件。
3、启动Docker容器。

2、Docker Compose安装

Immich需要依赖Redis 和PostgreSQL才能使用,因为这两个程序是比较通用的中间件,所以笔者建议单独安装好这两个应用,不建议直接在一个 Docker Compose 中启动。将下面的内容保存到docker-compose.yml文件中。

version: "3.9"
services:
  immich:
    image: ghcr.io/imagegenius/immich:latest
    container_name: immich
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - DB_HOSTNAME=<PostgreSQL Host>
      - DB_USERNAME=postgres
      - DB_PASSWORD=postgres
      - DB_DATABASE_NAME=immich
      - REDIS_HOSTNAME=<Redis Host>
      - 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
      - path_to_imports:/import:ro #optional
    ports:
      - 8080:8080
    restart: unless-stopped

然后在docker-compose.yml文件所在目录中执行下面命令,启动Immich

docker-compose up -d

安装完成后,在浏览器中打开http://<machine-ip-address>:2283,移动端则是将服务器URL设置为http://<machine-ip-address>:2283/api即可访问Immich了。

PS:docker-compose 现在可能出了V2版本,我在armbian上,已无法使用,需要修改成docker compose up -d
PS2:用官方的一键安装完成后,(curl -o- https://raw.githubusercontent.com/immich-app/immich/main/install.sh | bash)发现Immich是用PostgreSQL 数据库的超级管理员连接的,感觉有些不安全。所以更换了下用户,结果发现一堆坑,也是我对数据库完全无知,以为和mysql 一样,只需要新建一个用户,然后把Immich数据库的权限给到新的用户就可以。结果完全不行,然后开始google,查不到游泳信息,然后就和ChatGPT一直提问,还好最终解决了。简单记录一下过程:
PS3:数据管理程序用的是Adminer ,docker部署命令 docker run --net immich_default --name adminer -p 2281:8080 -d --restart=always adminer  ,--net immich_default是官方一键脚本使用的默认网络,请根据实际情况调整,否则连不上数据库。
-- 创建用户
CREATE USER immich WITH PASSWORD 'your_password';

-- 授予连接数据库的权限
GRANT CONNECT ON DATABASE your_database TO immich;

-- 授予对所有表的权限
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO immich;

为用户 immich 分配对所有表的适当权限:

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO immich;

这时我以为就完成了,结果用新用户连接数据库提示(类似错误还有一堆,没记录)

ERROR [TypeOrmModule] Unable to connect to the database. Retrying

ERROR [TypeOrmModule] Unable to connect to the database. Retrying QueryFailedError: relation "migrations" already exists

最后查了下,要更改很多表的所有者

-- 修改表的所有者
SELECT 'ALTER TABLE ' || table_name || ' OWNER TO immich;' 
FROM information_schema.tables 
WHERE table_schema = 'public';

-- 授予权限给用户 immich
SELECT 'GRANT ALL PRIVILEGES ON TABLE ' || table_name || ' TO immich;' 
FROM information_schema.tables 
WHERE table_schema = 'public';

执行完,复制查询结果再运行,例如这样的:

GRANT ALL PRIVILEGES ON TABLE migrations TO immich;
GRANT ALL PRIVILEGES ON TABLE typeorm_metadata TO immich;
GRANT ALL PRIVILEGES ON TABLE system_config TO immich;
GRANT ALL PRIVILEGES ON TABLE tags TO immich;
GRANT ALL PRIVILEGES ON TABLE tag_asset TO immich;
GRANT ALL PRIVILEGES ON TABLE shared_link__asset TO immich;
GRANT ALL PRIVILEGES ON TABLE api_keys TO immich;
GRANT ALL PRIVILEGES ON TABLE albums_assets_assets TO immich;
GRANT ALL PRIVILEGES ON TABLE albums_shared_users_users TO immich;
GRANT ALL PRIVILEGES ON TABLE smart_info TO immich;
GRANT ALL PRIVILEGES ON TABLE user_token TO immich;
GRANT ALL PRIVILEGES ON TABLE libraries TO immich;
GRANT ALL PRIVILEGES ON TABLE audit TO immich;
GRANT ALL PRIVILEGES ON TABLE person TO immich;
GRANT ALL PRIVILEGES ON TABLE move_history TO immich;
GRANT ALL PRIVILEGES ON TABLE asset_faces TO immich;
GRANT ALL PRIVILEGES ON TABLE shared_links TO immich;
GRANT ALL PRIVILEGES ON TABLE activity TO immich;
GRANT ALL PRIVILEGES ON TABLE albums TO immich;
GRANT ALL PRIVILEGES ON TABLE asset_job_status TO immich;
GRANT ALL PRIVILEGES ON TABLE users TO immich;
GRANT ALL PRIVILEGES ON TABLE partners TO immich;
GRANT ALL PRIVILEGES ON TABLE assets TO immich;
GRANT ALL PRIVILEGES ON TABLE exif TO immich;

运行完,在docker compose downdocker compose up -d一下应该就可以正常运行了。

附与ChatGPT的完整对话 (因为完全不懂数据库,所以废话很多):https://chat.openai.com/share/bf688807-03cd-412e-bd0e-6e2155ea774f

2023.11.29 immich 1.88.2 升级到 1.89

Warning

If you are running your own Postgres database (not the one in our default docker-compose) and created the immich user yourself, you may need to enable the required extensions as the database superuser. You can do this by running the following two queries under the context of the immich database. This will only need to be run once.

CREATE EXTENSION cube;
CREATE EXTENSION earthdistance;

警告

如果您正在运行自己的 Postgres 数据库(不是我们默认的 docker-compose 中的数据库)并自己创建了 immich 用户,则可能需要以数据库超级用户身份启用所需的扩展。为此,可以在 immich 数据库的上下文中运行以下两个查询。这只需要运行一次。

CREATE EXTENSION cube;
CREATE EXTENSION earthdistance;

更新后提示

QueryFailedError: must be owner of table asset_faces
QueryFailedError: must be owner of table assets
Postgresql 运行可以解决
ALTER TABLEasset_faces OWNER TO immich; #immich为immich数据库用户
ALTER TABLE assets OWNER TO immich; #immich为immich数据库用户

2023.12.17 immich 1.90.0 升级到 1.91.0

此版本docker-compose.yml 变动较大,而且新版docker compose对缩进的要求比较淡,建议参照一下官方的docker-compose.yml 修改。

注意:如果使用 Immich 的非超级用户角色运行数据库,则必须手动启用 pgvecto.rs 扩展。为此,您可以以超级用户身份连接到数据库并运行:immich

CREATE EXTENSION vectors;

提示错误:

QueryFailedError: must be owner of table smart_info
QueryFailedError: must be owner of table exif

Postgresql 运行可以解决
ALTER TABLE smart_info OWNER TO immich; #immich为immich数据库用户
ALTER TABLE exif OWNER TO immich; #immich为immich数据库用户
20231217 PS:immich更新太频繁了,而且docker compose文件也更新的比较频繁,建议使用Postgresql超级管理员运行。包括bug

Explore > Places links returning Failed to search (500 - Internal Server Error) · Issue #5726 · immich-app/immich (github.com)

 

2023.12.18  immich 19.1.3  无法删除相册,日志提示

[Nest] 7  - 12/18/2023, 2:01:17 AM   ERROR [ErrorInterceptor] Failed to delete album
[Nest] 7  - 12/18/2023, 2:01:17 AM   ERROR [ErrorInterceptor] QueryFailedError: permission denied for sequence audit_id_seq

解决方案

 

grant all on sequence audit_id_seq to immich

[错误]QueryFailedError:创建扩展“earthdistance”的权限被拒绝 ·期刊 #5399 ·immich-app/immich (github.com)

POSTing 时出现错误“序列user_id_seq权限被拒绝” ·期刊 #251 ·PostgREST/后重 (github.com)

 

2024.02.22

1、  immich_machine_learning  研究,由于国内网络原因,程序无法直接下载AI模型,可以去huggingface.co 下载后,上传到相关目录。

虽说immich 19.5.1上传的AI模型文件,还是无法正常运行识别功能,但是慢慢研究吧。感觉是版本的问题,待更新

The machine learning models cannot be downloaded. · Issue #6616 · immich-app/immich (github.com)

immich的国内部署_immich clip-CSDN博客

image

2、immich 19.5.1更新的数据库操作有坑,注意。这段数据库操作的代码有问题,

其中ALTER EXTENSION vectors UPDATE TO '0.2.0' 查询出错: ERROR: type "vecf16" already exists

我的解决方案是:

DROP EXTENSION IF EXISTS vectors CASCADE;
CREATE EXTENSION vectors;
ALTER EXTENSION vectors UPDATE TO '0.2.0';

官方升级SQL命令:版本 v1.95.1 ·immich-app/immich (github.com)

BEGIN;

CREATE SCHEMA IF NOT EXISTS vectors;
ALTER DATABASE immich SET search_path TO "$user", public, vectors;
SET search_path TO "$user", public, vectors;

UPDATE pg_catalog.pg_extension SET extversion = '0.1.11' WHERE extname = 'vectors';
UPDATE pg_catalog.pg_extension SET extrelocatable = true WHERE extname = 'vectors';
ALTER EXTENSION vectors SET SCHEMA vectors;
UPDATE pg_catalog.pg_extension SET extrelocatable = false WHERE extname = 'vectors';
ALTER EXTENSION vectors UPDATE TO '0.2.0';

SELECT pgvectors_upgrade();

COMMIT;

1.95.1 BUG很多

1.97 很稳,人脸识别其他都是正常,没其他需求的,强烈建议暂时停留到这个版本。

1.95.1升级到1.97

docker comepose pull  #Upgrade 1.97.0 
UPDATE pg_catalog.pg_extension SET extversion = '0.2.0' WHERE extname = 'vectors';
docker compose down
docker compose up -d
1.98 server不会报错,数据库会报错,但不影响使用,1.98.1 直接server+数据库一起报错,web无法访问。

[Nest] 7 - 03/09/2024, 3:53:32 AM LOG [CommunicationRepository] Initialized websocket server
Migration "CascadeSharedLinksDelete1709825430031" failed, error: must be owner of table shared_links
/usr/src/app/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:219
throw new QueryFailedError_1.QueryFailedError(query, parameters, err);
^
QueryFailedError: must be owner of table shared_links
at PostgresQueryRunner.query (/usr/src/app/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:219:19)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async CascadeSharedLinksDelete1709825430031.up (/usr/src/app/dist/infra/migrations/1709825430031-CascadeSharedLinksDelete.js:7:9)
at async MigrationExecutor.executePendingMigrations (/usr/src/app/node_modules/typeorm/migration/MigrationExecutor.js:225:17)
at async DataSource.runMigrations (/usr/src/app/node_modules/typeorm/data-source/DataSource.js:265:35)
at async DatabaseRepository.runMigrations (/usr/src/app/dist/infra/repositories/database.repository.js:177:9)
at async /usr/src/app/dist/domain/database/database.service.js:52:13
at async /usr/src/app/dist/infra/repositories/database.repository.js:185:23 {
query: 'ALTER TABLE "shared_links" DROP CONSTRAINT "FK_66fe3837414c5a9f1c33ca49340"',
parameters: undefined,
driverError: error: must be owner of table shared_links

ALTER TABLE shared_links OWNER TO immich;

 

1.99 server+microservices一起报错,web无法访问。
 internalQuery: undefined,
QueryFailedError: must be owner of table albums

QueryFailedError: must be owner of table shared_links
at PostgresQueryRunner.query (/usr/src/app/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:219:19)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async CascadeSharedLinksDelete1709825430031.up (/usr/src/app/dist/infra/migrations/1709825430031-CascadeSharedLinksDelete.js:7:9)
at async MigrationExecutor.executePendingMigrations (/usr/src/app/node_modules/typeorm/migration/MigrationExecutor.js:225:17)
at async DataSource.runMigrations (/usr/src/app/node_modules/typeorm/data-source/DataSource.js:265:35)
at async DatabaseRepository.runMigrations (/usr/src/app/dist/infra/repositories/database.repository.js:177:9)
at async /usr/src/app/dist/domain/database/database.service.js:52:13
at async /usr/src/app/dist/infra/repositories/database.repository.js:185:23 {
query: 'ALTER TABLE "shared_links" DROP CONSTRAINT "FK_66fe3837414c5a9f1c33ca49340"',
parameters: undefined,
driverError: error: must be owner of table shared_links
at /usr/src/app/node_modules/pg/lib/client.js:526:17
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async PostgresQueryRunner.query (/usr/src/app/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:184:25)
at async CascadeSharedLinksDelete1709825430031.up (/usr/src/app/dist/infra/migrations/1709825430031-CascadeSharedLinksDelete.js:7:9)
at async MigrationExecutor.executePendingMigrations (/usr/src/app/node_modules/typeorm/migration/MigrationExecutor.js:225:17)
at async DataSource.runMigrations (/usr/src/app/node_modules/typeorm/data-source/DataSource.js:265:35)
at async DatabaseRepository.runMigrations (/usr/src/app/dist/infra/repositories/database.repository.js:177:9)
at async /usr/src/app/dist/domain/database/database.service.js:52:13
at async /usr/src/app/dist/infra/repositories/database.repository.js:185:23 {
ALTER TABLE tag_asset OWNER TO immich;
ALTER TABLE albums OWNER TO immich;

 

 

参考:

手机照片备份方案Immich(修订版) | 老苏的blog (gitee.io)

 

版权声明:
作者:Jays
链接:https://ijays.com/2023/11/immich.html
来源:颓废的美
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>