본문 바로가기

TIL

23.05.16 TIL

실수로 이미 배포하고 있던 EC2 인스턴스를 날려버려서, 처음부터 다시 배포를 하고, 그 김에 겸사겸사 배포중 마주친 오류들을 정리하였다.

1. EC2 배포 중 - Gunicorn 작동 안함

Runserver를 직접 해보면 이상이 없는데, Gunicorn을 작동시키려고 하면 오류가 발생

EnvironmentFile=/home/ubuntu/DRF_Community_WebSite_Project/.env

해결

gunicorn이 서버 어플리캐이션을 동작시키기 위해 필요한 SECRET_KEY가 보관되어있는 환경변수를 인지하지 못한 것으로 보인다. 따라서 이를 해결하기 위해 gunicorn의 서비스 실행 파일의 내용을 다음과 같이 작성하면 된다.

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
...
WorkingDirectory=/home/ubuntu/DRF_Community_WebSite_Project
EnvironmentFile=/home/ubuntu/DRF_Community_WebSite_Project/.env
...

[Install]
WantedBy=multi-user.target

이렇게 환경변수를 지정해 주자, 해당 오류는 사라졌다.

 

2. EC2 배포 후 : ELB와 SSL 인증서 적용

이 과정 없이 front end에만 SSL을 적용할 경우, MixedIn error가 발생한다. 이는 HTTPS응답을 받은 경우 HTTP 응답을 사용하는 것을 방지하는 보안 정책 때문에 발생하며 우회하기보단 그냥 SSL을 백엔드에도 적용시켜 주는 것이 좋다.

 

이후 도메인으로 접속해 잘 되는 지 확인해본다.

 

2-1 오류 1: 502 Bad Gateway

 

sudo tail -f /var/log/nginx/error.log 명령어를 통해 에러 로그를 확인해 본 결과 파일의 permission이 올바르게 설정되지 않아 제대로 실행되지 않았다.

아래 명령어를 통해 수정 가능하다.

chmod 755 <프로젝트폴더 경로>/
chmod 755 ~

 

2-2. 오류2: 404

Django 수준에서 404를 반환한 것이 아니고 nginx에서 404를 반환한 경우 도메인 주소가 servername에 등록되지 않아, api 경로가 포함된 url을 제대로 인식하지 못해 발생하는 문제이다. Nginx는 도메인이 server_name에 있는 서버 블록을 찾지만 해당 도메인에 대한 서버 블록이 없으므로 일치하는 서버 블록을 찾지 못하고 기본(default) 서버 블록을 사용하게된다. 기본 서버 블록은 모든 요청을 처리할 수 있지만 요청에 대한 구성이 없기 때문에 기본적으로 404 Not Found 오류를 반환하게 된다.

server {
    listen 80;
    server_name <ip> <domain>;

    ...

}

 

 

 

2-3. 오류 3: 400

별 다른 입력값이 없이 Django 에서 400이 발생하였다. 원인을 찾아본 결과, 이는 Allow_Hosts에 현재 접속중인 도메인 혹은 IP가 등록되어있지 않을 경우 발생한다.

ALLOWED_HOSTS = [
    "localhost",
    "12.34.56.18",
    "example.com"
]

 

3. S3와 Cloud Front로 프론트 엔드 배포

아마존에서 제공하는 기능들 (Route 53, S3, CloudFront, ACM, EC2, ELB)을 사용하여 배포를 할 경우 쉽고 빠르게 가능하다.(이전포스팅 참고)

CORS 오류가 발생하는 경우, CORS 헤더 설정에서 [https://프론트 엔드의 도메인]을 등록해줘야한다.

CORS_ALLOWED_ORIGINS = ["https://front.com"]

 

 

레퍼런스

 

https://076923.github.io/posts/Python-Django-3/

 

Python Django 강좌 : 제 3강 - 프로젝트 설정

Django setting.py 설정

076923.github.io

 

'TIL' 카테고리의 다른 글

23.05.15 TIL  (0) 2023.05.17
23.05.12~14 TIL  (0) 2023.05.17
23.05.11 TIL  (0) 2023.05.12
23.05.10 TIL  (0) 2023.05.11
23.05.09 TIL  (0) 2023.05.10