프로젝트

🚀 Flask 프로젝트 배포 이후 과정 정리 3 일차 (EC2 + Nginx + SSL + 도메인)

Chansman 2025. 4. 27. 04:59

🚀 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)추가 관리자 기능 개발!

고생 끝! 😄 이제 푹 쉬자 ☕