Webseite von Git-Repository aus anbieten

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
paedubucher
Beiträge: 856
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Webseite von Git-Repository aus anbieten

Beitrag von paedubucher » 04.07.2020 11:52:48

Ich habe mir auf Basis von Markdown, Python und Jinja2-Templates einen statischen Webseitengenerator gebaut. Die Webseite paedubucher.ch (mit noch recht wenig Inhalt) hoste ich auf einer kleinen VM in der Cloud mit Debiannginx. Das ganze Setup ist so aufgebaut, dass sowohl der Inhalt als auch die Konfigurationsdatei in einem Git-Repository abgelegt sind, und dann Inhalt (html) wie Konfiguration (conf) per Symlink auf Unterordner meines Repositories in meinem Home-Verzeichnis gehen:

Code: Alles auswählen

/var/www/paedubucher.ch -> /home/debian/paedubucher.ch/html/
/etc/nginx/sites-available/paedubucher.ch -> /home/debian/paedubucher.ch/conf/paedubucher.ch
/etc/nginx/sites-enabled/paedubucher.ch -> /home/debian/paedubucher.ch/conf/paedubucher.ch
Dieses Setup erlaubt es mir, dass ich bei Änderungen bloss das Repository in meinem $HOME-Verzeichnis aktualisieren muss.

Nun möchte ich noch einen Schritt weiter gehen, und das Repository von GitHub wegnehmen und direkt auf dem gleichen Server hosten. Hierzu bieten sich sogenannte bare-Repositories an. Diese haben kein Arbeitsverzeichnis. Mit einem Arbeitsverzeichnis kann man nicht einfach von einem Client aus dort hineinpushen. Ohne Arbeitsverzeichnis fehlt mir aber der eigentliche Inhalt, sodass das Hosting nicht funktioniert.

Ich hätte am liebsten das besten aus zwei Welten: Ein Git-Repository mit Arbeitsverzeichnis, in das ich aber von meinem lokalen Rechner aus hineinpushen kann.

Eine Alternative wäre wohl eine systemd-Unit, die mittels PathChanged mein Git-Repository beobachtet, und bei Änderungen einen Pull auf das Arbeitsverzeichnis macht. Für mich fühlt sich das aber irgendwie umständlich an. Gibt es da eine elegantere Lösung?
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Webseite von Git-Repository aus anbieten

Beitrag von bluestar » 04.07.2020 13:10:15

Wir haben das mit gitolite gelöst und einem entsprechenden Hook, drr nach dem Push das Repository auscheckt und somit live bereitstellt.

Das Repo liegt innerhalb von gitolite auf dem
geleichen Server wie die Seite.

Kann dir später auch noch die Scripte posten.

Benutzeravatar
paedubucher
Beiträge: 856
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Webseite von Git-Repository aus anbieten

Beitrag von paedubucher » 05.07.2020 12:59:52

bluestar hat geschrieben: ↑ zum Beitrag ↑
04.07.2020 13:10:15
Wir haben das mit gitolite gelöst und einem entsprechenden Hook, drr nach dem Push das Repository auscheckt und somit live bereitstellt.

Das Repo liegt innerhalb von gitolite auf dem
geleichen Server wie die Seite.

Kann dir später auch noch die Scripte posten.
Danke für den Hinweis. Im Vergleich zur Lösung mit der systemd-Unit sehe ich für mich persönlich keinen handfesten Vorteil. Ist halt eine Abhängigkeit mehr.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
paedubucher
Beiträge: 856
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Webseite von Git-Repository aus anbieten

Beitrag von paedubucher » 05.07.2020 13:35:06

Ich habe es jetzt mit systemd hingekriegt. Hierzu braucht es zwei Units. In /etc/systemd/system/paedubucher.ch.path schaue ich auf Änderungen im Git-Repo:

Code: Alles auswählen

[Unit]
Description=update-paedubucher.ch trigger

[Path]
PathChanged=/home/debian/paedubucher.ch.git/refs/heads

[Install]
WantedBy=multi-user.target
Das habe ich mittels sudo systemctl enable paedubucher.ch.path && sudo systemctl start paedubucher.ch.path aktiviert und gestartet.

Dann wird in /etc/systemd/system/paedubucher.ch.path eine entsprechende Aktion ausgelöst:

Code: Alles auswählen

[Unit]
Description=update-paedubucher.ch action

[Service]
Type=oneshot
ExecStart=sudo -u debian /home/debian/bin/update-paedubucher.ch
Das Skript unter /home/debian/bin/update-paedubucher.ch macht dann folgendes:

Code: Alles auswählen

#!/usr/bin/bash

eval `ssh-agent -s`
ssh-add /home/debian/.ssh/id_rsa
cd /home/debian/paedubucher.ch
git pull
Wichtig war noch, dass ich /home/debian/paedubucher.ch direkt von /home/paedubucher.ch.git beziehe, und nicht von GitHub: git clone /home/debian/paedubucher.ch.git /home/debian/paedubucher.ch

Und schwupps, nach dem nächsten Push auf das entsprechende Origin war alles schön aktualisiert. :)
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Webseite von Git-Repository aus anbieten

Beitrag von eggy » 05.07.2020 18:34:02

Das Zauberwort in bluestars post war nicht gitolite (wobei das wirklich ne nette Sache ist) sondern hook
Schau mal was da zu post-receive hooks geschrieben ist:
https://git-scm.com/book/uz/v2/Customiz ... -Git-Hooks

Benutzeravatar
paedubucher
Beiträge: 856
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Webseite von Git-Repository aus anbieten

Beitrag von paedubucher » 06.07.2020 09:50:22

eggy hat geschrieben: ↑ zum Beitrag ↑
05.07.2020 18:34:02
Das Zauberwort in bluestars post war nicht gitolite (wobei das wirklich ne nette Sache ist) sondern hook
Schau mal was da zu post-receive hooks geschrieben ist:
https://git-scm.com/book/uz/v2/Customiz ... -Git-Hooks
Ein Git-Hook wäre natürlich auch eine Variante, wobei ich es konzeptionell etwas unschön finde damit auf dem System (d.h. ausserhalb des Repositories) herumzudoktern. Es wäre aber durchaus sinnvoll, wenn man keine Privilegien hat, um an systemd herumzuschrauben.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Antworten