Skip to content

contabo/Product-Documentation

Repository files navigation

Contabo Product Documentation

Product documentation for Contabo cloud infrastructure — built with Hugo Doks and published automatically to GitHub Pages on every push to main.


Contents


Repository structure

contabo-docs/
├── .github/
│   └── workflows/
│       └── deploy.yml          # GitHub Actions — build & publish to GitHub Pages
├── assets/                     # Sass, JS, images (processed by Hugo)
├── config/
│   └── _default/
│       ├── hugo.toml           # Site config: baseURL, title, deployment target
│       ├── menus.toml          # Sidebar and top navigation
│       ├── module.toml         # Hugo module mounts
│       └── params.toml         # Doks theme parameters
├── content/
│   └── docs/
│       ├── _index.md           # Docs landing page
│       └── guides              # Tutorials and Product-Guides can be added here
│       └── products/
│           ├── _index.md       # Products section index
│           ├── 01_cloud_vps.md
│           ├── 02_storage_vps.md
│           ├── 03_cloud_vds.md
│           ├── 04_dedicated_servers.md
│           ├── 05_gpu_cloud.md
│           └── 06_object_storage.md
│       └── reference          # Links to documentation that is hosted in different places, e.g. API Reference & Terraform
│           └── API.md          
│           └── Terraform.md
├── static/                     # Static assets served as-is (favicon, etc.)
├── package.json
└── README.md

The files under content/docs/products/, content/docs/guides/ and content/docs/reference/ are the authoritative source for all product documentation. Everything else in the repo is theme infrastructure — you will rarely need to touch it.


Local development

Prerequisite: Docker Desktop

All local development runs inside Docker — no Node.js or Hugo installation required on your machine.

# First run — builds the image (takes ~1 min)
docker compose up --build

# Subsequent runs
docker compose up

Open http://localhost:1313/Product-Documentation/ in your browser. Live reload is on by default — save any file under content/, layouts/, assets/, or config/ and the browser refreshes automatically within a second or two.

Stop the server with Ctrl+C.

If you change package.json or package-lock.json, rebuild the image:

docker compose up --build

How deployment works

Pushing any commit to the main branch triggers the GitHub Actions workflow defined in .github/workflows/hugo.yml. No manual steps are required.

.github/workflows/hugo.yml (2026-06-30)
  # Sample workflow for building and deploying a Hugo site to GitHub Pages
name: Deploy Hugo site to Pages

on:
  # Runs on pushes targeting the default branch
  push:
    branches: ["main"]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: "pages"
  cancel-in-progress: false

# Default to bash
defaults:
  run:
    shell: bash

jobs:
  # Build job
  build:
    runs-on: ubuntu-latest
    env:
      HUGO_VERSION: 0.163.3
    steps:
      - name: Install Hugo CLI
        run: |
          wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
          && sudo dpkg -i ${{ runner.temp }}/hugo.deb
      - name: Install Dart Sass
        run: sudo snap install dart-sass
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v5
      - name: Install Node.js dependencies
        run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
      - name: Build with Hugo
        env:
          HUGO_CACHEDIR: ${{ runner.temp }}/hugo_cache
          HUGO_ENVIRONMENT: production
        run: |
          hugo \
            --minify \
            --baseURL "${{ steps.pages.outputs.base_url }}/"
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./public

  # Deployment job
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v5

git push origin main
       │
       ▼
GitHub Actions runner
  1. Installs Hugo extended and Node.js
  2. Runs npm ci
  3. Runs hugo --minify --gc  →  ./public/
  4. Publishes ./public/ to the gh-pages branch
       │
       ▼
GitHub Pages serves the site

Site will be accesible at https://contabo.github.io/Product-Documentation/

Enabling GitHub Pages for the first time:

  1. Go to Settings → Pages in this repository.
  2. Under Source, select GitHub Actions.
  3. Save. The next push to main will publish the site.

Deployments are visible under the Actions tab. A green checkmark means the site is live; a red cross means the build failed — click the run for logs.

Attention: the repository has to be public in order to use Github Pages. To use Github Pages with private repositories, an Enterprise Account is required.


Updating content

All product documentation lives in content/docs/products/. Changes follow a simple edit → commit → push cycle — GitHub Actions handles the rest.

Edit an existing product page

Open the relevant file and edit any section. The file renders exactly as written — there is no custom shortcode or template logic involved beyond standard Markdown.

# Example: update Cloud VPS pricing
$EDITOR content/docs/products/01_cloud_vps.md

git add content/docs/products/01_cloud_vps.md
git commit -m "Update Cloud VPS pricing table — July 2026"
git push

The site is live with the change in approximately two minutes.

Common things to update in a product file:

What changed Where to edit
A plan was added, removed, or repriced Plans & Pricing table
A new feature was added Key Features table
A new region was added Availability & Locations list
A new OS was added Supported Operating Systems table
A billing term changed Billing Terms table
A known limitation was resolved Limitations & Notes list

Add a new product page

Along the example of a Loadbalancer page

1. Create the file following the naming convention NN_product_name.md, where NN is the next available two-digit number:

cp content/docs/products/01_cloud_vps.md content/docs/products/07_load_balancer.md

2. Update the front matter at the top of the new file:

---
title: "Load Balancer"
description: "Managed L4/L7 load balancer for distributing traffic across Contabo servers."
lead: "High-availability traffic distribution — no infrastructure management required."
date: 2026-07-01
lastmod: 2026-07-01
draft: false
weight: 70
toc: true
---

Set weight to a value 10 higher than the last existing product (currently 60 for Object Storage), so the sidebar stays in the intended order.

