Frontend deployen

Das Dreylo-Frontend ist ein SolidJS-Monorepo das mit Vite gebaut und als Docker-Image deployed wird.

Standard-Deployment

# 1. Code ändern in /home/dreylo-web/...

2. Build + Deploy:

cd /home/dreylo-web && docker build --no-cache -t dreylo-web . && cd /home/revolt && docker compose up -d --no-deps web
--no-deps verhindert, dass abhängige Container neugestartet werden.
--no-cache erzwingt vollständigen Rebuild (wichtig bei Code-Änderungen).

Build-Details

Der Build läuft in mehreren Stufen (Multi-Stage Dockerfile):

# Stage 1: Dependencies + Build
FROM node:22 as builder
WORKDIR /build
COPY . .
RUN npm install -g pnpm
RUN pnpm install
RUN pnpm --filter client exec vite build

Stage 2: Nginx serve

FROM nginx:alpine COPY --from=builder /build/packages/client/dist ./dist

Build-Zeit: ca. 2-4 Minuten.

Häufige Build-Fehler

"Could not resolve import"

# Prüfen ob der Pfad stimmt
grep -rn "from \"../pfad\"" DATEI.tsx

Typischer Fehler: falscher relativer Pfad

Von src/interface/ zu components/ sind es ../../../../components/

TypeScript Fehler

# Detaillierte Fehler anzeigen
cd /home/dreylo-web && docker build --no-cache -t dreylo-web . 2>&1 | grep -E "error|TS[0-9]" | head -20

Build läuft nicht durch

# Vollständige Build-Logs
cd /home/dreylo-web && docker build --no-cache -t dreylo-web . 2>&1 | tail -30

Neue Datei hinzufügen

Wenn du eine neue .ts/.tsx Datei hinzufügst:

  1. Datei erstellen
  2. In der importierenden Datei den richtigen Pfad verwenden
  3. Prüfen ob Export/Import korrekt ist
  4. Build-Test:
cd /home/dreylo-web && docker build -t dreylo-web . 2>&1 | grep -E "error|✓"

Frontend-Pakete

Das Monorepo hat folgende Pakete:

packages/
├── client/          # Haupt-App (SolidJS)
├── stoat.js/        # Stoat API Client Library
├── ui/              # (via @revolt/ui alias)
└── ...

Paket-Aliases:

  • @revolt/uipackages/client/components/ui/

  • @revolt/client → Client-State

  • @revolt/app → App-Components

  • @revolt/modal → Modal-System

Rollback

Falls ein Build schief läuft und der alte Container noch läuft:

# Letztes funktionierendes Image finden
docker images | grep dreylo-web

Altes Image direkt deployen

docker tag OLD_IMAGE_HASH dreylo-web:latest docker compose up -d --no-deps web