미분류

Gunicorn Service, nginx로 배포 준비

by VICENTE97P4


Dec. 21, 2021, 3:04 p.m.


리눅스에서 Service는 백그라운드에서 돌아가는 응용 어플리캐이션 서비스를 의미합니다.

서버는 계속 켜져있어야 하기 때문에 서비스를 만들어서 실행시킬 겁니다.

(Gunicorn과 nginx는 설치되어있다고 가정하겠습니다.)

vicente97p4@shrinkers:~/URL_Shortner$ sudo vi /etc/systemd/system/gunicorn.service

을 실행하여 파일을 생성합니다.


내용에는 아래 설정을 입력합니다.

[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=root
WorkingDirectory= /home/vicente97p4/URL_Shortner
ExecStart= /usr/local/bin/gunicorn --bind 127.0.0.1:8000 shrinkers.wsgi:application
[Install]
WantedBy=multi-user.target

Unit 부분은 Description이고, WorkingDirectory는 작업할 공간을 의미합니다.

ExecStart는 실행 위치인데 Gunicorn을 local에 설치한 경우 gunicorn이 /usr/local/bin/gunicorn 에 들어있게 됩니다.

(--bind는 해당 IP와 port로 바인드 시킨다는 의미입니다.)


서비스를 만든 후에는 daemon를 reload 해야 합니다.

sudo systemctl daemon-reload

gunicorn을 실행합시다.

sudo systemctl start gunicorn


잘 실행되고 있는지 확인하기 위해 curl로 확인해봅시다.

curl http://127.0.0.1:8000


여러분이 제작해둔 landing page의 HTML이 보이면 성공입니다.


이제 로컬에서 잘 돌아가는 것을 외부에 송출해주기만 하면 끝입니다.

그러기 위해서 nginx를 설정해봅시다. 아래 명령어를 입력하여 설정 파일을 만듭니다.

sudo nano /etc/nginx/sites-available/shrinkers

(아까는 vi 에디터를 사용했지만 이번에는 nano 에디터를 사용했습니다. 에디터만 다릅니다.)


server{
  listen 80;
  server_name 서버 IP, 도메인;
  location = /favicon.ico{
    access_log off;
    log_not_found off;
  }
  location /static/ {
    root /home/web/myprojectdir;
  }
  location / {
    include proxy_params;
    proxy_pass http://127.0.0.1:8000;
  }
}


이후 다음 명령어를 입력합니다.

sudo ln -s /etc/nginx/sites-available/shrinkers /etc/nginx/sites-enabled


nginx는 sites-available에 config 설정을 넣어두고, sites-enabled로 그 설정을 옮겨야만 사이트로 인정하고 서빙합니다.

(ln -s는 소프트 링크를 만드는 명령어입니다. 소프트 링크가 뭔지는 추후 OS 포스팅에서 알아보겠습니다.)

링크를 sites-enabled에 걸었으니 sites-available 파일만 수정해도 sites-enabled 파일도 같이 수정됩니다.


이제 nginx가 잘 되는지 테스트 해봅시다.

sudo nginx -t

를 입력하면

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

테스트가 성공적이었다는 메세지가 뜹니다.


nginx에 설정을 적용하기 위해 재시작합니다.

sudo service nginx restart


이제 웹사이트에서 확인해보면 됩니다.

여러분이 설정한 서버의 IP나 도메인으로 브라우저를 통해 접속하면 뭔가 뜨긴 뜨는데 이상할겁니다.

F12를 눌러서 확인해보면..


이런 에러가 무더기로 뜰 것입니다.

어지러운 정신을 부여잡고 찬찬히 영어를 읽어보면 404 not found 에러이고,

더 자세히 보다 보면 죄다 이미지, js, css 파일임을 알아차릴 수 있습니다. 즉, static 파일을 못 가져옵니다.


아까 위에서 설정한 nginx 내용 중

  location /static/ {
    root /home/web/myprojectdir;
  }

이 부분은 static의 root 설정 부분입니다.

이 부분을 여러분이 설정한 static 파일이 있는 디렉토리로 설정해줘야 합니다. 

저의 경우는 아래와 같이 설정했습니다.

(static의 상위 폴더까지만 써줘야 합니다. static 파일 자체를 쓰면 안 됩니다.)

location /static/ {
    root /home/vicente97p4/URL_Shortner/shortener;
  }


static 설정은 django나 gunicorn이 하는게 아닌 nginx 설정에서 맞춰줘야 합니다!!

장고    0   view  2604