805 미니서버 구축기

parent_topic 800-프로젝트
types 실습 도구
contexts 프로젝트
tags
period 2024.10 ~ 진행중
environment Ubuntu Server + Docker

미니서버 구축기

집에서 운영하는 미니 PC로 개인 서버를 구축하는 프로젝트


시작 동기

왜 미니서버인가

  1. 개인 데이터 관리: 클라우드 의존성을 줄이고 데이터를 직접 관리하고 싶었다
  2. 학습 목적: 서버 운영 전반을 실습하며 배우고 싶었다
  3. 파일 공유/백업: NAS 기능과 함께 서비스 배포까지 하고 싶었다

클라우드 비용을 계속 내야 하고 데이터가 남의 손에 있는 게 불안하지 않아?
미니 PC 하나 사서 직접 운영하면 장기적으로 비용도 절약되고 배우는 것도 많다


목표 구성

  • 안정적인 서버 운영 환경 구축
  • Docker 기반으로 서비스 컨테이너화
  • 모니터링 시스템 구축 (Prometheus + Grafana)
  • SMB를 통한 파일 공유/백업 시스템
  • 보안 강화 (SSH, 방화벽, ACL)

기술 스택

분류 기술
OS Ubuntu Server
컨테이너 Docker, Docker Compose
리버스 프록시 Nginx (호스트 설치)
모니터링 Prometheus, Grafana, Node Exporter
데이터베이스 MySQL (호스트 설치)
파일 공유 SMB/CIFS, SSH

진행 단계

1단계: 하드웨어 및 OS 설치

2단계: 네트워크 구성

  • 공유기 포트포워딩 설정
  • Hairpin NAT 해결 과정
  • ISP 포트 차단 대응

3단계: 보안 설정

4단계: 배포 환경

5단계: 모니터링 구축


아키텍처

[호스트]
├── Nginx (리버스 프록시)
├── MySQL (데이터베이스)
├── Node Exporter
└── Docker
    ├── Prometheus
    ├── Grafana
    ├── Spring Apps
    └── 기타 서비스

왜 이렇게 구성했냐면

컴포넌트 설치 위치 이유
Nginx 호스트 진입점이라 Docker 죽어도 동작해야 함
MySQL 호스트 데이터 안전성, I/O 성능
Node Exporter 호스트 호스트 메트릭 수집
Prometheus Docker 스토리지 볼륨만 관리하면 OK
Grafana Docker stateless, 이식성 좋음
Apps Docker 관리 편함, 격리

삽질 포인트

3시간 삽질한 끝에 알아낸 것: ISP가 445, 22 같은 well-known 포트를 차단한다

교훈: 외부 포트를 다른 번호로 매핑해서 사용해야 한다


현재 상태

완료된 것

  • 안정적인 서버 운영 환경 (Docker)
  • Grafana 모니터링 대시보드
  • SMB 파일 공유/백업

진행 중

  • Loki를 통한 로그 수집
  • 알림 규칙 설정
  • SSL 인증서 자동 갱신

장점과 단점

장점

  • 개인 데이터를 직접 관리할 수 있다
  • 학습 효과가 크다 (네트워크, 보안, Docker 등)
  • 장기적으로 비용 절약

단점

  • 초기 설정이 복잡하다
  • 정전/장애 시 직접 대응 필요
  • 소음, 전력 문제 (소음, 발열 등)
  • 외부에서 접근 시 보안 위험

관련 문서