[Habit] - Home-Server 구축기 1 : Raspberry Pi Setup

청주는사과아님·2025년 1월 13일

Home-Server

목록 보기
1/5
post-thumbnail

저번 최종 프로젝트를 진행할 때에는 AWS 를 이용해 서버를 배포하였습니다.

하지만 AWS 가 대게 그렇듯 RDS, VPC 와 관련해 종종 과금이 책정되었습니다.
뭐만 하면 돈 내라 그래...

때문에 프로젝트를 진행하면서도 항상 노심초사하게 과금을 신경써야 했고 이는 큰 불편함으로 느껴졌습니다.

그래서 이번에는 AWS 대신 저희 집에서 테스트, 배포할 수 있는 서버를 직접 만들어보고자 합니다.

구축하고자 하는 서버의 목표는 다음과 같습니다.

  1. Docker, Nginx, k8s 등 다양한 소프트웨어를 적용, 실습할 수 있어야 한다.
  2. 구축한 서버는 Local, Remote network 어디서든 접속 가능해야 한다. (SSH, Github Action CD 등)
  3. 서버는 추후 프로젝트 팀원들도 사용할 수 있어야 하므로, AWS IAM 처럼 새로운 유저 생성 후, 그 유저의 권한을 손쉽게 지정할 수 있어야 한다.
  4. 직접적인 IP 주소 대신 Domain Name 으로 서버에 접속 가능해야 한다.
  5. 서버 하드웨어 상태를 손쉽게 모니터링 할 수 있어야 한다. (CPU, RAM, DISK IO 등)

Raspberry Pi VS Synology NAS

우선 서버를 만들려면 그 하드웨어가 필요합니다. 저는 그 중 라즈베리 파이와 Synology NAS 를 후보군으로 골랐습니다.

사실 Synology 의 경우 30 만원 이상의 고가의 제품이며 storage server 용도의 제품입니다.
사실 대부분 DSM OS 값

그런데 집 구석을 뒤져보니 정말 오래전에 사뒀던 Synology NAS 를 발견해 후보군에 두었습니다.

이 둘의 정보를 나열해 보자면 다음과 같습니다.

Raspberry PiSynology NAS
제품Raspberry Pi 4 or 5DS214play
RAM4 - 8 GB2 GB
가격8 만원 내외집에 있으니까 공짜
하드웨어 확장성, 확장은 가능하나 라즈베리 보드에 맞는 제품을 구매해야 함., storage 확장성은 높으나 그 외의 확장성은 매우 낮음. (단종되서 부품 구하기 어려움)
소프트웨어 확장성, Raspbian OS 외에도 Ubuntu, Alpine 등의 linux 기반 OS 지원. 그래서 거의 뭐든지 가능., DS214play 는 Docker, Java 등의 소프트웨어를 지원하지 않음. Apache HTTP server, php 등 한정적으로 지원함.
장점높은 소프트웨어 확장성, 이전 사용한 경험 존재집에 있어서 공짜, Synology 가 NAS 도메인 주소를 제공해줌. (별도 도메인 구매 필요 X + 도메인 HTTPS 인증서 자동 생성 & 갱신), RAID 설정 • User group 등 DSM OS 가 제공하는 다양한 편의 기능 존재
단점8 + ɑ (HDMI 케이블, 쿨러, 도메인 주소 등) 만원의 초기 비용, 모든 서버 세팅을 직접 해야함.사용 경험 전무, DockerJava 를 못 씀.

Synology NAS 는 매력적인 장점이 많았습니다. 애초에 패키징된 제품이기 때문에 OS 에서 지원하는 기능들이 압도적이었고, 또한 각 NAS 제품 별 고유한 도메인 주소를 제공해 public 서버 구축에 매우 용이하였습니다.

하지만 이들을 압도하는 엄청난 단점이 존재했는데, 바로 소프트웨어 확장성입니다.

Synology NAS 가 사용하는 DSM OS 는 linux 커널 기반 OS 입니다. (Ubuntu 와 동일) 그래서 최근 발매된 Synology 제품은 여느 linux 기반 OS 가 그러하듯 높은 소프트웨어 확정성을 제공합니다.
Docker 사용할 수 있다는 애기...

