CS 스터디분들과 대화를 나누다가 서버 비용에 대한 얘기가 나왔습니다.
AWS에서 프리티어로 서버를 돌리기엔 솔직히 사양적으로 아쉬운 맘이 큽니다.
그래서 라즈베리파이로 홈서버를 구축해보는 건 어떨까 의견이 나와서 제가 직접 도전해봤습니다
라즈베리파이5가 전작대비 2~3배 성능이 좋아졌다고 합니다.
하지만 공식 케이스를 사더라도 외관이 썩 좋게 보이지는 않는 것 같습니다.
그래서 요즘은 n100 cpu를 탑재한 미니PC를 활용해서 홈 서버를 구축하는 추세인 것 같습니다.
다만 미니PC의 경우 백도어 이슈가 있다는 얘기가 많아서
No Ram, No Storage를 산다음 규격에 맞는 SSD와 RAM을 따로 사서 달아주는 게 좋아보입니다.
저는 삼성 SSD, RAM이 달려있는 Chatreey t9를 중고로 구매하였습니다.
n100 미니PC의 경우 제조사 별로 모델이 다양한데 제가 조사한 바로는 Chatreey t9 / beelink 제품이 평이 좋았던 것 같습니다.
또한 중고로 처리할 때도 라즈베리파이보다는 미니PC가 가격방어도 잘되고, 잘팔리지 않을까 라는 기대도 해봅니다.
AWS t3.micro vs Intel N100 하드웨어 스펙 비교
싸게 구매하면 10만원 중반대로 구할 수 있는데, 이정도면 몇 개월이면 본전을 뽑을 것 같습니다.
우선 리눅스를 설치해야겠죠!
우분투 서버 이미지 파일을 다운 받아봅시다.
링크
이후 rufus를 다운 받아서 USB를 리눅스 설치용 USB로 만들어주면 됩니다!
부팅 선택 - 선택을 누른 다음 다운받은 이미지 파일을 선택하고 밑의 준비, 시작 버튼을 누르면 됩니다.
완성된 USB를 미니 PC USB 포트에 꽂고, 부팅을 한 뒤 바이오스 설정 모드에 들어가면 됩니다.
(보통 부팅 한 뒤 del이나 f10을 계속 누르면 접근이 되는 거 같습니다.)
boot 설정 메뉴에서 우선 부팅을 usb로 변경해주면 되는데 아마 각자의 환경마다 방법이 다를거라 및의 링크를 보고 설정하는 것을 추천합니다.
모니터에 미니 PC, 메인 PC 두 개의 HDMI 선을 연결하는 건 비효율적이겠죠!
이럴 때 SSH 연결을 많이 사용합니다.
# 미니 PC 리눅스 환경
# 패키지 업데이트
sudo apt update
# openssh-server 설치
sudo apt install openssh-server
# SSH 서비스 시작
sudo systemctl start ssh
# 시스템 부팅 시 자동 시작 설정
sudo systemctl enable ssh
# ssh 방화벽 허용
sudo ufw allow ssh
# 메인 PC
# 기본 RSA 키 생성
ssh-keygen -t rsa -b 4096
Enter file in which to save the key (/home/사용자/.ssh/id_rsa): 엔터 누르기
Enter passphrase (empty for no passphrase): 엔터 누르기
Enter same passphrase again: 엔터 누르기
# 키가 저장되었는 지 확인 [id_rsa (비공개 키) / id_rsa.pub (공개 키)]
ls -la ~/.ssh/
# ssh-copy-id로 공개키 복사
# 사용자 이름은 우분투 설치 시 설정한 이름 작성
# 원격서버주소는 아래 참고
ssh-copy-id 사용자이름@원격서버주소
# 연결 테스트
ssh 사용자이름@원격서버주소
# 키 저장되어 있는지 확인
cat ~/.ssh/authorized_keys
# 미니피씨 ssh config 설정 후 :wq로 저장
vim /etc/ssh/sshd_config
PermitRootLogin no # root 로그인 비활성화
PasswordAuthentication no # 비밀번호 인증 비활성화
PubkeyAuthentication yes # 키 기반 인증 활성화
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
# ssh 재시작
sudo systemctl restart ssh
# 메인 피씨로 돌아오기
exit
# 메인 피씨 config 설정 및 :wq로 저장
vim ~/.ssh/config
# 같은 와이파이를 공유하고 있는 경우
Host [서버 이름]
HostName [원격서버 ip]
User [미니피씨 우분투 사용자 이름]
Port 22
IdentityFile ~/.ssh/id_rsa
# 외부에서 접근하는 경우
Host [서버 이름 + external(원하는 거 아무거나 써도 됨)]
HostName [공유기의 공인 IP]
User [미니피씨 우분투 사용자 이름]
Port [포트 포워딩 포트 번호]
IdentityFile ~/.ssh/id_rsa
# 이후 ssh 접근 시 config에 적힌 서버 이름 활용하면 됨
ssh [서버 이름]
# 미니 피씨
# 원격 서버 주소 알아내는 방법
# 박스 쳐져있는 부분이 원격서버ip입니다
ip addr show
외부에서 접근하려면 포트 포워딩을 해야 합니다.
저는 KT라 KT 기준에서 설명드릴게요
KT 홈서버 링크
ID: ktuser
PW: homehub
맨 처음 보이는 화면에서의 IP주소가 공인IP입니다.
외부 포트 - 외부에서 접근할 때 쓸 포트 번호 (저는 2222~2222 적었습니다)
내부 IP 주소 - 미니 피씨의 내부 IP 적으면 됩니다.
내부 포트 - ssh 연결은 보통 22포트 씁니다.
이제 공인 IP로 접근해도 접속이 가능해집니다!
ssh [서버 이름 + external]
DNS는 많이 들어봤어도 DDNS를 처음 접하는 사람들도 있을 겁니다
AWS 같은 클라우드를 이용하면 IP가 변동되지 않지만,
홈 서버의 경우 변동될 수 있기 때문에 Dynamic DNS 설정이 필요합니다
다양한 서비스가 존재하지만 no-ip로 설정하는 방법을 공유하겠습니다.
회원 가입하고 Dashboard
- Hostname used
- Create Hostname
을 클릭하면 됩니다.
(KT DDNS 설정을 할 때 비밀번호에 특수문자가 기입안된다는 얘기가 있어서 저는 특수문자를 빼고 회원가입 했습니다)
Hostname - 아무거나
Domain - 아무거나
IPv4 Address - 내 공유기의 공인 IP
이렇게 본인의 Hostname이랑 IP가 잘 할당되었으면 됩니다
부가 기능에 가서 DDNS 설정을 활성화 하고 적용을 누르면 됩니다!
DDNS 서버 - noip-com
사용자 ID - noip 사이트 아이디
비밀번호 - noip 사이트 비밀번호(특수문자 기입이 안된다는 얘기가 있음)
URL - noip 발급받은 URL (Hostname에 적힌 사이트 이름+도메인 주소)
이제 미니 피씨로 돌아가서 no-ip client를 설치해야 하는데
정리가 엄청 잘된 링크가 있어서 그대로 따라하기만 하면 됩니다
아까 포트포워딩 이후 external로 접근했었는데 이제 DDNS 도메인을 통해서 접근이 가능해졌습니다
# 메인 피씨
vim ~/.ssh/config
Host today-is-first-ddns
HostName [no-ip에서 발급받은 URL]
User [미니 피씨 리눅스 사용자 이름]
Port [포트 포워딩한 외부 포트]
IdentityFile ~/.ssh/id_rsa
이제 DDNS도 적용된 것을 확인할 수 있을 것이다!
이렇게 내가 원하는 도메인을 가비아에서 살 수 있다!
1년에 500원인 도메인도 있으니 원하는 게 있다면 사자!
서비스 관리를 누르면 내가 구매한 도메인이 나온다
구매한 도메인의 관리
버튼을 누르자
우측 하단에 DNS 레코드 설정
- 설정
을 누르자
원하는 도메인의 설정
을 누르자
방금 구매한 도메인은 DNS 정보는 비어있는 게 정상이다
레코드 수정을 누르자
레코드 추가를 누르자
타입 : CNAME
호스트 : www
값/위치 : no-ip에서 발급받은 DDNS 주소 (반드시 마지막에 .을 삽입해야함!!!)
테스트를 해보자
# 메인 피시
# HostName을 가비아에서 구매한 도메인으로 바꾸면 된다.
vim ~/.ssh/config
Host today-is-first-gabia
HostName [가비아에서 구매한 도메인 ex) www.todayisfirst.com]
User [사용자 이름]
Port [포트 포워딩한 외부 포트]
IdentityFile ~/.ssh/id_rsa
작고 귀여운 나만의 홈서버가 완성되었다
전력도 적게 먹고 소리도 조용해서 맘에 든다!
t9 홈 서버로 돌리기엔 소음이 어떤가요? docker 올리고 이것 저것 가지고 놀아보려고 하네요.