Build a Jekyll documentation site for your homelab
How to turn your homelab notes into a public Jekyll documentation website without leaking secrets.
If you build homelab services, document them while the details are fresh. Future you will thank you, and other nerds searching the internet will learn from the exact mistakes you already solved.
This site is built with Jekyll because it is simple:
- Markdown posts
- static HTML output
- easy Git history
- easy Docker deployment
- no database to secure
- fast pages for search engines
Golden rule: never publish secrets
Before publishing any guide, remove:
- API keys
- database passwords
- S3 access keys and secret keys
- Cloudflare tokens
- private SSH keys
- OAuth client secrets
- session cookies
- admin bootstrap passwords
- real internal-only IPs if they matter
Use placeholders instead:
CF_DNS_API_TOKEN=<your-cloudflare-dns-token>
AUTHENTIK_SECRET_KEY=<generate-a-long-secret>
GARAGE_DEFAULT_SECRET_KEY=<your-s3-secret-key>
Project layout
1
2
3
4
5
6
7
8
9
jekyll/
├── _config.yml
├── _posts/
│ └── 2026-05-08-example-post.md
├── assets/
│ └── img/
│ └── posts/
├── Dockerfile
└── docker-compose.yml
Posts use front matter:
1
2
3
4
5
6
7
8
9
---
layout: post
title: "My homelab service"
date: 2026-05-08 19:00:00 +0000
categories: [Homelab]
tags: [docker, traefik]
description: "Short SEO-friendly summary."
image: /assets/img/posts/example.png
---
Production Dockerfile
1
2
3
4
5
6
7
8
9
10
FROM ruby:3.3 AS build
WORKDIR /site
RUN apt-get update && apt-get install -y build-essential git && rm -rf /var/lib/apt/lists/*
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .
RUN JEKYLL_ENV=production bundle exec jekyll build
FROM nginx:stable-alpine
COPY --from=build /site/_site /usr/share/nginx/html
Production compose with Traefik
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
services:
docs:
build: .
container_name: homelab-docs
restart: unless-stopped
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.docs.entrypoints=http"
- "traefik.http.routers.docs.rule=Host(`docs.<your-domain>`)"
- "traefik.http.middlewares.docs-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.docs.middlewares=docs-https-redirect"
- "traefik.http.routers.docs-secure.entrypoints=https"
- "traefik.http.routers.docs-secure.rule=Host(`docs.<your-domain>`)"
- "traefik.http.routers.docs-secure.tls=true"
- "traefik.http.routers.docs-secure.tls.certresolver=cloudflare"
- "traefik.http.routers.docs-secure.service=docs"
- "traefik.http.services.docs.loadbalancer.server.port=80"
networks:
proxy:
external: true
This site is public documentation, so it normally does not use Authentik. If you protect it, search engines and readers cannot access it.
Local development
1
2
bundle install
bundle exec jekyll serve --host 0.0.0.0 --port 4000 --livereload
Or with Docker:
1
docker compose up
Content template for service posts
Use this structure for every service:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
## What we are building
Short explanation of the service and why it exists.
## Architecture
Domain, containers, networks, ports, volumes.
## Folder layout
Where files live.
## Compose file
Copy-paste-ready compose with placeholders.
## Environment file
Only placeholders, never secrets.
## First startup
Commands to start and initialize.
## Traefik labels
How routing works.
## Authentik integration
Only if the app is a human-facing dashboard.
## Verification
curl commands and expected outputs.
## Troubleshooting
Real errors and fixes.
Can this make money with ads?
Yes, but only if the site earns traffic and trust.
Realistic path:
- Publish useful, specific guides.
- Target problems people actually search for.
- Add diagrams and copy-paste examples.
- Keep posts updated.
- Add analytics.
- Apply for Google AdSense or another ad network once the site has enough real content and traffic.
Do not expect meaningful money early. Homelab content is niche. But niche technical traffic can be valuable because readers are serious and search with intent.
Better monetization options later:
- Google AdSense
- affiliate links for VPS providers, domains, hardware, backup tools
- sponsorships from self-hosting tools
- paid templates/checklists
- consulting leads
The priority should be quality. If the docs solve real problems, traffic and revenue options come later.
Related documentation
These posts connect to this topic and help build the bigger homelab picture:
- Build a homelab auth gateway with Traefik and Authentik — documents the security layer many homelab services share.
- Self-host WordPress with Redis, MySQL, Docker Compose and Traefik — covers a public web publishing stack that can complement a docs site.
- Self-host OpenClaw with Docker, Traefik, Authentik, and Telegram — shows how AI-assisted operations fit into the same documentation workflow.