Files
mcg-website/README.md
T
luxick aea3aa47ae Deploy to a single target
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>
2026-07-30 15:49:39 +02:00

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:

  1. Point the DNS record at the VPS.
  2. Add the domain to the nginx server_name and reissue the certificate.
  3. Change baseURL in hugo.toml and push — the deploy rebuilds every absolute URL.