Индекс на дневникаDockup / бележка от практиката
Note / self-host-grocy

Как да хоствате Grocy самостоятелно през 2026 г.: данни за наличности, часова зона и архиви

Хоствайте Grocy самостоятелно с правилни портове, устойчиво хранилище, HTTPS, secrets, архиви и проверки при надграждане. Научете как да отстраните проблема, при който SQLite базата данни не може да записва.

Разглеждайте Grocy като малка система, а не като Docker image. Целта от гледна точка на потребителя е ясна: проследяване на наличности в домакинството, покупки, домакински задачи и оборудване; deployment-ът е приемлив само когато можете да замените default login-а, да добавите продукт, да запишете покупка и потребление, да сканирате баркод и да задействате напомняне за задача или изтичане на срока.

Това разграничение улавя проблема, с който операторите се сблъскват след локално тестване: SQLite базата данни не може да записва или планираните задачи използват грешната часова зона. То също така прави плана за архивиране и надграждане достатъчно конкретен, за да бъде тестван.

Портове, процеси и частни услуги

Полезната схема на Grocy показва публичния маршрут, частния порт 80, границата на състоянието и всяко необходимо поддържащо изискване. Отбележете кои стрелки пренасят credentials и кои представляват обикновен потребителски трафик. Изискването на локалната среда е един durable config volume и опционален достъп до barcode device. Оразмерявайте и наблюдавайте този ресурс заедно с container-а, вместо да излагате несвързана мрежова услуга.

Докажете схемата с едно реално действие: заменете default login-а, добавете продукт, запишете покупка и потребление, сканирайте баркод и задействайте напомняне за задача или изтичане на срока. Вероятният натиск идва от SQLite записите, качените изображения, планираните задачи и трафика от устройствата в домакинството; наблюдавайте този път, вместо да третирате всички HTTP заявки като еднакви.

Наблюдавайте натоварването, а не само container-а

Наблюдавайте работата, която Grocy извършва: SQLite записи, качени изображения, планирани задачи и трафик от устройствата в домакинството. Задайте лимити с достатъчен резерв за тази работа и избягвайте liveness probe, която се конкурира с нея. Проверката от оператора все пак трябва периодично да опитва да замени default login-а, да добави продукт, да запише покупка и потребление, да сканира баркод и да задейства напомняне за задача или изтичане на срока.

При updates помнете, че миграциите на базата данни на Grocy и custom extensions трябва да бъдат репетирани върху копирана config директория. Deploy-нете кандидата спрямо възстановено копие и повторете познатия тест. Ако SQLite базата данни не може да записва или планираните задачи използват грешната часова зона, използвайте runtime logs и реалната мрежова заявка, за да откриете кое предположение се е променило.

Какво трябва да премине, преди да постъпят реални данни в Grocy

Production gate-ът за Grocy трябва да може да бъде изпълнен от човек, който не е изградил deployment-а. Дайте на този човек pinned version, несензитивен тестов акаунт и следната задача: да замени default login-а, да добави продукт, да запише покупка и потребление, да сканира баркод и да задейства напомняне за задача или изтичане на срока. Ако инструкциите изискват недокументиран shell достъп, услугата все още не е готова за експлоатация.

Повторете gate-а, след като замените само container-а. След това възстановете базата данни, качените файлове, рецептите и конфигурацията в празна инфраструктура и докажете, че наличностите, рецептите, задачите, оборудването и историята са възстановени и следващото планирано напомняне има правилната дата. Измервайте SQLite записите, качените изображения, планираните задачи и трафика от устройствата в домакинството по време и на двете успешни изпълнения; неочакваните разлики често разкриват липсващ cache, index, worker или data mount.

Добавете failure drill: изпратете безвреден input близо до resource или format лимита, свързан с тази граница: SQLite базата данни не може да записва или планираните задачи използват грешната часова зона. Grocy трябва да генерира полезна грешка, да запази съществуващото състояние и да се възстанови, когато валидното условие се върне. Запазете timestamp-ите и съответните log редове, като заличите secrets. Това доказателство става референция за следващата промяна на image-а или конфигурацията.

Изградете заменяем Grocy container

Използвайте команда, която показва всеки важен избор. Тази базова конфигурация свързва Grocy с loopback интерфейса на host-а, добавя известните data mounts и подава първата необходима настройка. Потвърдете локалното изискване преди излагане: един durable config volume и опционален достъп до barcode device.

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

Заменете floating tag-овете с тествана версия или digest. След стартирането прегледайте docker logs --tail 200 grocy и потвърдете, че процесът слуша на 80. След това изпълнете acceptance действието за Grocy; отговорът от root страницата не може да докаже, че целият сценарий работи успешно: заменете default login-а, добавете продукт, запишете покупка и потребление, сканирайте баркод и задействайте напомняне за задача или изтичане на срока.

Проектирайте възстановяването на Grocy преди стартирането

Защитете състоянието на Grocy, преди да оптимизирате неговия container. Задължителният набор включва база данни, качени файлове, рецепти и конфигурация. Монтирайте /config преди bootstrap, запишете безвредни примерни данни и заменете container-а, за да докажете, че този път наистина е persistent. Ако няколко store-а трябва да бъдат съгласувани, документирайте реда, в който записите се поставят на пауза и се създават архиви.

Съхранявайте копия извън deployment сървъра и криптирайте материалите, съдържащи credentials или private content. Възстановяването е успешно, когато наличностите, рецептите, задачите, оборудването и историята са върнати и следващото планирано напомняне има правилната дата. Разликата между persistent mount и независимо копие е разгледана в persistent storage and snapshots.

Тествайте Grocy извън сървъра

Изберете крайния hostname на Grocy, преди потребителите да запазят callbacks или client settings, след което публикувайте UI през HTTPS и конфигурирайте правилната часова зона. Маршрутът на платформата трябва да прекратява TLS веднъж и да сочи към частния порт 80.

Изпълнете acceptance transaction отвън. Ако client-ът изобщо не достига до Grocy, използвайте SSL validation checklist за проверки на DNS и сертификата. Ако заявката достига до Grocy, но SQLite базата данни не може да записва или планираните задачи използват грешната часова зона, спрете да променяте proxy redirect-ите и проверете специфичната за приложението граница.

Изберете trust boundary за Grocy

Направете threat model на действието, което Grocy извършва, а не само на login формата му. Тук високорисковата грешка е да оставите default login-а след setup. Реализирайте тази граница: премахнете default credentials, изберете правилната часова зона и ограничете данните на домакинството до предвидените потребители.

Grocy няма задължителен bootstrap secret в тази базова конфигурация; вместо това защитете реалния му administrator account или upstream authentication. Не решавайте permission error, като стартирате container-а като root или монтирате host-а без ограничения. Resource лимитите също са част от security дизайна, когато SQLite записите, качените изображения, планираните задачи и трафикът от устройствата в домакинството могат да бъдат задействани от потребители.

Един Dockup deployment все пак се нуждае от acceptance test за Grocy

Dockup може да поеме заменяемите части на платформата: да насочи трафика към порт 80, да издаде domain и certificate, да инжектира secrets, да прикачи persistent storage и да свърже Grocy с managed или privately attached services. Това може да се направи върху инфраструктурата на Dockup или на сървър, който сте прикачили.

Acceptance работата за Grocy остава изрично дефинирана. След one-click deployment-а публикувайте UI през HTTPS и конфигурирайте правилната часова зона, потвърдете локалното изискване — един durable config volume и опционален достъп до barcode device — и изпълнете този сценарий: заменете default login-а, добавете продукт, запишете покупка и потребление, сканирайте баркод и задействайте напомняне за задача или изтичане на срока. Това разделение е умишлено: Dockup премахва повтарящата се инфраструктурна настройка, без да се преструва, че application roles, provider credentials или restore policy се избират сами.

Често задавани въпроси

От какво се нуждае Grocy за production deployment?

Насочете container-а на Grocy през порт 80 към един HTTPS origin. Изискването на локалната среда е един durable config volume и опционален достъп до barcode device. Не обявявайте Grocy за готов, докато не можете да замените default login-а, да добавите продукт, да запишете покупка и потребление, да сканирате баркод и да задействате напомняне за задача или изтичане на срока.

Кои данни на Grocy трябва да бъдат включени в backup?

Направете /config persistent и включете базата данни, качените файлове, рецептите и конфигурацията в един и същ recovery manifest. Чистото възстановяване на Grocy е успешно само когато наличностите, рецептите, задачите, оборудването и историята са върнати и следващото планирано напомняне има правилната дата.

Изисква ли Grocy HTTPS зад reverse proxy?

Използвайте HTTPS за публичния Grocy origin и оставете порт 80 във вътрешния маршрут. Приложете правилно настройката на Grocy: публикувайте UI през HTTPS и конфигурирайте правилната часова зона. При Grocy HTTPS защитава credentials или user content при пренос и поддържа последователно client поведението, зависещо от origin-а.

Как трябва да се тества upgrade на Grocy?

Възстановете текущото състояние на Grocy в изолиран deployment, приложете кандидат-версията и повторете acceptance transaction. Обърнете особено внимание, тъй като миграциите на базата данни на Grocy и custom extensions трябва да бъдат репетирани върху копирана config директория. Запазете предишния Grocy image, докато не изясните границите на data migration-а и rollback-а.