FRONTEND
Nuxt@4
TailwindCSS@4
Typescript
Jeden Tag um Mitternacht wird meine Portfolio-SQLite-Datenbank automatisch über einen Docker-Service auf meinem VPS aktualisiert.
Dieser Service führt einen Node.js-Cronjob aus, der Daten aus verschiedenen Quellen zusammenführt, darunter Vimeo, GitHub, GitLab APIs, Puppeteer Web-Scraping und statische Quellen, die auf https://storage.rottigni.tech/.
gehostet sind.@prisma/clientDie Updates werden mit
in die SQLite-Datenbank geschrieben und sind sowohl im VPS-Dateisystem als auch im Nuxt3-Container verfügbar, synchronisiert über Docker-Volumes. https://s3.rottigni.tech/portfolio.rottigni.tech/seeding/logs/Der Seeder-Container erzeugt während des Prozesses Logs (logs.log, errors.log und debug.log), die bei jedem Lauf an meinen privaten Speicher gesendet werden:
. https://s3.rottigni.tech/portfolio.rottigni.tech/seeding/backup/,Zusätzlich erstellt der Container vor jedem Seed-Operation ein Backup der SQLite3-Datenbank unter
, um Datensicherheit zu gewährleisten.
Ein besonderes Feature ist die Nutzung meines privaten Speichers als Cache-Provider.
(https://s3.rottigni.tech/portfolio.rottigni.tech/seeding/history/)Wenn der Seeder Daten von einem Provider anfordert, speichert er die JSON-Antwort mit einem UTC-Timestamp im Dateinamen
Wenn Caching aktiviert ist, wird stattdessen die neueste Datei aus dem Speicher gelesen.
Alles wird über eine seed.config.ts im Root des Seeding-Verzeichnisses gesteuert.
Diese Datei definiert, welche Entitäten und Relationen gesendet werden, was gecached wird und wohin Daten hochgeladen werden.