Hallo, vor ein paar Monaten habe ich beschlossen, dass ich zu einer Form von Webspace wechseln möchte, für die ich kein Geld ausgeben muss. Obwohl es nur ein paar Dollar kostet, dachte ich, es wäre an der Zeit, weiterzuziehen… dies ist im Grunde ein Tutorial, um auf github-Seiten umzusteigen…
Edit vom 20-04-2025: Zuvor hatte ich einen Makefile-basierten Ansatz, aber das war nicht der ideale Weg, also habe ich es jetzt geändert, um stattdessen github actiosn zu verwenden
Wir beginnen mit der Workflow-Datei deploy.yml . Mein neues Setup sieht wie folgt aus:
name: Build and Deploy Hugo Site on: push: branches: - main workflow_dispatch: permissions: contents: write jobs: build-and-deploy: runs-on: ubuntu-latest env: HUGO_VERSION: 0.146.6 TZ: Europe/Berlin steps: - name: Checkout repository (with submodules) uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 3 - name: Install Hugo run: | wget -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb sudo dpkg -i hugo.deb - name: Install Asciidoctor run: | sudo apt update sudo apt install -y ruby sudo gem install asciidoctor - name: Build Hugo site run: | hugo --gc --minify --cleanDestinationDir --config content/config.toml echo "--- Built site files ---" find public -type f | sort - name: Deploy to gh_pages branch uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_branch: gh_pages publish_dir: public force_orphan: true user_name: wehrend user_email: sven.wehrend@gmail.com
und hier der Vollständigkeit halber die config.toml, die im content-Verzeichnis liegt…
baseURL = "http://wehrend.uber.space/" languageCode = "en-us" title = "Bits & pieces - Sven Wehrend" [module] [[module.imports]] path = "github.com/alex-shpak/hugo-book" [languages.en] languageName = "English" contentDir = "content/en" weight = 1 [languages.de] languageName = "Deutsch" contentDir = "content/de" weight = 2 [[languages.en.menu.before]] name = "Web-Blog" url = "/posts/web/" weight = 10 [[languages.en.menu.before]] name = "Synth-Blog" url = "/tags/synth/" weight = 20 [[languages.en.menu.before]] name = "" url = "/docs/" weight = 10 [[languages.en.menu.before]] name = "Electronics 101" url = "/pages/prequel-short-introduction-to-electronics" weight = 26 [[languages.en.menu.before]] name = "Electronics 102" url = "/pages/short-introduction-to-electronics-102" weight = 27 [[languages.en.menu.after]] name = "Digital Logic 1 (Overview)" url = "/pages/overview/" weight = 20 [[languages.en.menu.before]] name = "Digital Logic 2 (Overview)" url = "/pages/overview2/" weight = 25 [[languages.en.menu.before]] name = "Synthesizer-DIY" url = "/posts/synth/25_build_your_own_modules/" weight = 26 [[languages.de.menu.before]] name = "Web-Blog" url = "/posts/web/" weight = 10 [[languages.de.menu.before]] name = "Synth-Blog" url = "/tags/synth/" weight = 20 [[languages.de.menu.before]] name = "" url = "/docs/" weight = 10 [[languages.de.menu.before]] name = "Elektronik 101" url = "/de/pages/prequel-short-introduction-to-electronics" weight = 26 [[languages.de.menu.before]] name = "Elektronik 102" url = "/de/pages/short-introduction-to-electronics-102" weight = 27 [[languages.de.menu.after]] name = "Digitale Logik 1 (Übersicht)" url = "/de/pages/overview/" weight = 20 [[languages.de.menu.before]] name = "Digitale Logik 2 (Übersicht)" url = "/de/pages/overview2/" weight = 25 [[languages.de.menu.before]] name = "Synthesizer-DIY" url = "/de/posts/synth/25_build_your_own_modules/" weight = 26 [params] date_format = "2006-01-02" # (Optional, default light) Sets color theme: light, dark or auto. # Theme 'auto' switches between dark and light modes based on browser/os preferences BookTheme = 'light' # (Optional, default true) Controls table of contents visibility on right side of pages. # Start and end levels can be controlled with markup.tableOfContents setting. # You can also specify this parameter per page in front matter. BookToC = false [security] enableInlineShortcodes = false [security.exec] allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$', '^asciidoctor$'] osEnv = ['(?i)^(PATH|PATHEXT|APPDATA|TMP|TEMP|TERM)$'] [markup.asciidocext] extensions = ["asciidoctor"] workingFolderCurrent = true trace = true verbose = true [languages.en.markup] [languages.en.markup.goldmark] [languages.en.markup.goldmark.renderer] unsafe = true [languages.de.markup] [languages.de.markup.goldmark] [languages.de.markup.goldmark.renderer] unsafe = true [frontmatter.handlers] adoc = "yaml"
Dank des github-token dokumentiert hier müssen wir nicht einmal einen Schlüssel oder Token einrichten. Dies, indem wir den Standard github_token verwenden, der keine Konfiguration benötigt, falls die github-Seiten aus dem gleichen Repository stammen. Also habe ich mich entschlossen, mein Setup zu vereinfachen und das übergeordnete Verzeichnis wegzuwerfen bzw. dem Repository 'content' 'hinzuzufügen. Mit diesem Setup sollte es möglich sein, hugo das publishDir <user>.github.io AKA public folder erstellen zu lassen, das in den Branch gh-pages auffüllt.
Wenn wir unsere Änderungen committen und pushen, beginnt die Build-and-Deploy-Pipeline sofort mit der Arbeit und erstellt im Hintergrund die Website für Sie …
Herzlichen Glückwunsch, Sie haben soeben gelernt, wie Sie einen Beitrag zur Community leisten und einen Eckpfeiler auf den Schultern von Giganten errichten können.
Übersetzt mit DeepL.com (kostenlose Version)