일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 면접
- Express
- JS
- 후기
- NATIVE
- 카카오
- 디자인
- 자바스크립트
- 네비게이션
- 레이아웃
- graphql
- Notification
- github
- JavaScript
- 변수
- navigation
- Python
- MongoDB
- React
- 배포
- 스코프
- Background
- EC2
- 네이티브
- ubuntu
- Push
- 리액트
- 알림
- AWS
- scope
- Today
- Total
어서와, 개발은 처음이지?
[처음부터 시작하는 EC2] nginx와 uwsgi로 django 서비스하기 본문
지난 글에 이어 django 어플리케이션을 nginx, uwsgi를 사용하여 서비스 할 수 있도록 하겠습니다.
환경 구성에 대한 내용은 위키독스를 참고하였습니다.
0. uwsgi 테스트
가상환경에서 uwsgi를 설치하고 실행해보겠습니다.
우선 프로젝트 경로로 이동하여 가상환경을 활성화합니다.
가상환경에서 uwsgi를 설치합니다.
(myvenv) > pip install uwsgi
설치가 완료되면 uwsgi 명령어를 사용하여 프로젝트를 실행합니다.
(myvenv) > uwsgi --http :8000 --home ~/app/django/firstproject/myvenv/ --chdir ~/app/django/firstproject/ --wsgi-file ~/app/django/firstproject/yuddomack/wsgi.py
uwsgi의 옵션으로
--http은 포트 번호,
--home은 virtualenv 가상환경 경로,
--chdir은 manage.py가 들어있는 Django 프로젝트 경로,
--wsgi-file은 wsgi.py의 경로를 입력하면 됩니다.
이제 ec2 dns의 8000번 포트에 접속하면 python manage.py runserver 0.0.0.0:8000 으로 앱을 실행 했을 때처럼동작하는 모습을 볼 수 있습니다.
1. uwsgi 설치
가상환경을 이용하여 uwsgi를 설치하고, 실행할 수 있지만 nginx와 연동하여 운영할 것이기 때문에 sudo 권한을 이용하여 설치하도록 합니다.
> sudo apt-get install python3-dev python3-pip python3-setuptools > sudo -H pip3 install --upgrade pip > sudo -H pip3 install wheel > sudo -H pip3 install uwsgi
2. uwsgi 서비스 등록
service 명령을 사용하여 uwsgi를 제어하기 위해 /etc/systemd/system에 uwsgi.service 파일을 생성합니다.
> 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
이제 아래 명령을 실행하면 uwsgi가 service에 등록됩니다.
> sudo systemctl enable uwsgi Created symlink /etc/systemd/system/multi-user.target.wants/uwsgi.service → /etc/systemd/system/uwsgi.service.
마지막으로 아래 명령이 잘 실행되는지 확인합니다.
> sudo service uwsgi status ● uwsgi.service - uWSGI Emperor service Loaded: loaded (/etc/systemd/system/uwsgi.service; enabled; vendor preset: en Active: inactive (dead) lines 1-3/3 (END)
위와 같은 내용이 보인다면 정상적으로 실행된 것 입니다.
키보드 키 q를 눌러서 빠져나옵니다.
3. uwsgi 옵션 생성
uwsgi 옵션 파일들을 한 곳에서 관리하기 위해 아래 경로(uwsgi.service의 emperor 옵션에 설정한 경로)에 디렉토리를 생성합니다.
> sudo mkdir -p /etc/uwsgi/sites
다음은 sites 아래에 uwsgi 옵션 파일을 생성합니다.
> sudo vi /etc/uwsgi/sites/firstproject.ini
옵션 파일 명은 django app의 이름으로 설정했습니다.
이제 아래 내용을 입력합니다.
[uwsgi] uid = ubuntu project = firstproject app = yuddomack base = /home/ubuntu/app/django chdir = %(base)/%(project) home = %(base)/%(project)/myvenv module = %(app).wsgi:application master = true processes = 16 thunder-lock = true max-requests = 6000 max-requests-delta = 300 stat = /tmp/firstsite.stats.sock memory-report = true hirakiri = 160 socket = %(base)/%(project)/%(project).sock logto = %(base)/%(project)/uwsgi.log chown-socket = %(uid):www-data chmod-socket = 660 vacuum = true touch-reload = %(base)/%(project)/%(app)/settings.py
logto에 입력한 경로에 있는 파일에서 uwsgi의 실행 로그를 볼 수 있습니다.
만약 nginx 연동 이후 정상적으로 실행되지 않는 경우, 이 곳을 살펴보시기 바랍니다.
4. nginx 설치
아래 명령을 사용하여 nginx를 설치합니다.
> sudo apt-get install nginx
5. nginx 설정
이제 nginx 설정 파일에 uwsgi로 실행한 앱 정보를 등록합니다.
우선 설정 파일을 생성합니다.
> sudo vi /etc/nginx/sites-available/firstproject
다음은 아래 내용을 입력합니다.
server { listen 80; server_name 54.xxx.xxx.179 ec2-54-xxx-xxx-179.ap-northeast-2.compute.amazonaws.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/ubuntu/app/django/firstproject/yuddomack; } location / { include uwsgi_params; uwsgi_pass unix:/home/ubuntu/app/django/firstproject/firstproject.sock; } }
listen 포트는 http 기본 포트인 80로 설정했습니다.
이제 80번 포트가 uwsgi에서 시작하는 app에 연결됩니다.
location 수정 시 본인이 생성한 app의 경로가 맞는지 확인해주세요.
server_name은 django의 ALLOWED_HOSTS와 같이 입력합니다.
다음은 설정 파일의 링크를 sites-enabled에 생성합니다.
> sudo ln -s /etc/nginx/sites-available/firstproject /etc/nginx/sites-enabled/
6. 실행
service 명령을 사용하여 uwsgi와 nginx를 실행합니다.
> sudo service uwsgi start > sudo service nginx start
이제 포트번호 없이 퍼블릭 dns 혹은 퍼블릭 ip에 접속해도 이전과 같은 화면을 볼 수 있습니다.(포트 번호 없이 접속하면 웹 서버 기본 포트인 80번에 연결됩니다.)
여기까지 nginx와 uwsgi에 django를 연동 해봤습니다.
nginx, uwsgi의 최적의 설정 값에 대한 부분은 아직 공부가 필요한 부분이라 자세히 작성하지 않았습니다.
이 부분은 나중에 따로 작성해보겠습니다.
다음 글에서는 nodejs로 웹 서비스를 동작시키도록 해보겠습니다.
'EC2_Ubuntu_Devops' 카테고리의 다른 글
[처음부터 시작하는 EC2] mongodb 계정 생성, 외부 접속 (6) | 2019.02.04 |
---|---|
[처음부터 시작하는 EC2] ubuntu mongodb 설치하기 (7) | 2019.02.04 |
[처음부터 시작하는 EC2] django 프로젝트 생성 (7) | 2019.01.25 |
[처음부터 시작하는 EC2] python 설치 (0) | 2019.01.25 |
[처음부터 시작하는 EC2] ssh로 EC2 접속하기 (0) | 2019.01.25 |