AWS EC2에 Django 서버 설정하기

  • EC2에 장고 서버 셋팅하기

    1. EC2에 SSH로 접속한다.

      1
      2
      3
      4
      5
      6
      7
      8
      # 퍼블릭 DNS 주소를 가지고 있다면
      $ ssh -i ~/.ssh/[키페어 파일 이름] ubuntu@[EC2의 퍼블릭 DNS]

      # 탄력적 IP를 가지고 있다면
      $ ssh -i ~/.ssh/[키페어 파일 이름] ubuntu@[할당받은 탄력적 IP]

      # Route53을 통해 도메인을 연결했다면
      $ ssh -i ~/.ssh/[키페어 파일 이름] ubuntu@[연결한 도메인 주소]
    2. 장고를 위한 계정을 추가한다.

      1
      2
      3
      4
      5
      6
      7
      $ cd /var/www

      # -g : 현재 그룹에 바로 추가
      # -b : 홈 폴더 지정
      # -m : 유저의 홈 폴더 생성
      # -s : 기본으로 사용할 쉘 지정
      $ sudo useradd -g www-data -b /home -m -s /bin/bash django
    3. 소스 코드를 업로드할 폴더를 만든다.

      1
      $ sudo mkdir /var/www/django
    4. 소스 코드 폴더의 소유자를 변경한다.

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

      1
      2
      3
      # -a : 추가 명령
      # -G : 그룹 추가 명령
      $ sudo usermod -a -G www-data ubuntu
    6. 파이썬 관련 패키지를 설치한다.

      1
      $ sudo apt-get install python3-dev python3-venv python3-pip
    7. 소스 코드 폴더 밑에 파이썬 가상 환경을 만든다.

      1
      $ sudo python3 -m venv /var/www/django/venv
    8. 관리자 모드로 변경한다.

      1
      2
      $ sudo -s
      # ubuntu에서 root로 바뀌는지 확인한다.
    9. 가상 환경을 활성화한다.

      1
      $ source venv/bin/activate
    10. 가상 환경에 장고를 설치한다.

      1
      $ pip install django
    11. 장고 프로젝트를 생성하고 migrate한다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      $ django-admin startproject config .

      $ python manage.py migrate

      # 장고에서 서버를 실행해서 동작을 확인한다.
      # 인스턴스 보안에서 테스트를 위해 인바운드 규칙에 포트 번호 8000을 추가한 것을 이용
      # 0:8000에서 0은 외부 트래픽에서도 받아보겠다는 의미
      $ python manage.py runserver 0:8000

      # 반드시 장고에서 서버 동작을 확인하도록 하자.
    12. uwsgi 모듈을 설치한다.(WSGI 모듈 중 하나)

      1
      $ pip install uwsgi
    13. uwsgi가 동작하는지 아래 명령어를 입력한 후, 웹 브라우저로 접속해본다.

      1
      2
      $ uwsgi --http :8000 --home /var/www/django/venv/ --chdir /var/www/django/ --module config.wsgi
      # 웹 브라우저에 [ssh 접속 시 사용한 주소]:8000으로 접속해본다.
    14. 관련 폴더를 만들고 설정해본다.

      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
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      # run과 logs 폴더를 만든다.
      $ sudo mkdir run logs

      # 폴더의 소유권을 변경한다.
      $ sudo chown django:www-data run
      $ sudo chown django:www-data logs

      # ini 폴더를 만든다.
      $ sudo mkdir ini

      # ini 폴더 안에 uwsgi.ini 파일을 작성한다.
      $ sudo vim ini/uwsgi.ini


      # uwsgi.ini 내용
      [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


      # uwsgi.service 파일을 만든다.
      $ sudo vim /etc/systemed/system/uwsgi.service


      # 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


      # uwsgi.service를 시작하고 시작 프로그램으로 등록한다.
      $ sudo systemctl start uwsgi
      $ sudo systemctl enable uwsgi
    15. 사이트 설정 파일을 변경하여 장고 애플리케이션이 구동되도록 한다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      # 기존에 만들어두었던 staticweb 파일을 사용한다.
      $ sudo vim /etc/nginx/sites-available/staticweb


      # staticweb 내용
      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 [Route53으로 연결한 도메인 주소]

      location = /favicon.ico { access_log off; log_not_found off; }

      location / {
      include /etc/nginx/uwsgi_params;
      uwsgi_pass django;
      }
      }
    16. 웹 브라우저에 도메인 주소를 입력하고 구동되는지 확인한다.

Share