Webentwicklung · 18 min read · Oct 19, 2025

So installieren Sie den Hugo Site Generator mit Nginx auf Rocky Linux 9

Eine statische Website besteht aus Seiten mit statischem Inhalt oder einfachem HTML-, JavaScript- oder CSS-Code. Der Inhalt wird nicht dynamisch generiert und erfordert keine Datenbank oder serverseitige Verarbeitung. Solche Websites sind unglaublich schnell und immun gegen Angriffe, die von dynamischem Code oder SQL abhängen.

Hugo ist ein Open-Source-Generator für statische Websites, der in Go geschrieben ist. Er generiert Inhalte, indem er Beiträge, die in Markdown-Sprache verfasst sind, in HTML umwandelt. Hugo wird auch mit einem integrierten Server geliefert, um die von ihm generierten Websites zu hosten. Sie können eine Hugo-Website auch auf Amazon S3, GitHub-Seiten, Google Cloud, Netlify, Vercel usw. hosten.

In diesem Tutorial werden wir untersuchen, wie man Hugo installiert, um eine statische Website auf einem Server, der von Rocky Linux 9 betrieben wird, zu erstellen. Wir werden den Nginx-Server verwenden, um die Website zu hosten, und das Let’s Encrypt SSL-Zertifikat, um unsere Installation zu sichern.

Voraussetzungen

  • Ein Server, der Rocky Linux 9 ausführt.
  • Ein Nicht-Root-Benutzer mit Sudo-Rechten.
  • Ein vollständig qualifizierter Domainname (FQDN), der auf Ihren Server zeigt. Für unsere Zwecke verwenden wir hugo.example.com als Domainnamen.
  • Stellen Sie sicher, dass alles aktualisiert ist. $ sudo dnf update
  • Installieren Sie grundlegende Dienstprogramme. Einige davon sind möglicherweise bereits installiert. $ sudo dnf install wget curl nano unzip yum-utils tree -y

Schritt 1 - Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Rocky Linux verwendet die Firewalld-Firewall. Überprüfen Sie den Status der Firewall.

$ sudo firewall-cmd --state
running

Die Firewall arbeitet mit verschiedenen Zonen, und die öffentliche Zone ist die Standardzone, die wir verwenden werden. Listen Sie alle Dienste und Ports auf, die in der Firewall aktiv sind.

$ sudo firewall-cmd --permanent --list-services

Es sollte die folgende Ausgabe anzeigen.

cockpit dhcpv6-client ssh

Wiki.js benötigt HTTP- und HTTPS-Ports, um zu funktionieren. Öffnen Sie diese.

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

Laden Sie die Firewall neu, um die Änderungen anzuwenden.

$ sudo firewall-cmd --reload

Schritt 2 - Nginx installieren

Rocky Linux 9 wird mit einer älteren Version von Nginx ausgeliefert. Sie müssen das offizielle Nginx-Repository herunterladen, um die neueste Version zu installieren.

Erstellen und öffnen Sie die Datei /etc/yum.repos.d/nginx.repo, um das offizielle Nginx-Repository zu erstellen.

$ sudo nano /etc/yum.repos.d/nginx.repo

Fügen Sie den folgenden Code ein.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Installieren Sie den Nginx-Server.

$ sudo dnf install nginx -y

Überprüfen Sie die Installation.

$ nginx -v
nginx version: nginx/1.24.0

Aktivieren und starten Sie den Nginx-Server.

$ sudo systemctl enable nginx --now

Überprüfen Sie den Status des Servers.

$ sudo systemctl status nginx
? nginx.service - nginx - Hochleistungs-Webserver
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Mon 2023-10-30 08:24:05 UTC; 7s ago
       Docs: http://nginx.org/en/docs/
    Process: 4265 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 4266 (nginx)
      Tasks: 2 (limit: 4402)
     Memory: 1.9M
        CPU: 7ms
     CGroup: /system.slice/nginx.service
             ??4266 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??4267 "nginx: worker process"

Oct 30 08:24:05 hugo.example.com systemd[1]: Starting nginx - Hochleistungs-Webserver...

Schritt 3 - Git installieren

Hugo benötigt Git, um zu funktionieren. Führen Sie den folgenden Befehl aus, um Git zu installieren.

$ sudo dnf install git -y

Überprüfen Sie die Git-Installation.

$ git --version
git version 2.39.3

Schritt 4 - Hugo installieren

Da Hugo mit der Go-Sprache erstellt wurde, ist die Installation ziemlich einfach, da sie keine Abhängigkeiten erfordert und eigenständig ausgeführt werden kann.

Laden Sie Hugo herunter. Für unser Tutorial werden wir die erweiterte Version von Hugo installieren. Die erweiterte Version kann Bilder im Webp-Format kodieren, wenn Bilder verarbeitet werden. Dies ist nützlich, wenn Sie möchten, dass Hugo Bilder für Sie in Echtzeit konvertiert und deren Größen reduziert. Die erweiterte Version enthält auch einen SASS-Compiler, der in bestimmten Fällen nützlich sein kann, falls Sie ihn benötigen.

Erstellen Sie ein Verzeichnis für Hugo.

$ sudo mkdir /var/www/html/hugo -p

Wechseln Sie in das neu erstellte Verzeichnis.

$ cd /var/www/html/hugo

Laden Sie Hugo von der GitHub-Releases-Seite herunter. Zum Zeitpunkt des Schreibens dieses Tutorials ist v0.119.0 die neueste Version, die wir herunterladen werden.

$ sudo wget https://github.com/gohugoio/hugo/releases/download/v0.119.0/hugo_extended_0.119.0_linux-amd64.tar.gz

Entpacken Sie die Dateien aus dem Archiv.

$ sudo tar -xzf hugo_extended_0.119.0_linux-amd64.tar.gz

Sie sehen die folgenden drei Dateien in Ihrem Verzeichnis.

$ ls
hugo  hugo_extended_0.119.0_linux-amd64.tar.gz  LICENSE  README.md

Verschieben Sie die hugo-Binärdatei in das Verzeichnis /usr/bin.

$ sudo mv hugo /usr/bin/hugo

Die Datei hat bereits die Berechtigung zum Ausführen gesetzt, sodass Sie sie nicht setzen müssen.

Bestätigen Sie die Installation.

$ hugo version
hugo v0.119.0-b84644c008e0dc2c4b67bd69cccf87a41a03937e+extended linux/amd64 BuildDate=2023-09-24T15:20:17Z VendorInfo=gohugoio

Sie können auch alle verfügbaren Optionen zur Verwendung mit dem --help-Flag überprüfen.

$ hugo --help

Sie erhalten die folgende Ausgabe.

hugo ist der Hauptbefehl, der verwendet wird, um Ihre Hugo-Website zu erstellen.

Hugo ist ein schneller und flexibler Generator für statische Websites,
gebaut mit Liebe von spf13 und Freunden in Go.

Vollständige Dokumentation ist verfügbar unter https://gohugo.io/.

Verwendung:
  hugo [flags]
  hugo [command]

Verfügbare Befehle:
  completion  Generieren Sie das Autovervollständigungsskript für die angegebene Shell
  config      Drucken Sie die Site-Konfiguration
  convert     Konvertieren Sie Ihren Inhalt in verschiedene Formate
  deploy      Stellen Sie Ihre Website bei einem Cloud-Anbieter bereit.
  env         Drucken Sie Hugo-Version und Umgebungsinformationen
  gen         Eine Sammlung mehrerer nützlicher Generatoren.
  help        Hilfe zu einem Befehl
  import      Importieren Sie Ihre Website von anderen.
  list        Auflistung verschiedener Arten von Inhalten
  mod         Verschiedene Hugo-Module-Helfer.
  new         Erstellen Sie neue Inhalte für Ihre Website
  server      Ein Hochleistungs-Webserver
  version     Drucken Sie Hugo-Version und Umgebungsinformationen

