はじめに
「知識をストックする場所が欲しい」と思い立ち、Docker と Hugo を使って静的ブログを構築してみました。
Hugo は Go 製の静的サイトジェネレータで、とにかくビルドが速く、Docker での運用も簡単です。
この記事では、環境構築から記事作成、更新までの流れをまとめます。
docker-compose.yml
まずは docker-compose.yml
を用意します。
Hugo でビルドして生成した静的ファイルを Nginx で配信する構成です。
services:
hugo:
image: klakegg/hugo:ext-alpine # Hugoビルド用イメージ
container_name: hugo-builder
volumes:
- ./site:/src
working_dir: /src
command: ["hugo", "--minify"]
knowledge-blog:
image: nginx:alpine
container_name: knowledge-blog
restart: always
ports:
- "80:80" # ← 直接ホストの80番ポートを公開
volumes:
- ./site/public:/usr/share/nginx/html:ro
config.toml
サイト設定は以下の通り。 テーマは hugo_theme_robust を使いました。
baseURL = "https://knowledge.sho-kun.com/"
languageCode = "ja"
title = "sho-kun.com"
theme = "hugo_theme_robust"
[services]
[services.disqus]
shortname = "" # コメントを入れる場合は設定
[services.googleAnalytics]
id = "" # GAを使う場合はIDを設定
[params]
description = ""
dateformat = "2006-01-02"
googlefonts = "https://fonts.googleapis.com/css?family=Lato:400,700"
fontfamily = "Lato,YuGothic,'Hiragino Kaku Gothic Pro',Meiryo,sans-serif"
logofontfamily = "Lato, cursive"
[params.author]
name = "sho-kun"
thumbnail = "images/author.jpg"
description = "<p>takahashi sho</p>"
[outputs]
page = ["HTML", "AMP"]
記事作成用スクリプト(newpost.sh)
記事を簡単に追加できるようにスクリプトを用意しました。
Markdown テンプレートが自動で生成されます。
#!/bin/bash
# 使い方: ./newpost.sh 記事タイトル
if [ -z "$1" ]; then
echo "記事タイトルを指定してください"
exit 1
fi
POST_NAME=$1
SITE_DIR="/opt/docker/knowledge/site"
POST_FILE="${SITE_DIR}/content/posts/${POST_NAME}.md"
if [ -f "$POST_FILE" ]; then
echo "⚠️ すでに記事があります: $POST_FILE"
exit 1
fi
mkdir -p "${SITE_DIR}/content/posts"
cat <<EOF > "$POST_FILE"
---
title: "${POST_NAME}"
date: $(date +"%Y-%m-%dT%H:%M:%S%:z")
draft: false
tags: ["knowledge"]
---
## はじめに
この記事では **${POST_NAME}** について解説します。
---
## ポイント
- 知識を整理
- 例を紹介
- コマンドを記録
---
## サンプルコード
\`\`\`bash
echo "Hello Knowledge"
\`\`\`
---
## まとめ
この記事のまとめをここに書きます。
EOF
echo "✅ 新しい記事を作成しました: $POST_FILE"
更新用スクリプト(reload.sh)
記事を書いたら以下のスクリプトでビルド&Nginx 再起動。
すぐに knowledge.sho-kun.com に反映されます。
#!/bin/bash
SITE_DIR="/opt/docker/knowledge/site"
echo "Hugoでビルド中..."
docker run --rm -v ${SITE_DIR}:/src klakegg/hugo:ext-alpine
echo "Nginxを再起動..."
docker compose -f /opt/docker/knowledge/docker-compose.yml restart knowledge-blog
echo "✅ サイトが更新されました: https://knowledge.sho-kun.com"