はじめに
このブログは、Oracle Cloud の 1GB メモリ(物理 RAM 954MB、Swap 2GB)という制約の中で稼働しています。
バックグラウンドではすでに NapCatQQ が約 350MB のメモリを消費しているため、残されたメモリは約 500MB 程度。この厳しいリソース条件下で、快適で高速、そしてメンテナンスが容易な個人ブログと API サービスを共存させるために、極限まで軽量化されたアーキテクチャを選定しました。
アーキテクチャの選定
| コンポーネント | 採用技術 | メモリ消費量 | 特徴 |
|---|---|---|---|
| Web サーバー / リバースプロキシ | Nginx | ~2.5 MB | 圧倒的な軽快さと安定性。HTTPS 自動リダイレクトとキャッシュ制御を担当。 |
| ブログエンジン | Hugo + PaperMod | 0 MB(静的生成) | 実行時常駐プロセスなし。Markdown を 300ms で HTML に静的コンパイル。 |
| API サーバー | Python 3.12 + FastAPI | ~50 MB | Swagger 自動ドキュメント、非同期タスク、Webhook 連携を最小構成で提供。 |
| 合計常駐メモリ | 約 53 MB | 空きメモリ 550MB 以上を余裕で確保。 |
コード例
FastAPI 側のヘルスチェック機能の実装例です。psutil を使ってリアルタイムなサーバーリソースを取得しています。
import psutil
from fastapi import FastAPI
app = FastAPI(title="Micro API", root_path="/api")
@app.get("/health")
def health_check():
vm = psutil.virtual_memory()
return {
"status": "healthy",
"memory_used_mb": round(vm.used / (1024 * 1024), 1),
"available_mb": round(vm.available / (1024 * 1024), 1),
}
おわりに
日常の記事執筆は、Markdown ファイルを配置してビルドスクリプトを実行するだけで完了します。 リソースを無駄遣いせず、シンプルで堅牢な環境を作ることができました。