행복한 아빠

Ubuntu에 장고 애플리케이션 배포 본문

Python

Ubuntu에 장고 애플리케이션 배포

행복한아빠 2016. 10. 7. 11:13

Installation On Ubuntu 14.04.3 LTS

  • OS : Ubuntu 14.04.3 LTS
  • Python : 3.5
  • WSGI : uWSGI
  • Web : Nginx
  • DB : MySQL
  • Application 설치 디렉토리 : /home/ubuntu/hello-web


Python 3.5 설치

Python 3.5

Ubuntu 14 LTS는 python 2.7, python 3.4가 설치되어있다. 따라서 3.5는 따로 설치해야 한다. (그냥 기본 python 쓰기 위해서는 설치 불필요)

$ sudo add-apt-repository ppa:fkrull/deadsnakes
$ sudo apt-get update
$ sudo apt-get install python3.5
$ python3.5 -V

python 3.5 명령어는 "python3.5"이다.


pip3 & virtualenv

python 3.5에 맞게 pip3와 virtualenv를 설치해야 한다.

$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3.5 get-pip.py
$ sudo pip3 install virtualenv


mysql client 모듈

python mysqlclient 모듈 설치를 위해 다음을 설치해야 한다.

$ sudo apt-get install libmysqlclient-dev
$ sudo apt-get install python3.5-dev


Git 설치

Git을 이용하여 소스를 관리하고 application을 배포한다면 git을 설치한다.

$ sudo apt-get install git


Application 설치 (Git을 사용할 경우)

$ git clone https://yourgitserver/hello/hello-web.git
$ cd hello-web
$ virtualenv venv
$ source venv/bin/activate
$ pip install -r requirements.txt

각자 다른 형상관리도구를 사용하면 그 도구에 맞게 소스를 옮긴다.

uWSGI 구성

실제 서비스는 WSGI Container에서 한다. WSGI Container로 uWSGI를 사용한다. uWSGI는 Emperor 모드로 실행한다.

$ pip install uwsgi
$ mkdir /home/ubuntu/hello-web/logs
$ sudo mkdir -p /etc/uwsgi/sites
$ cd /etc/uwsgi/sites
$ sudo vi hello.ini


/etc/uwsgi/sites/hello.ini

[uwsgi]
project = hello-web
base = /home/ubuntu

chdir = %(base)/%(project)
home = %(base)/%(project)/venv
module = hello.wsgi:application

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 664
vacuum = true
logto = %(base)/%(project)/logs/%n.log


uWSGI를 Upstart 추가

uWSGI 프로세스 관리를 upstart로 한다.

$ sudo vi /etc/init/uwsgi.conf


/etc/init/uwsgi.conf

description "uWSGI application server in Emperor mode"

start on runlevel [2345]
stop on runlevel [!2345]

setuid ubuntu
setgid www-data

exec /home/ubuntu/hello-web/venv/bin/uwsgi --emperor /etc/uwsgi/sites


NGINX 구성

$ sudo apt-get install nginx
$ sudo vi /etc/nginx/sites-available/hello-web

/etc/nginx/sites-available/hello-web

server {
    listen 80;
    server_name hello.co.kr, www.hello.co.kr;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/ubuntu/hello-web;
    }

    location / {
        include        uwsgi_params;
        uwsgi_pass     unix:/home/ubuntu/hello-web/hello-web.sock;
    }
}

hello-web 설정을 nginx 구동 디렉토리에 옮기고(symlink) 기본 설정은 삭제한다.

ln -s /etc/nginx/sites-available/hello-web /etc/nginx/sites-enabled/
rm /etc/nginx/sites-enabled/default


구동

$ sudo restart nginx restart
$ sudo start uwsgi


'Python' 카테고리의 다른 글

Ubuntu에 장고 애플리케이션 배포  (0) 2016.10.07
Python의 숨은? 특징 2  (0) 2016.08.30
Python의 숨은? 특징 (어머 이건 사야 돼)  (0) 2016.08.25
0 Comments
댓글쓰기 폼