Flags:
  -b, --baseURL string             Hostname (und Pfad) zum Stamm, z.B. https://spf13.com/
  -D, --buildDrafts                Inhalte einbeziehen, die als Entwurf markiert sind
  -E, --buildExpired               abgelaufene Inhalte einbeziehen
  -F, --buildFuture                Inhalte mit Veröffentlichungsdatum in der Zukunft einbeziehen
      --cacheDir string            Dateisystempfad zum Cache-Verzeichnis
      --cleanDestinationDir        Entfernen Sie Dateien aus dem Ziel, die nicht in statischen Verzeichnissen gefunden wurden
      --clock string               Stellen Sie die Uhr ein, die von Hugo verwendet wird, z.B. --clock 2021-11-06T22:30:00.00+09:00
      --config string              Konfigurationsdatei (Standard ist hugo.yaml|json|toml)
      --configDir string           Konfigurationsverzeichnis (Standard "config")
  -c, --contentDir string          Dateisystempfad zum Inhaltsverzeichnis
      --debug                      Debug-Ausgabe
  -d, --destination string         Dateisystempfad zum Schreiben von Dateien
      --disableKinds strings       Verschiedene Arten von Seiten deaktivieren (Startseite, RSS usw.)
      --enableGitInfo              Fügen Sie Git-Revision, Datum, Autor und CODEOWNERS-Informationen zu den Seiten hinzu
  -e, --environment string         Build-Umgebung
      --forceSyncStatic            Kopieren Sie alle Dateien, wenn statisch geändert wird.
      --gc                         Aktivieren Sie die Ausführung einiger Bereinigungsaufgaben (entfernen Sie ungenutzte Cache-Dateien) nach dem Build
  -h, --help                       Hilfe für hugo
      --ignoreCache                Ignoriert das Cache-Verzeichnis
      --ignoreVendorPaths string   Ignoriert alle _vendor für Modulpfade, die dem angegebenen Glob-Muster entsprechen
  -l, --layoutDir string           Dateisystempfad zum Layoutverzeichnis
      --logLevel string            Protokollstufe (debug|info|warn|error)
      --minify                     Minimieren Sie jedes unterstützte Ausgabeformat (HTML, XML usw.)
      --noBuildLock                Erstellen Sie keine .hugo_build.lock-Datei
      --noChmod                    Synchronisieren Sie nicht den Berechtigungsmodus von Dateien
      --noTimes                    Synchronisieren Sie nicht die Änderungszeit von Dateien
      --panicOnWarning             Panik bei der ersten WARNUNG-Protokollierung
      --poll string                Stellen Sie dies auf ein Poll-Intervall ein, z.B. --poll 700ms, um einen auf Polling basierenden Ansatz zu verwenden, um auf Änderungen im Dateisystem zu achten
      --printI18nWarnings          Drucken Sie fehlende Übersetzungen
      --printMemoryUsage           Drucken Sie die Speichernutzung auf dem Bildschirm in Intervallen
      --printPathWarnings          Drucken Sie Warnungen zu doppelten Zielpfaden usw.
      --printUnusedTemplates       Drucken Sie Warnungen zu ungenutzten Vorlagen.
      --quiet                      Bauen Sie im ruhigen Modus
      --renderToMemory             Rendern Sie in den Speicher (nur nützlich für Benchmark-Tests)
  -s, --source string              Dateisystempfad zum Lesen von Dateien relativ
      --templateMetrics            Zeigen Sie Metriken über die Ausführung von Vorlagen an
      --templateMetricsHints       Berechnen Sie einige Verbesserungshinweise, wenn sie mit --templateMetrics kombiniert werden
  -t, --theme strings              Themen zur Verwendung (befindet sich in /themes/THEMENAME/)
      --themesDir string           Dateisystempfad zum Themenverzeichnis
      --trace file                 Schreiben Sie den Trace in eine Datei (im Allgemeinen nicht nützlich)
  -v, --verbose                    Ausführliche Ausgabe
  -w, --watch                      Überwachen Sie das Dateisystem auf Änderungen und erstellen Sie bei Bedarf neu

