개요
집에서 시놀로지 NAS를 굴린지 3년이 되어간다. 그당시 개인 저장소에 대한 막연한 환상이 있어 구매하였지만 생각보다 코어단을 건드리는 부분에 있어 제약사항이 꽤 많았던것 같다. 뭐 도커를 설치하고 어쩌구 저쩌구 하면 되지만 결국 OS는 DSM이다.
심지어 야심차게 밖아넣은 1TB HDD는 20%도 사용하지 않고 먼지만 쌓여가고 있었다. 그래서 올해 중고로 팔아버렸다. 제 값을 못받은것 같긴 하지만 뭐 쓸데도 없으니 후회하진 않는다.
NAS를 팔긴 했지만 개인 서버가 필요하긴 했다. 중요한 자료를 저장할 곳이 필요하고 실시간으로 자료를 업로드하고 다운받을 수 있는, 그러면서 용량은 그렇게 크지 않아도 되는 그런 작은 서버 말이다.
처음 생각한건 AWS였다. 근데 EBS의 용량이 올라가면 올라갈수록 요금이 기하급수적으로 올라가는것을 보고 포기하게 되었다. 무엇보다 최근 너무 많은 일들(개인, 회사..) 을 클라우드 서비스로 처리하다 보니 조금 질린(?) 듯 하였다.
그래서 결론적으로 선택한건 베어본 PC이다. 적당히 전력을 먹으면서 내가 원하는 사양으로 맞출 수 있을것 같았다. (무엇보다 사이즈가 작고 이뻐서 인테리어에 큰 영향을 주지 않는다.)
하드웨어 구성
1. PC
내가 선택한 PC는 PN41-BBC035MV 요놈이다. 2코어 2스레드의 사양을 가진 셀러론 N4505 CPU를 탑재하였고 USB 3.0 지원, 블루투스 탑재, 0.7kg의 무게 등의 특징을 가지고 있다. 무엇보다 이쁘다. 모니터암 아래 남는 공간에 배치할 수 있어서 좋다. (에너지 절약 스티커가 있어도 이쁘네)
2. 저장장치
베어본 CP라 저장장치가 포함되어 있지 않다. 프로그램을 돌리는 용도의 SSD 256GB 와 파일, 데이터 저장용 HHD 1TB로 구성했다. SSD와 HDD는 각각 M.2 2280 for PCIe, 2.5인치의 규격으로 맞춰야 한다.
안타깝게도 집에 굴러다니는 SSD와 HDD는 모두 데스크탑 용이었기 때문에 눈물을 머금고 10만원을 지출했다.
3. RAM
램도 포함되어있지 않지만 마침 8GB 짜리 램이 있어 램은 그대로 사용하기로 했다. 램은 노트북용인 SO-DIMM 규격을 사용해야 한다.
4. 공유기
기존 NAS를 사용할때는 NAS 자체를 거실에 두고 사용했고 IP가 바뀌더라도 그를 탐지하는 프로그램을 통해 자동으로 내 휴대폰에서 접근할수 있게끔 사용해왔다. 하지만 나는 이 홈서버는 24시간 중단없이 돌릴 생각이다. 선택할 수 있는 방법은 2가지가 있었다.
- 월 요금 지불후 고정 IP 사용
- 공유기(ipTIME)의 DDNS 기능 사용
어쨌거나 나는 내 방에 PC를 둘 생각이었고 내 방의 랜포트는 한개기 때문에 공유기가 필요했다. 공유기를 사는 김에 DDNS 기능을 사용해 보기로 했다. 선택한 공유기는 A2004NS-MU 이다. 그냥 쿠팡에서 로켓배송 지원하고 1등이길래 구매했다.
서버 구성 및 구축
1. OS
OS는 Rocky Linux로 정했다. Rocky Linux도 언젠가는 CentOS 꼴이 날것이라 생각하는 사람도 있고 나 역시 그럴 가능성이 있어 Ubuntu와 끝까지 고민했지만, 나는 레드햇 계열의 리눅스에 더 끌린다. 어쩔수 없나 보다.
집에서 굴러다니는 USB을 부팅디스크로 만들어 OS를 설치했다.
2. 원격접속
최우선으로 작업해야 하는것은 메인 데스크톱을 통해 SSH로 접속 가능하게 하는 것이다. 키보드, 모니터를 pc마다 옮겨가며 세팅할 수 없기 때문에 다음 사진과 같이 책상이 더러워진다.
다행이 putty나 xshell등 원격접속 툴을 사용할 줄 아는 사람이라면 문제가 없을듯 하다. 두 PC의 사설 IP 대역은 동일하기 때문이다.
위 이미지와 같이 iptime 자체의 IP는 192.168.0.1, Windows의 경우 192.168.0.2, Linux의 경우 192.168.0.3을 각각 할당받고 있다. 이것이 의미하는 것은 Windows의 원격접속 툴에서 192.168.0.3 / 22 를 호스트 / 포트로 설정후 접속하면 된다는 뜻이 된다.
Rocky Linux의 경우 22번 포트가 기본으로 모든 ip에서 접근을 허용하기 때문에 그냥 접속될 것이다. 혹시 접속이 안된다면 리눅스에서 netstat -tnlp
명령어를 통해 22번 포트가 오픈되어 있는지 확인하고 열있지 않다면 방화벽 설정을 통하여 22번 포트를 오픈해보자.
3. WOL 설정
자세하게 다루지는 않겠지만 PC가 알수없는 이유로 꺼졌을 경우나 외부에서 PC를 켜야할 경우를 대비하여 원격 부팅을 설정했다. 이 글을 통해 공유기를 세팅하였고 이 글 을 참조해 Linux에서 설정하였다.
주의해야 할점은 일반 커맨드로 설정한 경우 시스템이 종료되면 설정이 초기화되기 때문에 네트워크 스크립트에 추가해줘야 한다는 점이다.
4. 모니터링 툴 선택
모니터링 툴을 선정해야 한다. 새삼 AWS의 Cloud Watch 기능이 그리워졌었다. 모니터링은 서버 운용에 있어 가장 중요하다고 생각했기 때문에 모니터링 툴을 알아봤는데 최종적으로 Zabbix
와 Prometheus
중에 하나 선택하기로 했다.
Prometheus
는 시각화 도구인 Grafana
와 세트라고 생각하는데, 이 Grafana
가 Zabbix
보다 UI / UX 면에서 이뻐보이고 해외 포럼도 Prometheus
의 손을 들어주는것 같았기에 결론적으로 Prometheus
를 선택하였다.
아직 구동중인 어플리케이션이나 기타 DB는 없기 때문에 일단 Node Exporter
를 통해 CPU, OS, Memory 등의 시스템 매트릭을 모니터링만 할수 있도록 구성하였다.
5. Docker
마지막으로 도커를 설치하였다. 각각의 컨테이너는 한개씩일 것이기 때문에 k8s는 오버스펙이라고 생각하여 설치하지 않았다. 모든 어플리케이션, DB 등은 이 도커위의 컨테이너로 올라갈 것이다.
마치며
오랬동안 함께했던 NAS를 팔아버리고 새로운 미니 PC를 영입했다. AWS로 편하게 인스턴스 띄우다 실제 물리적인 장비 위에 Linux를 너무 오랜만에 깔아봐서 그런지 삽질을 좀 한것 같다. 그래도 옛날에 가상머신에 Linux깔아서 포트포워딩으로 포트폴리오 오픈하고 했던 기억이 새록새록 떠올라 재밌었다.
실제 서비스를 오픈하거나 외부에 오픈할 것도 아니고 그냥 혼자 아기자기 하게 쓸 용도로 만든 구축한 서버기 때문에 돌리고 싶었던거나 많이 돌려봐야 겠다. 무엇보다 전기세가 NAS를 돌릴때보다 적게 나올것 같아 좋다.