# Webseiten veröffentlichen

Hugo- und Astro-Seiten bestehen aus statischen Dateien, die die Pipeline baut und entweder auf deinen Docker-Server oder auf einen bestehenden Webspace ausliefert.

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

Homepage-Komponenten sind die Webseiten deines Projekts. Sie entstehen mit Hugo oder Astro, und lokal startest du sie mit `ap run-local`. Der Build erzeugt keinen laufenden Dienst, sondern einen Ordner mit statischen Dateien (bei Hugo `public/`, bei Astro `dist/`); deshalb gibt es zwei Wege der Auslieferung.

## Auf dem Docker-Server des Projekts

Ist dem Projekt ein [Server]({{< relref "servers" >}}) zugewiesen, rollt die Pipeline die gebaute Seite wie alle anderen Komponenten aus: Dev nach jedem Merge auf `main` automatisch, Produktion per manuellem Job, wie unter [Git-Workflow und Deployment]({{< relref "git-workflow" >}}) beschrieben. Traefik leitet die Domain an den Container der Homepage weiter, und die Plattform sorgt für HTTPS.

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

Für die Produktions-Domain trägst du die Domain im Projekt ein und setzt die DNS-Einträge aus dem Domain-Detail, wie unter [DNS konfigurieren]({{< relref "domain-how-to" >}}) beschrieben.

## Auf einem bestehenden Webspace

Reine Homepage-Projekte ohne App und Backend brauchen keinen Docker-Server; ein klassischer Webspace bei deinem Hoster reicht. Du hinterlegst den Zugang unter **Server** → **Server hinzufügen** mit der Kachel **Webspace (FTP/SFTP)** und wählst ihn im Projekt unter Hosting als **Webspace (FTP/SFTP)** aus; Projekte mit App oder Backend sehen diese Option nicht.

Die Pipeline baut die Seite bei jedem Push auf `main` und lädt sie per FTP oder SFTP in den hinterlegten Remote-Pfad; die Einzelheiten stehen unter [Webspace (FTP/SFTP)]({{< relref "webspace-ftp" >}}).

Auch für eine Webseite kannst du unter **Funktionen** Sentry aktivieren; Fehler landen dann in deinem Sentry-Projekt, wie unter [Error-Tracking]({{< relref "error-tracking" >}}) beschrieben.

