JournalindeksDockup / feltnote
Note / self-host-grocy

Sådan selvhoster du Grocy i 2026: lagerdata, tidszone og backups

Selvhost Grocy med korrekte porte, persistent storage, HTTPS, secrets, backups og opgraderingskontroller. Lær, hvordan du løser problemet, når SQLite-databasen ikke kan skrive.

Betragt Grocy som et lille system, ikke som et Docker-image. Det brugervendte mål med Grocy er klart: holde styr på husholdningens lagerbeholdning, dagligvarer, opgaver og udstyr. Installationen er først acceptabel, når du kan erstatte standardloginet, tilføje et produkt, registrere et køb og et forbrug, scanne en stregkode og udløse en påmindelse om en opgave eller en udløbsdato.

Denne skelnen fanger den fejltilstand, operatører møder efter lokal test: SQLite-databasen kan ikke skrive, eller planlagte opgaver bruger den forkerte tidszone. Den gør også backup- og opgraderingsplanen konkret nok til at kunne testes.

Porte, processer og private services

Et nyttigt Grocy-diagram viser den offentlige route, den private port 80, state-grænsen og alle understøttende krav. Markér, hvilke pile der transporterer credentials, og hvilke der er almindelig brugertrafik. Kravet til det lokale runtime-miljø er ét persistent config-volume samt valgfri adgang til stregkodeenheder. Dimensionér og overvåg denne ressource sammen med containeren i stedet for at eksponere en uvedkommende netværksservice.

Bevis diagrammet med én reel handling: Erstat standardloginet, tilføj et produkt, registrer et køb og et forbrug, scan en stregkode, og udløs en påmindelse om en opgave eller en udløbsdato. Det forventede pres kommer fra SQLite-skrivninger, uploadede billeder, planlagte jobs og trafik fra husholdningens enheder. Overvåg denne sti i stedet for at behandle alle HTTP-requests ens.

Overvåg workloaden, ikke kun containeren

Observer det arbejde, Grocy udfører: SQLite-skrivninger, uploadede billeder, planlagte jobs og trafik fra husholdningens enheder. Sæt limits med tilstrækkelig headroom til dette arbejde, og undgå en liveness probe, der konkurrerer med det. Operatørkontrollen skal stadig forsøge at erstatte standardloginet, tilføje et produkt, registrere et køb og et forbrug, scanne en stregkode og udløse en påmindelse om en opgave eller en udløbsdato efter en fast plan.

Ved opdateringer skal du huske, at Grocy-databasemigrationer og custom extensions bør øves på en kopieret config-mappe. Deploy kandidaten mod en gendannet kopi, og gentag den kendte test. Hvis SQLite-databasen ikke kan skrive, eller planlagte opgaver bruger den forkerte tidszone, skal du bruge runtime-logs og det faktiske netværksrequest til at finde ud af, hvilken antagelse der er ændret.

Det, der skal bestås, før rigtige Grocy-data ankommer

En production gate for Grocy skal kunne udføres af en person, der ikke har bygget deploymentet. Giv personen den låste version, en ikke-følsom testkonto og denne opgave: Erstat standardloginet, tilføj et produkt, registrer et køb og et forbrug, scan en stregkode, og udløs en påmindelse om en opgave eller en udløbsdato. Hvis instruktionerne kræver udokumenteret shell-adgang, er servicen endnu ikke driftsklar.

Gentag testen efter kun at have udskiftet containeren. Gendan derefter database, uploadede filer, opskrifter og konfiguration i blank infrastruktur, og bevis, at lagerbeholdning, opskrifter, opgaver, udstyr og historik vender tilbage, og at den næste planlagte påmindelse har den korrekte dato. Mål SQLite-skrivninger, uploadede billeder, planlagte jobs og trafik fra husholdningens enheder under begge vellykkede kørsler. Uventede forskelle afslører ofte en manglende cache, et manglende index, en worker eller et manglende data-mount.

Tilføj en failure drill: Indsend harmløst input tæt på den resource- eller formatgrænse, der er knyttet til denne grænse: SQLite-databasen kan ikke skrive, eller planlagte opgaver bruger den forkerte tidszone. Grocy skal vise en nyttig fejl, bevare den eksisterende state og komme sig, når den gyldige betingelse vender tilbage. Gem tidsstemplerne og de relevante loglinjer med secrets redacted. Denne dokumentation bliver referencepunktet for det næste image eller den næste konfigurationsændring.

Byg en Grocy-container, der kan udskiftes

Brug en kommando, der viser alle vigtige valg. Denne baseline binder Grocy til hostens loopback-interface, tilføjer de kendte data-mounts og leverer den første nødvendige indstilling. Bekræft det lokale krav før eksponering: ét persistent config-volume samt valgfri adgang til stregkodeenheder.

docker run -d \
  --name grocy \
  --restart unless-stopped \
  -p 127.0.0.1:80:80 \
  -v grocy-data:/config \
  lscr.io/linuxserver/grocy:latest

