지난 주말동안 학습을 위해 집에서 소규모 홈서버를 구축했습니다.
단순히 도커까지만 올렸는데도, 처음이다 보니 하루를 꼬박 새워서 구축했던 것 같습니다.
개인적으로 구축을 위한 자료를 조사하면서 알아보기 힘들거나 제 상황에 맞지 않는 자료가 많은 것 같아 나중에 다시 볼 목적으로 글을 남겨두기로 합니다.
구축 과정은 크게 나누자면 '운영체제 설치', '서버 시스템 및 네트워크 구성', '도커 세팅' 으로 나뉩니다.
사실 서버 구축 후 Github action이나 NAS와 연결하는 등 특수한 목적을 위해 진행해야 할 일이 더 있긴 하지만, 당장 급한 건 아니라서 우선은 위와 같은 순서로 진행하였습니다.
우선은 서버를 위한 운영체제를 설치해야 합니다.
저는 Proxmox를 선택했는데, 이전에 어떤 선배님이 홈서버에 Proxmox를 사용하시는걸 봤어서 비교적 친숙하기도 하고, 내장된 웹 관리 패널을 통해 쉽게 관리할 수 있을 것 같아 선택하였습니다.
다만 Proxmox가 잘못된 선택일수도 있는데, 생각보다 특정 주제에 대한 한국어 기반 자료가 없으며 있더라도 업데이트가 되지 않은 옛날 자료인 경우가 많았습니다.
그래서 일부 주제에 대해서는 외국 포럼을 찾아가며 알아봐야 하는데, 영어에 능숙하지 않을 경우 영어로 된 문제 해결 방법을 놓치거나 잘못된 방식으로 문제를 해결하는 등의 문제를 조금씩 겪을 수 있어보입니다.
또한 Proxmox는 무료 버전을 사용할 경우 No-Subscription 레포지토리를 사용하게 됩니다.
해당 레포지토리는 Enterprise 레포지토리에 비해 덜 검증된 패키지들과 버전들도 업로드되는 레포지토리입니다.
만약 Proxmox의 구독비를 내기 어려워 No-Subscription 레포지토리를 사용하게 된다면 패키지 업데이트 이후 서버가 동작하지 않거나, 예상과 다르게 동작하는 등 이슈가 생길 가능성이 높다고 합니다.

서버 시스템 및 네트워크는 위 이미지와 같이 구성하였습니다.
홈서버이다 보니 큰 복잡함 없이 최대한 단순하게 구현되어있으며, SSH 접속 대신 VPN으로 연결된 웹 관리 패널을 통해 관리하는 방법으로 작업할 수 있도록 설정하였습니다.
(사실 SSH 접속이 제일 간단하지만, 지식이 부족한 상황에서 빠르게 구축해야 하다 보니 어쩔 수 없이 VPN과 웹 관리 패널을 통한 관리 방식을 선택했습니다.)

사실 원래는 네트워크 구조가 위 형태였으나, 집 내부에서만 접근이 가능하고 외부에서는 포트포워드된 프록시조차 접근이 불가능한 문제가 있었습니다.
어떤 방식으로도 해결되지 않아 2차 공유기를 1차로 옮기고, 대신 허브를 달아 랜 케이블을 분배하는 방식으로 변경하였더니 정상 동작하였습니다.
현재는 통신사 공유기가 내부적으로 80 또는 443 포트를 공유기 관리 페이지에 할당하거나, 80 또는 443포트로 들어오는 요청을 전부 차단한 것으로 추정하고 있습니다.
도커 세팅은 어렵지 않으나, LXC에서의 도커의 사용을 추천하지 않는 의견이 많아 조금 고민되는 부분이었습니다.
다만 현재 서버로써 사용하는 컴퓨터의 사양 (i5-4xxx, 8GB 램) 을 고려하여 비교적 가벼운 LXC 기반 도커를 사용하기로 선택하였습니다.
새로운 LXC 컨테이너 생성 및 패키지 업데이트 후 아래 명령어를 통해 docker와 docker compose를 설치해주었습니다.
curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
apt install docker-compose # 사실 이미 통합됬지만, 그 사실을 몰라서 그냥 설치했습니다
분명 DNS와 네트워크 설정을 정상적으로 완료했음에도 지속적으로 컨테이너 내부에서 Timeout 또는 Hostname not found 이슈가 발생하는 경우가 있었는데, 확인해보니 통신사 DNS에서 해당 서비스의 IP를 허용하지 않아 발생하는 문제였습니다.
DNS를 cloudflare의 보조 DNS인 8.8.4.4 로 변경하니 해결되었습니다. (주 DNS인 8.8.8.8의 경우 트래픽이 많은건지, 중간에 잠깐식 끊기는 경우가 있었습니다.)
지금까지는 항상 LXC 컨테이너를 새로 만들때마다 apt update 명령어를 통해 패키지를 업데이트해주고 있었는데, 이 작업이 약 3~40분을 소요하면서 생각보다 시간 낭비가 꽤 큰 문제점이 있었습니다.
그래서 추후 패키지를 업데이트한 뒤, 해당 컨테이너를 이미지화하여 재활용하는것을 계획으로 잡고 있습니다.
현재 서버에 도커 컨테이너만 생성되어있으나, 추후 Github action와 연결하여 교내 배포 서비스인 Xquare의 소형화 버전을 만드는 것을 목표로 하고 있습니다.
물론 Proxmox의 불안정한 버전을 사용하는 소규모 홈서버인 만큼, 다른 사람들한테 공유하지 않고 제가 사용하기 위함입니다.
현재는 리버스 프록시와 VPN으로 도커 컨테이너와 관리자 페이지에 대한 보안을 일부 확보하고 있으나, 추후 웹 관리 패널에 https 적용, 방화벽 적용 및 인증서 기반 SSH 연결도 설정하여 현재보다는 조금 더 안전한 환경을 만드는 것을 계획중입니다.
사실 대규모의 안정적인 서버도 아니고, 부품들조차 야매(액정 없는 인텔 맥북 기반 서버, 불안정한 무료 Proxmox, 서랍장 구석에 박혀있던 공유기)이지만, 서버 및 네트워크 지식 학습 용도로는 꽤 알맞았던 것 같습니다.
앞으로 이 서버를 통해 네트워크 심화, CI/CD 개념 등 이전에 배우고 싶었던 것들을 배워볼까 싶기도 합니다.
와 멋져요. 벨로그 대시보드 dev ops 좀 홈서버에 올려주세요!! private cloud 인프라와 유사한데, NAT 환경에서 ip 할당, 서비스 매쉬, k8s 사용 여부도 앞으로 더 궁금해요!!