mirror of
https://codeberg.org/angestoepselt/homepage.git
synced 2025-05-24 14:46:16 +00:00
127 lines
8.1 KiB
Markdown
127 lines
8.1 KiB
Markdown
# Entwickler-Dokumentation
|
||
|
||
## Struktur
|
||
|
||
Das Projekt läuft mit dem Static-Site-Generator [Eleventy](https://www.11ty.dev/).
|
||
Anders als bei anderen Eleventy-Projekten liegt hier aber nicht nur einen Internetauftritt, sondern mehrere.
|
||
Alle teilen sich gemeinsames CSS, CGI-Skripte und noch ein paar andere Geschichten.
|
||
Sie unterscheiden sich nur durch die konkreten Inhalte.
|
||
|
||
Du solltest nach dem Auschecken (oder in der Online-GUI) folgende Ordnerstruktur vorfinden:
|
||
|
||
- **assets/** – Hilfsdateien für alle Auftritte. Dieser Ordner ist später unter `/assets` per HTTP verfügbar. Alles, was in diesem Ordner liegt, wird 1:1 kopiert.
|
||
- **cgi-bin/** – CGI-Skripte liegen hier. Diese sind zwar für alle Auftritte verfügbar, sind aber nicht überall genutzt. Diese Skripte werden auch nicht direkt von außen aufgerufen. Stattdessen schreibt der HTTP-Server relevante Anfragen um.
|
||
- **includes/** – Layout und Template-Dateien. Siehe dazu die [Eleventy-Dokumentation](https://www.11ty.dev/docs/config/#directory-for-includes).
|
||
- **nix/** – [Nix](https://nixos.org/)-spezifisches. Wahrscheinlich musst du hier nichts tun.
|
||
- **playground/** – Das ist die Spielwiese. Wenn du irgendetwas ausprobieren möchtest, was grob zum Projekt passt, aber sonst keinen Platz in der Ordnerstruktur hat, leg es hier ab.
|
||
- **sites/** – Hier bekommt jeder Internetauftritt einen eigenen Unterordner.
|
||
- **<name>/**
|
||
- **\_static/** – Statischer Inhalt, der nur für diesen Auftritt gedacht ist. Inhalte in diesem Ordner werden ohne Änderungen später live verfügbar sein.
|
||
- **assets/** – Hilfsdateien für diesen Auftritt. Diese sind später unter `/assets` per HTTP verfügbar.
|
||
- **\_data/** – [Globale Datendateien](https://www.11ty.dev/docs/data-global/) für Eleventy. Hier sind Metadaten zu dem Internetauftritt gespeichert.
|
||
- **\_images/** – Hier sind Bilder gespeichert, die vor der Liveschaltung nochmals angepasst werden. Dazu gehört Beispiel die automatisierte Konvertierung in verschiedene Formate.
|
||
- **httpd.conf** – Konfigurationsdatei für den HTTP-Server [lighttpd](https://redmine.lighttpd.net/projects/lighttpd/wiki#Documentation). Diese bestimmt die finale Auslieferung der Seite
|
||
- _Alles andere_ in diesem Ordner sind Inhalte für die eigentliche Homepage.
|
||
- **styles/** – [SCSS](https://sass-lang.com/)-Dateien. Alles, was hier nicht mit einem Unterstrich beginnt, ist später in `/assets/css` verfügbar.
|
||
- **.eleventy.js** – [Eleventy-Konfigurationsdatei](https://www.11ty.dev/docs/config/). Unsere Config ist so aufgesetzt, dass die entsprechend eingestellte Seite (siehe unten) geladen wird.
|
||
- **.eleventyignore** – Ignore-Datei für Eleventy. Diese enthält Pfade, die beim Bauen der Seite ignoriert werden.
|
||
|
||
## Lokale Entwicklung
|
||
|
||
Um das Projekt lokal zu bauen, musst du zunächst [Node](https://nodejs.org) sowie [git](https://git-scm.com/) installieren.
|
||
Dann kannst du das Repository klonen (stelle sicher, dass ein SSH Schlüssel in deinem Codeberg-Account [hinterlegt](https://docs.codeberg.org/security/ssh-key/) ist):
|
||
|
||
```shell
|
||
git clone git@codeberg.org:angestoepselt/homepage.git
|
||
```
|
||
|
||
Dann führst du im Ordner des Projekts (`cd homepage`) folgenden Befehl aus:
|
||
|
||
```shell
|
||
npm install
|
||
```
|
||
|
||
Das installiert sämtliche zur Entwicklung benötigten Abhängigkeiten.
|
||
Evtl. dauert das ein paar Minuten–hol dir ruhig einen Kaffee!
|
||
Du kannst `npm install` ruhig alle paar Wochen mal ausführen, um auf dem aktuellen Stand zu bleiben.
|
||
|
||
Anschließend kompilierst du die CSS-Dateien, damit du später nicht nur eine weiße Textwand zu sehen bekommst:
|
||
|
||
```shell
|
||
npm run build:styles
|
||
```
|
||
|
||
Wenn du allerdings explizit an den CSS-Dateien arbeiten willst, solltest du stattdessen `dev:styles` ausführen.
|
||
Solange der Prozess läuft, werden die Stylesheets stets neu kompiliert, wenn du sie veränderst.
|
||
|
||
Jetzt kannst du die eigentliche Webseite starten.
|
||
Dazu musst du zunächst den Namen des Unterordners von **sites/** notieren, der zu der Webseite passt, an der du arbeiten möchtest.
|
||
Diesen Namen schreibst du in die Umgebungsvariable `SITE`.
|
||
Anschließend kannst du den Server starten.
|
||
Hier beispielhaft für die Angestöpselt-Seite:
|
||
|
||
```shell
|
||
# Unter Linux / Mac:
|
||
export SITE=angestoepselt
|
||
# Oder in der PowerShell (Windows):
|
||
$Env:SITE='angestoepselt'
|
||
|
||
# Und dann im Anschluss:
|
||
npm run dev:site
|
||
```
|
||
|
||
## Deployment
|
||
|
||
Der `main`-Zweig wird automatisch durch unseren [CI-Server](https://drone.z31.it) deployt.
|
||
Das bedeutet: **alles, was auf `main` ist, ist live**!
|
||
Hier sind die jeweiligen URLs:
|
||
|
||
- Angestöpselt: [angestoepselt.de](https://angestoepselt.de/)
|
||
- CoderDojo: [coderdojo-wue.de](https://coderdojo-wue.de/)
|
||
|
||
Das Deployment funktioniert via [Portainer](https://portainer.pub.z31.it).
|
||
Verwendet wird dazu die [docker-compose.yml](https://codeberg.org/angestoepselt/homepage/src/branch/main/docker-compose.yml) aus diesem Repository.
|
||
|
||
### Konfiguration
|
||
|
||
Damit das Docker-Deployment (auch lokal) funktioniert, müssen ein paar Umgebungsvariablen gesetzt sein.
|
||
Hier sind sie, zusammen mit ihren Standards:
|
||
|
||
- `ZAMMAD_URL=https://ticket.z31.it` – Basis-URL der Zammad-Instanz, die durch die Kontaktformulare befüllt wird.
|
||
- `ZAMMAD_GROUP=""` – Ist diese Variable gesetzt (das ist sie in der Staging-Umgebung), landen alle Kontaktformular-Einträge in dieser Zammad-Gruppe. Standardmäßig (wenn dieser Wert leer ist) werden sie je nach Thema in die korrekte Gruppe einsortiert.
|
||
- `ZAMMAD_TOKEN` – API-Schlüssel zur Zammad-Instanz. Dieser Schlüssel muss die `ticket.agent`-Berechtigung haben.
|
||
- `HCAPTCHA_SITE_KEY` – Quasi-öffentlicher Schlüssel zum [Einbinden von hCaptcha](https://docs.hcaptcha.com/#add-the-hcaptcha-widget-to-your-webpage).
|
||
- `HCAPTCHA_SECRET_KEY` – Geheimer Schlüssel für die [Serverseitige Kontrolle der hCaptcha-Antworten](https://docs.hcaptcha.com/#verify-the-user-response-server-side).
|
||
|
||
Die letzten drei sind pflicht.
|
||
|
||
Wenn du das Image lokal bauen möchtest, musst du das [Argument](https://docs.docker.com/build/guide/build-args/) `SITE` mitgeben, genau wie bei der lokalen Entwicklung.
|
||
|
||
## Staging-Umgebung
|
||
|
||
Wir haben für die beiden großen Seiten jeweils eine Staging-Umgebung:
|
||
|
||
- Angestöpselt: [csw.stage.angestoepselt.de](https://csw.stage.angestoepselt.de/)
|
||
- CoderDojo: [coderdojo.stage.angestoepselt.de](https://coderdojo.stage.angestoepselt.de/)
|
||
|
||
Die Staging-Umgebung **zeigt immer auf die zeitlich neuste Änderung aus allen nicht-`main`-Zweigen**.
|
||
Wenn mehrere Personen gleichzeitig an unterschiedlichen Zweigen arbeiten wird die Staging-Umgebung immer das zeigen, was als letztes gepusht wurde.
|
||
|
||
Natürlich ist das nicht ganz ideal, aber für unsere aktuelle Entwicklungsfrequenz dürfte das reichen.
|
||
|
||
## Workflow für Änderungen
|
||
|
||
Wenn du deine Änderungen gerne online stellen möchtest, musst du einen [Pull-Request](https://docs.codeberg.org/collaborating/pull-requests-and-git-flow/) einreichen.
|
||
Ein Pull-Request bündelt deine Änderungen, sodass sie jemand vom Homepage-Team anschauen, genehmigen und einpflegen kann.
|
||
|
||
Wenn du deine Änderungen über das Webinterface von Codeberg erstellst, wählst du beim Bearbeiten einer Datei im *Änderungen Commiten*-Dialog die Option "Einen neuen Branch für diesen Commit erstellen und einen Pull Request starten".
|
||
Wenn du anschließend in den Pull-Request noch eine weitere Änderung aufnehmen möchtest, sucher [hier](https://codeberg.org/angestoepselt/homepage/branches) deinen entsprechenden Branch und wähle ab der zweiten Bearbeitung in dem erwähnten Dialog "Direkt in den Branch `...` einchecken".
|
||
|
||
Wenn du Mitglied des [Homepage](https://codeberg.org/org/angestoepselt/teams/homepage)-Teams auf Codeberg bist, kannst du ohne Forken direkt auf unserem Repository arbeiten.
|
||
Dann kannst du auch die Staging-Umgebung verwenden (siehe oben).
|
||
Falls du gerne Mitglied werden willst, melde dich bitte bei [Matthias](https://codeberg.org/matti) oder [Yannik](https://codeberg.org/yrd).
|
||
Du kannst auch hier im Projekt ein Issue erstellen.
|
||
|
||
Du kannst so viele Pull-Requests gleichzeitig erstellen wie du magst (musst also nicht warten, bis der erste genehmigt ist).
|
||
Bitte erstelle einen neuen PR für jedes "Thema" das du anschneidest.
|
||
Aktuell kümmern sich [Matthias](https://codeberg.org/matti) und [Yannik](https://codeberg.org/yrd) um das Zusammenführen der PRs.
|