Erstat floating tags med en testet version eller digest. Efter opstart skal du inspicere docker logs --tail 200 grocy og bekræfte, at processen lytter på port 80. Udfør derefter Grocy-acceptancetesten. Et svar fra root-siden kan ikke bevise, at hele scenariet lykkes: Erstat standardloginet, tilføj et produkt, registrer et køb og et forbrug, scan en stregkode, og udløs en påmindelse om en opgave eller en udløbsdato.

Design Grocy-restore før lancering

Beskyt Grocys state, før du optimerer containeren. Det nødvendige sæt består af database, uploadede filer, opskrifter og konfiguration. Mount /config før bootstrap, skriv harmløse eksempeldata, og udskift containeren for at bevise, at stien faktisk er persistent. Hvis flere stores skal være enige, skal du dokumentere den rækkefølge, som skrivninger sættes på pause og backups tages i.

Opbevar kopier uden for deployment-serveren, og krypter materiale, der indeholder credentials eller privat indhold. Recovery er vellykket, når lagerbeholdning, opskrifter, opgaver, udstyr og historik vender tilbage, og den næste planlagte påmindelse har den korrekte dato. Forskellen mellem et persistent mount og en uafhængig kopi er beskrevet i persistent storage og snapshots.

Test Grocy udefra serveren

Vælg det endelige Grocy-hostname, før brugerne gemmer callbacks eller client-indstillinger, og publicér derefter brugerfladen over HTTPS, og konfigurér den korrekte tidszone. Platformens route skal terminere TLS én gang og pege på den private port 80.

Kør acceptancetransaktionen eksternt. Hvis klienten aldrig når frem til Grocy, skal du bruge tjeklisten til SSL-validering til DNS- og certifikatkontroller. Hvis requestet når frem til Grocy, men SQLite-databasen ikke kan skrive, eller planlagte opgaver bruger den forkerte tidszone, skal du stoppe med at ændre proxy-redirects og i stedet inspicere den applikationsspecifikke grænse.

Vælg Grocys trust boundary

Lav en threat model for den handling, Grocy udfører, ikke kun for loginformularen. Den største risiko her er at beholde standardloginet efter opsætningen. Implementér denne grænse: Fjern standardcredentials, vælg den korrekte tidszone, og begræns husholdningsdata til de tilsigtede brugere.

Grocy kræver ikke en obligatorisk bootstrap-secret i denne baseline. Beskyt i stedet den faktiske administratorkonto eller den upstream authentication, der bruges. Løs ikke en permission-fejl ved at køre containeren som root eller mounte hosten bredt. Resource limits hører også til i security-designet, når SQLite-skrivninger, uploadede billeder, planlagte jobs og trafik fra husholdningens enheder kan udløses af brugere.

En Dockup-deployment kræver stadig en Grocy-acceptancetest

Dockup kan håndtere de udskiftelige platformdele: route trafik til port 80, udstede domænet og certifikatet, injecte secrets, tilknytte persistent storage og forbinde Grocy med managed eller privat tilknyttede services. Det kan ske på Dockup-infrastruktur eller på en server, du selv tilknytter.

Acceptancetesten for Grocy skal stadig være eksplicit. Efter one-click-deploymentet skal du publicere brugerfladen over HTTPS og konfigurere den korrekte tidszone, bekræfte det lokale krav — ét persistent config-volume samt valgfri adgang til stregkodeenheder — og køre dette scenarie: Erstat standardloginet, tilføj et produkt, registrer et køb og et forbrug, scan en stregkode, og udløs en påmindelse om en opgave eller en udløbsdato. Denne opdeling er bevidst: Dockup fjerner gentagen opsætning af infrastruktur uden at lade som om, at applikationsroller, provider-credentials eller restore-policy vælger sig selv.

Ofte stillede spørgsmål

Hvad skal Grocy bruge til en production-deployment?

Route Grocy-containeren på port 80 gennem én HTTPS-origin. Kravet til det lokale runtime-miljø er ét persistent config-volume samt valgfri adgang til stregkodeenheder. Kald ikke Grocy klar, før du kan erstatte standardloginet, tilføje et produkt, registrere et køb og et forbrug, scanne en stregkode og udløse en påmindelse om en opgave eller en udløbsdato.

Hvilke Grocy-data hører til i en backup?

Gør /config persistent, og medtag database, uploadede filer, opskrifter og konfiguration i det samme recovery-manifest. En ren Grocy-restore er først godkendt, når lagerbeholdning, opskrifter, opgaver, udstyr og historik vender tilbage, og den næste planlagte påmindelse har den korrekte dato.

Kræver Grocy HTTPS bag en reverse proxy?

Brug HTTPS til den offentlige Grocy-origin, og behold port 80 på den interne route. Anvend Grocy-indstillingen korrekt: Publicér brugerfladen over HTTPS, og konfigurér den korrekte tidszone. For Grocy beskytter HTTPS credentials eller brugerindhold under transport og sikrer en ensartet klientadfærd, der afhænger af origin.

Hvordan bør en Grocy-opgradering testes?

Gendan den aktuelle Grocy-state i et isoleret deployment, anvend kandidatversionen, og gentag acceptancetransaktionen. Vær særligt opmærksom, fordi Grocy-databasemigrationer og custom extensions bør øves på en kopieret config-mappe. Behold det tidligere Grocy-image, indtil dets data-migration og rollback-boundary er forstået.