Linux
nginx + uWSGI = Django
bluedevil77
2014. 11. 24. 12:16
- sudo apt-get -y install openssh-server
- sudo apt-get update
- sudo apt-get -y upgrade
- sudo apt-get -y install python-virtualenv
- install python 3.4.2 => setuptools 및 pip는 자동 설치. (python 3.4에 포함.)
sudo apt-get install libssl-dev openssl wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz tar -xvf Python-3.4.2.tgz cd Python-3.4.2 ./configure make sudo make install ./python
- sudo apt-get install nginx
- Python2 => python3 변경
python -V python3 -V which python which python3 sudo mv /usr/bin/python /usr/bin/python -2.7.x sudo ln -s /usr/bin/python3 /usr/bin/python python -V python3 -V
- sudo pip3 install uwsgi python2.x 버전을 사용하려면 pip install uwsgi
- sudo mkdir /www/func.dev func = 내 폴더 이름
- sudo chown func:func /www/django/func
- cd /www/django/func
- mkdir conf extras
- virtualenv -p python3 venv
- cd venv
- source bin/activate
- cd /www/django/func
- pip3 install django
- django-admin.py startprojcet mysite mysite = django 프로젝트 이름
- sudo chown func:func /www/func/django/mysite
- sudo chmod 755 /www/func/django/mysite
- cd mysite
- mkdir db
- deactivate
- sudo nano /etc/init/uwsgi.conf pip3 install uwsgi를 할 경우 sudo service uwsgi start|stop|restart|reload 를 가능하게 하기 위한 작업
description "uWSGI Emperor" start on runlevel [2345] stop on runlevel [!2345] respawn exec /usr/local/bin/uwsgi --master --die-on-term --emperor /etc/uwsgi/vassals/
- nano /www/func/django/conf/mysite.ini mysite = django 프로젝트 이름 sudo service uwsgi start|stop|restart|reload 하기위한 작업 %n는 ini 파일이름을 자동으로 불러옴
https://uwsgi-docs.readthedocs.org/en/latest/Configuration.html py-autoload는 개발 후 주석처리 할것![uwsgi] #variables base = /www/django/func #config uid = www-data gid = www-data chmod-socket = 664 chown-socket = www-data ;die-on-term = true ;emperor = true ;no-site = true ;protocol = uwsgi ;master = true py-autoreload = 10 enable-threads = true limit-as = 512 processes = 5 vacuum = true chdir = %(base)/%n module = %n.wsgi:application virtualenv = %(base)/venv socket = /dev/shm/%n.sock pidfile = %(base)/extras/%.pid touch-reload = %(base)/extras/%n.pid logto = %(base)/extras/uwsgi.log
- sudo mkdir /etc/uwsgi
- sudo mkdir /etc/uwsgi/vassals
- sudo ln -s /www/func/django/conf/mysite.ini /etc/uwsgi/vassals/ emperor = /etc/uwsgi/vassals/mysite.ini 처럼 symlink 해주면 다수의 프로젝트를 로드할 수 있음
- nano /www/func/django/conf/mysite.conf mysite = django 프로젝트 이름
server { listen 80; server_name 127.0.0.1; charset utf-8; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; access_log /www/func/django/extras/access.log; error_log /www/func/django/extras/error.log; location /static { alias /www/func/django/mysite/static; } location / { try_files $uri @django; } location @django { uwsgi_pass unix:/dev/shm/mysite.sock; include uwsgi_params; } }
- sudo ln -s /www/func/django/conf/mysite.conf /etc/nginx/sites-enabled/mysite.conf
- sudo service nginx restart
- sudo service uwsgi restart
- mkdir /www/func/django/mysite/db
- sudo chown www-data:func db
- sudo chmod 755 db
- virtualenv에서 python manage.py startapp 이름
- settings.py db/ 경로추가
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db/db.sqlite3'), } } TEMPLATE_DIRS = ( os.path.join(BASE_DIR, 'templates'), ) STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') STATICFILES_DIRS = ( ('css', os.path.join(BASE_DIR, 'static', 'css')), ('js', os.path.join(BASE_DIR, 'static', 'js')), ('img', os.path.join(BASE_DIR, 'static', 'img')), )
- templates 폴더 생성
base.html<!DOCTYPE html> {% load staticfiles %} <html> <head> <meta charset="UTF-8"> <title>{{ title }}</title> <link rel="stylesheet" href="{% static 'css/base.css' %}" /> </head> <body> {% block content %}{% endblock %} </body> </html>
home.html{% extends 'base.html' %} {% load staticfiles %} {% block content %} <h1>{{ title }}</h1> <img src="{% static 'img/bomi.gif'%}" alt="보미" /> {% endblock %}
- settings.py 에 있는 static 폴더와 같게 업로드
- python manage.py collectstatic
- python manage.py syncdb
- models.py 작업, views.py작업
- python manage.py makemigrations 앱이름
- python manage.py migrate
- sudo chown www-data:func /www/func/django/mysite/db/db.sqlite3
- sudo chmod 664 /www/func/django/mysite/db/db.sqlite3
- python manage.py createsuperuser => 관리자계정 만들 경우...