Verwenden Sie "hugo [command] --help" für weitere Informationen zu einem Befehl.

Löschen Sie alle verbleibenden Dateien im Ordner, da sie nicht mehr benötigt werden.

$ sudo rm -rf *.*

Schritt 5 - Erstellen Sie eine neue Hugo-Website

Geben Sie den folgenden Befehl ein, um eine neue Hugo-Website zu erstellen.

$ sudo hugo new site howtoforge

Sie erhalten die folgende Ausgabe.

Herzlichen Glückwunsch! Ihre neue Hugo-Website wurde in /home/navjot/hugo/howtoforge erstellt.

Nur noch ein paar Schritte...

1. Wechseln Sie in das aktuelle Verzeichnis /home/navjot/hugo/howtoforge.
2. Erstellen oder installieren Sie ein Thema:
   - Erstellen Sie ein neues Thema mit dem Befehl "hugo new theme "
   - Installieren Sie ein Thema von https://themes.gohugo.io/
3. Bearbeiten Sie hugo.toml und setzen Sie die "theme"-Eigenschaft auf den Themennamen.
4. Erstellen Sie neue Inhalte mit dem Befehl "hugo new content /.".
5. Starten Sie den eingebetteten Webserver mit dem Befehl "hugo server --buildDrafts".

Siehe Dokumentation unter https://gohugo.io/.

Führen Sie den tree-Befehl aus, um die Struktur der Website zu überprüfen.

$ tree howtoforge/

Sie erhalten die folgende Ausgabe.

howtoforge/
??? archetypes
?   ??? default.md
??? assets
??? content
??? data
??? hugo.toml
??? i18n
??? layouts
??? static
??? themes

8 Verzeichnisse, 2 Dateien

Wechseln Sie in das Hugo-Verzeichnis.

$ cd howtoforge

Schritt 6 - Hugo-Thema installieren

Der nächste Schritt besteht darin, ein Hugo-Thema zu installieren. Es gibt zwei Möglichkeiten, dies zu tun, und beide erfordern Git. Die erste Methode ist einfach und unkompliziert und beinhaltet das Klonen des GitHub-Repositorys des Themas. Dies ist in den meisten Fällen nützlich und der einfachste Weg, dies zu tun. Die Aktualisierung über diese Methode ist einfach, obwohl diese Methode das Herunterladen vieler unnötiger Dinge erfordert, die Sie nicht benötigen. Es gibt einige Themen, insbesondere die kostenpflichtigen, die kein GitHub-Repository haben, von dem Sie sie abrufen können. Solche Themen werden normalerweise als komprimiertes Archiv angeboten. In diesem Fall müssen Sie das Archiv manuell extrahieren und das Thema manuell aktualisieren. Die dritte Methode besteht darin, das Thema als Git-Submodul zu erfassen. Dies erfordert, dass Sie Ihr Hugo-Verzeichnis als Git-Repository initialisieren. Dies ist die empfohlene Methode und nützlich, falls Sie Ihre Website auf GitHub, Netlify oder einem anderen Hosting-Dienst bereitstellen möchten. Das Pushen Ihrer Hugo-Website auf GitHub gewährleistet auch automatische Backups ohne zusätzlichen Aufwand.

Wir werden alle drei Methoden behandeln. Es gibt eine weitere Methode zur Installation eines Hugo-Themas mit Hugo Go-Modulen. Diese Methode funktioniert nur, wenn das Thema als Hugo-Modul verfügbar ist. Wir werden dies jedoch nicht behandeln, da es außerhalb des Rahmens dieses Artikels liegt.

Methode 1 - Klonen eines Hugo-Themas

Dies ist die am häufigsten verwendete Methode zur Installation eines Hugo-Themas. Für unser Tutorial werden wir das Paper-Thema installieren. Wechseln Sie in das Hugo-Verzeichnis.

