🚀 Flask 프로젝트 배포 이후 과정 정리 (EC2 + Nginx + SSL + 도메인)
백엔드 서버를 AWS EC2에 배포하고, 도메인 연결 및 보안 설정까지 완료한 과정을 정리합니다. 실습용 프로젝트지만 실무와 동일한 방식으로 진행되었습니다.
1️⃣ GitHub에서 EC2로 코드 Pull
- git pull origin main 명령어로 최신 코드 반영
- 기존 코드와 충돌 방지를 위해 백업 후 진행
2️⃣ Gunicorn & Nginx 재설정
- launch.sh 스크립트로 Gunicorn 서버 실행
- Nginx 설정 파일 수정하여 포트 및 프록시 재설정
sudo vi /etc/nginx/conf.d/form.conf
- Flask는 내부 8000번 포트, Nginx는 443(HTTPS) 포트 사용
3️⃣ DuckDNS 도메인 설정
- DuckDNS에서 무료 서브도메인 발급
- 퍼블릭 IP와 연결 완료
예시: leeturnpy.duckdns.org
4️⃣ SSL 인증서 발급 (Let's Encrypt + Certbot)
- Certbot 설치 및 플러그인 설정 (certbot-dns-duckdns)
- DNS 인증 방식으로 SSL 발급 성공 ✅
sudo certbot certonly \
--dns-duckdns \
--dns-duckdns-credentials /home/ec2-user/.secrets/certbot/duckdns.ini \
--dns-duckdns-propagation-seconds 120 \
-d leeturnpy.duckdns.org
- 인증서 경로:
/etc/letsencrypt/live/leeturnpy.duckdns.org/fullchain.pem
/etc/letsencrypt/live/leeturnpy.duckdns.org/privkey.pem
5️⃣ Nginx HTTPS 설정
- SSL 인증서 적용
- HTTP 요청을 HTTPS로 리디렉션 처리
server {
listen 443 ssl;
server_name leeturnpy.duckdns.org;
ssl_certificate /etc/letsencrypt/live/leeturnpy.duckdns.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/leeturnpy.duckdns.org/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
# 생략...
}
}
server {
listen 80;
server_name leeturnpy.duckdns.org;
return 301 https://$host$request_uri;
}
6️⃣ CORS 이슈 해결
- Flask와 Nginx 양쪽에서 CORS 설정 중복으로 인해 발생한 오류 해결
- 최종적으로 Nginx에서만 CORS 설정 유지
7️⃣ 최종 점검
- ✅ 프론트엔드(Vercel)와 백엔드(API) 연결 성공
- 프론트에서 API 호출 시 HTTPS 통신 정상 작동 확인
- 팀원들도 접속 가능하도록 배포 완료!
🎯 마무리
이번 과정에서 배운 핵심
- 도메인 연결과 무료 SSL 발급 실습
- Nginx 리버스 프록시와 보안 설정
- CORS 문제 해결 능력 강화
다음 목표는 자동 갱신 설정(cron) 과 추가 관리자 기능 개발!
고생 끝! 😄 이제 푹 쉬자 ☕
'프로젝트' 카테고리의 다른 글
📚 Django 유저 리스트 & 상세 정보 프로젝트 정리 (0) | 2025.04.30 |
---|---|
📌 Django를 이용한 구구단 웹 페이지 만들기 (0) | 2025.04.30 |
FLASK 미니프로젝트 팀2-1 팀원과 검증 단계 2일차 아침 (0) | 2025.04.25 |
FLASK 미니프로젝트 팀 (초기작업)1-4 기능 정의 & 흐름 설계 가이드 (0) | 2025.04.23 |
FLASK 미니프로젝트 팀 (초기작업)1-3 심리테스트/설문조사 주제 리스트 (1) | 2025.04.23 |