개발

라즈베리파이 서버에 도커 컨테이너 환경으로 프로젝트를 배포하자

brobro332 2025. 4. 6. 14:32
반응형

서버 원격 접속

  • 우선 라즈베리파이 서버에 접속한다.
  • IP를 모를 경우 공유기 사이트에 접속하여 확인하면 된다.

 

JDK 설치

# 패키지 갱신
sudo apt update
sudo apt install -y wget gnupg software-properties-common

# 최신 OpenJDK 버전 갱신
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt update

# JDK 설치
sudo apt install -y openjdk-21-jdk

# 버전 확인
java -version
  • 참고로 라즈베리파이는 디스크로 SD 카드를 사용하는데, 읽기 / 쓰기 작업이 많아지면 SD카드의 수명이 줄어든다고 한다.
  • 외장하드가 읽기 / 쓰기 작업에 더 강하기 때문에 외장하드를 연결해서 쓰는게 더 좋다고 한다.
  • 원래 메모리를 마운트해서 메모리에서 읽기 / 쓰기 작업을 처리할까 생각했는데 데이터가 휘발되는 것이 맘에 안 들어 다시 수정했다.

 

공개키-개인키쌍 생성 및 공개키 등록

# 공개키-개인키쌍 생성
ssh-keygen -t rsa -b 4096 -f ~/.ssh/my_rpi_key

# ssh 원격 접속
ssh brobro332@라즈베리파이IP

# 공개키 등록
mkdir -p ~/.ssh
sudo vi ~/.ssh/authorized_keys
  • 라즈베리파이 OS 설치 시 접속을 위한 공개키는 주지만 개인키를 주지 않았다.
  • 그렇기 때문에 로컬 PC에서 위 명령어를 입력하여 공개키-개인키쌍을 생성하고, 공개키를 라즈베리파이 서버에 등록하자.
  • 개인키는 잃어버리지 말고 로컬 PC에 소중하게 보관해두자. 

 

도커, 도커 컴포즈 설치

# HTTPS용 인증서, 다운로드 도구, GPG 키 처리 도구 설치
sudo apt update
sudo apt install -y ca-certificates curl gnupg

# 도커 GPG 공개키 등록
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 저장소 등록
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu jammy stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 도커 설치
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 설치 확인
docker --version
docker compose version
  • 도커의 GPG 키 설정하여 APT가 해당 패키지가 신뢰할 수 있는 출처에서 왔는지 검증할 수 있도록 해야 함

 

sudo snap install docker          # version 27.5.1
sudo apt  install docker-compose  # version 1.29.2-6
  • docker-compose up -d 명령어가 안 먹어서 위 명령어로 버전을 업그레이드 하였다.

 

방화벽 설정

sudo apt update
sudo apt install ufw -y

sudo ufw allow 8080
sudo ufw allow 8081
sudo ufw allow 8082
sudo ufw allow 22

sudo ufw enable

 

도커 컴포즈 파일 및 프로젝트 파일 원격 전송

  • 본인은 파일질라를 통해 파일을 전송했다.
  • 간단한 과정이므로 생략한다.

 

도커 컴포즈 파일 실행 및 프로젝트 실행

# 도커 컴포즈 파일 백그라운드 실행
docker-compose up -d

# Jar 파일 백그라운드 실행 및 로그 파일 생성
nohub java -jar samsami-hub-0.0.1-SNAPSHOT.jar > app.log 2>&1 &

# 실행 중인 프로젝트 PID 확인
ps aux | grep samsami-hub-0.0.1-SNAPSHOT.jar

# 프로젝트 로그 확인
tail -f app.log

# 도커 컴포즈 실행 프로세스 및 볼륨 다운
docker-compose down -v

# 백그라운드에서 실행 중인 프로젝트 다운
kill -9 12244
  • 위 명령어에서 12244는 PID에 해당하는 숫자이다.

 

  • 외부에서 API 요청도 잘 되는 걸 확인할 수 있다.
  • 다만 프로젝트 내 CORS 설정이나 서버 방화벽 설정 등 보안 설정은 다시 해야 할 듯
  • 현재 원격 접속 → 도커 컴포즈 파일 전송 → Jar 파일 전송 → 실행 과정을 통해 배포하는데, 추후 해당 과정을 깃허브 액션을 통해 자동화해보려고 한다.
  • 일단 그동안 손도 못 댄 나머지 개인 프로젝트 화면부터 개발해야 한다. 😭

 

이미지 출처

Raspberry Pi

영국의 Raspberry Pi Foundation에서 교육용 프로젝트의 일환으로 개발된 저가형 싱글보드 컴퓨터 .

namu.wiki