$ cd /var/www/html/hugo/howtoforge

Führen Sie den folgenden Befehl aus, um das GitHub-Repository des Themas zu klonen. Das --depth=1-Flag erfasst nur den neuesten Commit.

$ sudo git clone https://github.com/nanxiaobei/hugo-paper themes/Paper --depth=1

Um das über diese Methode heruntergeladene Thema zu aktualisieren, führen Sie die folgenden Befehle aus.

$ cd ~/hugo/howtoforge/themes/Paper
$ sudo git pull

Methode 2 - Thema aus komprimiertem Archiv installieren

Dies ist die einfachste Methode von allen. Holen Sie sich das Archiv der Themen-Datei. Das Paper-Thema hat keinen Releases-Bereich, sodass Sie keine bestimmte Version herunterladen können. Daher werden wir das GitHub-Master-Archiv herunterladen. Sie können den Link von der GitHub-Repository-Seite abrufen.

$ cd ~
$ wget https://github.com/nanxiaobei/hugo-paper/archive/refs/heads/main.zip

Entpacken Sie das Archiv in das Themenverzeichnis. Das -q-Flag unterdrückt die Ausgabe und das -d-Flag gibt das Ausgabeverzeichnis an.

$  sudo unzip -q main.zip -d /var/www/html/hugo/howtoforge/themes/

Um das Thema zu aktualisieren, müssen Sie das neueste Archiv herunterladen und es erneut extrahieren. Stellen Sie sicher, dass Sie eine Sicherung aller Dateien machen, die Sie geändert haben.

Die unteren beiden Methoden funktionieren nur, wenn Ihre Hugo-Website als Git-Projekt gehostet wird. Andernfalls müssen Sie die folgenden Methoden nicht verwenden.

Methode 3 - Thema als Git-Submodul installieren

Wechseln Sie in den Hugo-Ordner.

$ cd /var/www/html/hugo/howtoforge

Initialisieren Sie den Hugo-Ordner als Git-Repository. Dies ist ein wichtiger Schritt. Dadurch können Sie Ihre Hugo-Website auf GitHub pushen, um sie später mit Netlify, AWS, Vercel usw. zu hosten.

$ sudo git init

Führen Sie den folgenden Befehl aus, um das Thema als Git-Submodul hinzuzufügen.

$ sudo git submodule add https://github.com/nanxiaobei/hugo-paper themes/paper

Um ein als Submodul hinzugefügtes Thema zu aktualisieren, führen Sie den folgenden Befehl aus dem Hugo-Ordner aus.

$ sudo git submodule update --remote --merge

Hugo konfigurieren

Sobald Sie das Thema mit einer Methode Ihrer Wahl installiert haben, öffnen Sie die Datei hugo.toml in Ihrem Hugo-Stammverzeichnis. Seit Hugo v0.110.0 heißt die Standardkonfigurationsdatei hugo.toml. Wenn Sie eine ältere Version von Hugo verwenden, finden Sie die Datei config.toml in Ihrem Hugo-Verzeichnis.

$ sudo nano hugo.toml

Fügen Sie die folgende Zeile in die Datei ein. Der Wert sollte mit dem Verzeichnis des Themas übereinstimmen. Für das Paper-Thema wäre dies das Verzeichnis hugo-paper-theme, wenn Sie die Archivinstallation verwendet haben, oder Paper, wenn Sie die Git-Klon- oder Submodul-Methode oben verwendet haben.

theme = 'hugo-paper-main'

Ändern Sie auch den Wert der Variablen baseURL in den Domainnamen Ihrer Website. Und ändern Sie den Titel Ihrer Website.

Ihre Konfigurationsdatei sollte wie folgt aussehen.

baseURL = 'https://hugo.example.com/'
languageCode = 'de-de'
title = 'Howtoforge Hugo Demo'
theme = 'hugo-paper-main'

Sobald Sie fertig sind, speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Schritt 7 - Beiträge und Seiten erstellen