하지만 집에서 발견한 DS214play 은 거의 10 년전 발매된 제품이고, 그 때문인지 Docker, Nginx 등 linux 에서 당연히 생각할 수 있는 소프트웨어를 사용할 수 없었습니다.
사실 Docker 만 쓸 수 있으면 다 되는건데... ㅠ

이 부분이 큰 단점으로 다가왔고 때문에 결국 Raspberry Pi 를 선택하였습니다.

  • 당근에서 산 Raspberry Pi 4B 8GB model



OS Selection

Raspberry Pi 는 다양한 OS 를 지원합니다.
라즈베리 파이 기본 OS 인 Raspbian, 무료 라이선스 기반의 Ubuntu, 아주 가벼운 Alpine 등을 제공합니다.

RaspbianUbuntuAlpine linux
RaspbianUbuntuAlpine linux

저는 이중 Ubuntu 를 선택했는데, 그 이유는 다음과 같습니다.

  1. Ubuntu 사용 경험이 많다.
  2. Ubuntu 이용자가 많아 문제 발생시 빠른 해결이 가능하다. (에러 검색하면 잘 나온다)
  3. LTS (Long Term Support) 버전이 존재해 안정적이다.
  4. 추후 Raspbian, Alpine 에 적합하지 않은 소프트웨어를 사용할 수도 있다. (k8s, Tensorflow 등)

Hardware Setup

이제 직접 만들어볼 차례입니다.

먼저 미리 구매해둔 쿨링 케이스에 라즈베리 파이를 잘 조립해 줍니다.

원래 라즈베리 파이는 Micro SD 카드로만 부팅 가능했지만, 이제는 SSD 또는 USB 를 통해서도 가능합니다.
라떼는 안됐었는데 말이야,,,

마침 집에 굴러다니던 SATA SSD 가 보여 storage 로 사용하기로 했습니다.

참고로 SSD 같은 외장 디스크를 사용할 시, 기본 라즈베리 파이 전원만으로는 전력이 부족해 부팅에 실패할 수 있습니다. 옛날에 직접 격어본...

그래서 저는 유전원 USB 허브를 통해 SSD 전력을 충당했습니다.


OS Setup

하드웨어 세팅을 마쳤으니 이제 SSD 에 OS 이미지를 넣을 차례입니다.

우리가 직접 Boot image 를 넣어 파티션을 짤 수도 있지만, 라즈베리 파이의 경우 Raspberry Pi Imager 를 지원합니다.

Raspberry Pi Imager

Imager 를 통해 라즈베리 파이 모델별 OS 를 선택할 수 있고, 귀찮은 Boot 파티션도 알아서 진행해 줍니다.

저는 UbuntuServer 22.04.01 LTS 64-bit 을 선택해 진행하였습니다.

Ubuntu 24.04 LTS ?

참고로 현 Ubuntu 중 가장 최신 LTS 는 24.04.01 버전입니다.

그래서 설치해 보려 하였으나 아래 그림처럼 부트에 실패하는 것을 확인했습니다.


(모두 OK 되며 boot 되야 정상)

찾아보니 24.04.01 이미지를 라즈베리 파이의 USB port 를 통해 boot 하는 경우 위 에러가 발생하는 것을 알게 되었습니다. [1]

좀 더 시간을 들이면 24.04 LTS 를 사용할 수 있을 것 같았지만 22.04 버전도 충분히 유용하고, OS 선택에 더이상 시간을 소비하고 싶지 않아 22.04 LTS 로 설치하였습니다.

Raspberry Pi Imager 를 통해 라즈베리 파이 이름, root 계정 설정, ssh 를 설정할 수 있지만, 이들은 매우 간단해 설명은 생략하겠습니다.

Ubuntu 이미지를 SSD 에 넣고 라즈베리 파이에 연결, 전원까지 연결하면 아래처럼 자동으로 boot 되기 시작합니다.

