Produktiver Tag mit 42 Commits und Fokus auf Infrastructure und Production Readiness:
- SSD Migration - PostgreSQL und MinIO auf externe SSD verschoben
- i18n für Auth - Alle Auth-Pages mehrsprachig (DE/EN)
- Matrix Bots CI/CD - Automatisierte GHCR Deployment Pipeline
- Grafana Dashboards - Master Overview mit Key Metrics
- OIDC Production - mana-core-auth vollständig produktionsreif
- node-exporter - Host System Metrics für Monitoring
SSD Migration
Migration der Datenbanken auf externe SSD für bessere Performance.
Migrierte Services
| Service | Vorher | Nachher |
|---|---|---|
| PostgreSQL | Docker Volume | /Volumes/ManaData/postgres |
| MinIO | Docker Volume | /Volumes/ManaData/minio |
Docker Compose Änderungen
services:
manacore-postgres:
volumes:
- /Volumes/ManaData/postgres:/var/lib/postgresql/data
manacore-minio:
volumes:
- /Volumes/ManaData/minio:/data
Vorteile
| Aspekt | HDD (intern) | SSD (extern) |
|---|---|---|
| Read Speed | ~100 MB/s | ~500 MB/s |
| Write Speed | ~100 MB/s | ~450 MB/s |
| IOPS | ~100 | ~10.000 |
| Latency | ~10ms | ~0.1ms |
Dokumentation
Neue SSD-Dokumentation unter docs/MAC_MINI_SSD.md:
- Mount-Konfiguration
- Backup-Strategie
- Performance-Benchmarks
i18n für Auth Pages
Alle Authentifizierungs-Seiten sind jetzt mehrsprachig.
Unterstützte Sprachen
| Sprache | Code | Status |
|---|---|---|
| Deutsch | de | Vollständig |
| English | en | Vollständig |
Betroffene Apps
- Calendar Web
- Chat Web
- Clock Web
- Contacts Web
- NutriPhi Web
- Picture Web
- Planta Web
- Questions Web
- SkillTree Web
- Todo Web
- Zitare Web
Implementierung
// Locale Detection
const locale = navigator.language.startsWith('de') ? 'de' : 'en';
// i18n Store
export const t = derived(locale, ($locale) => {
return (key: string) => translations[$locale][key] || key;
});
Neue Auth Pages
Fehlende Auth-Pages für Zitare und Planta hinzugefügt:
/login/register/forgot-password/reset-password/verify-email
Matrix Bots CI/CD
Automatisierte Build und Deployment Pipeline für alle Matrix Bots.
GitHub Actions Workflow
# .github/workflows/matrix-bots.yml
name: Matrix Bots CI/CD
on:
push:
paths:
- 'services/matrix-*-bot/**'
jobs:
build-and-push:
runs-on: ubuntu-latest
strategy:
matrix:
bot:
- matrix-mana-bot
- matrix-todo-bot
- matrix-calendar-bot
# ... alle 19 Bots
steps:
- uses: docker/build-push-action@v5
with:
push: true
tags: ghcr.io/manacore/${{ matrix.bot }}:latest
Betroffene Bots
| Bot | GHCR Image |
|---|---|
| matrix-mana-bot | ghcr.io/manacore/matrix-mana-bot |
| matrix-todo-bot | ghcr.io/manacore/matrix-todo-bot |
| matrix-calendar-bot | ghcr.io/manacore/matrix-calendar-bot |
| … | … (19 total) |
ARM64 Workaround
QEMU-Emulation für ARM64 deaktiviert aufgrund von CI-Fehlern:
platforms: linux/amd64 # ARM64 temporär deaktiviert
Grafana Dashboards
Erweiterte Monitoring Dashboards.
Master Overview
Neues Home Dashboard mit Key Metrics:
| Panel | Metrik |
|---|---|
| Total Requests | Summe aller HTTP Requests |
| Requests/sec | Aktuelle Request-Rate |
| Error Rate | HTTP 5xx Errors |
| Response Time | P95 Latency |
System Overview
Neugeschrieben mit verfügbaren Metriken:
- CPU Usage (per Container)
- Memory Usage (per Container)
- Network I/O
- Disk Usage
Infinity Datasource
Plugin für Business Metrics installiert:
grafana-cli plugins install yesoreyeram-infinity-datasource
node-exporter
Host System Metrics für macOS Docker.
Metriken
| Metrik | Beschreibung |
|---|---|
node_cpu_seconds_total | CPU-Nutzung |
node_memory_MemTotal_bytes | Gesamter RAM |
node_filesystem_size_bytes | Disk-Größe |
node_network_receive_bytes_total | Netzwerk RX |
macOS-spezifische Konfiguration
node-exporter:
image: prom/node-exporter:latest
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev)($|/)'
OIDC Production Readiness
mana-core-auth ist jetzt vollständig produktionsreif.
Fixes
| Fix | Beschreibung |
|---|---|
| EdDSA Signing | OIDC id_token mit EdDSA statt RS256 |
| JWT Issuer | BASE_URL als Issuer |
| Token Exchange | body-parser für form-urlencoded |
| Test Fixes | Alle Tests grün |
OIDC Token Exchange
// Vorher: JSON only
app.use(express.json());
// Nachher: JSON + form-urlencoded
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
Token Endpoint
# OAuth2 Token Request (form-urlencoded)
curl -X POST https://auth.mana.how/oidc/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code&code=xxx&client_id=synapse"
Resend Verification Email
Neues Feature auf der Registrierungsseite.
UI
{#if registrationSuccess && !verified}
<div class="alert">
<p>Bitte bestätige deine Email-Adresse.</p>
<button onclick={resendVerification}>
Bestätigungsmail erneut senden
</button>
</div>
{/if}
API
// POST /api/v1/auth/resend-verification
await authService.resendVerificationEmail(email);
Cloudflared Port Updates
Alle Service-Ports in Cloudflared aktualisiert.
Geänderte Ports
| Service | Alt | Neu |
|---|---|---|
| matrix.mana.how | 8008 | 4000 |
| matrix-web | 5178 | 5180 |
| element.mana.how | 80 | 8088 |
Bugfixes
| Fix | Beschreibung |
|---|---|
| Matrix SSO | loginToken Callback Handler |
| Bot Health Checks | wget installiert in Docker |
| Crypto Module | E2EE via pnpm override deaktiviert |
| Native Modules | node:20-slim für Bot Images |
| CORS Origins | Alle Apps hinzugefügt |
| Questions Locale | ’de’ als Fallback |
Test User Seeding
Neuer Test-User für Development.
// scripts/seed-dev.ts
await db.insert(users).values({
email: '[email protected]',
password: await hash('test1234'),
verified: true,
});
Zusammenfassung
| Bereich | Commits | Highlights |
|---|---|---|
| SSD Migration | 4 | PostgreSQL + MinIO |
| i18n | 3 | Alle Auth Pages DE/EN |
| Matrix Bots CI/CD | 2 | 19 Bots automatisiert |
| Grafana | 6 | Master Overview, Infinity |
| node-exporter | 3 | Host Metrics |
| OIDC | 8 | Production Ready |
| Cloudflared | 4 | Port Updates |
| Bugfixes | 12 | Docker, Matrix, Auth |
Nächste Schritte
- Cross-Domain SSO für alle Web Apps
- Matrix Bots auf Mac Mini deployen
- Grafana Alerts konfigurieren
- Backup Workflow mit n8n