jujuwon
시크릿주주
jujuwon
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • 🔠 프로그래밍언어 (35)
      • ☕️ Java (19)
      • 🐠 Python (15)
      • 🍠 Kotlin (1)
    • 🔙 Backend (16)
      • 🌿 Springboot (12)
      • 🐳 Docker (1)
      • ☁️ AWS (3)
    • 💼 CS (12)
      • 📶 Network (12)
    • 🕹 알고리즘 (14)
      • 📑 스터디 (2)
      • 💁🏻‍♂️ 백준 (9)
      • 👨🏼‍🔬 프로그래머스 (3)
    • 📚 Book (8)
      • 🔎 오브젝트 (4)
      • 🧪 TDD (2)
      • 📜 논문 (2)
    • 🔐 보안 (7)
      • 👾 Pwnable (7)
    • 📝 회고 (4)
    • 🧩 etc. (10)
      • ⚠️ issue (2)
      • 💡 꿀팁 (7)
      • ✏️ 끄적 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.
jujuwon
🧩 etc./💡 꿀팁

온프레미스 서버 구축기 (feat: 라즈베리파이4 & Ubuntu22.04)

온프레미스 서버 구축기 (feat: 라즈베리파이4 & Ubuntu22.04)
🧩 etc./💡 꿀팁

온프레미스 서버 구축기 (feat: 라즈베리파이4 & Ubuntu22.04)

2023. 7. 26. 00:28
반응형

기존에 사용하던 AWS 프리티어가 끝났습니다. 소마할 때는 서버비를 줘서 좋았는데, 사이드를 하면서 사비로 클라우드 비용을 충당하기는 부담이 됐습니다. 그래서 결국 마지못해 기쁜 마음으로 저만의 서버를 구축하기로 했습니다. 캡디 자재비로 라즈베리파이 3개를 대기시켜놨기 때문에 걱정은 하나도 되지 않았습니다 ! 라즈베리파이를 이용해서 개인 서버를 만들고 싶거나, 이것저것 놀아보고 싶은 사람들. 그리고 혹시 미래의 나를 위해 과정을 기록해두었습니다.

그럼 바로 나만의 play ground 를 만들어봅시다 🙌

목표

원래는 라베파가 세개 있어서 공부 겸 쿠버네티스를 적용해보려고 했었는데 서버가 없어서 클라이언트 개발자들의 작업이 멈춘 상태라 일단 개발 테스트용 컨테이너 먼저 올리기로 했습니다. 요약하자면 라베파에 API 서버와 DB 를 도커 컨테이너로 올리고, Git develop 브랜치 merge 시에 배포 자동화가 되는 것까지 세팅하는 것이 목표입니다. DB 를 다른 라베파로 분리할 수도 있겠지만 어차피 노드가 하나라 다중화가 되지 않기 때문에 라베파 몇개를 이용한 구조에서 SPOF 는 피하기 어려울 것 같습니다 .. 우선 개발환경을 세팅하고 장애 복구나 다중화는 출시할 때 클라우드로 다시 마이그레이션하면서 생각해봅시다 ! 절대 미루는 거 아님

Ubuntu 이미지 파일 SD 카드 굽기

SD 카드 포맷

맥 기준 [디스크 유틸리티] 에서 SD 카드를 선택하고 [지우기] 해주면 됩니다. (포맷은 FAT32 로 !)

Ubuntu 부팅 이미지 설치

Install Ubuntu on a Raspberry Pi | Ubuntu

 

Install Ubuntu on a Raspberry Pi | Ubuntu

Ubuntu is an open-source operating system for cross-platform development, there's no better place to get started than with Ubuntu on a Raspberry Pi

ubuntu.com

부팅 이미지를 SD 에 구워주겠습니다. 저는 Ubuntu Server 22.04.2 LTS 로 설치했습니다.

부팅 이미지 굽기

이미지 굽는 건 아래 프로그램을 이용했습니다.

balenaEtcher - Flash OS images to SD cards & USB drives

 

balenaEtcher - Flash OS images to SD cards & USB drives

A cross-platform tool to flash OS images onto SD cards and USB drives safely and easily. Free and open source for makers around the world.

etcher.balena.io

직관적인 UI 따라 이미지 굽기를 진행하시면 됩니다.

  • balenaEtcher 앱 실행
  • Flash from file 에서 다운받은 Ubuntu Server 이미지 선택
  • Select target 에서 설치할 SD card 선택
  • Flash 클릭

라즈베리파이 세팅

부팅

성공적으로 SD Card 에 이미지가 구워졌다면 이제 라즈베리파이에 SD Card 를 꽂고 부팅해봅시다. Ubuntu Server 로 설치했기 때문에 터미널에 글자들이 나오는데 처음 로그인 화면이 뜨고 5분 정도 기다린 후, 다시 로그인 화면이 떴을 때 로그인 정보를 입력해야 합니다. 초기 id 와 비밀번호는 ubuntu / ubuntu 입니다.

네트워크 설정

서버로 사용하기 위해서 포트포워딩과 고정 ip 설정이 필요합니다. 아래 경로로 들어가서 파일을 확인해봅시다. 파일 이름은 조금씩 다를 수 있습니다.

cd /etc/netplan
sudo vi 50-cloud-init.yaml

아마 파일을 보면 아래와 같은 내용이 있습니다.

network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2

