immich update

This commit is contained in:
2026-04-14 16:06:03 -04:00
parent 653321818d
commit af696e5dec
3 changed files with 21 additions and 3 deletions
+3
View File
@@ -18,6 +18,7 @@ docker/ Docker app configs (compose files, nginx confs)
jellyfin/ Media server jellyfin/ Media server
garage/ S3-compatible storage garage/ S3-compatible storage
minecraft/ MCSManager minecraft/ MCSManager
immich/ Immich photo server + PostgreSQL
beszel-agent/ System monitoring agent (reports to beszel.hantim.net) beszel-agent/ System monitoring agent (reports to beszel.hantim.net)
smb/ Samba share (ZFS mountpoint, not in git) smb/ Samba share (ZFS mountpoint, not in git)
system/ System config snapshots (smb.conf, sanoid.conf, firewalld, etc.) system/ System config snapshots (smb.conf, sanoid.conf, firewalld, etc.)
@@ -84,6 +85,8 @@ See [RUNBOOK.md](RUNBOOK.md) for full disaster recovery steps.
| Nextcloud files | ZFS mirror + sanoid snapshots + USB | `rsync` from USB | | Nextcloud files | ZFS mirror + sanoid snapshots + USB | `rsync` from USB |
| Media library | ZFS raidz2 + sanoid snapshots + USB | `rsync` from USB | | Media library | ZFS raidz2 + sanoid snapshots + USB | `rsync` from USB |
| Nextcloud DB (PostgreSQL) | ZFS dataset + `pg_dumpall` + USB | `rsync` from USB | | Nextcloud DB (PostgreSQL) | ZFS dataset + `pg_dumpall` + USB | `rsync` from USB |
| Immich library (photos/videos) | ZFS raidz2 + sanoid snapshots + USB | `rsync` from USB |
| Immich DB (PostgreSQL) | `pg_dumpall` + USB | `rsync` from USB |
| Garage S3 data | 2-node replication + USB | Replication or USB | | Garage S3 data | 2-node replication + USB | Replication or USB |
| Gitea repos + DB | SQLite `.backup` + USB | `rsync` from USB | | Gitea repos + DB | SQLite `.backup` + USB | `rsync` from USB |
| Secrets (.env files) | USB backup + Bitwarden | `rsync` from USB, or recreate from Bitwarden | | Secrets (.env files) | USB backup + Bitwarden | `rsync` from USB, or recreate from Bitwarden |
+8 -3
View File
@@ -91,11 +91,13 @@ zpool import threeteras
zfs set mountpoint=/opt/argento/docker/nextcloud/data nextcloud/data zfs set mountpoint=/opt/argento/docker/nextcloud/data nextcloud/data
zfs set mountpoint=/opt/argento/smb/media threeteras/media zfs set mountpoint=/opt/argento/smb/media threeteras/media
zfs set mountpoint=/opt/argento/docker/garage/data threeteras/garage zfs set mountpoint=/opt/argento/docker/garage/data threeteras/garage
zfs set mountpoint=/opt/argento/docker/immich/library threeteras/immich
zpool status # verify pools are ONLINE zpool status # verify pools are ONLINE
# Restore non-ZFS app data (Gitea, Minecraft, Jellyfin config) from USB: # Restore non-ZFS app data (Gitea, Minecraft, Jellyfin config) from USB:
rsync -a --exclude='docker/nextcloud/data/' --exclude='docker/garage/data/' --exclude='smb/' \ rsync -a --exclude='docker/nextcloud/data/' --exclude='docker/garage/data/' \
--exclude='docker/immich/library/' --exclude='smb/' \
/mnt/backup/argento/ /opt/argento/ /mnt/backup/argento/ /opt/argento/
``` ```
@@ -117,6 +119,7 @@ zpool create threeteras raidz2 /dev/disk/by-id/<disk3> ... /dev/disk/by-id/<disk
zfs set compression=lz4 threeteras zfs set compression=lz4 threeteras
zfs create -o mountpoint=/opt/argento/smb/media threeteras/media zfs create -o mountpoint=/opt/argento/smb/media threeteras/media
zfs create -o mountpoint=/opt/argento/docker/garage/data threeteras/garage zfs create -o mountpoint=/opt/argento/docker/garage/data threeteras/garage
zfs create -o mountpoint=/opt/argento/docker/immich/library threeteras/immich
zpool status # verify pools are ONLINE zpool status # verify pools are ONLINE
@@ -171,7 +174,7 @@ docker compose up -d
# Issue certs (add any new domains that have been added since this was written) # Issue certs (add any new domains that have been added since this was written)
/opt/argento/scripts/issue-cert.sh \ /opt/argento/scripts/issue-cert.sh \
nextcloud.timothykim.net git.timothykim.net jellyfin.timothykim.net \ nextcloud.timothykim.net git.timothykim.net jellyfin.timothykim.net \
argento.timothykim.net garage.timothykim.net argento.timothykim.net garage.timothykim.net photos.thekims.family
# Restore SSL confs now that certs exist # Restore SSL confs now that certs exist
mv conf.d/.hold/*.conf conf.d/ mv conf.d/.hold/*.conf conf.d/
@@ -197,7 +200,7 @@ Deploy each app (nginx is already running and will return 502 until they start):
```bash ```bash
# Add any new apps that have been added since this was written # Add any new apps that have been added since this was written
for app in nextcloud gitea jellyfin garage minecraft beszel-agent; do for app in nextcloud gitea jellyfin garage minecraft immich beszel-agent; do
cd /opt/argento/docker/$app cd /opt/argento/docker/$app
docker compose pull docker compose pull
docker compose build docker compose build
@@ -229,6 +232,7 @@ CNAME records pointing to the DDNS hostname. These don't need updating when the
| `argento.timothykim.net` | CNAME | `argento.ddns.net` | | `argento.timothykim.net` | CNAME | `argento.ddns.net` |
| `garage.timothykim.net` | CNAME | `argento.ddns.net` | | `garage.timothykim.net` | CNAME | `argento.ddns.net` |
| `minecraft.thekims.family` | CNAME | `argento.ddns.net` | | `minecraft.thekims.family` | CNAME | `argento.ddns.net` |
| `photos.thekims.family` | CNAME | `argento.ddns.net` |
## 14. Verify ## 14. Verify
@@ -238,6 +242,7 @@ curl -I https://git.timothykim.net
curl -I https://jellyfin.timothykim.net curl -I https://jellyfin.timothykim.net
curl -I https://argento.timothykim.net curl -I https://argento.timothykim.net
curl -I https://garage.timothykim.net curl -I https://garage.timothykim.net
curl -I https://photos.thekims.family
curl -I http://minecraft.thekims.family curl -I http://minecraft.thekims.family
# Verify SMART, ZFS, and disk space are healthy # Verify SMART, ZFS, and disk space are healthy
+10
View File
@@ -18,6 +18,16 @@ else
FAILURES+=("nextcloud pg_dump") FAILURES+=("nextcloud pg_dump")
fi fi
# Dump Immich PostgreSQL for consistency
mkdir -p /opt/argento/docker/immich/db
IMMICH_DB_USER=$(grep -E '^DB_USERNAME=' /opt/argento/docker/immich/.env | cut -d= -f2)
if docker exec immich_postgres pg_dumpall -U "${IMMICH_DB_USER:-postgres}" > /opt/argento/docker/immich/db/pg_dumpall.sql.tmp; then
mv /opt/argento/docker/immich/db/pg_dumpall.sql.tmp /opt/argento/docker/immich/db/pg_dumpall.sql
else
rm -f /opt/argento/docker/immich/db/pg_dumpall.sql.tmp
FAILURES+=("immich pg_dump")
fi
# Dump Gitea SQLite for consistency # Dump Gitea SQLite for consistency
sqlite3 /opt/argento/docker/gitea/data/gitea/gitea.db \ sqlite3 /opt/argento/docker/gitea/data/gitea/gitea.db \
".backup /opt/argento/docker/gitea/data/gitea/gitea.db.bak" \ ".backup /opt/argento/docker/gitea/data/gitea/gitea.db.bak" \