4.2 KiB
Docs Architecture Skill
This skill documents the exact technical architecture, routing, and deployment workflow for WompMacho's decoupled Hugo/Gitea/Caddy Wiki infrastructure.
🏗️ 1. Core Architecture (Decoupled Repositories)
The system is split into three independent Git repositories hosted on git.wompmacho.com:
-
Framework (
/srv/dev/hugo/wiki): Repositoryhugo-framework- Purpose: The central Hugo engine. Contains the Blowfish theme as a submodule (
themes/blowfish) and the masterconfig/_default/params.toml. - Rule: NEVER place content (
.mdfiles) here. NEVER place environment-specific overrides (like hardcodededitURLsor top-level menus) in the globalparams.toml.
- Purpose: The central Hugo engine. Contains the Blowfish theme as a submodule (
-
Public Wiki (
/srv/docs/public): Repositorydocs-public- Purpose: Public-facing markdown notes, assets (
/static), and its own top-bar menu configuration (config/_default/menus.en.toml). - Deployment Target:
/srv/caddy/sites/wiki - Live URL:
https://wiki.wompmacho.com(proxied by NPM).
- Purpose: Public-facing markdown notes, assets (
-
Private Wiki (
/srv/docs/private): Repositorydocs-private- Purpose: Personal, private markdown notes, assets (
/static), and its own top-bar menu configuration (config/_default/menus.en.toml). - Deployment Target:
/srv/caddy/sites/private-wiki - Live URL:
http://10.0.0.190:9897(orhttp://privatevia NPM).
- Purpose: Personal, private markdown notes, assets (
💻 2. Local Development ("Live Link")
When working on content, the user uses Code-Server. To see real-time updates without deploying, the hugo-framework repository uses symbolic links.
content -> /srv/docs/publicstatic -> /srv/docs/public/static
Command to start local preview: cd /srv/dev/hugo/wiki && hugo server --bind 0.0.0.0 --appendPort=false --baseURL="/"
🚀 3. CI/CD Pipeline (Gitea Actions)
Both docs-public and docs-private have a .gitea/workflows/deploy.yaml action.
The Build Process
- Checkout Content: The runner checks out the markdown content.
- Clone Framework: The runner natively clones the
hugo-framework(including submodules) usinggit clone --recurse-submodules https://git.wompmacho.com/wompmacho/hugo-framework.git. - Inject Content: Markdown and static files are copied into the framework's workspace.
- Inject Dynamic Menus: The
config/_default/menus.en.tomlis injected, automatically overriding the framework's top navigation bar for that specific site. - Inject Edit Links (CRITICAL RULE): The "Edit this page" link on the bottom of posts MUST NOT be configured via a
params.tomloverride, as Hugo replaces the entire file instead of merging it, destroying the Blowfish styling.- Fix: It is injected dynamically via an Environment Variable right before the build command:
HUGO_PARAMS_ARTICLE_EDITURL="https://git.../src/branch/main" hugo --minify ...
- Deploy: The output
/publicfolder is copied directly to the mounted/deployvolume.
🌐 4. Web Server Routing (Nginx)
The system relies on two extremely lightweight nginx:alpine containers defined in gitea/docker-compose.yaml to serve static files. They act as "dumb" file servers behind Nginx Proxy Manager (NPM), bypassing the complex Host header validation and 0-byte security issues inherent to Caddy.
- Public (
public_wiki- Port 9896):- Mounts
/srv/caddy/sites/wikias read-only. - NPM routes
wiki.wompmacho.comto Docker Host IP on port9896.
- Mounts
- Private (
private_wiki- Port 9897):- Mounts
/srv/caddy/sites/private-wikias read-only. - NPM routes
http://privateto Docker Host IP on port9897.
- Mounts
🛠️ 5. Known Quirks and Formatting Rules
- Submodules: Always use
git submodule add -b main <url>and ensure the commit pointer is tracked. Do not copy theme files physically. - Blowfish Homepage: If the homepage is blank, it means there are no recent posts. By default, Blowfish's
homelayout only lists files withtype: "article"ortype: "posts". For generic folders, settype: "page"andlayout: "list"in_index.md. - Frontmatter: Blowfish expects standard Hugo frontmatter (
date:as a string,authors: ["Name"]as an array). MkDocs-style nested YAML is incompatible and will crash the build.