Integriteitsworkflow voor een zelf gehoste fotobibliotheek voor originelen en afgeleiden

Eva Wong is de Technisch Schrijver en en vaste knutselaar bij ZimaSpace. Een levenslange geek met een passie voor homelabs en open-source software, zij is gespecialiseerd in het vertalen van complexe technische concepten naar toegankelijke, praktische handleidingen. Eva gelooft dat zelf-hosting leuk moet zijn, niet intimiderend. Met haar tutorials stelt ze de community in staat om hardware-setup te ontrafelen, van het bouwen van hun eerste NAS tot het beheersen van Docker-containers.

Een fototijdlijn die er gezond uitziet, bewijst niet dat de originelen, database en gegenereerde previews allemaal intact zijn.

Een zelfgehoste galerij kan gecachte miniaturen blijven weergeven nadat een origineel is verdwenen, of perfecte originelen behouden terwijl workers geen nieuwe afgeleiden kunnen genereren. Scheid vereiste status van opnieuw op te bouwen status, verifieer originele bytes buiten de app, stem bestanden af op databasegegevens en genereer slechts één canary voordat je een geïsoleerde hersteltest uitvoert. Stop onmiddellijk wanneer checksums veranderen, de bronopslag instabiel wordt of een taak naar originelen schrijft.

Definieer vereiste status en opnieuw genereerbare status

Neem originelen, geüploade video's, sidecars, database, configuratie, geheimen, gebruikersaccounts, albums, bewerkingen en deelgegevens op in de vereiste status. Vermeld miniaturen, getranscodeerde video, gezichtsinsluitingen en zoekindexen afzonderlijk als afgeleiden die alleen opnieuw kunnen worden gegenereerd als originelen en applicatiestatus intact blijven.

Een zelfgehoste implementatie plaatst de bibliotheek vaak op opslag met hoge capaciteit en de database of het werkpad op snellere media. Een praktische Immich-opslagbeschrijving behandelt de splitsing tussen bibliotheek- en hot-path-opslag, en daarom moet een integriteitscontrole elk gekoppeld pad omvatten, niet alleen de map die gebruikers bekijken.

Leg de applicatieversie, containerimage, mountdefinities, databasestatus, vrije opslagruimte en status van de taakwachtrij vast. Stop als een vereist pad ontbreekt of onverwacht alleen-lezen is; een regeneratietaak mag niet starten zolang de bron van waarheid onzeker is.

Bewijs de originele bytes onafhankelijk van de galerij

Genereer of hergebruik een vertrouwd checksummanifest voor originelen en vergelijk dit in alleen-lezenmodus met de huidige structuur. Stem het aantal bestanden, het totale aantal bytes, onleesbare bestanden, onverwachte objecten van nul bytes en verweesde paden op elkaar af. Open buiten de galerij een gestratificeerde steekproef met JPEG, HEIC, RAW, video, oudere jaren en recente uploads.

Leid de gezondheid van originelen niet af uit zichtbare miniaturen. Een galerij kan gecachte afgeleiden blijven weergeven nadat een origineel verloren is gegaan, en een gezond origineel kan verborgen blijven wanneer de preview-pijplijn faalt. Het onderscheid tussen originelen en opnieuw genereerbare afgeleiden maakt de controle van bestanden rechtstreeks de eerste veiligheidsbarrière.

Als hashes veranderen of leesbewerkingen mislukken, pauzeer dan import, opschoning en het regenereren van afgeleiden. Herstel of maak een image van de falende opslag voordat je databasegegevens wijzigt. De fase is geslaagd wanneer vereiste originelen leesbaar zijn en onverklaarde verschillen een eigenaar, reden en herstelactie hebben.

Stem records, paden en taken voor afgeleiden op elkaar af

Vergelijk databasegegevens van assets met bestandspaden in beide richtingen: records zonder bestanden en bestanden zonder records. Controleer UID en GID, bind mounts, roots van externe bibliotheken, hoofdlettergevoeligheid en hernoemde mappen voordat je assets als ontbrekend beschouwt. Bewaar lijsten met verweesde items in plaats van een van beide kanten automatisch te verwijderen.

Neem vervolgens steekproeven van taken voor miniaturen, previews, transcodering, metadata-extractie en machine learning. Een onafhankelijk probleemoplossingsartikel over intacte originelen met mislukte afgeleiden laat zien hoe intacte uploads kunnen samengaan met grijze tegels wanneer opslag, workers of paden voor afgeleiden falen.

Genereer slechts één canary-afgeleide nadat het origineel en de databaseregel overeenkomen. Een geslaagde test levert een nieuwe preview op met de verwachte eigenaar en het verwachte pad, plus een correct antwoord van de client; een mislukte test blijft beperkt tot workerlogs, decoder, uitvoeropslag of wachtrijstatus. Start nooit een rebuild van de volledige bibliotheek voordat deze canary na een herstart correct blijft.

Herstel de volledige bibliotheek naar een geïsoleerd doel

Herstel originelen, database, configuratie, geheimen en vereiste sidecars naar een wegwerpomgeving met andere poorten en paden. Start afhankelijkheden in de juiste volgorde, verifieer gebruikers en albums en laat vervolgens alleen de afgeleidentaken toe die nodig zijn voor de steekproef. Laat de testinstantie niet verwijzen naar productieopslag die schrijfbaar is.

Test het inloggen, de tijdlijn, zoeken, lidmaatschap van albums, het downloaden van originele bytes, één bewerking, één gedeeld item en het afspelen van een video. Vergelijk hashes van gedownloade bestanden met het manifest en controleer of een tweede herstart geen padkoppelingen verliest of vereiste status opnieuw aanmaakt onder de verkeerde eigenaar.

Verklaar de integriteit pas bewezen wanneer de actieve bibliotheek en de geïsoleerde herstelomgeving overeenkomen voor de vereiste status en de canary-afgeleiden opnieuw worden opgebouwd vanuit originelen. Schaal mismatches tussen database en bestanden, oplopende checksumfouten of taken die originelen wijzigen op; bewaar manifesten en logs zodat herstel geen ongedocumenteerde herimport wordt.

Ondersteuning & Tips

Meer om te lezen

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.