Migrate Immich from Docker to the NixOS module
All checks were successful
/ test (push) Successful in -19s
All checks were successful
/ test (push) Successful in -19s
This commit is contained in:
parent
11618adc76
commit
65299f9f1f
2 changed files with 21 additions and 95 deletions
|
@ -1,99 +1,25 @@
|
||||||
{ ... }:
|
{ config, ... }:
|
||||||
let
|
|
||||||
vars = {
|
|
||||||
serviceConfigRoot = "/mnt/hd/immich/state";
|
|
||||||
mainArray = "/mnt/hd/immich/";
|
|
||||||
domainName = "photos.aciceri.dev";
|
|
||||||
};
|
|
||||||
directories = [
|
|
||||||
"${vars.serviceConfigRoot}/immich"
|
|
||||||
"${vars.serviceConfigRoot}/immich/postgresql"
|
|
||||||
"${vars.serviceConfigRoot}/immich/postgresql/data"
|
|
||||||
"${vars.serviceConfigRoot}/immich/config"
|
|
||||||
"${vars.serviceConfigRoot}/immich/machine-learning"
|
|
||||||
"${vars.mainArray}/Photos"
|
|
||||||
"${vars.mainArray}/Photos/Immich"
|
|
||||||
"${vars.mainArray}/Photos/S10m"
|
|
||||||
];
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
systemd.tmpfiles.rules = map (x: "d ${x} 0775 root root - -") directories;
|
environment.persistence."/persist".directories = [
|
||||||
systemd.services = {
|
config.services.immich.machine-learning.environment.MACHINE_LEARNING_CACHE_FOLDER
|
||||||
podman-immich = {
|
];
|
||||||
requires = [
|
|
||||||
"podman-immich-redis.service"
|
services.immich = {
|
||||||
"podman-immich-postgres.service"
|
enable = true;
|
||||||
];
|
mediaLocation = "/mnt/hd/immich";
|
||||||
after = [
|
|
||||||
"podman-immich-redis.service"
|
|
||||||
"podman-immich-postgres.service"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
podman-immich-postgres = {
|
|
||||||
requires = [ "podman-immich-redis.service" ];
|
|
||||||
after = [ "podman-immich-redis.service" ];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualisation.oci-containers.containers = {
|
# The reason for this hack is quite bad
|
||||||
immich = {
|
# Before using the NixOS module Immich was installed using Docker, for this
|
||||||
autoStart = true;
|
# reason the paths of the images in the database looks like `/photos/...`
|
||||||
image = "ghcr.io/imagegenius/immich:latest";
|
# and after migrating to the NixOS module I kept getting 404s for all the
|
||||||
volumes = [
|
# old pictures.
|
||||||
"${vars.serviceConfigRoot}/immich/config:/config"
|
# Frankly it seems weird that it saved the absolute paths in the DB, perhaps
|
||||||
"${vars.mainArray}/Photos/Immich:/photos"
|
# it saves somewhere else the media location root and then merge the paths,
|
||||||
"${vars.mainArray}/Photos/S10m:/import:ro"
|
# however, nevertheless I set `mediaLocation` it didn't work
|
||||||
"${vars.serviceConfigRoot}/immich/machine-learning:/config/machine-learning"
|
fileSystems."/photos" = {
|
||||||
];
|
device = "/mnt/hd/immich/";
|
||||||
# environmentFiles = [ config.age.secrets.ariaImmichDatabase.path ];
|
fsType = "ext4";
|
||||||
environment = {
|
options = [ "bind" ];
|
||||||
PUID = "994";
|
|
||||||
PGID = "993";
|
|
||||||
TZ = "Europe/Rome";
|
|
||||||
DB_HOSTNAME = "immich-postgres";
|
|
||||||
DB_USERNAME = "immich";
|
|
||||||
DB_DATABASE_NAME = "immich";
|
|
||||||
REDIS_HOSTNAME = "immich-redis";
|
|
||||||
DB_PASSWORD = "password";
|
|
||||||
};
|
|
||||||
extraOptions = [
|
|
||||||
"--pull=newer"
|
|
||||||
"--network=container:immich-redis"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
immich-redis = {
|
|
||||||
autoStart = true;
|
|
||||||
image = "redis";
|
|
||||||
extraOptions = [
|
|
||||||
"--pull=newer"
|
|
||||||
"-l=traefik.enable=true"
|
|
||||||
"-l=traefik.http.routers.immich.rule=Host(`photos.${vars.domainName}`)"
|
|
||||||
"-l=traefik.http.routers.immich.service=immich"
|
|
||||||
"-l=traefik.http.services.immich.loadbalancer.server.port=8080"
|
|
||||||
];
|
|
||||||
ports = [
|
|
||||||
"8080:8080"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
immich-postgres = {
|
|
||||||
autoStart = true;
|
|
||||||
image = "tensorchord/pgvecto-rs:pg14-v0.2.1";
|
|
||||||
volumes = [
|
|
||||||
"${vars.serviceConfigRoot}/immich/postgresql/data:/var/lib/postgresql/data"
|
|
||||||
];
|
|
||||||
# environmentFiles = [ config.age.secrets.ariaImmichDatabase.path ];
|
|
||||||
environment = {
|
|
||||||
POSTGRES_USER = "immich";
|
|
||||||
POSTGRES_DB = "immich";
|
|
||||||
POSTGRES_HOST_AUTH_METHOD = "trust";
|
|
||||||
POSTGRES_PASSWORD = "password";
|
|
||||||
};
|
|
||||||
extraOptions = [
|
|
||||||
"--pull=newer"
|
|
||||||
"--network=container:immich-redis"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://localhost:8080";
|
proxyPass = "http://localhost:${builtins.toString config.services.immich.port}";
|
||||||
proxyWebsockets = true;
|
proxyWebsockets = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue