Sign inSign up

c42u/grocylink

By c42u

•Updated about 2 months ago

Grocy extension: expiry alerts, multi-channel notifications & CalDAV sync. Self-hosted.

Image
0

2.5K

c42u/grocylink repository overview

⁠Table of contents / Inhaltsverzeichnis

  1. Grocylink - english⁠
  2. Grocylink - deutsch⁠
  3. Impressum⁠

Grocylink extends Grocy⁠ with automatic expiry alerts, multi-channel notifications and bidirectional CalDAV synchronization.

Self-hosted, offline-capable and fully under your control.


⁠Features

  • Dashboard with real-time overview of expiring, expired and missing products
  • 6 notification channels: Email (SMTP), Pushover, Telegram, Slack, Discord, Gotify
  • Individual warning days per product (e.g. milk 2 days, canned goods 30 days)
  • CalDAV synchronization: Sync Grocy tasks and chores bidirectionally with CalDAV clients (2Do, Apple Reminders, Tasks.org and more)
  • New tasks created in CalDAV clients are automatically added to Grocy
  • Automatic scheduler with configurable interval
  • Test function for each notification channel
  • Full notification log with filtering and sorting
  • Encrypted storage of all passwords and API keys (Fernet/AES)
  • Dark/Light mode (automatic + manual toggle)
  • Multilingual: German and English
  • Non-root container with minimal privileges

⁠Installation

⁠1. Prepare data directory
mkdir -p /path/to/grocylink/data
chown 1000:1000 /path/to/grocylink/data
⁠2. Docker Compose
services:
  grocylink:
    image: c42u/grocylink:latest
    container_name: grocylink
    restart: unless-stopped
    user: "1000:1000"
    cpus: "1.0"
    pids_limit: 200
    mem_limit: 2G
    memswap_limit: 3G
    oom_kill_disable: false
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    environment:
      GUNICORN_WORKERS: 2
      TZ: Europe/Berlin
    volumes:
      - /path/to/grocylink/data:/app/data
    ports:
      - "5000:5000"
⁠3. Start
docker compose up -d

Grocylink is then accessible at http://localhost:5000.

⁠4. Configure
  1. Grocy connection: Enter the Grocy URL and API key under Settings
  2. Notifications: Set up one or more notification channels under Channels
  3. CalDAV (optional): Configure CalDAV server, credentials and calendar

⁠Reverse Proxy (HTTPS)

Grocylink serves HTTP on port 5000. For HTTPS, use an external reverse proxy.

Caddy example:

grocylink.example.com {
    reverse_proxy http://localhost:5000
}

Nginx example:

server {
    listen 443 ssl;
    server_name grocylink.example.com;
    ssl_certificate /certs/fullchain.pem;
    ssl_certificate_key /certs/key.pem;

    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

⁠Environment Variables

VariableDefaultDescription
GUNICORN_WORKERS2Number of Gunicorn worker processes
TZEurope/BerlinTimezone for scheduler and logs

⁠Persistent Data

All data is stored in /app/data inside the container:

FileDescription
grocy_notify.dbSQLite database (settings, channels, logs)
.encryption_keyEncryption key for passwords and API keys

Important: The volume /app/data must be mounted so data survives restarts. Make sure to back up the .encryption_key - without it, stored credentials cannot be decrypted.


⁠Compatible CalDAV Servers

ServerPath
Nextcloud/remote.php/dav
Radicale/radicale/
Baikal/baikal/html/dav.php
iCloud-
RFC 6764/.well-known/caldav

⁠Security

  • Runs as non-root user
  • All Linux capabilities dropped (cap_drop: ALL)
  • No privilege escalation (no-new-privileges)
  • All sensitive data AES-encrypted in the database
  • Resource limits for CPU, RAM and processes


Grocylink erweitert Grocy⁠ um automatische Ablaufwarnungen, Multi-Channel-Benachrichtigungen und bidirektionale CalDAV-Synchronisation.

Self-hosted, offline-faehig und vollstaendig unter deiner Kontrolle.


⁠Funktionen

  • Dashboard mit Echtzeit-Uebersicht ueber ablaufende, abgelaufene und fehlende Produkte
  • 6 Benachrichtigungskanaele: E-Mail (SMTP), Pushover, Telegram, Slack, Discord, Gotify
  • Individuelle Warntage pro Produkt (z.B. Milch 2 Tage, Konserven 30 Tage)
  • CalDAV-Synchronisation: Grocy-Aufgaben und Haushaltsarbeiten bidirektional mit CalDAV-Clients synchronisieren (2Do, Apple Reminders, Tasks.org u.a.)
  • Neue Aufgaben aus dem CalDAV-Client werden automatisch in Grocy angelegt
  • Automatischer Scheduler mit konfigurierbarem Intervall
  • Test-Funktion fuer jeden Benachrichtigungskanal
  • Vollstaendiges Benachrichtigungsprotokoll mit Filter und Sortierung
  • Verschluesselte Speicherung aller Passwoerter und API-Keys (Fernet/AES)
  • Dark/Light Mode (automatisch + manueller Toggle)
  • Mehrsprachig: Deutsch und Englisch
  • Non-Root Container mit minimalen Berechtigungen

⁠Installation

⁠1. Datenverzeichnis vorbereiten
mkdir -p /pfad/zu/grocylink/data
chown 1000:1000 /pfad/zu/grocylink/data
⁠2. Docker Compose
services:
  grocylink:
    image: c42u/grocylink:latest
    container_name: grocylink
    restart: unless-stopped
    user: "1000:1000"
    cpus: "1.0"
    pids_limit: 200
    mem_limit: 2G
    memswap_limit: 3G
    oom_kill_disable: false
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    environment:
      GUNICORN_WORKERS: 2
      TZ: Europe/Berlin
    volumes:
      - /pfad/zu/grocylink/data:/app/data
    ports:
      - "5000:5000"
⁠3. Starten
docker compose up -d

Grocylink ist dann erreichbar unter http://localhost:5000.

⁠4. Einrichten
  1. Grocy-Verbindung: Unter Einstellungen die Grocy-URL und den API-Key eintragen
  2. Benachrichtigungen: Unter Kanaele einen oder mehrere Benachrichtigungskanaele einrichten
  3. CalDAV (optional): CalDAV-Server, Zugangsdaten und Kalender konfigurieren

⁠Reverse Proxy (HTTPS)

Grocylink stellt HTTP auf Port 5000 bereit. Fuer HTTPS einen externen Reverse Proxy vorschalten.

Caddy-Beispiel:

grocylink.example.com {
    reverse_proxy http://localhost:5000
}

Nginx-Beispiel:

server {
    listen 443 ssl;
    server_name grocylink.example.com;
    ssl_certificate /certs/fullchain.pem;
    ssl_certificate_key /certs/key.pem;

    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

⁠Umgebungsvariablen

VariableStandardBeschreibung
GUNICORN_WORKERS2Anzahl Gunicorn Worker-Prozesse
TZEurope/BerlinZeitzone fuer Scheduler und Logs

⁠Persistente Daten

Alle Daten werden in /app/data im Container gespeichert:

DateiBeschreibung
grocy_notify.dbSQLite-Datenbank (Einstellungen, Kanaele, Logs)
.encryption_keyVerschluesselungsschluessel fuer Passwoerter und API-Keys

Wichtig: Das Volume /app/data muss gemountet sein, damit Daten einen Neustart ueberleben. Den .encryption_key unbedingt sichern - ohne ihn koennen gespeicherte Zugangsdaten nicht mehr entschluesselt werden.


⁠Kompatible CalDAV-Server

ServerPfad
Nextcloud/remote.php/dav
Radicale/radicale/
Baikal/baikal/html/dav.php
iCloud-
RFC 6764/.well-known/caldav

⁠Sicherheit

  • Laeuft als Non-Root User
  • Alle Linux Capabilities entfernt (cap_drop: ALL)
  • Keine Privilege Escalation (no-new-privileges)
  • Alle sensiblen Daten AES-verschluesselt in der Datenbank
  • Ressourcenlimits fuer CPU, RAM und Prozesse


⁠Impressum

Angaben gemäß § 5 DDG

Carsten Zucker c/o IP-Management #9060 Ludwig-Erhard-Straße 18 20459 Hamburg

Kontaktdaten: E-Mail: grocylink[at]c42u.de

USt-ID: DE309146063

Externe Links Diese Website enthält Verknüpfungen zu Websites Dritter ("externe Links"). Diese Websites unterliegen der Haftung der jeweiligen Betreiber. Der Anbieter hat bei der erstmaligen Verknüpfung der externen Links die fremden Inhalte daraufhin überprüft, ob etwaige Rechtsverstöße bestehen. Zu dem Zeitpunkt waren keine Rechtsverstöße ersichtlich. Der Anbieter hat keinerlei Einfluss auf die aktuelle und zukünftige Gestaltung und auf die Inhalte der verknüpften Seiten. Das Setzen von externen Links bedeutet nicht, dass sich der Anbieter die hinter dem Verweis oder Link liegenden Inhalte zu Eigen macht. Eine ständige Kontrolle der externen Links ist für den Anbieter ohne konkrete Hinweise auf Rechtsverstöße nicht zumutbar. Bei Kenntnis von Rechtsverstößen werden jedoch derartige externe Links unverzüglich gelöscht.

Verantwortlich für den Inhalt nach § 18 Abs. 2 MStV: Carsten Zucker

Haftung für Inhalte

Die Inhalte dieser Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte kann jedoch keine Gewähr übernommen werden. Als Diensteanbieter bin ich gemäß § 7 Abs. 1 DDG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach Art. 4 bis 6 der Verordnung (EU) 2022/2065 (Digital Services Act) bin ich als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werde ich diese Inhalte umgehend entfernen.

Datenschutz https://docs.github.com/de/site-policy/privacy-policies/github-general-privacy-statement⁠

Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten durch Dritte zur Übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit ausdrücklich widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-Mails, vor.

Tag summary

Content type

Image

Digest

sha256:1ae4b54ae…

Size

227.7 MB

Last updated

about 2 months ago

docker pull c42u/grocylink