# Backend veröffentlichen

Dein Backend aus NestJS, FastAPI oder Laravel läuft als Docker-Container auf deinem Server, zusammen mit der MySQL-Datenbank, den Uploads und den Hilfsdiensten, die dazugehören.

> Source: https://www.application-platform.com/de/docs/publish-backend/

Die Pipeline baut aus deinem Backend ein Docker-Image und deployt es auf den [Server]({{< relref "servers" >}}) des Projekts; für Produktion brauchst du eine [Domain]({{< relref "domain" >}}) für die API. Den Deploy-Ablauf beschreibt [Git-Workflow und Deployment]({{< relref "git-workflow" >}}).

## Was mit dem Backend auf den Server kommt

Die MySQL-Datenbank läuft als eigener Container auf demselben Server, ihre Daten liegen unter `./backend-mysql`. In der Projektkonfiguration schaltest du phpMyAdmin und [Easy Backup]({{< relref "backups" >}}) ein. Traefik leitet die API-Domain an den Container weiter, HTTPS richtet die Plattform ein.

## Uploads

Nutzer-Uploads gehören lokal in `./upload` und im Container nach `/app/upload`. Auf dem Server hängt das Deployment `./backend-uploads` an diesen Pfad. Multer, der FastAPI-Upload-Handler oder Laravel Storage müssen auf diesen Pfad zeigen und nicht auf Verzeichnisse wie `user-uploads` oder `/app/uploads`. Das generierte Dockerfile legt den Ordner mit `RUN mkdir -p upload` an.

## Konfiguration und Secrets je Umgebung

Die Konfiguration je Umgebung liegt im `gitops-configuration`-Repository unter `configurations/`. `generated.yaml` pflegt die Plattform, darunter Hostnamen, Registry und verschlüsselte Secrets. Eigene Umgebungsvariablen trägst du in `custom.yaml` unter `additional_env_variables` ein; ein Commit auf `main` dieses Repositories rollt sie aus. Die Einzelheiten stehen unter [Umgebungsvariablen]({{< relref "environment-setup" >}}).

Für den E-Mail-Versand wählst du im Projekt einen Mail-Account aus den **Anbindungen**, wie unter [E-Mail-Versand]({{< relref "email-delivery" >}}) beschrieben.

## Die Adressen deines Backends

| Umgebung | URL |
|----------|-----|
| Dev | `backend.dev.<projekt>.<organisations-domain>`, automatisch vergeben |
| Produktion | deine eigene API-Domain aus der Projekt-Konfiguration |
| phpMyAdmin auf Dev | `phpmyadmin.dev.<projekt>.<organisations-domain>` |

Die DNS-Einträge für die API-Domain zeigt die Plattform im Domain-Detail; die Schritte stehen unter [DNS konfigurieren]({{< relref "domain-how-to" >}}). Eine Web-App desselben Projekts bekommt die Backend-URL über die generierten Env-Dateien ([Web-Apps veröffentlichen]({{< relref "publish-web-apps" >}})).

Fehler landen in deinem Sentry-Projekt, sobald du die Komponente unter **Funktionen** dafür aktivierst ([Error-Tracking]({{< relref "error-tracking" >}})); wie du ein Release zurücknimmst, steht unter [Betrieb]({{< relref "operations" >}}).

