이번 포스팅은 이전포스팅과 이어집니다.
2020/07/26 - [개발/서버] - django EC2+Nginx+uWSGI 배포하기(1)
이전포스팅에서는 가상환경을 이용하여 uwsgi를 설치하고 실행시켜보았습니다.
실제 nginx와 연동하기 위하여 가상환경을 deactivate시킨 후 아래 내용을 따라해주세요!
1. uwsgi를 설치해줍니다.(이전에는 venv에 설치했기 때문에, 시스템 전역에 다시 설치해줍니다)
~$ sudo apt-get isntall python3-dev python3-pip python3-setuptools
~$ sudo -H pip3 install --upgrade pip
~$ sudo -H pip3 install wheel
~$ sudo -H pip3 isntall uwsgi
2. uwsgi 서비스 등록 스크립트 생성
아래와 같은 경로에 uwsgi.service 파일을 생성해줍니다. 전원을 켜고 부팅이 되는 과정에서 시스템을 초기화 하고 기타 서비스를 위한 환경을 조성 및 시작시켜주는 일을 합니다. 이 설정이 되어야 24시간 실행됩니다.
~$ sudo vi /etc/systemd/system/uwsgi.service
아래 내용을 입력해 줍니다.
[Unit]
Description=uWSGI Emperor service
[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
StandardError=syslog
[Install]
WantedBy=multi-user.target
[Service]부분에서 ExecStart = [uwsgi경로] --emperor [.ini 파일을 생성할 경로]
uwsgi경로는 ~$ whereis uwsgi 명령어로 확인 할 수 있습니다.
이 부분 외에는 같게 넣어주셔도 됩니다.
저장한후 아래 명령어를 입력해 줍니다. 명령어 입력 후 Created~ 와 같은 글자가 뜨면 등록된 것입니다.
~$ sudo systemctl enable uwsgi
Created symlink ~~~~~
3. uwsgi 옵션파일 생성
여러 app의 .ini파일을 한 디렉토리에 모아 관리합니다.
~$ sudo mkdir -p /etc/uwsgi/sites
~$ sudo vi /etc/uwsgi/sites/Closet.ini
mkdir로 sites 디렉토리를 생성 후(-p 옵션은 상위경로도 함께 생성한다는 뜻, 아까 service파일의 --emperor 이후 경로입니다),
Closet.ini 파일을 생성합니다.([project_name].ini 로 파일명을 설정해 주었는데, 파일명을 자유롭게 설정하셔도 됩니다.)
아래 내용을 추가합니다.
[uwsgi]
uid = ubuntu
project = Closet
app = accounts
base = /home/ubuntu/srv
chdir = %(base)/%(project)
home = %(base)/venv
module = %(project).wsgi:application
master = true
processes = 5
max-requests = 6000
max-requests-delta = 300
thunder-lock = true
enable-threads = true
hirakiri = 160
logto = /home/ubuntu/srv/Closet/@(exec://date +%%Y-%%m-%%d).log
log-reopen = true
socket = /home/ubuntu/srv/Closet/Closet.sock
chown-socket = ubuntu:ubuntu
chmod-socket = 666
vacuum = true
uid에는 사용자 명을 적어주었습니다.
chdir에는 manage.py 가 들어있는 프로젝트 경로
home에는 venv경로
module에는 [wsgi.py가 있는 곳].wsgi:application
을 넣어줍니다.
master는 true로 설정해주시고, processes의 수는 마음대로 정해주세요(코어 수 보다 많게도 가능합니다)
thunder-lock, enable-threads 설정은 이전 포스팅에서 venv환경에서 실행시킬 때 disalbed되어 있었기 때문에 설정으로 넣어주었습니다.
uwsgi의 log를 찍을 파일의 경로를 logto 에 적어주시면 됩니다.(자기마음) 저는 로그를 확인하기 쉽게 날짜를 log파일 이름으로 넣어주었습니다.
socket의 위치도 알아서 적어주세요! (저는 그냥 wsgi.py와 같은 경로에 추가했습니다)
.sock의 owner와 mod도 바꿔줘야합니다.
vacuum 은 true로 설정해주세요
4. nginx 설치 및 설정
~$ sudo apt-get install nginx
~$ sudo vi /etc/nginx/sites-available/Closet
nginx설치 후 sites-available 하위에 [project_name](이름 상관 없음) 파일을 하나 만들어주고 아래 내용을 적어주세요.
server {
listen 8000;
server_name [ec2 dns];
location = /favicon.ico { access_log off; log_not_found off; }
location / {
include uwsgi_params;
uwsgi_pass unix:/home/ubuntu/srv/Closet/Closet.sock;
}
}
django의 기본 포트번호인 8000을 사용할 것이기 때문에 listen에 8000을 적어주었습니다.(각자 사용하는 포트번호를 적어주시면 됩니다)
server_name 뒤에는 각자의 ec2 dns (ec2-~~) 주소를 적어주면 됩니다.
uwsgi_pass 에서는 unix: 뒤에 아까 .ini 파일에서 socket= 하고 적어주셨던 .sock 파일의 경로를 적어주시면 됩니다.
이외에는 같에 적어주시면 될거같아요!
sudo ln -sf /etc/nginx/sites-available/[방금작성한 파일명] /etc/ngin/sites-enabled/[방금작성한 파일명]
위의 파일을 저장 후 파일 링크를 sites-enabled에 생성합니다.
5. 실행
~$ sudo service uwsgi start
~$ sudo service nginx start
명령어 입력후 dns주소:포트번호 에 접속하시면 django로 만든 사이트를 확인할 수 있습니다.
만약 파이썬 코드를 수정했다면, uWSGI를 재가동 시켜주어야 합니다.
~$ sudo systemctl restart uwsgi
nginx 의 문법검사 및 재가동
~$ sudo nginx -t
~$ sudo systemctl restart nginx
이렇게 uwsgi와 nginx를 사용하여 배포하는 방법을 알아보았는데요,
다음 포스팅에서는 몇가지 오류들에 대한 해결방법들, status확인하는 것을 알아보겠습니다!
감사합니다.
틀린내용이 있을 수 있습니다. 댓글로 알려주세요!
'개발 > django' 카테고리의 다른 글
django EC2+Nginx+uWSGI 배포하기(3) (0) | 2020.07.26 |
---|---|
django EC2+Nginx+uWSGI 배포하기(1) (1) | 2020.07.26 |