홈서버로 이런 것도 할 수 있어요 🤗

정선교·2024년 6월 7일
18

HomeLab

목록 보기
3/3
post-thumbnail

(사이드 프로젝트로 운영중인 지름알림 서비스)

개요

이전 게시글에서는 홈서버에 대해서 소개하고, 홈서버를 운영했을때 어떤 장점이 있는지 소개했었는데요 🙂
이번 게시글에서는 제가 운영하고 있는 홈서버(Synology NAS와 Proxmox 데스크톱)를 이용해서 구성하고 있는 것들을 소개해드려고 합니다.

이전 게시글을 아직 보지 않으셨다면, 아래 링크를 통해 확인해보세요!
해당 게시글에서 등장하는 나스와 쿠버네티스에 대해서 소개하고 있으니 같이 읽어보시기를 권장드립니다 😎
홈서버를 소개합니다 🐥
홈서버를 운영하면 어떤게 좋을까요?

홈서버로 어떤걸 하고 있나요?

Synology NAS를 통해서 하고 있는 것들

  • 파일 저장소로 사용(NFS)
    • 가상머신 호스트의 모든 데이터는 NFS로 연동해서 NAS에 저장해요
    • 쿠버네티스 파드의 데이터 저장소(PV)로 사용해 파드의 데이터는 NFS를 통해 NAS에 저장해요.
  • 도메인으로의 요청을 내부의 호스트로 전달(리버스 프록시)
    • 소유한 도메인의 서브 도메인(argocd.example.com)으로 들어오는 요청들을 내부 네트워크의 호스트로 전달하는 역할을 하고 있어요
    • 모든 호스트를 외부에 공개하지 않아 보안적으로 우수해요!
  • 스케쥴링 작업
    • 도메인에서 HTTPS를 지원할 수 있도록 Let's Encrypt에서 와일드카드 인증서를 주기적으로 갱신하고 있어요
  • VPN 서버
    • 지름알림 서비스 개발환경 및 어드민, ES, Kafka, Redis등 어플리케이션을 실행할 때 사용하는 어플리케이션들은 보안을 위해 외부에 공개하지 않고 있어요
    • 집 밖에 있더라도 VPN을 사용해서 마치 제 노트북이 자취방의 내부 네트워크에 있는 것 처럼 내부망의 호스트에 접근해요
  • 백업 서버
    • 가상 머신 서버(Proxmox)의 데이터들을 증분 백업하고 있어요
    • Proxmox PBS의 증분 백업 기능을 이용해 매일 변경된 데이터만 추가로 저장해요
    • 가상 머신 서버의 데이터가 날아가더라도 원하는 시점으로 되돌릴 수 있어요
  • Harbor 컨테이너 이미지 레지스트리
    • 쿠버네티스에서 파드를 띄울 때 사용하는 컨테이너 이미지의 저장소 역할을 하고있어요
  • 캐시 저장소 - 로컬(개발)용 redis
    • 로컬에서 작업할때 사용하는 캐시 저장소의 역할을 하고 있어요
  • 모니터링 - 지름알림 서비스 헬스체크
    • 지름알림 서비스가 살아있는지 모니터링하고 살아있지 않다면 슬랙으로 알림을 보내줘요

가상서버에서 Kubernetes로 하고 있는 것들

  • 어플리케이션 서버 (지름알림(많관부 🙇🏻‍♂️) 등 여러 어플리케이션)
    • 운영 서버와 더불어 개발 서버도 별도로 운영하고 있어요
    • 운영 서버와 개발 서버를 쿠버네티스 YAML파일에 정의해 사용하고 있어, 서버를 별로도 띄우는 부분에 대한 부담이 전혀 없어요!
  • 스케쥴링 작업
    • 지름알림 서비스에 사용되는 상품을 수집하는 배치로 사용하고 있어요
    • 정해진 주기에 따라 상품을 수집하는 기능이 동작해요
  • 데이터베이스
    • EFK (Elasticsearch + Kibana + Fluentd)
      • 각 서버(프론트, 워커, 배치)에서 발생하는 로그를 기록하고 있어요
      • 이후에는 검색에 활용할 예정이에요
    • Redis-cluster (master + read replication)
      • 어플리케이션에서 속도 향상을 여러 부분에서 위해서 캐시를 사용하고 있어요
    • Kafka-cluster
      • 수집되는 상품을 이벤트로 발행하고, 소비해서 처리하기 위해서 카프카를 사용하고 있어요
      • 상품이 수집된 이후에 진행되는 처리(상품, 가격, 썸네일 저장 등)들은 워커에서 비동기로 실행되요
      • 사용자의 트래픽을 받는 서버와 별도로 떠있기 때문에 트래픽이 늘더라도 영향을 적게 받도록 구성했어요
      • 이벤트 드리븐 아키텍쳐 구조로 가져가기 위해 단일 진실 공급원의 역할로 사용할 계획이에요
  • 자동 배포
    • GitOps를 이용해 자동으로 배포하기 위해서 ArgoCD를 사용하고 있어요
    • 지름알림 인프라 저장소 레포지토리에 있는 파일의 값을 변경함으로써 서버 리소스 할당, 서버 배포, 환경 변수 할당, 서버 개수 변경, 도메인 라우팅, 배치 및 스케쥴링 등록 등 쿠버네티스에서 지원하는 대부분의 기능을 사용할 수 있어요

마치며

홈서버로 구성한 NAS와 가상 머신으로 구성한 서버에서 할 수 있는 것들을 소개해드렸는데요!
해당 게시글을 포스팅하면서 언제 이렇게 많은걸 구성했지.. 라는 생각이 드는데
서버로 할 수 있는 것들이 뭐가 있을까? 지속적으로 고민하면서 이런 저런 것들을 구성하고,
내가 구성한 것들로 어떤걸 할 수 있을까? 라는 물음의 결과로 지금의 구성이 된 것 같아요

현재는 구성해둔 것들이 유기적으로 상호작용 하면서 지름알림이라는 사이드 프로젝트의 구성요소로써 각각의 역할을 충실히 수행하고 하고 있어서 지난날의 고민과 삽질이 결과물이 된 것 같아 뿌듯한 마음이 듭니다 😀

이 글을 읽는 독자분들도 한번에 이렇게 많은 것들을 구성하기는 힘들겠지만, 당장 필요한 것 부터 하나 둘씩 구성하다보면 언젠간 필요한 것들을 전부 홈서버에서 구성할 수 있게 될 수 있을거라고 생각해요
다른 분들도 제 게시글을 보고 따라하고 싶은 마음이 들고, 직접 구성까지 시도해볼 수 있길 바라며 글을 마칩니다 🙇🏻‍♂️

profile
인프라를 좋아하는 백엔드 개발자

3개의 댓글

comment-user-thumbnail
2024년 8월 6일

안녕하세요.
홈서버 소개하는 첫번째 글부터 재밌게 보고 있는 구독자입니다 :)
궁금한게 있는데, 혹시 K8S 인그레스 컨트롤러 대신에 시놀로지 NAS 를 리버스 프록시 서버로 사용한 이유가 뭔지 궁금합니다~
모든 앱이 K8S 위에서 동작하는게 아니라서 그런가요?

1개의 답글

관련 채용 정보