Byeonguk Kim

안녕하세요. 29살의 조금은 늦은 나이로 새롭게 개발자로 시작하는 신입 개발자입니다. 포트폴리오 [https://deaguowl.github.io]

배포 08. EC2에 장고 서버 설정하기

05 Jun 2019 » 배포

2019.06.05 EC2에 장고 서버 설정하기

EC2에 장고 서버 설정하기

EC2에 장고 서버 셋팅하기

01. VIM 설치

  • sudo apt-get install vim

02. 파이썬 관련 패키지 설치

  • sudo apt-get install python3-dev python3-venv python3-pip

03. django 애플리케이션 구동용 계정을 생성합니다.

  • sudo useradd -b /home -m -s /bin/bash django

04. www-data 그룹에 django 유저를 추가합니다.

  • sudo usermod -a -G www-data django

05. FTP로 업로드 할 때 ubuntu 계정을 사용하기 때문에, 애플리케이션 소스코드 폴더에 쓰기 권한을 얻기 위해 www-data 그룹에 ubuntu 유저를 추가합니다.

  • sudo usermod -a -G www-data ubuntu

06. 소스코드를 업로드 하기 위한 폴더를 만듭니다.

  • sudo mkdir -p /var/www/django
  • -p는 사이경로를 모두 만들어준다.

07. 소스코드 업로드 폴더의 소유자 변경

  • sudo chown django:www-data /var/www/django

08. 소스코드 폴더에 그룹 쓰기 권한을 부여

  • sudo chmod -R g+w /var/www/django

09. 가상 환경을 소스코드 폴더 밑에 만듭니다.

  • sudo python3 -m venv /var/www/django/venv

10. 관리자 모드로 변경 이후 가상 환경 활성화

  • sudo -s
  • source venv/bin/activate

11. 가상 환경에 장고 설치 및 프로젝트 생성

  • pip install django
  • django-admin startproject config .
  • python manage.py migrate

12. WSGI 모듈 중 하나인 uwsgi 설치

  • pip install uwsgi

13. uwsgi 동작확인

  • uwsgi –http :8000 –home /var/www/django/venv/ –chdir /var/wwww/django/ –module config.wsgi
  • DisallowedHost 확인하기
    • DEBUG 상태 및 allow host 조정 필요

14. UWSGI 모듈을 위한 폴더를 만듭니다.

  • sudo mkdir /var/www/django/run
  • sudo mkdir /var/www/django/logs
  • sudo mkdir /var/www/django/ini

  • 현재 해당 폴더에 있으면
  • sudo mkdir sudo mkdir run logs ini

15. 폴더의 소유권 변경

  • sudo chown django:www-data rrun
  • sudo chown django:www-data logs

16. uwsgi.ini 파일을 작성해줍니다.

  • sudo vim /var/www/django/ini/uwsgi.ini
[uwsgi]
uid = django
base = /var/www/django

home = %(base)/venv
chdir = %(base)
module = config.wsgi:application
evn = DJANGO_SETTINGS_MODULE=config.settings

master = true
processes = 5

socket = %(base)/run/uwsgi.sock
logto = %(base)/logs/uwsgi.log
chown-socket = %(uid):www-data
chmod-socket = 660
vaccume = true

17. uwsgi.service 파일 생성 및 작성

  • sudo vim /etc/systemd/system/uwsgi.service
[Unit]
Description=uWSGI Emperor service

[Service]
ExecStart=/var/www/django/venv/bin/uwsgi --emperor /var/www/django/ini
User=django
Group=www-data
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
StandardError=syslog

[Install]
WantedBy = multi-user.target

18. uwsgi.service를 시작하고 시작프로그램으로 등록

  • sudo systemctl start uwsgi
  • sudo systemctl enable uwsgi

19. 사이트 설정파일을 변경하여 기존의 스테틱 웹 서버에서 장고 애플리케이션이 구동하도록 변경

  • sudo vim /etc/nginx/sites-available/staticweb
  • 이전에 이미 설정 완료!
upstream django {
        server unix:/var/www/django/run/uwsgi.sock;
}

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        charset utf-8;
        access_log /var/www/django/logs/access.log;
        error_log /var/www/django/logs/error.log;

        server_name _;

        location = /favicon.ico {access_log off; log_not_found off; }
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                include         /etc/nginx/uwsgi_params;
                uwsgi_pass      django;
        }

}

20. 전체 권한 변경

  • sudo chown -R django:www-data /var/www/django

소스코드 업데이트 할 때

  • sudo chmod -R g+w /var/www/django
    • 새로운 폴더에 대해서는 쓰기 권한이 없어서 이후에 올릴 때 올라가지 않을 수도 있다.
  • sudo systemctl restart nginx