So installierst du 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. Die Inhalte werden nicht dynamisch generiert und beinhalten keine Datenbank oder serverseitige Verarbeitung. Solche Websites sind unglaublich schnell und immun gegen Angriffe, die auf dynamischen Code oder SQL angewiesen sind.

Hugo ist ein in Go geschriebener Open-Source-Generator für statische Websites. Er erzeugt Inhalte, indem er in Markdown geschriebene Beiträge in HTML umwandelt. Hugo wird mit einem eingebauten Server geliefert, auf dem die erstellten Websites gehostet werden. Du kannst eine Hugo-Website auch auf Amazon S3, GitHub-Seiten, Google Cloud, Netlify, Vercel, etc. hosten.

In diesem Lernprogramm zeigen wir dir, wie du Hugo installierst, um eine statische Website auf einem Server mit Rocky Linux 9 zu erstellen. Wir verwenden den Nginx-Server, um die Website zu hosten, und das Let’s Encrypt SSL-Zertifikat, um unsere Installation zu sichern.

Voraussetzungen

  • Ein Server, auf dem Rocky Linux 9 läuft.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Ein vollständig qualifizierter Domainname (FQDN), der auf deinen Server verweist. Für unsere Zwecke werden wir hugo.example.com als Domänennamen verwenden.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo dnf update
    
  • Installiere grundlegende Hilfspakete. Einige von ihnen sind vielleicht schon 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üfe den Status der Firewall.

$ sudo firewall-cmd --state
running

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

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

Es sollte die folgende Ausgabe angezeigt werden.

cockpit dhcpv6-client ssh

Wiki.js braucht HTTP- und HTTPS-Ports, um zu funktionieren. Öffne sie.

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

Lade die Firewall neu, um die Änderungen zu übernehmen.

$ sudo firewall-cmd --reload

Schritt 2 – Nginx installieren

Rocky Linux 9 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.

Erstelle und öffne die Datei /etc/yum.repos.d/nginx.repo zur Erstellung des offiziellen Nginx-Repositorys.

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

Füge den folgenden Code in die Datei 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

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Installiere den Nginx-Server.

$ sudo dnf install nginx -y

Überprüfe die Installation.

$ nginx -v
nginx version: nginx/1.24.0

Aktiviere und starte den Nginx-Server.

$ sudo systemctl enable nginx --now

Überprüfe den Status des Servers.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     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 - high performance web server...

Schritt 3 – Git installieren

Hugo braucht Git, um zu funktionieren. Führe den folgenden Befehl aus, um Git zu installieren

$ sudo dnf install git -y

Überprüfe die Installation von Git.

$ git --version
git version 2.39.3

Schritt 4 – Installiere Hugo

Da Hugo mit der Sprache Go erstellt wurde, ist die Installation recht einfach, da es keine Abhängigkeiten benötigt und eigenständig ausgeführt werden kann.

Lade Hugo herunter. Für unseren Lehrgang werden wir die erweiterte Version von Hugo installieren. Die erweiterte Version kann Bilder bei der Verarbeitung in das Webp-Format kodieren. Das ist nützlich, wenn du möchtest, dass Hugo Bilder für dich umwandelt und ihre Größe gering hält. Die erweiterte Version enthält auch einen SASS-Compiler, der in bestimmten Fällen nützlich sein kann, falls du ihn brauchst.

Erstelle ein Verzeichnis für Hugo.

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

Wechsle in das neu erstellte Verzeichnis.

$ cd /var/www/html/hugo

Lade Hugo von der GitHub-Veröffentlichungsseite herunter. Zum Zeitpunkt der Erstellung 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

Entpacke die Dateien aus dem Archiv.

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

Du wirst die folgenden drei Dateien in deinem Verzeichnis finden.

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

Verschiebe die Binärdatei hugo in das Verzeichnis /usr/bin.

$ sudo mv hugo /usr/bin/hugo

Die Datei hat bereits die Berechtigung „Ausführbar“, du brauchst sie also nicht zu setzen.

Bestätige die Installation.

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

Du kannst auch alle verfügbaren Optionen überprüfen, indem du das Flag --help verwendest.

