From 16b68b5ad37031daae2617976932c217476b6bca Mon Sep 17 00:00:00 2001 From: Richie Cahill Date: Thu, 3 Oct 2024 20:22:00 -0400 Subject: [PATCH] adding photoprism --- .vscode/settings.json | 8 +++ systems/jeeves/docker/photoprism.nix | 76 ++++++++++++++++++++++++++++ systems/jeeves/scripts/datasets.sh | 31 +++++++++--- systems/jeeves/vars.nix | 1 + 4 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 systems/jeeves/docker/photoprism.nix diff --git a/.vscode/settings.json b/.vscode/settings.json index 4e612e6..6afe390 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,12 +2,15 @@ "cSpell.words": [ "aboutwelcome", "acltype", + "addstr", "ahci", "aioesphomeapi", "alsa", "archlinux", "ashift", "asrouter", + "attroff", + "attron", "auditd", "autofetch", "autopull", @@ -67,6 +70,8 @@ "fxaccounts", "gamemode", "gamescope", + "getch", + "getmaxyx", "ghdeploy", "globalprivacycontrol", "gparted", @@ -111,6 +116,7 @@ "mkpart", "modesetting", "mountpoint", + "mountpoints", "mousewheel", "mtxr", "ncdu", @@ -126,6 +132,7 @@ "nixpkgs", "nmap", "noauto", + "noecho", "nonsponsored", "Noto", "nvme", @@ -144,6 +151,7 @@ "peerconnection", "PESKYFOX", "PGID", + "photoprism", "pipewire", "pkgs", "plugdev", diff --git a/systems/jeeves/docker/photoprism.nix b/systems/jeeves/docker/photoprism.nix new file mode 100644 index 0000000..4728c88 --- /dev/null +++ b/systems/jeeves/docker/photoprism.nix @@ -0,0 +1,76 @@ +let + vars = import ../vars.nix; +in +{ + + + virtualisation.oci-containers.containers = { + photoprism = { + image = "photoprism/photoprism:latest"; + ports = [ "2342:2342" ]; + volumes = [ + "${vars.media_docker_configs}/photoprism:/photoprism/storage" + "${vars.storage_photos}/originals:/photoprism/originals" + "${vars.storage_photos}/import:/photoprism/import" + ]; + environment = { + PHOTOPRISM_ADMIN_USER="admin"; + PHOTOPRISM_AUTH_MODE="password"; + PHOTOPRISM_DISABLE_TLS="false"; + PHOTOPRISM_DEFAULT_TLS="true"; + PHOTOPRISM_ORIGINALS_LIMIT="30000"; + PHOTOPRISM_HTTP_COMPRESSION="gzip"; + PHOTOPRISM_LOG_LEVEL="info"; + PHOTOPRISM_READONLY="false"; + PHOTOPRISM_EXPERIMENTAL="false"; + PHOTOPRISM_DISABLE_CHOWN="false"; + PHOTOPRISM_DISABLE_WEBDAV="false"; + PHOTOPRISM_DISABLE_SETTINGS="false"; + PHOTOPRISM_DISABLE_TENSORFLOW="false"; + PHOTOPRISM_DISABLE_FACES="false"; + PHOTOPRISM_DISABLE_CLASSIFICATION="false"; + PHOTOPRISM_DISABLE_VECTORS="false"; + PHOTOPRISM_DISABLE_RAW="false"; + PHOTOPRISM_RAW_PRESETS="false"; + PHOTOPRISM_SIDECAR_YAML="true"; + PHOTOPRISM_BACKUP_ALBUMS="true"; + PHOTOPRISM_BACKUP_DATABASE="true"; + PHOTOPRISM_BACKUP_SCHEDULE="daily"; + PHOTOPRISM_INDEX_SCHEDULE=""; + PHOTOPRISM_AUTO_INDEX="300"; + PHOTOPRISM_AUTO_IMPORT= "-1"; + PHOTOPRISM_DETECT_NSFW="false"; + PHOTOPRISM_UPLOAD_NSFW="true"; + PHOTOPRISM_DATABASE_DRIVER="mysql"; + PHOTOPRISM_DATABASE_SERVER="photoprism_mariadb:3306"; + PHOTOPRISM_DATABASE_NAME="photoprism"; + PHOTOPRISM_DATABASE_USER="photoprism"; + PHOTOPRISM_SITE_CAPTION="AI-Powered Photos App"; + PHOTOPRISM_SITE_DESCRIPTION=""; + PHOTOPRISM_SITE_AUTHOR=""; + PHOTOPRISM_UID="600"; + PHOTOPRISM_GID="600"; + # PHOTOPRISM_UMASK: 0000 + }; + environmentFiles = [/root/secrets/docker/photoprism]; + autoStart = true; + dependsOn = [ "photoprism_mariadb" ]; + extraOptions = [ "--network=web" ]; + }; + photoprism_mariadb = { + image = "mariadb:11"; + volumes = [ "${vars.media_database}/photoprism_mariadb:/var/lib/photoprism_mariadb" ]; + environment = { + MARIADB_AUTO_UPGRADE = "1"; + MARIADB_INITDB_SKIP_TZINFO = "1"; + MARIADB_DATABASE = "photoprism"; + MARIADB_USER = "photoprism"; + }; + environmentFiles = [/root/secrets/docker/photoprism]; + cmd = [ "--innodb-buffer-pool-size=512M" "--transaction-isolation=READ-COMMITTED" "--character-set-server=utf8mb4" "--collation-server=utf8mb4_unicode_ci" "--max-connections=512" "--innodb-rollback-on-timeout=OFF" "--innodb-lock-wait-timeout=120" ]; + autoStart = true; + extraOptions = [ "--network=web" ]; + }; + }; +} + diff --git a/systems/jeeves/scripts/datasets.sh b/systems/jeeves/scripts/datasets.sh index 54a60fb..157f5ae 100644 --- a/systems/jeeves/scripts/datasets.sh +++ b/systems/jeeves/scripts/datasets.sh @@ -1,12 +1,29 @@ #!/bin/bash +# zpools + +sudo zpool create -o ashift=12 -O acltype=posixacl -O atime=off -O dnodesize=auto -O xattr=sa -O xattr=sa -O zstd -m /zfs/media media mirror +sudo zpool add media -o ashift=12 special mirror + +sudo zpool create -o ashift=12 -O acltype=posixacl -O atime=off -O dnodesize=auto -O xattr=sa -O xattr=sa -O zstd -m /zfs/storage storage +sudo zpool add storage -o ashift=12 special mirror +sudo zpool add storage -o ashift=12 logs mirror + +sudo zpool create -o ashift=12 -O acltype=posixacl -O atime=off -O dnodesize=auto -O xattr=sa -O xattr=sa -O zstd -m /zfs/torrenting torrenting + # media datasets -sudo zfs create -o compression=zstd-9 -o encryption=off -o atime=off media/plex -sudo zfs create -o compression=zstd-9 -o encryption=off -o atime=off media/docker -sudo zfs create -o encryption=off -o atime=off -o exec=off media/mirror -sudo zfs create -o encryption=off -o atime=off -o exec=off media/minio -sudo zfs create -o encryption=off -o atime=off -o copies=3 media/notes +sudo zfs create -o compression=zstd-9 media/plex +sudo zfs create -o compression=zstd-9 media/docker +sudo zfs create -o exec=off media/mirror +sudo zfs create -o exec=off media/minio +sudo zfs create -o copies=3 media/notes +sudo zfs create -o recordsize=16k -o primarycache=metadata -o mountpoint=/zfs/media/database/postgres media/postgres +sudo zfs create -o recordsize=16k -o primarycache=metadata -o mountpoint=/zfs/media/database/photoprism_mariadb media/photoprism_mariadb + +# storage datasets +sudo zfs create -o recordsize=16K -o compression=zstd-19 -o copies=2 storage/photos +sudo zfs create -o recordsize=1M -o compression=zstd-19 storage/archive # torrenting datasets -sudo zfs create -o recordsize=16K -o encryption=off -o atime=off -o exec=off -o sync=disabled torrenting/qbit -sudo zfs create -o recordsize=16K -o encryption=off -o atime=off -o exec=off -o sync=disabled torrenting/qbitvpn +sudo zfs create -o recordsize=16K -o exec=off -o sync=disabled torrenting/qbit +sudo zfs create -o recordsize=16K -o exec=off -o sync=disabled torrenting/qbitvpn diff --git a/systems/jeeves/vars.nix b/systems/jeeves/vars.nix index d238456..c7cb2cd 100644 --- a/systems/jeeves/vars.nix +++ b/systems/jeeves/vars.nix @@ -16,6 +16,7 @@ in storage_main = "${zfs_storage}/main"; storage_plex = "${zfs_storage}/plex"; storage_syncthing = "${zfs_storage}/syncthing"; + storage_photos = "${zfs_storage}/photos"; # torrenting torrenting_qbit = "${zfs_torrenting}/qbit"; torrenting_qbitvpn = "${zfs_torrenting}/qbitvpn";