카테고리 없음
간단한 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 생성
회원가입하고 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포트를 열어주면 끝이다.
나의 경우 집에 있는 라즈베리파이를 사용했기 때문에 공유기 설정에서 포트포워딩을 했고, 클라우드를 사용하는 경우라면 인바운드 규칙에 추가하면 된다.