$ hugo --help

Du erhältst dann die folgende Ausgabe.

hugo is the main command, used to build your Hugo site.

Hugo is a Fast and Flexible Static Site Generator
built with love by spf13 and friends in Go.

Complete documentation is available at https://gohugo.io/.

Usage:
  hugo [flags]
  hugo [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      Print the site configuration
  convert     Convert your content to different formats
  deploy      Deploy your site to a Cloud provider.
  env         Print Hugo version and environment info
  gen         A collection of several useful generators.
  help        Help about any command
  import      Import your site from others.
  list        Listing out various types of content
  mod         Various Hugo Modules helpers.
  new         Create new content for your site
  server      A high performance webserver
  version     Print Hugo version and environment info

Flags:
  -b, --baseURL string             hostname (and path) to the root, e.g. https://spf13.com/
  -D, --buildDrafts                include content marked as draft
  -E, --buildExpired               include expired content
  -F, --buildFuture                include content with publishdate in the future
      --cacheDir string            filesystem path to cache directory
      --cleanDestinationDir        remove files from destination not found in static directories
      --clock string               set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00
      --config string              config file (default is hugo.yaml|json|toml)
      --configDir string           config dir (default "config")
  -c, --contentDir string          filesystem path to content directory
      --debug                      debug output
  -d, --destination string         filesystem path to write files to
      --disableKinds strings       disable different kind of pages (home, RSS etc.)
      --enableGitInfo              add Git revision, date, author, and CODEOWNERS info to the pages
  -e, --environment string         build environment
      --forceSyncStatic            copy all files when static is changed.
      --gc                         enable to run some cleanup tasks (remove unused cache files) after the build
  -h, --help                       help for hugo
      --ignoreCache                ignores the cache directory
      --ignoreVendorPaths string   ignores any _vendor for module paths matching the given Glob pattern
  -l, --layoutDir string           filesystem path to layout directory
      --logLevel string            log level (debug|info|warn|error)
      --minify                     minify any supported output format (HTML, XML etc.)
      --noBuildLock                don't create .hugo_build.lock file
      --noChmod                    don't sync permission mode of files
      --noTimes                    don't sync modification time of files
      --panicOnWarning             panic on first WARNING log
      --poll string                set this to a poll interval, e.g --poll 700ms, to use a poll based approach to watch for file system changes
      --printI18nWarnings          print missing translations
      --printMemoryUsage           print memory usage to screen at intervals
      --printPathWarnings          print warnings on duplicate target paths etc.
      --printUnusedTemplates       print warnings on unused templates.
      --quiet                      build in quiet mode
      --renderToMemory             render to memory (only useful for benchmark testing)
  -s, --source string              filesystem path to read files relative from
      --templateMetrics            display metrics about template executions
      --templateMetricsHints       calculate some improvement hints when combined with --templateMetrics
  -t, --theme strings              themes to use (located in /themes/THEMENAME/)
      --themesDir string           filesystem path to themes directory
      --trace file                 write trace to file (not useful in general)
  -v, --verbose                    verbose output
  -w, --watch                      watch filesystem for changes and recreate as needed

Use "hugo [command] --help" for more information about a command.

Lösche alle übrigen Dateien in dem Ordner, da sie nicht mehr benötigt werden.

$ sudo rm -rf *.*

Schritt 5 – Erstellen einer neuen Hugo-Site

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

$ sudo hugo new site howtoforge

Du erhältst die folgende Ausgabe.

Congratulations! Your new Hugo site was created in /home/navjot/hugo/howtoforge.

Just a few more steps...

1. Change the current directory to /home/navjot/hugo/howtoforge.
2. Create or install a theme:
   - Create a new theme with the command "hugo new theme <THEMENAME>"
   - Install a theme from https://themes.gohugo.io/
3. Edit hugo.toml, setting the "theme" property to the theme name.
4. Create new content with the command "hugo new content <SECTIONNAME>/<FILENAME>.<FORMAT>".
5. Start the embedded web server with the command "hugo server --buildDrafts".

See documentation at https://gohugo.io/.

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

$ tree howtoforge/

Du erhältst die folgende Ausgabe.

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

8 directories, 2 files

Wechsle in das Hugo-Verzeichnis.

$ cd howtoforge

Schritt 6 – Hugo-Theme installieren

Der nächste Schritt besteht darin, ein Hugo-Theme zu installieren. Dafür gibt es zwei Möglichkeiten, und beide erfordern Git. Die erste Methode ist schlicht und einfach und beinhaltet das Klonen des GitHub-Repositorys des Themes. Das ist in den meisten Fällen sinnvoll und der einfachste Weg. Die Aktualisierung mit dieser Methode ist einfach, allerdings musst du bei dieser Methode eine Menge unnötiger Dinge herunterladen, die du nicht brauchst. Es gibt einige Themes, vor allem die kostenpflichtigen, die kein GitHub-Repository haben, aus dem du sie herunterladen kannst. Solche Themes werden normalerweise als komprimiertes Archiv angeboten. In diesem Fall musst du das Archiv manuell entpacken und das Theme manuell aktualisieren. Die dritte Methode besteht darin, das Thema als Git-Submodul herunterzuladen. Dazu musst du dein Hugo-Verzeichnis als Git-Repository einrichten. Diese Methode wird empfohlen und ist nützlich, wenn du deine Website auf GitHub, Netlify oder einem anderen Hosting-Dienst bereitstellen willst. Wenn du deine Hugo-Site auf GitHub bereitstellst, werden auch automatische Backups ohne zusätzlichen Aufwand erstellt.

Wir werden alle drei Methoden behandeln. Es gibt noch eine andere Methode, ein Hugo-Theme mit Hugo Go-Modulen zu installieren. Diese Methode funktioniert nur, wenn das Thema als Hugo-Modul verfügbar ist. Wir werden sie jedoch nicht behandeln, da sie den Rahmen dieses Artikels sprengen würde.

Methode 1 – Klonen eines Hugo-Themas

Dies ist die am häufigsten verwendete Methode, um ein Hugo-Theme zu installieren. Für unser Tutorial werden wir das Paper-Theme installieren. Wechsle in das Hugo-Verzeichnis.

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

Führe den folgenden Befehl aus, um das GitHub-Repository des Themas zu klonen. Das --depth=1 Flag greift nur auf die letzte Übertragung zu.

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

Um das mit dieser Methode heruntergeladene Theme zu aktualisieren, führe die folgenden Befehle aus.

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

Methode 2 – Installation des Themes aus einem komprimierten Archiv

Dies ist die einfachste Methode von allen. Schnapp dir das Archiv mit der Themadatei. Das Paper-Theme hat keinen Versionsbereich, du kannst also keine bestimmte Version herunterladen. Deshalb laden wir das GitHub Master-Archiv herunter. Du kannst den Link von der GitHub-Repository-Seite herunterladen.

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

Entpacke das Archiv in das themes-Verzeichnis. 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 Theme zu aktualisieren, musst du das neueste Archiv herunterladen und es erneut entpacken. Stelle sicher, dass du ein Backup aller Dateien machst, die du geändert hast.

Die beiden unteren Methoden funktionieren nur, wenn deine Hugo-Website als Git-Projekt gehostet wird. Ansonsten brauchst du die folgenden Methoden nicht anzuwenden.

Methode 3 – Installation des Themas als Git-Submodul

Wechsle in den Hugo-Ordner.

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

Initialisiere den Hugo-Ordner als Git-Repository. Dies ist ein wichtiger Schritt. Damit kannst du deine Hugo-Site auf GitHub pushen, um sie später mit Netlify, AWS, Vercel usw. zu hosten.

$ sudo git init

Führe 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ühre den folgenden Befehl im Hugo-Ordner aus.

$ sudo git submodule update --remote --merge

Hugo konfigurieren

Wenn du das Thema mit einer Methode deiner Wahl installiert hast, öffne die Datei hugo.toml im Hauptverzeichnis von Hugo. Ab Hugo v0.110.0 heißt die Standardkonfigurationsdatei hugo.toml. Wenn du eine ältere Version von Hugo verwendest, findest du die Datei config.toml in deinem Hugo-Verzeichnis.

$ sudo nano hugo.toml

Füge die folgende Zeile in die Datei ein. Der Wert sollte mit dem Verzeichnis des Themas übereinstimmen. Für das Papierthema wäre das das Verzeichnis hugo-paper-theme, wenn du die Archivinstallation benutzt hast, oder Paper, wenn du den Git-Klon oder die Submodulmethode oben benutzt hast.

theme = 'hugo-paper-main'

Ändere außerdem den Wert der Variable baseURL in den Domainnamen deiner Website. Und ändere die title deiner Website.

Deine Konfigurationsdatei sollte wie die folgende aussehen.

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

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Schritt 7 – Beiträge und Seiten erstellen

Um einen neuen Beitrag zu erstellen, gibst du den folgenden Befehl ein.

$ sudo hugo new post/first-post.md

Dadurch wird eine neue Markdown-Datei first-post.md mit dem Titel First Post im Ordner content/post erstellt. Öffne die Datei in deinem Lieblingseditor und editiere die Details und schreibe etwas für deinen ersten Beitrag.

+++
title = 'First Post'
date = 2023-10-30T03:32:38Z
draft = true
+++
## Introduction

This is **bold** text, and this is *emphasized* text.

Visit the [Howtoforge](https://howtoforge.com) website!

Entferne die draft = true, sobald du den Beitrag fertig geschrieben hast. Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Um eine neue Seite zu erstellen, gibst du den folgenden Befehl ein.

$ sudo hugo new about.md

Dadurch wird eine neue Seite mit dem Titel About im Ordner content erstellt. Öffne sie und bearbeite sie auf die gleiche Weise wie den Beitrag.

Thema konfigurieren

Vor der Veröffentlichung müssen wir noch einige Änderungen am Theme vornehmen, damit die Menüleiste angezeigt wird. Diese Änderungen werden in der Konfigurationsdatei von Hugo vorgenommen und nicht in der Konfiguration des Themes.

Wechsle in das Hugo-Verzeichnis.

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

Öffne die Datei hugo.toml zum Bearbeiten.

$ sudo nano hugo.toml

Füge den folgenden Code am Ende der Datei ein.

author = "Navjot Singh"
copyright = "Copyright © 2023, Navjot Singh; all rights reserved."
paginate = 3
enableInlineShortcodes = true
# needed to  render raw HTML (e.g. <sub>, <sup>, <kbd>, <mark>)
[markup]
  [markup.goldmark]
    [markup.goldmark.renderer]
      unsafe = true

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

[taxonomies]
category = "categories"
tag = "tags"
series = "series"

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Dies sind einige grundlegende Einstellungen, um die Website funktionsfähig zu machen. Hier haben wir die Seite so konfiguriert, dass 3 Beiträge pro Seite angezeigt werden, die Info-Seite als Menüpunkt erscheint und Kategorien, Tags und Beitragsserien eingerichtet werden. Außerdem haben wir die Inline-Shortcodes von Hugo aktiviert und das Rendering von Goldmark Markdown in Roh-HTML aktiviert. Du kannst diese Option deaktivieren, wenn du kein Roh-HTML in deine Beiträge einbetten möchtest.

Schritt 8 – Hugo-Site veröffentlichen

Um die Seite zu erstellen und zu veröffentlichen, führst du einfach den folgenden Befehl aus.

$ sudo hugo

Du wirst eine ähnliche Ausgabe erhalten.

Start building sites …
hugo v0.119.0-b84644c008e0dc2c4b67bd69cccf87a41a03937e+extended linux/amd64 BuildDate=2023-09-24T15:20:17Z VendorInfo=gohugoio


                   | EN
-------------------+-----
  Pages            |  7
  Paginator pages  |  0
  Non-page files   |  0
  Static files     | 11
  Processed images |  0
  Aliases          |  3
  Sitemaps         |  1
  Cleaned          |  0

Total in 46 ms

Damit wird die statische Hugo-Website im Ordner public erstellt und veröffentlicht. Dies sind die Dateien, die wir in der Nginx-Konfiguration angeben müssen, damit die Seite funktioniert. Führe den Befehl nach jeder Änderung erneut aus und deine Website wird im Handumdrehen aktualisiert.

Schritt 9 – SSL installieren

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

Um Certbot zu installieren, verwenden wir den Snapd-Paketinstaller. Snapd enthält immer die neueste stabile Version von Certbot und du solltest diese 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. Installiere Snapd.

$ sudo dnf install snapd -y

Aktiviere und starte den Snap-Dienst.

$ sudo systemctl enable snapd.socket --now

Erstelle die notwendigen 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

Stelle sicher, dass deine Snapd-Version auf dem neuesten Stand ist. Warte ein paar Sekunden, bevor du die folgenden Befehle ausführst.

$ sudo snap install core
$ sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Stelle mit dem folgenden Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin erstellst.

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

Überprüfe die Installation.

$ certbot --version
certbot 2.7.3

Erstelle ein SSL-Zertifikat.

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

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/hugo.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

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

Überprüfe den Certbot-Erneuerungsplanerdienst.

$ sudo systemctl list-timers

Du findest snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen sind.

NEXT                        LEFT          LAST                        PASSED    UNIT                         ACTIVATES
Wed 2023-10-29 10:00:17 UTC 57min left    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 left -                           -         snap.certbot.renew.timer     snap.certbot.renew.service
Thu 2023-10-30 00:00:00 UTC 14h left      Wed 2023-10-18 08:10:08 UTC 52min ago logrotate.timer              logrotate.service

Führe einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.

Schritt 10 – Nginx konfigurieren

Erstelle und öffne die Datei /etc/nginx/conf.d/hugo.conf zum Bearbeiten.

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

Füge den folgenden Code in die Datei hugo.conf ein. Ersetze alle Instanzen von hugo.example.com durch deine Domain.

## enforce HTTPS
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; # Enable HTTP/2 Server Push

  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;

  # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
  ssl_protocols TLSv1.2 TLSv1.3;

  # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
  # prevent replay attacks.
  #
  # @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 ---
  # fetch OCSP records from URL in ssl_certificate and cache them
  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;
  }
  
  # Media
  location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ {
      expires 30d;
  }

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

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
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 deine Domain zu bedienen.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Öffne die Datei /etc/nginx/nginx.conf zum Bearbeiten.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe deine Nginx-Konfiguration.

$ sudo nginx -t

Wenn du keine Fehler siehst, bist du startklar. Lade den Nginx-Server neu.

$ sudo systemctl reload nginx

Schritt 11 – SELinux konfigurieren

Ändere den Dateisicherheitskontext für OpenEMR.

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

Wende die Richtlinie an.

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

Erlaube Nginx, sich mit dem Netzwerk zu verbinden.

$ sudo setsebool -P httpd_can_network_connect 1

Schritt 12 – Ausführen der Website

Jetzt kannst du deine Installation überprüfen, indem du https://hugo.example.com in deinem Webbrowser öffnest. Du erhältst die folgende Seite, die eine erfolgreiche Installation anzeigt.

Hugo Homepage

Schritt 13 – Hugo aktualisieren

Die Aktualisierung von Hugo ist ziemlich einfach. Lade 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

Entpacke das Archiv.

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

Ersetze die Hugo-Binärdatei durch die neueste Version. Das -f Flag überschreibt die Binärdatei ohne Rückfrage. Du kannst stattdessen das -i Flag verwenden, wenn du eine Aufforderung zum Überschreiben haben möchtest.

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

Das war’s schon. Die Aktualisierung von Hugo ist so einfach wie das Ersetzen der Binärdatei.

Schritt 14 – Sichern und Wiederherstellen von Hugo

Um ein Backup zu machen, erstellst du ein Archiv des gesamten Hugo-Ordners.

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

Um ihn auf einem neuen Server wiederherzustellen, entpackst du das Archiv und installierst die Binärdatei – und schon bist du startklar.

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

Fazit

Damit ist unsere Anleitung zur Einrichtung des statischen Website-Generators Hugo auf deinem Rocky Linux 9 Server mit Nginx abgeschlossen. Wenn du Fragen oder Anregungen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …