23/11/14 TIL gunicorn,nginx 실행

김민재·2023년 11월 14일
0


nginx 설치하는 과정 학습 (+ 리눅스 apt 명령어)

배포에 사용하려고 인스턴스에 nginx와 gunicorn을 설치하려고 한다. 기본적으로 apt(apt-get) 명령어로 설치 가능하다. 간단하게 aws 명령어에 대해서 살펴보자면, aws에서 설명하는 apt(apt-get)는 명령줄 도구로 이를 사용해서 Debian 기반 Linux 서버 및 서버 인스턴스에서 애플리케이션 및 라이브러리와 같은 소프트웨어 패키지를 관리할 수 있다고 한다. 실제로는 apt와 apt-get은 다르지만 apt가 apt-get을 포함하는 더 넓은 개념이자, 높은 수준의 사용자 인터페이스를 지원해주는 것이라고 생각하면 된다. 처음에 aws 인스턴스를 실행시키면 기본적으로 APT(Advanced Package Tool)가 낮은 버전인 것 같다. 그래서 docker 강의에서도 처음 apt install로 도커를 설치해보려고 하면 E: Package 'docker.io' has no installation candidate, 해당 에러가 발생해 apt를 update 시켜주는 것이 필요하다. 다만 실제로 sudo apt update와 sudo apt upgrade는 차이가 있는데, update는 설치 가능한 패키지 리스트를 최신화 시켜줘서 docker 패키지를 최신화 시켜줘서 따로 다운 받아주는 과정이 필요하다. upgrade는 실제 업데이트를 시켜주는 것으로 최신화된 설치 가능 패키지들을 모두 업데이트 시켜준다고 생각하면 될 것 같다. sudo apt install --upgradable 명령어로 실제 업데이트 되는 패키지 리스트도 확인할 수 있다. 조금 돌아왔지만 이제 sudo apt install nginx 명령어를 입력해주면 엔진엑스를 설치해줄 수 있다. 여기서 sudo find / -name nginx.conf를 입력해주면 엔진엑스의 기본 설정파일인 nginx.conf 파일의 경로를 찾을 수 있다. ec2 환경에서는 보통 /etc/nginx/nginx.conf로 저장되는 것 같다.(다른 배포환경에서는 또 다를 수도?) 그래서 비슷한 경로로 /etc/nginx/sites-available/쳐서 들어가면 기본적으로 default.conf 파일이 있는 걸 확인 할 수 있을 것이다. default.conf는 nginx.conf를 통해 include된 서버 설정관련 파일이다. default2.conf, default3.conf 등 여러 개의 파일을 추가하여 서버관련 설정을 추가로 만들어 포함시킬 수 있는데 기본적으로 프로젝트 이름을 네이밍해줘서 파일을 만들어주는 것 같다. 이제 sudo vi /etc/nginx/sites-available/teulang.conf 라고 입력해줘서 vi 편집기에서 서버 관련 설정을 해주는 과정이 필요할 것이다. nginx 설치와 default.conf 및 nginx.conf 관련 내용은 https://phsun102.tistory.com/45 다음 블로그를 참고하면 좋을 것 같다.


Gunicorn 설치 및 실행

이제 nginx라는 웹서버를 구축했지만 웹서버에 들어오는 요청을 실제로 처리하는 건 django와 같은 WSGI 애플리케이션인데, 웹서버는 기본적으로 이것들을 실행하는 방법을 모른다. 그래서 웹서버와 WSGI 애플리케이션 사이에 WSGI(위스키) 서버라는 중간다리가 필요하다. 위스키 서버는 대표적으로 Gunicorn과 uwsgi가 있다고 한다. 프로젝트에서 사용할 구니콘은 pip install로 설치 가능하다. 인스턴스에 가상환경을 설치해줬다면 해당 루트에서 pip install gunicorn 명령어로 설치하면 된다. 서비스 등록 스크립트를 생성하는 과정이 필요하다는데, /etc/systemd/system/gunicorn.service 파일을 아래와 같은 내용으로 생성한다.

[Unit]
Description=gunicorn daemon
After=network.target
\
[Service]
User=foo
Group=www-data
WorkingDirectory=/home/foo/django_test/repo
ExecStart=/home/foo/django_test/venv/bin/gunicorn \
        --workers 3 \
        --bind unix:/home/foo/django_test/run/gunicorn.sock \
        conf.wsgi:application
\
[Install]
WantedBy=multi-user.target

기본적인 형태는 찾아본 정보글에서는 다 비슷한 것 같았다. 그래서 위를 본인의 배포 환경에 맞게 수정해주면 되는데, ec2 ubuntu를 사용한다면 user명을 ubuntu로 설정해주고 /home/foo/라고 되어 있는 경로도 /home/ubuntu/ 형태로 수정해주면 될 것 같다.
이후 sudo systemctl enable gunicorn.service 옵션을 줘서 aws 서버가 다시 시작될 때마다 구니콘이 자동으로 실행되도록 해 줄 수 있다. 큰 문제가 없다면, sudo systemctl start gunicorn.service 명령어로 구니콘을 실행하는 것까진 아무런 문제가 없을 수 있다. 다만, 실제로는 sudo systemctl status gunicorn.servie를 통해 active 된 것 까지 확인을 하고 만약 오류가 발생했다면 관련 오류 로그를 읽고 수정해야 할 필요가 있을 것이다.

1개의 댓글

comment-user-thumbnail
2023년 11월 14일

좋은 글 감사합니다. 자주 올게요 :)

답글 달기