Raspberry Pi에서 HTTPS 서버 구축기 (DuckDNS + Let's Encrypt + Nginx + Spring Boot)

Heeyoung Lee·2025년 4월 18일

라즈베리파이에 Spring Boot 프로젝트를 띄우고, 무료 도메인(DuckDNS)과 Let's Encrypt 인증서를 사용해 HTTPS 접속이 가능한 서버로 구축한 과정을 정리합니다.


✅ 사전 준비

  • Raspberry Pi (나는 라즈베리파이 3 사용)
  • 외부 접근 가능한 인터넷 환경 (공유기 설정 가능)
  • Spring Boot 프로젝트
  • Nginx 설치

1. DuckDNS 도메인 등록

https://www.duckdns.org에 접속해서 다음을 진행합니다:

  1. GitHub로 로그인
  2. 원하는 서브도메인 입력 (예: myproject)
  3. 외부 IP 입력 (자동 감지됨)
  4. 토큰 복사

예: myproject.duckdns.org


2. DuckDNS IP 자동 갱신 설정 (crontab)

DuckDNS는 유동 IP를 사용하므로 주기적으로 IP를 갱신해줘야 합니다.

crontab -e

아래 내용 추가 (5분마다 IP 갱신):

*/5 * * * * curl -s "https://www.duckdns.org/update?domains=myproject&token=YOUR_TOKEN&ip="

3. 공유기 포트 포워딩 설정

공유기 관리자 페이지에 접속하여 다음 포트를 열어줍니다:

외부 포트내부 IP (라즈베리파이 IP)내부 포트프로토콜
80192.168.x.x80TCP
443192.168.x.x443TCP

4. Certbot을 이용한 Let's Encrypt 인증서 발급

Nginx용 Certbot 설치:

sudo apt update
sudo apt install certbot python3-certbot-nginx

인증서 발급:

sudo certbot --nginx -d myproject.duckdns.org

성공 시 /etc/letsencrypt/live/myproject.duckdns.org/ 경로에 인증서가 저장됩니다.


5. Nginx 설정

Nginx 설정 파일 수정:

sudo nano /etc/nginx/sites-available/default

내용 예시:

server {
    listen 443 ssl;
    server_name myproject.duckdns.org;

    ssl_certificate /etc/letsencrypt/live/myproject.duckdns.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/myproject.duckdns.org/privkey.pem;

    location / {
        proxy_pass http://localhost:20080;  # Spring Boot 포트
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        client_max_body_size 10M;
    }
}

server {
    listen 80;
    server_name myproject.duckdns.org;
    return 301 https://$host$request_uri;
}

적용 및 테스트:

sudo nginx -t
sudo systemctl restart nginx

6. Spring Boot 포트 변경

Nginx와 겹치지 않게 Spring Boot 포트를 20080 등으로 변경합니다.
application.properties 또는 application.yml:

server.port=20080

7. 인증서 자동 갱신 설정

Let's Encrypt 인증서는 90일짜리입니다. 자동 갱신을 위해 crontab에 추가:

sudo crontab -e
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

🧪 테스트

브라우저에서 다음 주소로 접속:

https://myproject.duckdns.org

SSL 잠금 표시 🔒 가 뜨면 성공!


🎉 마무리하며

라즈베리파이에서도 충분히 HTTPS 서버를 구축할 수 있고, DuckDNS와 Let's Encrypt를 이용하면 완전 무료로 가능해요.

이 과정을 통해:

  • 고정 IP 없이 도메인 사용
  • HTTPS 암호화 통신 지원
  • 외부에서 내 서버에 접근 가능

작은 프로젝트나 개인 서비스 운영에 딱입니다.


0개의 댓글