카테고리 없음

간단한 JSON Filter 서비스 배포하기 (2) - Nginx, No IP, Let's Encrypt를 이용한 Web Server 배포

뽀글뽀글 개발자 2024. 8. 28. 11:57

정적 파일(html, css, js, img)을 배포할 것이기 때문에 Nginx 서버에서 바로 정적 파일을 응답할 것이고, 1개의 무료 DDNS 를 제공하는 No IP, https 통신을 위한 SSL 설정으로 비영리 단체 Let's Encrypt에서 제공하는 무료 SSL 인증서를 사용할 것이다.

배포 과정이 생각보다 간단하기 때문에 10분이면 배포할 수 있다.

 

Nginx 설치

# 설치
sudo apt update
sudo apt install nginx

# 실행 상태 확인
sudo systemctl status nginx

# 설정 파일에 아래 내용이 있는지 확인
sudo vi /etc/nginx/nginx.conf
include /etc/nginx/sites-enabled/*;

# nginx를 실행하는 계정이 nginx인지 확인
ps -eo user,comm | grep nginx

 

 

No IP DDNS 생성

https://www.noip.com/

회원가입하고 Create Hostname에서 도메인 이름과 IP만 입력하면 된다.

 

 

 

Nginx에 DNS 연결

Web Server

sudo vi /etc/nginx/sites-available/servicename.conf

# 아래 내용 작성
server {
    listen 80;
    server_name servicename.example.com; # 생성한 DNS 주소

    root /var/www/servicename;  # HTML 파일이 위치한 디렉토리
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

# WAS 인 경우 아래 내용을 작성
server {
    listen 80;
    server_name servicename.example.com;  # 생성한 DNS 주소

    location / {
        proxy_pass http://localhost:8080;  # Spring Boot 애플리케이션의 주소
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}


# nginx 정적 파일 경로 = /var/www 
# 서비스 이름으로 디렉터리를 생성하고 그 하위에 정적 파일 위치
sudo mkdir /var/www/servicename

# 폴더에 정적 파일 업로드
git clone or scp

 

# 심볼릭 링크 생성
sudo ln -s /etc/nginx/sites-available/servicename.conf /etc/nginx/sites-enabled/
sudo nginx -t       # 설정 파일 문법 검사
sudo systemctl reload nginx  # 설정 다시 로드

 


SSL

# Let's Encrypt를 사용하기 위해 certbot 다운로드 후 실행 
sudo apt-get update
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx

# 이메일 입력 후 모두 동의하고, 진행이 끝나면 
# 입력했던 이메일에서 메일 확인 후 링크로 들어가서 본인 확인을 해줘야한다.
# 적용
sudo systemctl reload nginx
sudo systemctl restart nginx

# 자동갱신 확인
sudo systemctl status certbot.timer

# 잘 적용되었다면 /etc/nginx/sites-available/servicename.conf에 아래 내용이 추가 됨
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/DNS 주소/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/DNS 주소/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

 

 

HTTPS 포트 포워딩

https 통신을 할 수 있도록 443포트를 열어주면 끝이다.

나의 경우 집에 있는 라즈베리파이를 사용했기 때문에 공유기 설정에서 포트포워딩을 했고, 클라우드를 사용하는 경우라면 인바운드 규칙에 추가하면 된다.