このブログは、Spring Bootベースで構築した技術ブログシステムです。 静的CMS的な運用を可能とするため、Markdownファイルで記事を管理し、 GitHub ActionsによりVPS環境へ自動デプロイされます。
構成上の特徴は以下の4点です。 - Spring Boot による軽量Webアプリケーション構築 - Markdownによるコンテンツ管理(CMS的運用) - GitHub Actions によるCI/CD自動化 - ConoHa VPS + Nginx によるHTTPS対応と本番運用
項目 | 技術・サービス |
---|---|
Webフレームワーク | Spring Boot 3.5.0 |
ビルドツール | Gradle |
マークアップエンジン | Flexmark (Markdown to HTML) |
テンプレートエンジン | Thymeleaf + Layout Dialect |
フロント構成 | Bootstrap 5, Font Awesome |
CI/CD | GitHub Actions |
ホスティング | ConoHa VPS(Ubuntu 22.04) |
リバースプロキシ | Nginx |
HTTPS対応 | Let’s Encrypt (Certbot) |
ドメイン管理 | ConoHa DNS |
記事は以下の構成で管理されます。
src/
└─ main/
└─ resources/
└─ archives/
├─ 2025-06-01-post.md
├─ 2025-06-10-post.md
└─ meta/
└─ index.yml
articles:
- url: first-post
path: ./2025-06-01-post.md
title: 初めての記事
date: 2025-06-01
tags: [spring, markdown]
show: true
# 初めての記事
これはSpring BootベースのMarkdownブログの最初の記事です。
Spring Boot起動時にYAMLを読み取り、flexmark-java
によってHTMLへ変換し、Thymeleafで描画します。
.github/workflows/release.yml
にて、タグ付きリリースと同時にVPS上へ自動デプロイされるよう構成しています。
主な処理内容:
./gradlew stage
により blog.jar
+ Markdown + Config を build/deploy/
へコピーrsync
でVPSの /opt/myapp/
にデプロイ- name: Deploy release to VPS
run: |
rsync -e "ssh -i ~/.ssh/id_rsa" -av --delete \
build/deploy/ \
${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }}:/opt/myapp/
アプリ自体は8080番で起動し、Nginxでポート80/443を受け付けています。設定ファイルの一部:
server {
listen 80;
server_name mocktechblog.net www.mocktechblog.net;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
}
}
HTTPS化には Certbot を使用:
sudo certbot --nginx -d mocktechblog.net -d www.mocktechblog.net
ConoHaでドメインを取得後、DNS設定(Ver2.0) にて以下をAレコードで登録。
ホスト名 | 種別 | 値(VPSのIP) |
---|---|---|
@ | A | xxx.xxx.xxx.xxx |
www | A | xxx.xxx.xxx.xxx |
ネームサーバは ns-a1.conoha.io
系に設定されていました。 CertbotにてHTTPS認証が失敗する場合、DNSの反映やNS設定を再確認してください。 自分はConoHaでドメイン取得してそのままDNSの設定してましたが、 Ver3.0ではなくVer2.0で作られてるのに気付くのに数時間悩みました。
build.gradle
では、デプロイ対象を /build/deploy/
にまとめ、bootJar
に合わせて archives
のMarkdownファイルも同梱。
bootJar {
archiveFileName = 'blog.jar'
destinationDirectory = file("$buildDir/deploy")
dependsOn copyArchivesToDeploy
}
静的CMSのような軽量性と、Spring Bootによる柔軟な拡張性を両立した構成でブログシステムを構築しました。詳しく書こうとするとそれだけで結構深堀出来てしまうのでそれぞれの作業はあっさり目に書いています(CDCIとかは別途markdownの更新だけ行いもの作ったり等…)。
結構業務としてSpring bootが使われている印象で、簡単に触れるわりに高品質なアプリが作れるのでこんな使い方もできるっていう一例になれればと思います。