# kollegen-hugo Die Kolleenrunden-Website besteht aus statischen Webseiten, die mittels dem Hugo-Framwork generiert werden. Es gibt zwei Repositories: kollegen-posts für die Inhalte der Blog-Beiträge und kollegen-hugo, was die Generierungsgrundlage beinhaltet. Um redaktionell mitzubloggen, benötigt man nur das Posts- Repository. Die Anleitung dazu findet man [dort](https://kollegen.uber.space/gitea/kollegenrunde/kollegen-posts.git). Dieses Repository wird für Website-Bearbeitung benötigt, was im Folgenden beschrieben ist. ## Lokales Setup Klappt auf Linux, Windows und Mac. Beschrieben ist es hier für Linux. Voraussetzungen: - Installierter git-Client: https://git-scm.com/downloads - Gitea-User aus dem [Owners](https://kollegen.uber.space/gitea/org/kollegenrunde/teams/owners)-Team ### Verzeichnis anlegen Die Installation kann in einem beliebigen Verzeichnis erfolgen, wir nehmen ~/kred und installieren dort das aktuelle Hugo-Release und das kollegen-hugo/Repository, jeweils in ein Unterverzeichnis: ```console $ mkdir ~/kred $ cd ~/kred $ mkdir hugo ``` ### Hugo-Release installieren Das aktuelles hugo-Release für seine Zielplattform findet man auf gitHub: [https://github.com/gohugoio/hugo/releases/latest] (die extended Version wird nicht benötigt). Wenn das aktuelle Hugo-Relase 0.78.1 ist, gilt für Linux: ```console $ wget https://github.com/gohugoio/hugo/releases/download/v0.78.1/hugo_0.78.1_Linux-64bit.tar.gz ... hugo_0.78.1_Linux-64bit.tar. 100%[============================================>] 13,31M 1,54MB/s in 25s 2020-10-13 21:09:43 (547 KB/s) - »hugo_0.78.1_Linux-64bit.tar.gz« gespeichert [13953675/13953675] $ tar -xvf hugo_0.78.1_Linux-64bit.tar.gz --directory hugo $ rm hugo_0.78.1_Linux-64bit.tar.gz ``` Nach erfolgreicher Installation sollte Hugo seine Version ausgeben können: ```console $ hugo/hugo version Hugo Static Site Generator v0.78.1-347F2DE6 linux/amd64 BuildDate: 2020-11-05T09:39:06Z ``` ### Web-Repository holen Das Repository wird geklont und installiert sich im Unterverzeichnis: ```console $ git clone --recurse-submodules https://kollegen.uber.space/gitea/kollegenrunde/kollegen-hugo.git $ ls kollegen-hugo archetypes config.toml data layouts LICENSE README.md resources static themes ``` Als Theme wird Ananke verwendet (wurde einmalig als Submodul eingebunden mit 'git submodule add https://github.com/budparr/gohugo-theme-ananke.git themes/ananke'). ### Content/Repository holen (Posts) Für die Post-Bearbeitung und ggf. auch zur Web-Entwicklung benötigt man noch den Content. Dieses Repository wird neben das Web-Repository installiert: ```console $ git clone https://kollegen.uber.space/gitea/kollegenrunde/kollegen-posts.git ``` Damit ist das Setup abgeschlossen. ## Setup des Servers auf uberspace Die Pflege des Servers erfolgt über ssh: ```console $ ssh kollegen@despina.uberspace.de Password: ... [kollegen@despina ~]$ ``` ### Subdomain Die Seite soll unter der Subdomain `kollegenrunde.kollegen.uber.space` erreichbar sein (und nicht unter kollegen.uber.space/kollegenrunde). Der Grund liegt darin, dass Hugo problemlos generiert, wenn seine Base-URL kein Unterverzeichnis hat. Einrichten der Subdomain: ```console [kollegen@despina ~]$ uberspace web domain add kollegenrunde.kollegen.uber.space ``` Der Webcontent für diese Subdomain muss in einem gleichnamigen Verzeichnis neben dem html-Verzeichnis liegen. Dieses wird per Skript `generate.sh` angelegt. Zum einfacheren Zugriff wird einmalig das leere Verzeichnis angelegt und ein symbolischer Link im Home-Verzeichnis erstellt: ```console [kollegen@despina ~]$ mkdir /var/www/virtual/kollegen/kollegenrunde.kollegen.uber.space [kollegen@despina ~]$ ln -s /var/www/virtual/kollegen/kollegenrunde.kollegen.uber.space ~/kollegenrunde.kollegen.uber.space ``` ### Gitea Wird im im Lab beschrieben installiert: (https://lab.uberspace.de/guide_gitea.html). Einzige Abweichung ist die Root-Url in der app.ini: ```console [kollegen@despina ~]$ cat gitea/custom/conf/app.ini | grep ROOT_URL ROOT_URL = https://%(DOMAIN)s/gitea/ ``` Im Gitea ist die Organisation 'kollegenrunde' mit den beiden Repositories kollegen-hugo und kollegen-posts anzulegen. ### Hugo Wird ebenfalls wie im Lab beschrieben installiert[^hugoguide]. Es wird lediglich ~/bin/hugo benötigt. [^hugoguide]: https://lab.uberspace.de/guide_hugo.html ```console [kollegen@despina ~]$ wget https://github.com/gohugoio/hugo/releases/download/v0.117.0/hugo_0.117.0_Linux-64bit.tar.gz [kollegen@despina ~]$ tar -xvf hugo_0.117.0_Linux-64bit.tar.gz hugo [kollegen@despina ~]$ rm hugo_0.117.0_Linux-64bit.tar.gz [kollegen@despina ~]$ mv hugo ~/bin/ [kollegen@despina ~]$ hugo version hugo v0.117.0-b2f0696cad918fb61420a6aff173eb36662b406e linux/amd64 BuildDate=2023-08-07T12:49:48Z VendorInfo=gohugoio ``` >**🛈 Hinweis** >Hugo wird auf dem Server für die Ausführung der Git-Hooks benötigt. Das Skript **generate.sh** zum automatischen Generieren beim git-update muss im Verzeichnis 'kollegengen' liegen. Das Skript ist aus dem Verzeichnis 'admin' des Repositories kollegen-hugo zu kopieren. ```console [kollegen@despina ~]$ mkdir ~/kollegengen [kollegen@despina ~]$ git clone https://kollegen.uber.space/gitea/kollegenrunde/kollegen-hugo.git ~/kollegengen/kollegen-hugo [kollegen@despina ~]$ cp ~/kollegengen/kollegen-hugo/admin/generate.sh ~/kollegengen/ ``` Zur Erfolgskontrolle kann die Website nun generiert und gepublished werden: ```console [kollegen@despina ~]$ ~/kollegengen/generate.sh ``` Es sollte die Ausgabe "Ready, Blog created in /var/www/virtual/kollegen/html/kollegenrunde!" erfolgen. ### Git-Hook einrichten ### Per Hook-Skript `post-receive` wird das Skript `generate.sh` nun in das git-update-Event der beiden Repositories eingebunden. Damit wird die Website mit jeden Push neu erzeugt. Das Hook Skript ist für beide Repositories das gleiche und wird im admin-Verzeichnis von kollegen-hugo gepfelgt. Die Aktivierung erfolgt auf dem Server. > **🛈 Hinweis** > Die Hooks sollte ebenfalls in der Gitea-Webkonsole von kollegen-posts[^posts-hooks] bzw. kollegen-hugo[^hugo-hooks] angezeigt werden, was aber nicht der Fall ist [^posts-hooks]: https://kollegen.uber.space/gitea/kollegenrunde/kollegen-posts/settings/hooks [^hugo-hooks]: https://kollegen.uber.space/gitea/kollegenrunde/kollegen-hugo/settings/hooks ***Serverseitig*** installiert man das Script durch kopieren in die Hooks (darauf achten, dass die Skripte ausführbar sind - 0775): ```console [kollegen@despina ~]$ cp ~/kollegengen/kollegen-hugo/admin/post-receive ~/gitea-repositories/kollegenrunde/kollegen-hugo.git/hooks/post-receive.d/ [kollegen@despina ~]$ cp ~/kollegengen/kollegen-hugo/admin/post-receive ~/gitea-repositories/kollegenrunde/kollegen-posts.git/hooks/post-receive.d/ ``` Hinweis: Das Hook-Skript starten das generate.sh mit 'env -i' in einer neuen Umgebung, damit nicht GIT_DIR gesetzt ist (vom ausführenden git). Ansonsten scheitert der pull innerhalb der Skripts. In der Web-Konsole von Gitea sollte man nun sehen, dass die post-receive-Hooks aktiv sind (grüner Punkt), was aber leider nicht funktioniert :o( # Backup and Restore Da alles in gitea abgelegt ist, s. Backup dort.