라즈베리파이(Raspberry Pi)란?
라즈베리파이(Raspberry Pi)는 영국의 라즈베리파이 재단에서 개발한 소형 싱글보드 컴퓨터(SBC)입니다. 저렴한 가격과 저전력 소비, 다양한 확장성과 높은 활용성 덕분에 교육, IoT, 홈서버, 로봇 등 다양한 용도로 사용됩니다.
1. 라즈베리파이 모델 및 사양
(1) 최신 및 주요 모델
라즈베리파이에는 여러 모델이 있으며, 성능과 용도에 따라 구분됩니다.
모델 | CPU | RAM | 저장장치 | 네트워크 | USB | 기타 |
---|---|---|---|---|---|---|
Raspberry Pi 5 | Cortex-A76 2.4GHz (쿼드코어) | 4GB/8GB LPDDR4X | microSD (PCIe 2.0 지원) | 2.5GbE 이더넷, Wi-Fi 6, BT 5.0 | USB 3.0 x2, USB 2.0 x2 | PCIe Gen2, 40핀 GPIO |
Raspberry Pi 4 | Cortex-A72 1.5GHz (쿼드코어) | 2GB/4GB/8GB LPDDR4 | microSD | 기가비트 이더넷, Wi-Fi 5, BT 5.0 | USB 3.0 x2, USB 2.0 x2 | 40핀 GPIO, 듀얼 4K 출력 |
Raspberry Pi 3 B+ | Cortex-A53 1.4GHz (쿼드코어) | 1GB LPDDR2 | microSD | 기가비트 이더넷, Wi-Fi 4, BT 4.2 | USB 2.0 x4 | 40핀 GPIO |
Raspberry Pi Zero 2 W | Cortex-A53 1GHz (쿼드코어) | 512MB LPDDR2 | microSD | Wi-Fi 4, BT 4.2 | USB 2.0 (OTG) | 초소형 폼팩터, 40핀 GPIO |
2. 우분투 설치 가능 여부
라즈베리파이에서는 공식적으로 Ubuntu Server 및 Ubuntu Desktop을 지원합니다.
특히, Raspberry Pi 4 / 5 이상의 모델에서 Ubuntu 22.04 LTS 이상을 원활하게 사용할 수 있습니다.
(1) 설치 가능한 우분투 버전
- Ubuntu Server 22.04 / 20.04 LTS (CLI 환경, 가벼움)
- Ubuntu Desktop 22.04 / 23.10 (GUI 포함, 성능 요구됨)
- Ubuntu Core (IoT 용)
(2) 우분투 설치 방법
① 설치 준비
- microSD 카드(최소 16GB, 권장 32GB)
- Raspberry Pi Imager (공식 설치 도구)
- 라즈베리파이 및 전원 어댑터
② 설치 과정
- Raspberry Pi Imager 다운로드 및 실행또는 공식 홈페이지에서 다운로드 가능
sudo apt update && sudo apt install rpi-imager -y
- 운영체제 선택
Choose OS
>Other general purpose OS
>Ubuntu
Ubuntu Server 22.04 LTS (64-bit)
선택
- 저장 장치 선택
Choose Storage
>microSD 카드
선택
- 설정 및 굽기
Write
버튼을 눌러 Ubuntu 설치 이미지를 microSD에 기록- 완료 후 SD 카드를 라즈베리파이에 삽입하고 부팅
- 초기 설정
- SSH 접속 가능:
ssh ubuntu@<라즈베리파이 IP>
- 기본 계정:
ubuntu
- 초기 비밀번호:
ubuntu
(처음 로그인 시 비밀번호 변경 필요)
- SSH 접속 가능:
3. 도커(Docker) 구동 가능 여부
라즈베리파이는 ARM 아키텍처를 사용하므로 ARM용 Docker를 설치해야 합니다.
특히, Raspberry Pi 3, 4, 5에서는 Docker를 원활하게 사용할 수 있습니다.
(1) Docker 설치
- 패키지 업데이트
sudo apt update && sudo apt upgrade -y
- 필요 패키지 설치
sudo apt install -y \ apt-transport-https ca-certificates curl software-properties-common
- Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Docker 리포지토리 추가
echo \ "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Docker 패키지 설치
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
- Docker 서비스 시작 및 활성화
sudo systemctl enable --now docker
- 사용자를 Docker 그룹에 추가 (선택)
sudo usermod -aG docker $USER newgrp docker
- 설치 확인
docker version docker run hello-world
4. Docker Compose 설치
Docker Compose는 여러 컨테이너를 한꺼번에 관리하는 도구입니다.
- Docker Compose 바이너리 다운로드
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose
- 버전 확인
docker-compose --version
5. Docker 컨테이너 실행 예제
(1) Nginx 컨테이너 실행
docker run -d --name webserver -p 80:80 nginx
-d
: 백그라운드 실행--name webserver
: 컨테이너 이름 설정-p 80:80
: 호스트 포트 80 → 컨테이너 포트 80 매핑
(2) Docker Compose로 여러 서비스 실행
docker-compose.yml
파일 생성
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
컨테이너 실행
docker-compose up -d
기능 | 가능 여부 |
---|---|
Ubuntu 지원 | O (Ubuntu Server 및 Desktop 가능) |
Docker 지원 | O (ARM64 기반 Docker 지원) |
Kubernetes (K3s) | O (경량 Kubernetes 배포 가능) |
IoT / 서버 활용 | O (홈 서버, AI, 네트워크 장비 등 가능) |
라즈베리파이는 작은 크기지만 강력한 성능을 제공하며, Ubuntu와 Docker를 통해 다양한 서버 및 클라우드 환경을 구축할 수 있습니다. 특히, 최신 Raspberry Pi 5는 성능이 대폭 향상되어 홈서버나 AI, 클러스터 환경에서도 활용할 수 있습니다.
라즈베리파이(Raspberry Pi)에서 CI/CD 환경을 구축하는 방법으로, Docker와 Jenkins를 사용하여 자동 빌드 및 배포 환경을 설정합니다.
1. 사전 준비
필요한 장비 및 환경
- 라즈베리파이 4 (또는 3) + microSD 카드 (32GB 이상 권장)
- 라즈비안(Raspberry Pi OS, 64-bit 권장) 또는 Ubuntu 22.04 (ARM64)
- 인터넷 연결 (유선 또는 Wi-Fi)
- SSH 접속 활성화 (
raspi-config
에서 설정 가능)
필요한 패키지 설치
sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl wget
2. Docker 설치 및 설정
Jenkins를 컨테이너에서 실행할 것이므로 Docker를 먼저 설치합니다.
Docker 설치 (ARM64 지원 버전)
curl -fsSL https://get.docker.com | sudo bash
설치가 완료되면, Docker 데몬을 실행 및 활성화합니다.
sudo systemctl enable --now docker
현재 사용자(pi
또는 ubuntu
)를 docker
그룹에 추가하여 root 없이 사용할 수 있도록 설정합니다.
sudo usermod -aG docker $USER
newgrp docker
Docker 실행 테스트
docker run hello-world
정상적으로 실행되면 Docker가 정상적으로 설치된 것입니다.
3. Docker Compose 설치
Jenkins와 함께 여러 컨테이너를 실행하기 위해 docker-compose
를 설치합니다.
sudo apt install -y python3-pip
sudo pip3 install docker-compose
버전 확인
docker-compose --version
4. Jenkins 설치 및 실행 (Docker 기반)
Jenkins는 ARM 기반의 라즈베리파이에서도 실행할 수 있도록 공식 Docker 이미지를 제공합니다.
Jenkins Docker 컨테이너 실행
docker run -d \
--name jenkins \
--restart unless-stopped \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
이제 Jenkins가 8080 포트에서 실행됩니다.
Jenkins 초기 설정
- 웹 브라우저에서
http://<라즈베리파이 IP>:8080
접속 - 초기 관리자 비밀번호 확인
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 플러그인 설치 후 관리자 계정 생성
5. CI/CD 파이프라인 구성
Git & Docker 연동
라즈베리파이에서 코드 빌드 및 배포를 자동화하기 위해 Git과 Docker를 연동합니다.
- Jenkins에서 Git 플러그인 설치
Manage Jenkins
→Manage Plugins
→Available
에서Git Plugin
설치
- Git 저장소 클론
git clone https://github.com/your-repo/project.git
- Jenkins Pipeline 예제 (Jenkinsfile)
Jenkinsfile
을 프로젝트 루트에 추가pipeline { agent any stages { stage('Clone Repository') { steps { git url: 'https://github.com/your-repo/project.git' } } stage('Build Docker Image') { steps { sh ''' docker build \ --tag my-app:latest \ . ''' } } stage('Deploy Docker Container') { steps { sh ''' docker run -d \ --name my-app \ --publish 80:80 \ my-app:latest ''' } } } }
- Jenkins에서 Pipeline Job 생성
New Item
→Pipeline
선택Pipeline script from SCM
→Git
→ 저장소 URL 입력
6. CI/CD 테스트
- Jenkins에서
Build Now
실행 docker ps
명령어로 컨테이너 확인- 웹 브라우저에서
http://<라즈베리파이 IP>
접속하여 배포된 애플리케이션 확인
7. 자동화 개선 (Webhook & GitHub Actions 연동)
GitHub이나 GitLab에서 코드 변경 시 자동으로 Jenkins 빌드가 실행되도록 Webhook을 설정할 수 있습니다.
- GitHub:
Settings
→Webhooks
→Payload URL
에http://<Jenkins IP>:8080/github-webhook/
- GitLab:
Integrations
에서Jenkins CI
활성화
8. 보안 및 최적화
- Jenkins 보안 강화: 기본 관리자 비밀번호 변경, SSH 키 인증 설정
- 리소스 절약: 컨테이너 리소스 제한 (
--memory 512m
등) - 자동 정리:
docker system prune -af
로 불필요한 이미지/컨테이너 정리
이제 라즈베리파이에서 Docker와 Jenkins를 활용한 CI/CD 환경을 구축했습니다. 라즈베리파이를 활용하여 CI/CD 환경을 구축할 때 점검하고 관리해야 할 보안관점의 가이드 및 점검포인트입니다.
라즈베리파이 기반 CI/CD 환경의 보안 가이드 및 점검포인트
1. 기본적인 보안 설정 점검
- 기본 계정과 비밀번호 변경 필수
- 설치 직후 기본 계정(
ubuntu
또는pi
)의 비밀번호를 강력한 비밀번호로 즉시 변경할 것 - SSH 접속 시 root 직접 로그인 금지(
PermitRootLogin no
설정)
passwd ubuntu sudo nano /etc/ssh/sshd_config # PermitRootLogin no 설정 추가 sudo systemctl restart sshd
- 설치 직후 기본 계정(
- 불필요한 서비스 비활성화
- 불필요한 서비스, 포트 열리지 않도록 정기적으로 점검 및 관리
netstat -tunlp systemctl list-unit-files --type=service
- 불필요한 서비스, 포트 열리지 않도록 정기적으로 점검 및 관리
2. OS 및 패키지 보안 업데이트
- 보안 업데이트 자동화 설정 권장
- 특히 CVE를 기준으로 취약점 점검 및 패치 진행
sudo apt install -y unattended-upgrades sudo dpkg-reconfigure unattended-upgrades
- 특히 CVE를 기준으로 취약점 점검 및 패치 진행
3. Docker 보안 관리
- Docker 데몬 접근 제한 및 관리
- Docker 데몬을 외부에 노출시키지 말고 로컬 Unix 소켓 사용
- TCP로 Docker Remote API를 사용하는 경우 반드시 TLS 인증 구성
- Docker 컨테이너 최소 권한 부여
- 컨테이너 실행 시
--privileged
옵션 사용 금지 (필요한 경우만 최소화) - 컨테이너 리소스 제한 설정 필수 (DoS 공격 방지)
docker run -d --memory=512m --cpus="1.0" --restart unless-stopped jenkins/jenkins:lts
- 컨테이너 실행 시
- Docker 이미지 보안 점검
- 신뢰할 수 있는 공식 이미지 또는 인증된 이미지만 사용할 것
- 이미지 스캔 도구(예: Clair, Trivy)를 이용한 취약점 점검 권장
trivy image jenkins/jenkins:lts
4. Jenkins 보안 관리
- 관리자 계정 보안
- 초기 관리자 비밀번호 즉시 변경
- Jenkins 관리 페이지 접근 IP 제한(방화벽 활용)
sudo ufw allow from <보안팀 IP대역> to any port 8080 sudo ufw deny 8080
- Jenkins 플러그인 및 관리 페이지 접근 통제
- 플러그인 설치는 필수 플러그인만으로 최소화하여 관리
- 관리 페이지의 URL이 외부에 노출되지 않도록 주기적으로 접근로그 점검
- 빌드 환경 격리 및 인증 관리
- 빌드 시 사용하는 인증정보는 Jenkins Credential로 보호
- Git 저장소 접근 시 개인토큰이나 SSH 키 방식으로 접근 제한(비밀번호 방식 지양)
5. Git 및 CI/CD 파이프라인 보안
- Git 저장소 접근통제
- 저장소 접근권한을 최소화하고, 팀 내부에서만 접근 가능하도록 설정
- 브랜치 보호(Protected Branch) 설정, 코드 병합은 승인된 인원만 수행
- 파이프라인 코드 보안
- Jenkinsfile은 반드시 권한 있는 사용자만 수정하도록 권한 관리
- 파이프라인 스크립트 내 민감한 정보 포함 금지(환경변수 또는 Jenkins Credential 활용)
6. 네트워크 보안 관리
- 방화벽 및 네트워크 접근 제한
- Docker 컨테이너 외부 접근 포트 최소화(필요한 서비스 포트만 허용)
- Jenkins 관리 콘솔, Docker Remote API 등 관리 인터페이스는 사내망에서만 접근 허용
sudo ufw default deny incoming sudo ufw allow ssh sudo ufw allow from 192.168.10.0/24 to any port 8080 sudo ufw enable
7. 로깅 및 모니터링
- 로그 수집 및 분석 체계 구성
- Jenkins와 Docker 컨테이너 로그를 별도 중앙 로그 서버 또는 SIEM으로 수집
- 이상행위 탐지를 위한 모니터링 구성(Zabbix, Prometheus 등 활용 권장)
- 정기적 감사 로그 점검
- SSH 접근 기록, Docker 컨테이너 실행 이력, Jenkins Job 실행 기록 등 주기적 점검
8. 주기적 보안 점검 및 침해사고 대응 훈련
- 정기 보안 진단 수행
- 자체 점검 도구(OSQuery, Wazuh, Lynis 등)를 활용하여 정기적 취약점 진단 수행
lynis audit system
- 자체 점검 도구(OSQuery, Wazuh, Lynis 등)를 활용하여 정기적 취약점 진단 수행
- 침해사고 대응 절차 준비
- Docker 컨테이너 해킹, Jenkins 계정 탈취 등 침해 시나리오 설정 및 대응절차 마련
- 정기적으로 침해대응 훈련 수행
요약 점검표 (Check List)
항목 | 주요 점검 포인트 |
---|---|
기본 보안 설정 | 기본 계정 비밀번호 변경, SSH 루트 접근 금지 |
OS 및 패키지 관리 | 자동 보안 업데이트 활성화 |
Docker 보안 | 컨테이너 최소 권한, 이미지 보안 스캔 수행 |
Jenkins 관리 | 관리자 계정 보호, 플러그인 최소화 및 접근통제 |
Git 및 CI/CD | 브랜치 보호, 파이프라인 보안 관리 |
네트워크 보안 | 방화벽 설정, 접근 제한 |
로깅 및 모니터링 | 중앙 로그 수집 및 이상행위 모니터링 |
보안 진단 및 침해대응 | 정기 보안점검, 침해대응 절차 마련 및 훈련 |
위 가이드를 바탕으로 라즈베리파이를 활용한 CI/CD 환경에서 철저한 보안 관리 및 대응 체계를 갖추시기 바랍니다.
댓글