저 같은 경우 OS 설치에 약 5 분 정도 걸린 것 같습니다.


SSH On Local Network

OS 설치가 완료되었으니 SSH 설정을 진행할 차례입니다.

SSH 는 네트워크 프로토콜의 일종으로, 로컬 또는 원격 네트워크에 존재하는 서버 접속에 많이 사용됩니다. [2]

물론 라즈베리 파이에 직접 모니터, 키보드 연결 후 사용할 순 있지만, 저는 편하게 데스크탑에서 작업하고 싶어 SSH 를 구성하기로 했습니다.
불편하게 누가 그래요 그죠?

앞서 말했듯 SSH 자체는 local, remote 네트워크에 상관 없는 프로토콜입니다.

다만 remote 네트워크 접속은 라즈베리 파이 <--> Router <--> Public IP Address 간 Port forwarding 이 필요하므로, 일단 local 네트워크에서만 접속 가능토록 하겠습니다.

SSH 접속을 확인하기 위해선 크게 2 가지가 필요합니다.

  • openssh-client (접속 기기에서) & openssh-server (라즈베리파이에서)
  • 서버 (라즈베리 파이) IP 주소

openssh-client, openssh-server 의 경우 간단히 아래 명령어로 apt 저장소에서 가져올 수 있습니다.

$ sudo apt install ssh

IP 주소의 경우 확인할 수 있는 방법이 2 가지인데, 첫째는 ifconfig 명령어를 통해서 입니다.

$ sudo ifconfig

# ifconfig 명령어가 없을시 apt 에서 다운로드
$ sudo apt install net-tools

두번째 방법은 Router 관리자 페이지에서 기기별 할당된 IP 주소를 확인하는 방법입니다.

이 경우 사용하는 공유기에 따라 확인하는 방법이 다양합니다.

저희 집의 경우 SK Telecom 공유기를 사용하고 있습니다.
관리자 페이지 접속 방법을 검색한 후, 조금 뒤적여 보니 아래처럼 라즈베리 파이에 할당된 IP 주소를 확인할 수 있었습니다.

참고로 위 IP 주소 192.168.35. ... 는 router 가 라즈베리에게 부여한 사설 IP 주소로 (Private IP Address), 로컬 네트워크가 아닌 이상 위 주소로 라즈베리 파이에 접속은 불가능합니다.

언젠가 IP 주소도 전부 공부해서 정리해야지...

하지만 우리는 일단 로컬 네트워크에서 접속하는 것이므로 큰 상관이 없습니다.

이제 SSH 접속을 위한 모든 준비물이 갖춰졌으니 직접 테스트할 차례입니다.

openssh-client 가 설치된 기기에서 아래 형식대로 명령어를 입력해 줍니다.

$ ssh [라즈베리 파이 계정 이름]@[사설 IP 주소]

EX)

$ ssh ubuntu-account-name@192.168.35.109

참고로 ssh 포트 설정은 기본 22 로, 위 명령어는 아래의 것과 동치합니다.

$ ssh -p 22 ubuntu-account-name@192.168.35.109

명령어 입력 후, 계정 비밀번호를 입력하면 아래처럼 성공적으로 연결이 완료됩니다.


Summary

지금까지 자체 홈 서버를 위해 라즈베리 파이 설정을 진행하였습니다.

다음에는 Port forwarding 을 통한 원격 네트워크 접속, User group 설정 을 진행할 것 같으며, 앞으로 공부하다 시간날 때 짬짬이 서버 구축을 진행할 것 같습니다.

긴 글 읽어주셔서 감사하고 다음 글로 뵙겠습니다.

오늘 한거

  1. 라즈베리 파이 기본 setup (Hardware, OS)
  2. Local Network SSH 접속 확인
  3. SK Telecom 관리자 페이지 구경

앞으로 남은거

  1. Docker, Nginx 등 설치
  2. Remote Network 접속 활성화
  3. User group setup
  4. 도메인 통해 접속 활성화
  5. 모니터링 추가

Reference

profile
나 같은게... 취준?!

0개의 댓글