Blog
Notizen aus sieben Jahren Basteln, Bauen und Betreiben: Discord-Bots, Webdienste, Server und ein Minecraft-Netzwerk. Was funktioniert hat, was kaputtgegangen ist und was ich daraus gelernt habe.
26 Beiträge zum Thema „architektur“.
Beiträge
- E
Ein Plugin statt siebenundfünfzig — der Plan hinter DreamCore
Jeder Minecraft-Versionssprung bedeutet, dutzende fremde Plugins nachzuziehen. Der Plan: möglichst viel davon in ein eigenes zentrales Plugin holen. Was ersetzbar ist — und was Infrastruktur bleibt.
- minecraft
- eigenbau
- architektur
5 Min. Lesezeit - E
Eine Rechteverwaltung für fünf Server
Jeder Server hatte seine eigenen Rechte — oder gar keine. Wie ich sie in einer gemeinsamen Datenbank zusammengeführt habe, ohne einen Bestand zu verlieren.
- minecraft
- rechte
- architektur
5 Min. Lesezeit - E
Eine fremde Lizenzprüfung übernehmen, ohne das Plugin anzufassen
Ein gekauftes Serverpaket prüft seine Lizenz gegen einen Server, den es nicht mehr gibt. Wie die Prüfung auf die eigene Infrastruktur umgezogen ist — mit einer geänderten Zeile statt eines Eingriffs ins Plugin.
- lizenzen
- minecraft
- architektur
5 Min. Lesezeit - W
Warum eine Datenbank für drei Prozesse reicht
Bot, Dashboard und Verwaltung hatten am Ende drei getrennte Datenbestände — historisch gewachsen, nie beabsichtigt. Wie ich sie zusammengeführt habe und woran man merkt, dass etwas auseinanderläuft.
- datenbank
- architektur
- betrieb
5 Min. Lesezeit - D
Der Blog zieht von MDX-Dateien in die Datenbank
Zwei Jahre lagen die Beiträge als Dateien im Repository. Warum ich sie in die Datenbank verschoben habe, was dabei gleich bleiben musste — und was ich mir damit eingehandelt habe.
- web
- architektur
- blog
5 Min. Lesezeit - L
Lizenzverwaltung mit Prüfspur
Schlüssel sperren, entsperren, Gerätebindung zurücksetzen, Laufzeit verlängern. Jede dieser Aktionen greift in etwas ein, für das jemand bezahlt hat — und gehört deshalb protokolliert.
- lizenzen
- architektur
- sicherheit
5 Min. Lesezeit - R
Rate-Limits dürfen fail-open sein — Auth nicht
Wie ich Begrenzungen tatsächlich umgesetzt habe: Token-Bucket, gleitendes Fenster, Zähler mit Ablauf — und was passiert, wenn der Speicher dahinter ausfällt.
- sicherheit
- architektur
- meinung
5 Min. Lesezeit - O
OAuth-Token verschlüsseln, bevor jemand danach fragt
Wer sich über Discord anmeldet, hinterlässt bei mir ein Zugriffstoken. Was damit möglich wäre, wie ich es verschlüssele — und der Fehler, den ich dabei jahrelang im Code hatte.
- sicherheit
- yurna
- architektur
5 Min. Lesezeit - P
prisma db push statt Migrationen — bewusst
Migrationsdateien gelten als der professionelle Weg. Ich habe mich für den direkten Schemaabgleich entschieden, und zwar mit Gründen — inklusive der Einschränkungen, die man dabei akzeptiert.
- datenbank
- architektur
- werkzeuge
5 Min. Lesezeit - F
fail-closed als Grundhaltung
Wenn eine Prüfung nicht durchgeführt werden kann — verweigern oder durchlassen? Die Antwort hängt davon ab, was schiefgeht, und die Unterscheidung ist eine der nützlichsten, die ich kenne.
- sicherheit
- architektur
- meinung
5 Min. Lesezeit - G
Geheimnisse gehören nicht dauerhaft in die .env
Eine .env-Datei löst das Problem „Zugangsdaten im Code“. Sie löst nicht das Problem „Zugangsdaten im Klartext auf der Platte“. Wie ich Runtime-Zugangsdaten verschlüsselt in die Datenbank verlegt habe.
- sicherheit
- architektur
- betrieb
5 Min. Lesezeit - D
Drei Prozesse, eine Datenbank
Bot, Dashboard und Verwaltung laufen getrennt und sprechen nie direkt miteinander. Warum diese Architektur für ein Ein-Personen-Projekt genau richtig ist — und wo ihre Grenzen liegen.
- yurna
- architektur
- betrieb
5 Min. Lesezeit - D
Die Admin-API wird eigenständig
Wenn der Bot abstürzt, soll man trotzdem nachsehen und steuern können. Warum ich die Verwaltung vom laufenden Discord-Client entkoppelt habe — und wie Befehle an einen abwesenden Bot funktionieren.
- yurna
- architektur
- api
5 Min. Lesezeit - V
Von Postgres nach SQLite — der unpopuläre Umzug
Fast alle Wege führen von SQLite zu Postgres. Ich bin den umgekehrten gegangen, aus Gründen, die mit Last nichts zu tun haben — und würde es wieder tun.
- datenbank
- architektur
- yurna
5 Min. Lesezeit - R
Redis optional machen war die beste Entscheidung des Jahres
Zwischenspeicher, Sitzungen, Sperren, Rate-Limits — alles lief über Redis. Bis ich gemerkt habe, dass ein zusätzlicher Pflichtdienst für Selbstbetreiber eine echte Hürde ist.
- architektur
- leistung
- betrieb
5 Min. Lesezeit - D
Directus kam und ging
Ein fertiges Content-System für Texte, Bilder und Ankündigungen. Ein halbes Jahr später war es wieder draußen. Was der Umweg gekostet und was er gebracht hat.
- web
- cms
- architektur
5 Min. Lesezeit - L
Lizenzschlüssel selbst bauen — und was daran heikel ist
Ein Schlüssel im Format BLACK-XXXXX-ZACK-XXXXX-XXXXX, eine Prüfung, ein Gerätebezug. Wie ich ein Lizenzsystem gebaut habe und warum der schwierigste Teil nicht die Kryptografie ist.
- lizenzen
- sicherheit
- architektur
5 Min. Lesezeit - T
Ticket-System v2: Transkripte, Kategorien, Automatik
Aus einem Knopf, der einen Kanal erzeugt, wurde ein System mit Abschriften, Bewertungen, Notizen und Regeln. Der größte Einzelbrocken des Jahres — und die Fragen, die dabei nicht technisch waren.
- yurna
- discord
- architektur
5 Min. Lesezeit - P
Postgres für einen Bot war eine Nummer zu groß
Ich hatte eine ausgewachsene Datenbank für ein System mit überschaubarer Last. Was das gekostet hat, was es gebracht hat — und warum die Entscheidung trotzdem erst später fiel.
- yurna
- datenbank
- architektur
5 Min. Lesezeit - R
Reaction Roles und die Tücke der Events
Auf ein Emoji klicken, eine Rolle bekommen. Das einfachste Feature überhaupt — bis man merkt, dass Discord Ereignisse für alte Nachrichten gar nicht erst liefert.
- yurna
- discord
- architektur
5 Min. Lesezeit - M
Mehrsprachigkeit von Anfang an wäre billiger gewesen
Über hundert Befehle mit Texten mitten im Code, dazu Zahlen, Daten und Pluralformen. Was das Nachrüsten von zwei Sprachen tatsächlich gekostet hat.
- yurna
- i18n
- architektur
5 Min. Lesezeit - M
Monorepo oder nicht — ich habe mich falsch entschieden und dann richtig
Bot, Dashboard und gemeinsamer Code lagen in drei Repositories. Jede Änderung an geteilten Funktionen war eine Kopieraktion. Wie ich das zusammengelegt habe und was dabei schiefging.
- architektur
- werkzeuge
- yurna
5 Min. Lesezeit - D
Das erste Ticket-System — und warum ich es zweimal gebaut habe
Ein Knopf, ein Kanal, ein Gespräch. Die erste Fassung hat sechs Wochen gehalten, dann kamen die Fragen, die ich nicht bedacht hatte: Verlauf, Kategorien, Rechte, Löschen.
- yurna
- discord
- architektur
5 Min. Lesezeit - G
Giveaways sind schwerer, als sie aussehen
Eine Verlosung ist ein Zeitgeber, eine Teilnehmerliste und ein Zufallsgriff. Klingt nach einer Stunde Arbeit — und ist der Befehl, der mich am meisten über Zustand, Neustarts und Fairness gelehrt hat.
- yurna
- discord
- architektur
5 Min. Lesezeit - V
Von JSON-Dateien zu einer richtigen Datenbank
Zwei beschädigte Dateien, ein verlorener Punktestand und die Frage, warum eigentlich alle Datenbanken benutzen. Der Umzug von JSON auf MySQL — mit allem, was ich dabei zum ersten Mal verstanden habe.
- yurna
- datenbank
- architektur
6 Min. Lesezeit - V
Vom if-Wald zum Command-Handler
Wie aus einer 400-Zeilen-Verzweigung ein System aus einzelnen Dateien wurde — und warum diese Umstellung die wichtigste des ganzen Jahres war.
- yurna
- javascript
- architektur
5 Min. Lesezeit