98 lines
2.5 KiB
Nix
98 lines
2.5 KiB
Nix
{
|
|
pkgs,
|
|
config,
|
|
...
|
|
}:
|
|
let
|
|
uploadLocation = "/mnt/photos/immich";
|
|
thumbsLocation = "/opt/immich/thumbs";
|
|
profileLocation = "/opt/immich/profile";
|
|
dbDataLocation = "/opt/immich/postgres";
|
|
modelCache = "/opt/immich-ml";
|
|
in
|
|
{
|
|
virtualisation.oci-containers.containers = {
|
|
immich-server = {
|
|
image = "ghcr.io/immich-app/immich-server:release";
|
|
autoStart = true;
|
|
ports = [ "127.0.0.1:2283:2283" ];
|
|
pull = "newer";
|
|
volumes = [
|
|
"${uploadLocation}:/usr/src/app/upload"
|
|
"${thumbsLocation}:/usr/src/app/upload/thumbs"
|
|
"${profileLocation}:/usr/src/app/upload/profile"
|
|
];
|
|
environment = {
|
|
REDIS_HOSTNAME = "immich-redis";
|
|
DB_HOSTNAME = "immich-db";
|
|
};
|
|
networks = [ "immich-net" ];
|
|
dependsOn = [
|
|
"immich-db"
|
|
"immich-redis"
|
|
];
|
|
};
|
|
|
|
immich-redis = {
|
|
image = "redis:6.2-alpine";
|
|
autoStart = true;
|
|
pull = "newer";
|
|
networks = [ "immich-net" ];
|
|
};
|
|
|
|
immich-db = {
|
|
image = "tensorchord/pgvecto-rs:pg14-v0.2.0";
|
|
autoStart = true;
|
|
pull = "newer";
|
|
environment = {
|
|
POSTGRES_PASSWORD = "postgres";
|
|
POSTGRES_USER = "postgres";
|
|
POSTGRES_DB = "immich";
|
|
POSTGRES_INITDB_ARGS = "--data-checksums";
|
|
};
|
|
volumes = [ "${dbDataLocation}:/var/lib/postgresql/data" ];
|
|
cmd = [
|
|
"postgres"
|
|
"-c"
|
|
"shared_preload_libraries=vectors.so"
|
|
"-c"
|
|
''search_path="$$user", public, vectors''
|
|
"-c"
|
|
"logging_collector=on"
|
|
"-c"
|
|
"max_wal_size=2GB"
|
|
"-c"
|
|
"shared_buffers=512MB"
|
|
"-c"
|
|
"wal_compression=on"
|
|
];
|
|
networks = [ "immich-net" ];
|
|
};
|
|
|
|
immich-ml = {
|
|
image = "ghcr.io/immich-app/immich-machine-learning:release";
|
|
autoStart = true;
|
|
pull = "newer";
|
|
environment = {
|
|
REDIS_HOSTNAME = "immich-redis";
|
|
DB_HOSTNAME = "immich-db";
|
|
};
|
|
volumes = [ "${modelCache}:/cache" ];
|
|
networks = [ "immich-net" ];
|
|
};
|
|
};
|
|
|
|
systemd.services.create-immich-net = {
|
|
serviceConfig.Type = "oneshot";
|
|
wantedBy = with config.virtualisation.oci-containers; [
|
|
"${backend}-immich.service"
|
|
"${backend}-immich-db.service"
|
|
"${backend}-immich-redis.service"
|
|
"${backend}-immich-ml.service"
|
|
];
|
|
script = ''
|
|
${pkgs.podman}/bin/podman network exists immich-net || \
|
|
${pkgs.podman}/bin/podman network create immich-net
|
|
'';
|
|
};
|
|
}
|