~ / works / homelab

homelab

自宅インフラ基盤構築

AWS EC2 で運用していたポートフォリオ/監視環境を、自宅に構築した Proxmox VE 環境へ移行。リモート接続・公開・自動デプロイまで。

role設計・構築・移行(個人)
period2026〜 (継続中)
stackAWS EC2 · Proxmox VE · Ubuntu · Docker · Tailscale · Cloudflare Tunnel

## 概要

もともとAWS EC2(Ubuntu + Nginx + Docker)で本番運用していたポートフォリオ/監視環境を、自宅サーバの Proxmox VE 上へ移行しました。VM とコンテナ(LXC)で自分専用のインフラ基盤を構築し、外部に依存しすぎない「自分で全部見られる」環境を目指しています。クラウドの月額コストを止めつつ、ポート開放に頼らない公開方式へ作り替えるのが目的です。

「触って覚える」ことを重視しつつ、自動化ツールは中身を理解したうえで使うことを意識しました。

## 構成図

[ network diagram ] 構成図はここに差し込み予定 (diagram.png)
Before: Cloudflare → EC2(EIP) / After: Cloudflare → Tunnel → 自宅Proxmox 上の各 VM/コンテナ

## やったこと

  • 仮想化基盤: Proxmox VE を NVMe に導入。用途ごとに VM / LXC を分離して管理。
  • クラウド→オンプレ移行: AWS EC2で運用していたポートフォリオ/監視環境(Grafana/Prometheusの設定含む)を退避して自宅Proxmox VE へ移行。
  • 公開: 「ポート開放 + リバースプロキシ」方式から Cloudflare Tunnel(外向き接続のみ)に再設計。ルーターに穴を開けない方針を徹底。
  • リモート接続: Tailscale (WireGuard ベース) で安全に外出先から接続。MagicDNS でホスト名アクセス。
  • 自動デプロイ: CI経由の方式が認証まわりで安定しなかったため、サーバー上の git hook で commit → ビルド → コンテナ再起動を自動化。

## つまずきと解決

外部VPNが通らない

当初 WireGuard で外部接続を狙うも、回線側の制約で安定しなかったため、Tailscale に切り替えて解決。

公開経路の食い違いで502

AWSからの移行に伴い構成が変わったタイミングで、コンテナの公開ポートのバインド先とCloudflare Tunnelの向き先が食い違い502が発生。経路を一つずつ切り分けて原因を特定し、設定を揃えて解消しました。

## 学んだこと

「動いた」で終わらせず、なぜその構成なのかを説明できる状態を意識するようになりました。特に 公開経路は外向き接続のみで完結させるという設計判断は、セキュリティと運用のしやすさの両面で納得して選べた部分です。

また、コスト・セキュリティ・運用のしやすさのトレードオフを自分の手で動かしながら判断できたことで、「クラウドが常に最適とは限らない」を実感として持てました。