Info

home server 구축 과정을 정리한 페이지 입니다.

계획

미니pc 를 통해서 ProxmoxVE 를 OS 로 설치한 뒤 Opnsense kubernetes 등 여러가지 도구들을 사용하여 실제 여러 홈페이지 및 application 을 운영해 볼 생각입니다.

미니pc 스펙

모델명 : FIREBAT T8 플러스 N100
CPU : N100 (4core)
Memory : 16GB
storage : 512GB
local : 100GB
local-lvm : 375GB

HomeLab 네트워크 구성

통합 네트워크 구성 (192.168.x.0/24)

🌐 업데이트된 IP 할당 테이블

구분역할스펙
SKB 공유기Gateway기본 게이트웨이
Proxmox VE호스트물리: 4CPU 16GB
WireGuard ServerVPN 서버내장
PC VPNVPN 클라이언트WireGuard Client
OpnSense방화벽/HAProxy2CPU 2GB 20GB
K3s Master컨트롤 플레인4CPU 4GB 30GB
K3s Worker-1워커 노드4CPU 9GB 100GB
K3s Worker-2워커 노드4CPU 9GB 100GB

⚖️ BALANCED OVERCOMMIT

구분물리할당배수안전성
CPU4 Core20 vCPU5배✅ 안전
Memory15.41GB24GB1.56배✅ 균형
Disk512GB250GB0.49배✅ 넉넉

🔧 DHCP 범위 (기존 기기)

192.168.x.2 - 192.168.x.99   : 자동 할당 (스마트폰, TV 등)

네트워크 흐름

🔄 VPN 연결 흐름

MacBook (외부) 
    ↓ 인터넷 (공인ip:51820)
SKB 공유기 (포트포워딩)
    ↓ 192.168.x.x:51820
OpnSense WireGuard
    ↓ VPN 터널 구성
MacBook ←→ 내부 네트워크 

🌐 외부 → 내부 서비스 접근

사용자 → 인터넷 → SKB 공유기 → OpnSense HAProxy → K3s Nginx Ingress → Pods

HAProxy + Let’s Encrypt 구성

🌐 도메인 라우팅

*.homelab.yourdomain.com 와일드카드 인증서
 
라우팅 규칙:
- homelab.yourdomain.com → Flutter Web
- api.homelab.yourdomain.com → Django API  
- admin.homelab.yourdomain.com → Django Admin
- grafana.homelab.yourdomain.com → Grafana
- jenkins.homelab.yourdomain.com → Jenkins
- kibana.homelab.yourdomain.com → Kibana

🔒 SSL 처리

OpnSense HAProxy:
- SSL 터미네이션 (HTTPS → HTTP)
- 자동 인증서 갱신
- 로드밸런싱 (Worker-1, Worker-2 분산)
 
K3s Nginx Ingress:
- HTTP 기반 내부 라우팅
- Path 기반 서비스 분기
- 헬스체크 및 업스트림 관리

다이어그램

Info

K8s 클러스터에서는 실제로 서비스들이 특정 노드에 고정되지 않고, 클러스터 전체에 분산 배치 됩니다. 아래 다이어 그램은 “예상 배치 및 리소스 계획” 입니다.

image

더 간단하게 표현한 다이어그램. image


사용할 기술 스택

코드 관리 & 배포

  • Repository: GitHub (Private Repository)
  • Registry: Docker Hub (Private Repository)
  • CI/CD: Jenkins, ArgoCD

인프라 & 가상화

  • HypervisorOS: Proxmox VE
  • Container Orchestration: K3s (Kubernetes)
  • Firewall/Load Balancer: OpnSense / HAProxy
  • VPN: WireGuard
  • Infrastructure as Code: Ansible

애플리케이션 스택

  • Backend: Django (Python)
  • Frontend Web: Flutter Web
  • Mobile: Flutter
  • Web Server: Nginx Ingress Controller
  • API: Django REST Framework
  • Async Tasks: Celery

데이터베이스

  • Main Database: PostgreSQL
  • Cache/Session: Redis
  • Analytics/Logs: MongoDB

모니터링 & 로깅

  • Metrics: Prometheus
  • Visualization: Grafana
  • Log Storage: Elasticsearch
  • Log Analysis: Kibana
  • Log Collection: Fluentd

DevOps 도구

  • Code Quality: SonarQube
  • Secret Management: HashiCorp Vault
  • Data Pipeline: Apache Airflow
  • Analysis Environment: Jupyter Notebook

클라우드 & 외부 서비스

  • Cloud Platform: AWS (연동)
  • App Store: Google Play Store, Apple App Store
  • SSL Certificate: Let’s Encrypt (자동 갱신)
  • DNS: Cloudflare (도메인 관리)

개발 환경

  • OS: Ubuntu 24.04(VM)
  • Container Runtime: Docker
  • Package Manager: Helm
  • Development: Cursor / PyCharm

주의사항(보안사항)

GitHub에 올리면 안 되는 것 ❌ 데이터베이스 비밀번호 ❌ API 키, 토큰 ❌ 개인 정보 ❌ 내부 IP, 설정 정보

대안 ✅ Environment Variables ✅ Kubernetes Secrets ✅ HashiCorp Vault ✅ .env 파일 (gitignore 처리)

Docker Hub에 포함하지 않는 것 ❌ 데이터베이스 패스워드 ❌ API 키/시크릿 ❌ 개인정보 ❌ 인증서/키 파일

대신 사용 ✅ Environment Variables ✅ Kubernetes Secrets ✅ Docker Secrets ✅ 외부 설정 파일