3. Fill in all twelve sections of the document structure (see Document structure below).

4. Register the page in the sidebar by adding an entry to config/_default/menus.toml:

[[docs]]
  name   = "Load Balancer"
  weight = 17
  parent = "products"
  url    = "/docs/products/load-balancer/"

5. Commit and push:

git add content/docs/products/07_load_balancer.md config/_default/menus.toml
git commit -m "Add Load Balancer product documentation"
git push

Remove a product page

git rm content/docs/products/07_load_balancer.md

Also remove the corresponding [[docs]] block from config/_default/menus.toml, then commit and push. Hugo will not build a page for a deleted file, and the sidebar entry will disappear.

Update site-wide metadata

What to change File Key
Site title config/_default/hugo.toml title
Site description config/_default/params.toml description
Base URL config/_default/hugo.toml baseURL
Top navigation links config/_default/menus.toml [[main]] entries
Logo or favicon static/ directory Replace files directly

Document structure

Every product file uses the same twelve-section structure. This consistency means readers always know where to find a specific type of information, and contributors know exactly what to include when writing a new page.

With upcoming products, this structure might be subject to change! If the structure is changed/adapted, for consistency it should be adapted in all product documentation files.

# [Product Name] — Product Documentation

> metadata block (product, category, source URL, last updated date)

---

## Overview
## Ideal Use Cases
## Plans & Pricing
## Key Features
## Supported Operating Systems
## Software & App Images (1-Click)  ← omit if not applicable
## Management & DevOps
## Availability & Locations
## Billing Terms
## Support
## Limitations & Notes

---
*footer: prices, VAT note, last updated*

Section-by-section guide

Metadata block — the blockquote directly under the h1 title. Contains four fields on separate lines. Do not add or remove fields.

> **Product:** Cloud VPS (Virtual Private Servers)
> **Category:** Compute
> **URL:** contabo.com/en/vps-server/
> **Source:** contabo.com | **Last updated:** June 2026

Overview — two to four sentences describing what the product is, how it works, and what makes it different from adjacent products. End with a callout sentence highlighting the most popular or recommended plan, if one exists. Keep it factual — no marketing language.


Ideal Use Cases — a bulleted list of concrete workloads and audiences. Each item is a short phrase, not a sentence. Aim for six to ten items.

- Static and dynamic websites, WordPress, CMS platforms
- Web application backends and REST APIs
- Development, staging, and CI/CD environments

Plans & Pricing — a Markdown table with one row per plan. Required columns vary by product but always include the plan name and the monthly price in EUR formatted as **€X.XX**. Mark the most popular plan with a ⭐ in the name cell. Follow the table with a blockquote callout explaining any footnotes (traffic limits, discount conditions, etc.).


Key Features — a two-column Markdown table with Feature and Details as headers. Feature names in the left column are bold. Keep each details cell to one concise sentence or clause.


Supported Operating Systems — a two-column table with OS and Cost. Cost is either Free or Additional monthly fee. Windows Server is always paid; all Linux distributions are always free.


Software & App Images (1-Click) — a single line of tool names separated by · (middot with spaces). Mark paid tools with *(paid)* inline. Omit this section entirely if the product has no 1-click images.

Docker · LAMP · Webmin (free) · Plesk *(paid)* · cPanel *(paid)*

Management & DevOps — a bulleted list. Each item starts with a bold tool or interface name followed by an em dash and a brief description of what it covers for this product. Use inline code formatting for CLI commands and API endpoint names.


Availability & Locations — a single sentence listing all regions, followed by a blockquote with any region-specific caveats (surcharges, availability limits, etc.).


Billing Terms — a two-column table with Term and Details. Include: minimum contract, billing cycles, annual discount, setup fee, cancellation notice, and payment model. Highlight None for setup fees in bold.


Support — a two-column table with Channel and Availability. Always end with a blockquote callout clarifying that Contabo provides unmanaged hosting and what that means for support scope.


Limitations & Notes — a bulleted list of known constraints, caveats, and edge cases. Each item describes something a customer might get wrong or expect to work differently. Keep these factual — do not editorialize. This section prevents support tickets.


Footer line — the final line of every file, separated by ---. Always this exact text, with the date updated:

*Prices listed in EUR, excluding VAT. Specifications subject to change — verify current details at contabo.com.*

Content conventions

Prices — always in EUR, always formatted as €X.XX, always bold inside table cells (**€4.50**). Never include VAT. Note at the footer that VAT is excluded.

Dates — use Month YYYY format (e.g. June 2026). Update lastmod in front matter and the metadata block whenever you make a substantive change to a file.

Tables — use standard GFM pipe tables. Align columns with |---| (no explicit alignment markers needed). Keep cell content short — if a details cell runs long, rewrite it as a shorter clause.

Footnotes in tables — use an asterisk * in the cell and explain it in a blockquote immediately after the table. Do not use Markdown footnote syntax ([^1]).

Product names — use the exact official Contabo product names: Cloud VPS, Storage VPS, Cloud VDS, Dedicated Servers, GPU Cloud, Object Storage. Do not abbreviate or invent variants.

Tone — factual and direct. Avoid superlatives, marketing language, and vague qualifiers ("very fast", "highly available" without specifics). Use numbers and precise statements wherever possible.

draft: false — all published pages must have draft: false in their front matter. Pages with draft: true are built locally with hugo server --buildDrafts but are never included in the production build.


Source data: contabo.com · Last updated: June 2026 · Prices in EUR excluding VAT

About

Starting Point for our consolidated Product Documentation

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors