본문 바로가기

나의 IT

NGINX + Django + uWSGI + MySQL (or MariaDB) - 우분투 기준

Ubuntu 14.04 LTS 버전 기준입니다. 사용자 환경에 따라 세부 경로는 다소 다를 수 있습니다.

(ex: /usr/share/nginx/html/ 혹은 /usr/share/nginx/www/ 일수 있습니다)

 

기초 준비작업

sudo hostname localhost

sudo apt-get update

sudo apt-get upgrade

Python 설치

sudo apt-get install python

sudo apt-get install python-virtualenv

sudo apt-get install python2.7-dev

nginx + uwsgi 설치

sudo apt-get install nginx

sudo service nginx start

 

sudo apt-get install uwsgi

---------------------------------------------------------------------------------------------------------------------------

PHP 설치 ( Phpmyadmin 을 사용하기 위해서 설치합니다. Sequel Pro 같은 다른 클라이언트를 사용하시면 설치 안하셔도 무방합니다)

 

sudo apt-get install php5-fpm

sudo nano /etc/php5/fpm/php.ini

cgi.fix_pathinfo=1 을 cgi.fix_pathinfo=0 로 수정

(숫자를 1로 해놓으시면 유저가 요청했을때 php interpreter 가 요청한 파일과 비슷한 파일을 보여 줄수도 있습니다. 보안상의 문제때문에 가장 보수적인 0으로 설정하는게 좋습니다)

sudo service php5-fpm restart

sudo nano /etc/nginx/sites-available/default

Nginx 의 서정 파일의 php 관련 부분의 주석을 다음과 같이 해제해 줍니다.

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
     # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
     #
     # # With php5-cgi alone:
     # fastcgi_pass 127.0.0.1:9000;
     # # With php5-fpm:
     fastcgi_pass unix:/var/run/php5-fpm.sock;
     fastcgi_index index.php;
     include fastcgi_params;
}

Nginx 재시작 및 권한 변경

sudo service nginx restart

sudo chown -R ubuntu:www-data /usr/share/nginx/html/

Nginx 의 default folder 의 권한이 root:root 로 되어있으므로 해당 부분을 user-group:www-data 로 변경해줍니다.

user는 본인이 주로 사용하는 user 의 그룹 이름이면 무방합니다. (보통 로그인 user name)

Maria DB 설치

https://downloads.mariadb.org/mariadb/repositories/#mirror=syringa&distro=Ubuntu&version=10.0&distro_release=trusty

위의 링크에 가서 본인의 OS를 선택하고 설명대로 실행하됩니다.

sudo mysql_secure_installation

MySQL 설치

sudo apt-get install mysql-server

sudo mysql_secure_installation

PhpMyAdmin 설치

sudo apt-get install phpmyadmin

sudo ln -s /usr/share/phpmyadmin/ /usr/share/nginx/html

sudo service nginx restart

덧! 혹시 MariaDB 10.x 버전을 설치했다면 myphpadmin 에서 error flag가 뜹니다. 아래의 명령어를 실행하면 문제 해결

sudo apt-get install php5-mcrypt

sudo php5enmod mcrypt

sudo service php5-fpm restart

sudo service mysql restart

sudo service nginx restart

---------------------------------------------------------------------------------------------------------------------------

Django + uWSGI 환경 설정하기

디렉토리 생성 및 권한 변경

sudo mkdir /var/www

sudo mkdir /var/www

sudo chown -R ubuntu:www-data /var/www/

mkdir /var/www/example.com

cd /var/www/example.com

mkdir venv conf src logs

Python Virtualenv 설정

sudo virtualenv /var/www/example.com/venv

source /var/www/example.com/venv/bin/activate

[Virtualenv 는 Python 개발 환경에서 라이브러를 여러개 설치할경우 프로젝트별로 버전 및 라이브러간의 충동을 방지하기위해 가상으로 독립적 개발 환경을 보장합니다]

장고 설치 및 프로젝트 생성

sudo var/www/example.com/venv/bin/pip install django

cd /var/www/example.com/src

django-admin.py startproject example_project

Config 파일 설정

:nginx.conf

sudo nano /var/www/example.com/conf/nginx.conf

 

server {

    listen 80;

    server_name example.com www.example.com;

    root /var/www/example.com/src/example_project;

    access_log /var/www/example.com/logs/access.log;

    error_log /var/www/example.com/logs/error.log;

 

    location /static/ { # STATIC_URL

        alias /var/www/example.com/src/static/; # STATIC_ROOT

        expires 30d;

}

    location /media/ { # MEDIA_URL

        alias /var/www/example.com/src/media/; # MEDIA_ROOT

        expires 30d;

    }

    location / {

        include uwsgi_params;

        uwsgi_pass 127.0.0.1:8889;

    }

}

:uwsgi.ini

sudo nano /var/www/example.com/conf/uwsgi.ini

[uwsgi]

# variables

projectname = example_project

projectdomain = example.com

base = /var/www/example.com

 

# config

plugins = python

master = true

protocol = uwsgi

env = DJANGO_SETTINGS_MODULE=%(projectname).settings

pythonpath = %(base)/src/%(projectname)

module = %(projectname).wsgi

socket = 127.0.0.1:8889

logto = %(base)/logs/uwsgi.log

#below line runs it as a daemon in background

daemonize = /var/log/uwsgi/example_project.log

[덧! 프로젝트 및 설치 환경에 따라 경로가 다를 수 있습니다. 빨간색으로 하이라이트 된 부분 주의]

 

nginx 기본 설정 변경 (추가한 nginx.conf 추가)

sudo nano /etc/nginx/nginx.conf 

user    www-data;

# ...

http {

    # ...

    include /var/www/*/conf/nginx.conf;

    # ...

}

 MySQL 및 uWSGI plugins 설치 [MariaDB 공통]

sudo apt-get install python-mysqldb

sudo apt-get install uwsgi-plugin-python

sudo pip install south ( 옵션 )

 ini 파일 추가

sudo uwsgi --ini /var/www/example.com/conf/uwsgi.ini

 시스템 시작시 ini 파일 추가 설정

sudo nano /etc/init/uwsgi.conf

# Emperor uWSGI script

description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [06]

exec uwsgi --master --die-on-term --emperor /var/www/example.com/conf/uwsgi.ini

시스템 재시작

sudo reboot

 

[덧!]

MariaDB 10.x 를 설치할경우 python 에서 MySQL (or MariaDB)에 접속 가능하게 해주는 MySQLdb 라이브러가 pip 로는 인스톨이 안됩니다.

sudo apt-get install python-mysqldb 으로 메인 시스템 라이브러리에 설치 후에 virtualenv 를 생성할때 --system-site-packages 옵션을 주시면 됩니다.

ex) sudo virtualenv /var/www/example.com/venv --system-site-packages



즐코딩~