Dev./Cloud

[Cloud] 배포 - NCP : Nginx, gunicorn

Ivan'show 2023. 8. 3.
728x90
반응형

실제로 웹 어플리케이션이 배포되는 과정에선 필요한 부분이 더 많다.

우선 지금 배포하려고 하는 django 프로젝트를 gunicorn 이라는 파이썬 기반 wsgi 에 연결해보자.

 

django 서버에 gunicon 을 설치하여 WSGI (Web Server Gateway Interface) 인 gunicorn 에서 통신을 단순화하고 표준화하는 역할을 수행하게끔 설정한다.

source venv/bin/activate
cd Dev ... # 해당 app 경로로 가서

구니콘의 경우 파이썬 패키지에서 다운이 가능하다.

pip install gunicorn

구니콘의 config 파일을 settings.py 파일이 있는 곳에 만들어준다.

vi lion_app/gunicorn_config.py
# bind 해서 8000 포트로 묶어
import multiprocessing

bind="0.0.0.0:8000"
workers=multiprocessing.cpu_count()*2+1

웹 브라우저를 구니콘으로 오픈!

gunicorn lion_app.wsgi:application --config lion_app/gunicorn_config.py
Not Found: /static/admin/css/responsive.css
Not Found: /static/admin/css/dark_mode.css
Not Found: /static/admin/css/base.css
Not Found: /static/admin/css/login.css
Not Found: /static/admin/js/nav_sidebar.js
Not Found: /static/admin/js/theme.js
Not Found: /static/admin/css/nav_sidebar.css
^C[2023-08-01 09:29:35 +0900] [36434] [INFO] Handling signal: int
^C[2023-08-01 00:29:35 +0000] [36438] [INFO] Worker exiting (pid: 36438)
[2023-08-01 00:29:35 +0000] [36439] [INFO] Worker exiting (pid: 36439)
[2023-08-01 00:29:35 +0000] [36437] [INFO] Worker exiting (pid: 36437)
[2023-08-01 00:29:35 +0000] [36436] [INFO] Worker exiting (pid: 36436)
[2023-08-01 00:29:35 +0000] [36440] [INFO] Worker exiting (pid: 36440)

static 파일들을 찾진 못했지만 일단 서버는 열렸고 연결이 된 것을 확인 가능하다.

정적 파일들이 없으니 .. 못생긴 웹 페이지

이제 구니콘 앞단에서 비동기 이벤트 기반 아키텍처를 사용하여 연결을 처리해주는 오픈 소스 웹 서버인 Nginx 를 설치해보자

Nginx 는 파이썬 패키지가 아닌 운영체제 단위에서 단위에서 사용이 가능하기 때문에 apt 를 이용해서 다운 받는다. → root 경로에 설치가 된다.

sudo apt install nginx

이제 django 를 위한 규칙을 생성한다.

sudo vi /etc/nginx/sites-available/django

django 안쪽 규칙

server {
        listen 80; # HTTP 접속 포트 80 포트
        server_name http {공인 IP};

        location / {
								# 프록시로 아래 주소로 바꿔주겠다
                proxy_pass <http://127.0.0.1:8000>;
                proxy_set_header Host $host; # nginx 로 들어온 정보값을 넣어줄 변수
                proxy_set_header X-Real-IP $remote_addr;
        }
}

서버에 설치한 nginx 가 http 요청을 응답할 준비가 되었지만 클라우드 환경으로 서버를 띄웠기 때문에 클라우드 접근 규칙, ACG 에서 접근을 허용하는 규칙을 만들어 주어야 한다.

web 이라는 이름으로 80 포트(http), 443 포트(https) ACG 생성 및 설정 → 포트 열어주기

그리고 해당 서버 ACG 에 적용시킨다.

이제 웹 브라우저에서 해당 클라우드 공인 IP 주소로 접근하게 되면 → http GET request

nginx 의 defualt 페이지 값이 Response 로 전달 되게 된다.

이제 다른 포튿들은 닫아버리고 nginx 포트만 살려두면 작업이 완성된다.

💡 해당 목적은, 구니콘이나 django 로 바로 들어올 수 있게 하는게 아닌 nginx 를 통해서만 들어올 수 있게 함에 있다.

 

 

 

 

728x90
반응형

댓글