Um einen neuen Beitrag zu erstellen, geben Sie den folgenden Befehl ein.

$ sudo hugo new post/first-post.md

Dies erstellt eine neue Markdown-Datei first-post.md mit dem Titel Erster Beitrag im Ordner content/post. Öffnen Sie die Datei in Ihrem bevorzugten Editor und bearbeiten Sie die Details und schreiben Sie etwas für Ihren ersten Beitrag.

+++
title = 'Erster Beitrag'
date = 2023-10-30T03:32:38Z
draft = true
+++
## Einführung

Dies ist fetter Text, und dies ist *betonter* Text.

Besuchen Sie die [Howtoforge](https://www.howtoforge.com) Website!

Entfernen Sie draft = true, sobald Sie mit dem Schreiben des Beitrags fertig sind. Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Um eine neue Seite zu erstellen, geben Sie den folgenden Befehl ein.

$ sudo hugo new about.md

Dies erstellt eine neue Seite mit dem Titel Über im Ordner content. Öffnen Sie sie und bearbeiten Sie sie auf die gleiche Weise wie den Beitrag.

Thema konfigurieren

Vor der Veröffentlichung müssen wir einige Änderungen am Thema vornehmen, um die Menüleiste anzuzeigen. Diese Änderungen werden in der Konfigurationsdatei von Hugo und nicht in der Konfiguration des Themas vorgenommen.

Wechseln Sie in das Hugo-Verzeichnis.

$ cd /var/www/html/hugo/howtoforge

Öffnen Sie die Datei hugo.toml zur Bearbeitung.

$ sudo nano hugo.toml

Fügen Sie den folgenden Code am Ende ein.

author = "Navjot Singh"
copyright = "Copyright © 2023, Navjot Singh; alle Rechte vorbehalten."
paginate = 3
enableInlineShortcodes = true
# benötigt, um rohes HTML zu rendern (z.B. , , , )
[markup]
  [markup.goldmark]
    [markup.goldmark.renderer]
      unsafe = true

[menu]
  [[menu.main]]
    identifier = "about"
    name = "Über"
    url = "/about/"
    weight = 10

[taxonomies]
category = "Kategorien"
tag = "Tags"
series = "Serien"

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Dies sind einige grundlegende Einstellungen, um die Website funktionsfähig zu machen. Hier haben wir die Website so konfiguriert, dass sie 3 Beiträge pro Seite anzeigt, die Über-Seite als Menüpunkt anzeigt und Kategorien, Tags und Beitragsserien einrichtet. Wir haben auch Hugos Inline-Shortcodes aktiviert und rohes HTML für den Goldmark-Markdown-Renderer aktiviert. Sie können dies deaktivieren, wenn Sie kein rohes HTML in Ihren Beiträgen einbetten möchten.

Schritt 8 - Hugo-Website veröffentlichen

Um die Website zu erstellen und zu veröffentlichen, führen Sie einfach den folgenden Befehl aus.

$ sudo hugo

Sie erhalten eine ähnliche Ausgabe.

Beginne mit dem Erstellen von Websites …
hugo v0.119.0-b84644c008e0dc2c4b67bd69cccf87a41a03937e+extended linux/amd64 BuildDate=2023-09-24T15:20:17Z VendorInfo=gohugoio


                   | DE
-------------------+-----
  Seiten            |  7
  Paginierungsseiten  |  0
  Nicht-Seiten-Dateien   |  0
  Statische Dateien     | 11
  Verarbeitete Bilder |  0
  Aliase          |  3
  Sitemaps         |  1
  Bereinigt          |  0

Insgesamt in 46 ms

Dies erstellt und veröffentlicht die statische Hugo-Website im public-Ordner. Dies sind die Dateien, die wir in der Nginx-Konfiguration angeben müssen, damit die Website funktioniert. Führen Sie den Befehl erneut aus, nachdem Sie Änderungen vorgenommen haben, und Ihre Website wird in kürzester Zeit aktualisiert.

Schritt 9 - SSL installieren

Bevor wir fortfahren, müssen wir das Certbot-Tool installieren und ein SSL-Zertifikat für unsere Domain installieren.

Um Certbot zu installieren, verwenden wir den Snapd-Paketinstaller. Snapd enthält immer die neueste stabile Version von Certbot, und Sie sollten dies verwenden.

Das Snapd-Tool benötigt das Epel-Repository, um zu funktionieren.

$ sudo dnf install epel-release -y

Wir werden Snapd verwenden, um Certbot zu installieren. Installieren Sie Snapd.

$ sudo dnf install snapd -y

Aktivieren und starten Sie den Snap-Dienst.

$ sudo systemctl enable snapd.socket --now

Erstellen Sie die erforderlichen Links, damit Snapd funktioniert.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Stellen Sie sicher, dass Ihre Version von Snapd auf dem neuesten Stand ist. Warten Sie ein paar Sekunden, bevor Sie die folgenden Befehle ausführen.

$ sudo snap install core
$ sudo snap refresh core

Installieren Sie Certbot.

$ sudo snap install --classic certbot

Verwenden Sie den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem Sie einen symbolischen Link zum Verzeichnis /usr/bin erstellen.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Überprüfen Sie die Installation.

$ certbot --version
certbot 2.7.3

Generieren Sie ein SSL-Zertifikat.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d hugo.example.com

Der obige Befehl lädt ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/hugo.example.com auf Ihrem Server herunter.

Generieren Sie ein Diffie-Hellman-Gruppe-Zertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Überprüfen Sie den Zeitplan des Certbot-Erneuerungsdienstes.

$ sudo systemctl list-timers

Sie finden snap.certbot.renew.service als einen der geplanten Dienste.

NÄCHSTER                        LINKS          LETZTER                        VERGANGEN    EINHEIT                         AKTIVIERT
Wed 2023-10-29 10:00:17 UTC 57min links    Wed 2023-10-18 08:49:39 UTC 12min ago dnf-makecache.timer          dnf-makecache.service
Wed 2023-10-29 12:18:00 UTC 3h 15min links -                           -         snap.certbot.renew.timer     snap.certbot.renew.service
Thu 2023-10-30 00:00:00 UTC 14h links      Wed 2023-10-18 08:10:08 UTC 52min ago logrotate.timer              logrotate.service

Führen Sie einen Testlauf des Prozesses durch, um zu überprüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn Sie keine Fehler sehen, sind Sie bereit. Ihr Zertifikat wird automatisch erneuert.

Schritt 10 - Nginx konfigurieren

Erstellen und öffnen Sie die Datei /etc/nginx/conf.d/hugo.conf zur Bearbeitung.

$ sudo nano /etc/nginx/conf.d/hugo.conf

Fügen Sie den folgenden Code in die hugo.conf-Datei ein. Ersetzen Sie alle Vorkommen von hugo.example.com durch Ihre Domain.

## HTTPS erzwingen
server {
  listen 80;
  listen [::]:80;
  server_name hugo.example.com;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name hugo.example.com;

  root /home/navjot/hugo/howtoforge/public;
  index index.html
  
  access_log /var/log/nginx/hugo.access.log;
  error_log /var/log/nginx/hugo.error.log;
  client_max_body_size 20m;
  gzip on;

  http2_push_preload on; # HTTP/2 Server Push aktivieren

  ssl_certificate     /etc/letsencrypt/live/hugo.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/hugo.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/hugo.example.com/chain.pem;
  ssl_session_timeout 1d;

  # Aktivieren Sie TLS-Versionen (TLSv1.3 ist für das kommende HTTP/3 QUIC erforderlich).
  ssl_protocols TLSv1.2 TLSv1.3;

  # Aktivieren Sie TLSv1.3's 0-RTT. Verwenden Sie $ssl_early_data, wenn Sie einen Reverse-Proxy verwenden, um
  # Wiederholungsangriffe zu verhindern.
  #
  # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
  ssl_early_data on;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  ssl_session_cache shared:SSL:50m;
  ssl_session_tickets off;

  # OCSP Stapling ---
  # Holen Sie sich OCSP-Datensätze von der URL in ssl_certificate und cachen Sie sie
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  add_header X-Early-Data $tls1_3_early_data;
  
  location / {
      try_files $uri $uri/ =404;
  }
  
  # Medien
  location ~* \\.\(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ {
      expires 30d;
  }

  # CSS und Js
  location ~* \\.\(css|js)$ {
      expires 7d;
  }
}

# Dieser Block ist nützlich für die Fehlersuche von TLS v1.3. Bitte entfernen Sie dies
# und verwenden Sie die `$ssl_early_data`-Variable, die von NGINX direkt bereitgestellt wird, wenn Sie
# dies wünschen.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Die obige Konfiguration leitet alle HTTP-Anfragen auf HTTPS um und dient als Proxy für den Hugo-Dienst, um ihn über Ihre Domain bereitzustellen.

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Öffnen Sie die Datei /etc/nginx/nginx.conf zur Bearbeitung.

$ sudo nano /etc/nginx/nginx.conf

Fügen Sie die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; hinzu.

server_names_hash_bucket_size  64;

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Überprüfen Sie Ihre Nginx-Konfiguration.

$ sudo nginx -t

Wenn Sie keine Fehler sehen, sind Sie bereit. Laden Sie den Nginx-Server neu.

$ sudo systemctl reload nginx

Schritt 11 - SELinux konfigurieren

Ändern Sie den Sicherheitskontext der Datei für OpenEMR.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/hugo/howtoforge/public(/.*)?"

Wenden Sie die Richtlinie an.

$ sudo restorecon -Rv /var/www/html/hugo/howtoforge/public/

Erlauben Sie Nginx, eine Verbindung zum Netzwerk herzustellen.

$ sudo setsebool -P httpd_can_network_connect 1

Schritt 12 - Die Website ausführen

Jetzt können Sie Ihre Installation überprüfen, indem Sie https://hugo.example.com in Ihrem Webbrowser öffnen. Sie erhalten die folgende Seite, die eine erfolgreiche Installation anzeigt.

Hugo-Homepage

Schritt 13 - Hugo aktualisieren

Die Aktualisierung von Hugo ist ziemlich einfach. Laden Sie die neueste Version von Hugos GitHub-Seite herunter.

$ cd /var/www/html/hugo
$ sudo wget https://github.com/gohugoio/hugo/releases/download/v0.119.0/hugo_extended_0.119.0_linux-amd64.tar.gz

Entpacken Sie das Archiv.

$ sudo tar -xzf hugo_extended_0.119.0_linux-amd64.tar.gz

Und ersetzen Sie die Hugo-Binärdatei durch die neueste Version. Das -f-Flag überschreibt die Binärdatei ohne Aufforderung. Sie können stattdessen das -i-Flag verwenden, wenn Sie eine Aufforderung zum Überschreiben wünschen.

$ sudo mv -f hugo /usr/bin/hugo

Das ist alles. Die Aktualisierung von Hugo ist so einfach wie das Ersetzen der Binärdatei.

Schritt 14 - Backup und Wiederherstellung von Hugo

Um ein Backup zu erstellen, erstellen Sie ein Archiv des gesamten Hugo-Ordners.

$ cd /var/www/html/hugo
$ sudo tar -czvf howtoforge.tar.gz howtoforge/

Um es auf einem neuen Server wiederherzustellen, extrahieren Sie das Archiv und installieren Sie die Binärdatei, und Sie sind bereit.

$ cd /var/www/html/hugo
$ sudo tar -xzf howtoforge.tar.gz

Fazit

Damit endet unser Tutorial, wie man den Hugo-Generator für statische Websites auf Ihrem Rocky Linux 9-Server mit Nginx einrichtet. Wenn Sie Fragen oder Feedback haben, teilen Sie diese bitte in den Kommentaren mit.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.