Nginx는 사용자가 브라우저에서 보낸 요청을 uWSGI로 넘겨주는 역할을 하는 웹 서버 프로그램이다.
Nginx 설치
다음의 과정을 통해 ubuntu 서버에 Nginx를 설치하자.
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx
Shell
복사
nginx -v 로 설치된 Nginx의 버전을 확인할 수 있다.
Nginx 환경 설정
•
nginx.conf 파일로 들어가 Nginx의 유저를 앞서 만든 deploy 로 바꿔 준다.
sudo vi /etc/nginx/nginx.conf
# nginx.conf
user deploy;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
...
Shell
복사
•
이제 앞서 만들었던 .config/nginx/[PROJECT_NAME].conf 폴더를 다음과 같이 수정한다.
# .config/nginx/[PROJECT_NAME].conf
server {
listen 80; # 요청을 받을 포트 번호
server_name *.compute.amazonaws.com; # 요청을 받을 주소
charset utf-8;
client_max_body_size 128M; # 취향에 맞게
location / { # [server_name]/ 로 오는 요청을 다음과 같이 처리하겠다는 의미
uwsgi_pass unix:///tmp/[PROJECT_NAME].sock;
include uwsgi_params;
}
}
Shell
복사
•
위 설정을 서버에 업로드한 후, 다음 코드를 차례로 실행해주자. 첫 두 코드는 conf 파일을 변경할 때마다 실행해야 하니, alias로 지정해 두면 인생이 편하다.
sudo cp -f /srv/[PROJECT_NAME]/.config/nginx/[PROJECT_NAME].conf /etc/nginx/sites-available/[PROJECT_NAME].conf
sudo ln -sf /etc/nginx/sites-available/[PROJECT_NAME].conf /etc/nginx/sites-enabled/[PROJECT_NAME].conf
sudo rm /etc/nginx/sites-enabled/default
Plain Text
복사
uWSGI-Nginx 설정
Nginx는 기본적으로 백그라운드에서 실행되도록 되어 있지만, uWSGI는 그렇지 않다. 그렇기 때문에 service 파일을 만들어 백그라운드에서 실행할 수 있도록 enable해 주어야 한다.
•
.config/uwsgi/uwsgi.service 파일을 다음과 같이 수정한다.
[Unit]
Description=uWSGI service
After=syslog.target
[Service]
ExecStart=/home/ubuntu/.pyenv/versions/uwsgi-env/bin/uwsgi -i /srv/[PROJECT_NAME]/.config/uwsgi/[PROJECT_NAME].ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
Plain Text
복사
•
위에서 작성한 파일을 ubuntu 서버에 업로드해준 후, uwsgi.service 파일을 /etc/systemd/system/ 에 하드링크 해준다.
sudo ln -f /srv/[PROJECT_NAME]/.config/uwsgi/uwsgi.service /etc/systemd/system/uwsgi.service
Plain Text
복사
•
다음 명령어로 데몬을 리로드해준다.
sudo systemctl daemon-reload
Plain Text
복사
•
다음 명령어로 uwsgi 데몬을 활성화해준다
sudo systemctl enable uwsgi
Plain Text
복사
이제 서버에 접속하면 uwsgi와 Nginx가 백그라운드에서 실행된다. 아래 명령을 통해 백그라운드 실행 여부를 확인할 수 있다.
sudo systemctl | grep nginx
sudo systemctl | grep uwsgi
Plain Text
복사
만약 아무런 메시지도 안 뜬다면, 다음의 명령어를 통해 일단 두 서비스를 실행해 주자
sudo systemctl start nginx uwsgi
Plain Text
복사
소켓 통신 설정
이제 uWSGI가 http 요청을 받는 대신, sock 파일을 통해 요청을 받도록 소켓 통신 설정을 해야 한다. 위의 .config/nginx/[PROJECT_NAME].conf 에서 / 로 들어오는 요청을 /tmp/[PROJECT_NAME].sock 으로 보내겠다고 선언한 바 있다(uwsgi_pass).
•
.config/uwsgi/[PROJECT_NAME].ini 파일의 http = :8080 부분을 다음과 같이 수정해준다
# .config/uwsgi/[PROJECT_NAME].ini
...
socket = /tmp/[PROJECT_NAME].sock
chmod-socket = 666
chown-socket = deploy:deploy
...
Plain Text
복사
•
ubuntu 서버에 업로드한 후, 데몬 리로드를 하고 Nginx와 uwsgi를 재시작한다
sudo systemctl daemon-reload
sudo systemctl restart nginx uwsgi
Plain Text
복사
이제 브라우저를 켜고 DNS로 접속해 보면 서버에서 백그라운드로 프로그램을 돌리고 있다는 것을 알 수 있다!
혹시 뭔가 에러가 있다면, 다음의 경로에서 로그를 잘 살펴보자...
•
uWSGI 로그: /var/log/uwsgi/
•
Nginx 로그: /var/log/nginx/
E.O.D.