이 파일을 수정해줍시다. 아 수정하기 전에 항상 백업하는 습관을 들입시다 !

sudo cp 50-cloud-init.yaml 50-cloud-init.yaml.backup

YAML 파일이라 들여쓰기를 주의해야 합니다. 랜선 세팅은 ethernets 에, 무선 세팅은 wifis 에 작성하면 됩니다. 저는 이더넷 랜선은 고정 IP, 와이파이는 DHCP 설정으로 사용하였습니다. 우선 고정 ip 를 설정하려면 아래와 같이 파일을 수정해주면 됩니다.

network:
    ethernets:
        eth0:
            dhcp4: false
            addresses:
                - 192.168.219.151/24
            routes:
                - to: 0.0.0.0/0
                    via: 192.168.219.1
            nameservers:
                addresses:
                    - 61.41.153.2
                    - 1.214.68.2
            optional: true
    version: 2

    wifis:
        wlan0:
            access-points:
                "[wifi 이름]":
                    password: "[wifi 비밀번호]"
            dhcp4: true
            optional: true

addresses 부분에 사용하고 싶은 고정 ip를, nameservers 의 addresses 부분에 dns 정보를 적어줍니다. 게이트웨이 정보는 routes 밑에 적어줍시다. (Ubuntu22 이전 버전에는 gateway4 필드.) 이제 해당 파일을 다시 적용해줍니다. wifis 에는 현재 접속할 와이파이의 이름과 비밀번호가 필요합니다. 위에서 [wifi 이름] 과 [wifi 비밀번호] 부분을 채워주면 됩니다. 파일을 저장 후, netplan generate 명령어로 들여쓰기가 잘못되거나 하는 문법 오류를 확인할 수 있습니다.

sudo netplan generate
sudo netplan apply

연결이 잘 되었는지 네트워크를 확인해봅시다. ifconfig 가 안 먹힌다면 apt install net-tools !

SSH 연결

이제 라즈베리파이에 직접 모니터 키보드 붙여서 그만 작업하자 ..! 일단 라즈베리파이에 ssh 세팅을 합시다.

sudo apt install openssh-server
sudo apt install ssh
sudo ssh restart

openssh-server 는 아마 우분투 내에 기본적으로 깔려있을 겁니다. (없으면 설치) ssh 클라이언트도 깔고 service 를 재시작해주고, ssh 에서 22번 포트를 사용하니 방화벽도 열어줍니다.

sudo ufw enable
sudo ufw allow 22

이제 같은 로컬 네트워크에 있는 노트북에서 ssh 로 접속이 가능합니다. 접속할 때마다 시스템 비밀번호를 입력해야 하는데, ssh key 를 이용해서 이것도 편하게 로그인할 수 있습니다. 만들어둔 키가 없다면 ssh-keygen 명령어로 키를 하나 만들어줍시다. 키를 만들고 나서 Public key 를 서버로 넘겨주기만 하면 끝 !

ssh-copy-id [username]@[remote_host]

이제 모니터랑 키보드 꽂았다 뺐다 안 해도 된답니다.. 🫠

Timezone 설정

서버의 시간대를 한국시간대로 변경하겠습니다. 이 부분은 필수는 아니고, UTC 로 사용해야 하는 이유가 있다면 건너뛰어도 됩니다. timedatectl 을 입력해서 Local time 이 KST 가 아니라면 아래 명령어로 바꿔줍니다.

timedatectl set-timezone Asia/Seoul

공유기 포트포워딩

이제 포트포워딩을 해야 하는데, 먼저 공유기 설정을 해야 합니다. 공유기 벤더와 모델에 따라 좀 다를 수 있는데 공유기 접속 주소는 .. 검색하면 바로 나옵니다. 저는 LG U+ 공유기였고 접속 후 바로 API 로 사용할 포트와 SSH 접속용 포트를 포워딩해줬습니다.

Docker & docker-compose 설치

이전에 클라우드에서 어플리케이션을 docker compose 를 이용해서 배포했었습니다. docker 를 이용하면 세팅도 편리하고 환경도 격리하고 등등 장점이 많습니다. 아무튼 바로 설치해보겠습니다. 일일이 설치하는 건 귀찮으니 쉘 스크립트로 만들어뒀습니다.

https://github.com/NaJuDoRyeong/mineme-server/blob/main/init.sh

그대로 스크립트 파일을 만들고 실행만 하면 됩니다. (chmod 로 실행 권한 주기)

환경 세팅 완료 ! 이제 라베파로 서비스를 돌려봅시다 🙋‍♂️

728x90
반응형
저작자표시 (새창열림)
  • 목표
  • Ubuntu 이미지 파일 SD 카드 굽기
  • SD 카드 포맷
  • Ubuntu 부팅 이미지 설치
  • 부팅 이미지 굽기
  • 라즈베리파이 세팅
  • 부팅
  • 네트워크 설정
  • SSH 연결
  • Timezone 설정
  • 공유기 포트포워딩
  • Docker & docker-compose 설치
'🧩 etc./💡 꿀팁' 카테고리의 다른 글
  • 우리팀의 코딩 컨벤션 정하기
  • Mac :: 터미널에 이모지 나타내기
  • Github :: Git LFS 로 Large Size 파일 관리
  • IntelliJ :: Mac용 단축키 모음
jujuwon
jujuwon

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.