Immich: Difference between revisions
add tip for borg backup |
Add under Troubleshooting: note that if Immich on nixos-stable is too old and causes client sync errors, set services.immich.package = pkgs.unstable.immich;. |
||
Line 88: | Line 88: | ||
SELECT pgvectors_upgrade(); | SELECT pgvectors_upgrade(); | ||
</syntaxhighlight>Finally, restart postgresql and immich: <code>systemctl restart postgresql && systemctl restart immich-server</code> | </syntaxhighlight>Finally, restart postgresql and immich: <code>systemctl restart postgresql && systemctl restart immich-server</code> | ||
=== Immich server too old on NixOS stable === | |||
If you encounter errors like <code>Error processing stream</code> or <code>Error in runInIsolateGentle for remote-sync</code> on Android/iOS clients, the cause may be that the Immich server version packaged in <code>nixos-stable</code> is behind the mobile apps. | |||
You can use the Immich package from <code>nixos-unstable</code> while keeping the rest of your system on stable. Add the following to the top of your <code>/etc/nixos/configuration.nix</code>: | |||
<syntaxhighlight lang="nix" line> | |||
let | |||
unstableTarball = fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz"; | |||
in { | |||
nixpkgs.config = { | |||
packageOverrides = pkgs: { | |||
unstable = import unstableTarball { | |||
config = config.nixpkgs.config; | |||
}; | |||
}; | |||
}; | |||
} | |||
</syntaxhighlight> | |||
Then override the Immich package in your service config: | |||
<syntaxhighlight lang="nix" line> | |||
services.immich.package = pkgs.unstable.immich; | |||
</syntaxhighlight> | |||
[[Category:Server]] | [[Category:Server]] | ||
[[Category:Web Applications]] | [[Category:Web Applications]] |
Latest revision as of 02:51, 22 September 2025
Immich is a self-hosted photo and video management solution.
Installation
To install Immich, add the following to your NixOS configuration:
services.immich.enable = true;
services.immich.port = 2283;
More options are available: services.immich.
Tips and Tricks
Enabling Hardware Accelerated Video Transcoding
Add the Immich user to the render
and video
groups, override the PrivateDevices
service config setting to allow the service to access /dev/dri/
and enable Accelerated Video Playback on your system:
# `null` will give access to all devices.
# You may want to restrict this by using something like `[ "/dev/dri/renderD128" ]`
services.immich.accelerationDevices = null;
hardware.graphics = {
# ...
# See: https://wiki.nixos.org/wiki/Accelerated_Video_Playback
};
users.users.immich.extraGroups = [ "video" "render" ];
Using Immich behind Nginx
This is a typical Nginx configuration for Immich:
services.nginx.virtualHosts."immich.example.com" = {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = "http://[::1]:${toString config.services.immich.port}";
proxyWebsockets = true;
recommendedProxySettings = true;
extraConfig = ''
client_max_body_size 50000M;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
'';
};
};
Using borg for backups
Following Immichs backup docs and backup script an automated backup using Borg backup could look something like this:
services.borgbackup.jobs."Immich" = {
paths = "/var/lib/immich";
repo = "<path-to-borg-repo>";
startAt = "Sat 04:00";
compression = "zstd";
encryption.mode = "none";
prune.keep = {
last = 2;
};
};
Make sure to manually create a borg repo at the desired location beforehand with sudo borg init --encryption=none <path-to-borg-repo
Troubleshooting
Fixing postgresql database issue after 25.05 upgrade
Postgresql collation version mismatch
After upgrading you might run into an issue like this, leading to immich-server continuously failing and restarting:
Jul 01 14:23:12 server2 immich[178592]: Postgres notice: {
Jul 01 14:23:12 server2 immich[178592]: severity_local: 'WARNING',
Jul 01 14:23:12 server2 immich[178592]: severity: 'WARNING',
Jul 01 14:23:12 server2 immich[178592]: code: '01000',
Jul 01 14:23:12 server2 immich[178592]: message: 'database "immich" has a collation version mismatch',
Jul 01 14:23:12 server2 immich[178592]: detail: 'The database was created using collation version 2.39, but the operating system provides version 2.40.',
Jul 01 14:23:12 server2 immich[178592]: hint: 'Rebuild all objects in this database that use the default collation and run ALTER DATABASE immich REFRESH COLLATION VERSION,>
Jul 01 14:23:12 server2 immich[178592]: file: 'postinit.c',
Jul 01 14:23:12 server2 immich[178592]: line: '477',
Jul 01 14:23:12 server2 immich[178592]: routine: 'CheckMyDatabase'
Jul 01 14:23:12 server2 immich[178592]: }
To fix this, run sudo -u immich psql -d immich
and execute these to commands:
ALTER DATABASE immich REFRESH COLLATION VERSION;
REINDEX DATABASE immich;
Upgrading pgvecto.rs
If you still run into issues after restarting postgresql and immich-server services, some additional postgresql database changes might be necessary to upgrade pgvecto.rs table:
Run sudo -u postgresql psql
and execute consecutively:
CREATE EXTENSION IF NOT EXISTS unaccent;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS vectors;
CREATE EXTENSION IF NOT EXISTS cube;
CREATE EXTENSION IF NOT EXISTS earthdistance;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
ALTER EXTENSION vectors UPDATE;
SELECT pgvectors_upgrade();
Finally, restart postgresql and immich: systemctl restart postgresql && systemctl restart immich-server
Immich server too old on NixOS stable
If you encounter errors like Error processing stream
or Error in runInIsolateGentle for remote-sync
on Android/iOS clients, the cause may be that the Immich server version packaged in nixos-stable
is behind the mobile apps.
You can use the Immich package from nixos-unstable
while keeping the rest of your system on stable. Add the following to the top of your /etc/nixos/configuration.nix
:
let
unstableTarball = fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz";
in {
nixpkgs.config = {
packageOverrides = pkgs: {
unstable = import unstableTarball {
config = config.nixpkgs.config;
};
};
};
}
Then override the Immich package in your service config:
services.immich.package = pkgs.unstable.immich;