장고 - EC2에 장고 서버 셋팅

  1. EC2에 SSH로 접속

    1
    $ ssh -i ~/.ssh/[키 페어 파일 이름; django-wps.pem] ubuntu@[도메인 주소]
  2. 장고를 위한 계정 추가

    1
    $ sudo useradd -g www-data -b /home -m -s /bin/bash django
  1. 소스 코드 업로드할 폴더 생성

    1
    $ sudo mkdir -p /var/www/django
  2. 소스코드 폴더의 소유자 변경

    1
    $ sudo chown -R django:www-data /var/www/django
  3. 파일 업로드를 위해 ubuntu 계정을 www-data 그룹에 추가

    1
    $ sudo usermod -a -G www-data ubuntu
  4. 소스 코드 폴더에 그룹 쓰기 권한 부여

    1
    $ sudo chmod -R g+w /var/www/django
  5. 파이썬 관련 패키지 설치

    1
    $ sudo apt-get install python3-dev python3-venv python3-pip
  6. 소스 코드 폴더 밑에 파이썬 가상 환경 생성

    1
    2
    $ pip3 install virtualenv
    $ sudo python3 -m virtualenv /var/www/django/venv
  7. 관리자 모드로 변경

    1
    $ sudo -s
  8. 소스 코드 폴더에서 가상환경 활성화

    1
    2
    $ cd /var/www/django
    $ source venv/bin/activate
  9. 가상환경에 장고 설치

    1
    $ pip install django
  10. 장고 프로젝트 생성 및 settings.py 설정

    1
    2
    3
    $ django-admin startproject config .
    $ cd config
    $ vi settings.py
    1
    2
    ...
    ALLOWED_HOST = ['*']
    1
    $ cd ..
  11. migrate 및 runserver 서버 실행하여 django 연결되었는지 확인

    1
    2
    $ python manage.py migrate
    $ python manage.py runserver 0:8000
  12. WSGI 모듈 중 하나인 uwsgi 설치

    1
    $ pip install uwsgi
  13. uwsgi 잘 동작하는지 확인

    1
    $ uwsgi --http :8000 --home /var/www/django/venv/ --chdir /var/www/django/ --module config.wsgi
  14. 관련 폴더 생성 및 설정(run, logs 폴더 생성)

    1
    $ sudo mkdir run logs
  15. 폴더 소유권 변경

    1
    2
    $ sudo chown django:www-data run
    $ sudo chown django:www-data logs
  16. ini 폴더 생성

    1
    $ sudo mkdir ini
  17. ini 폴더 안에 uwsgi.ini 파일 작성

    1
    $ sudo vim ini/uwsgi.ini
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [uwsgi]
    uid = django
    base = /var/www/django

    home = %(base)/venv
    chdir = %(base)
    module = config.wsgi:application
    env = 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
    vacuum = true
    ~
    ~
  18. uwsgi.service 파일 생성

    1
    $ sudo vim /etc/systemd/system/uwsgi.service
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [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
    ~
    ~
  19. uwsgi.service 시작하고 시작프로그램으로 등록

    1
    2
    $ sudo systemctl start uwsgi
    $ sudo systemctl enable uwsgi
  20. 기존 스테틱 웹 서버에서 장고 애플리케이션 구동하기 위해 사이트 설정 파일 변경

    1
    $ sudo vim /etc/nginx/sites-available/staticweb
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    upstream django {
    server unix:/var/www/django/run/uwsgi.sock;
    }
    server {
    listen 80;
    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 / {
    include /etc/nginx/uwsgi_params;
    uwsgi_pass django;
    }
    }
  21. 장고 소스코드가 있는 폴더의 소유자와 권한 변경

    1
    2
    3
    $ sudo chown -R django:www-data /var/www/django
    $ sudo chmod -R g+w /var/www/django
    # -R : Recursive 옵션; 하위폴더까지 계속 반복해서 적용
  22. 소스코드 파일 수정되었으므로, uwsgi 재실행

    1
    $ sudo systemctl restart uwsgi
  23. 웹 브라우저 접속하여 사이트 구동여부 확인