There is only one server. The site is served from /var/www/mcg on the VPS at mcg.luxick.de today, and the main domain will be pointed at the same instance at cutover; local `hugo server` covers development. Drops the development/production split from the workflow, its DEPLOY_PATH_DEV / DEPLOY_PATH_PROD secrets and the workflow_dispatch environment input, leaving a single DEPLOY_PATH. baseURL now comes from hugo.toml rather than being injected per environment, so it is the one place to change at cutover. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3.6 KiB
motorradclub-giebelwald.de
Static website of the Motorradclub Giebelwald e.V., built with Hugo.
Currently served at https://mcg.luxick.de. Once the site is signed off, the main domain https://motorradclub-giebelwald.de will be pointed at the same server and the old host retired — see Changing the domain.
Requirements
Hugo 0.164.0. The non-extended build is sufficient: the site uses plain CSS, no Sass.
Local development
hugo server -D # http://localhost:1313
hugo --gc --minify # production build into public/
Editing content
Everything lives in Markdown under content/, edited via git (locally or in
Gitea's web editor).
Add a news post
Create content/aktuelles/<slug>/index.md:
---
title: "30. O-Fahrt 2027"
date: 2027-01-15T10:00:00Z
tags: ["O-Fahrt"]
featured: "titelbild.jpg"
---
Text …
{{< gallery "bild1.jpg" "bild2.jpg" >}}
Drop the images into the same folder. featured picks the teaser image; without
it the first image in the folder is used.
Add or change a Termin
Edit data/termine.yaml. The newest year is shown expanded, older years collapse:
"2027":
- date: "06.02.2027\n18:30"
description: "Jahreshauptversammlung\nSängerheim Niederndorf"
Members / In Erinnerung
data/members.yaml and data/memoriam.yaml. Images go in assets/img/.
Downloads
Put the PDF in static/dokumente/ and link it from content/downloads.md:
{{< pdf "satzung.pdf" "Unsere Satzung" >}}
Shortcodes
| Shortcode | Purpose |
|---|---|
{{< gallery "a.jpg" "b.jpg" >}} |
Thumbnail grid; no arguments = all images in the bundle |
{{< figure "bild.jpg" "Bildunterschrift" >}} |
Single image with caption |
{{< pdf "datei.pdf" "Titel" >}} |
Download link with file size |
Site structure
content/
_index.md Startseite
aktuelles/ News section (RSS enabled)
archiv/ Rückblicke auf frühere Fahrten
termine.md uses layouts/termine.html + data/termine.yaml
downloads.md
impressum.md
data/ termine, members, memoriam
assets/ css/main.css, img/ (logo, banner, portraits)
static/dokumente/ PDFs
layouts/ baseof, home, list, page, termine
_partials/ _shortcodes/ _markup/
Deployment
.gitea/workflows/deploy.yml builds with Hugo and rsyncs public/ over SSH to
the VPS webroot.
- Push to
main→ builds and deploys - Run workflow → manual re-deploy of the current
main - Pull requests are built to catch breakage, but never published
There is one deploy target. For development, run the site locally with
hugo server.
Required secrets
Set these in the Gitea repository settings:
| Secret | Example |
|---|---|
SSH_PRIVATE_KEY |
Deploy key with write access to the webroot |
SSH_KNOWN_HOSTS |
Verified output of ssh-keyscan <host> |
DEPLOY_HOST |
server.example.de |
DEPLOY_USER |
www-deploy |
DEPLOY_PATH |
/var/www/mcg |
rsync runs with --delete, so DEPLOY_PATH must point at a directory owned
solely by this site. The workflow refuses to deploy if the path is unset, too
shallow, or if the build produced no index.html.
Changing the domain
baseURL in hugo.toml is the only place the live domain is configured; it
feeds canonical URLs, og:url, the RSS feed and the sitemap. To cut over:
- Point the DNS record at the VPS.
- Add the domain to the nginx
server_nameand reissue the certificate. - Change
baseURLinhugo.tomland push — the deploy rebuilds every absolute URL.