mirror of
https://github.com/skoelle/calender_sync.git
synced 2026-09-17 18:20:24 +00:00
0bacd8b98fa8b82f2d19412951c2757965c36648
calender_sync
Google Calendar (ICS-Feed) → MariaDB Sync fürs Homelab.
Läuft als Docker Container, pollt periodisch einen privaten Google Calendar ICS-Feed, expandiert RRULE/EXDATE/RECURRENCE-ID und schreibt einzelne Instanzen in eine MariaDB-Datenbank.
Features
- Automatische Synchronisation alle 15 Minuten (konfigurierbar)
- Expandiert wiederkehrende Events (RRULE) und Serien-Exceptions (EXDATE, RECURRENCE-ID)
- Soft-Delete: Entfernte Events werden als
deleted=1markiert, nicht gelöscht - Optionales Database-Bootstrap: Erstellt DB und User automatisch bei
DB_BOOTSTRAP=true - Zeitfenster-konfiguration für Vergangenheit/Future (standardmäßig -90 Tage / +365 Tage)
Voraussetzungen
- Docker & Docker Compose
- MariaDB Instanz (z.B. als Proxmox LXC)
- Google Calendar mit privatem ICS-Feed
Quick Start
-
MariaDB Setup
Entweder manuell ausführen:
mysql -u root -p < mariadb-setup.sqlOder automatisch beim Start (in
.envsetzen):DB_BOOTSTRAP=true DB_ROOT_USER=root DB_ROOT_PASSWORD=dein_root_passwort -
.env anlegen
cp .env.example .envVariablen anpassen, insbesondere:
ICS_URL: Privater ICS-Link aus den Google Calendar EinstellungenDB_PASSWORD: Sicheres Passwort für den calendar_sync User
-
Starten
docker compose up -d
Konfiguration
| Variable | Default | Beschreibung |
|---|---|---|
ICS_URL |
required | Privater ICS-Feed aus Google Calendar |
CALENDAR_LABEL |
default |
Label für den Kalender (für Multi-Kalender) |
DB_HOST |
mariadb.fritz.box |
MariaDB Host |
DB_PORT |
3306 |
MariaDB Port |
DB_NAME |
calendar_sync |
Datenbank-Name |
DB_USER |
required | Datenbank-User |
DB_PASSWORD |
required | Datenbank-Passwort |
SYNC_INTERVAL_MINUTES |
15 |
Sync-Intervall in Minuten |
WINDOW_PAST_DAYS |
90 |
Wie viele Tage in die Vergangenheit synchronisieren |
WINDOW_FUTURE_DAYS |
365 |
Wie viele Tage in die Zukunft synchronisieren |
LOG_LEVEL |
INFO |
Python Logging Level |
DB_BOOTSTRAP |
false |
DB + User beim Start erstellen |
DB_ROOT_USER |
- | Root-User fürs Bootstrap |
DB_ROOT_PASSWORD |
- | Root-Passwort fürs Bootstrap |
Datenbank-Schema
Tabelle calendar_events:
| Spalte | Typ | Beschreibung |
|---|---|---|
id |
BIGINT PK | Auto-Increment |
calendar_label |
VARCHAR(64) | Kalender-Label |
instance_key |
VARCHAR(255) | SHA1-basierte eindeutige Instanz-ID |
uid |
VARCHAR(255) | ICS UID |
recurrence_id |
VARCHAR(64) | RECURRENCE-ID bei Serien-Exceptions |
summary |
VARCHAR(512) | Titel |
description |
TEXT | Beschreibung |
location |
VARCHAR(512) | Ort |
start_at |
DATETIME | Startzeit (UTC) |
end_at |
DATETIME | Endzeit (UTC) |
all_day |
TINYINT(1) | Ganz-tagig Flag |
status |
VARCHAR(32) | Event-Status |
deleted |
TINYINT(1) | Soft-Delete Flag |
last_seen_at |
DATETIME | Letzte Synchronisation |
created_at |
DATETIME | Erstellungszeitpunkt |
updated_at |
DATETIME | Letzte Änderung |
CI/CD
GitHub Actions Workflow (docker-publish.yml) baut und published das Docker Image automatisch nach GitHub Container Registry:
ghcr.io/skoelle/calender_sync:latest
Lizenz
Keine Lizenz angegeben.
Languages
Python
80.8%
HTML
16%
Shell
2.7%
Dockerfile
0.5%