티스토리 뷰

우분투 환경에서 장고(Django) 배포 및 테스트 환경 설정

Server Setting

[Django + Nginx + uWSGI] 

on Linux(Ubuntu 14.04 LTS)


개요

 본 포스팅은 Django 개발 환경 구축 방법 가이드이다. Django는 python이 설치되어있는 곳 어디든 개발 환경을 구축할 수 있지만 되도록이면 배포 환경과 동일한 환경에서 테스트&개발 하는것이 좋다. 예를들어 개발 환경은 맥이고 배포 환경은 리눅스라면 여러가지 생각하지 못했던 문제점이 사전에 발견되지 않아서 배포시 오류가 나는 경우가 있다. 또한 맥 환경과 리눅스 환경을 따로 구축한다면 python, pip, package 버전을 맞추다가 이상하게 설치가 안되거나 Nginx, uwsgi 버전이 안맞거나 하는등 많은 문제점이 발생하기 때문이다. (경험자) 그래서 어느 작업 환경이던 서버와 동일한 환경을 가상머신에 배포환경과 동일하게 설정하는 것이 편하다.

본 포스팅은 테스트서버를 구축하기 위한 작업이지만 단순히 Django만 설치하고 끝나는것이 아니라 배포 환경까지 재현하기 위해 Nginx와 uWSGI를 활용하여 서버 환경을 구축하는 것을 목표로 한다.


목표

  • 이미 서비스 되고 있는 서버 소스코드를 로컬 가상 환경에서 활성화 시키기 위한 방법 전반
  • 서버와 동일한 테스트 환경 이해
  • Linux(ubuntu) + Django + Nginx + uWSGI 설정 이해
  • Django - Postgresql 연동 이해
  • Fabric을 활용한 배포 방법 이해
  • pycharm remote setting을 이용한 빠르고 편한 배포 환경 작업 이해

목차

  1. Local 환경에서 가상머신을 활용하여 Ubuntu 설치 [Virtual Box / Parallels Desktop]
  2. 가상머신 포트포워딩
  3. SSH 접속 설정
  4. ubuntu 설정 (superuser 추가, 패키지관리자 사용, git, python, pip, nginx 설치)
  5. 가상환경 설정 (python virtualenv)
  6. pip로 필수 패키지 설치
  7. uwsgi 설정
  8. nginx 설정
  9. postgresql 설정
  10. django-celery 연동
  11. fabric 사용
  12. pycharm remote setting environment (auto deploy)
  13. pgadmin4 사용
  14. db migration
본 포스팅은 4.~8. 까지 주제만 다루고 다른 정보는 추후 다룸

환경

  1. Linux: Ubuntu 14.04 LTS
  2. Django: 1.11.1
  3. python: 3.4.3
  4. postgresql
  5. celery
  6. redis-server



Ubuntu 설정

superuser 추가

# root 활성화
sudo passwd root
# service에 사용할 계정 추가 
sudo adduser {userName}
sudo passwd {userName}

우선 처음 우분투를 설치하면 root 비밀번호를 설정하고 관리하고자하는 계정을 만들어 home 디렉토리를 생성한다.


sudo 권한 추가

# root 에서(먼저)
sudo vim /etc/sudoers

{userName} ALL=(ALL:ALL) ALL 추가

새로 생성한 관리자 계정에 sudo 권한을 추가하기 위해서 '/etc/sudoers'에 권한을 설정해 준다


우분투 패키지관리자로 필요 프로그램 설치

# 패키지 관리자 업데이트
sudo apt-get update
 
# GIT 설치
sudo apt-get install git
 
# PIP 설치
sudo apt-get install python-pip
 
# Nginx 설치
sudo apt-get install nginx

우분투 패키지 관리자를 처음 실행하거나 오랜만에 실행한다면 update를 해주어야한다. 패키지관리자의 사용 방법은 간단하므로 생략한다.


Git clone

# git clone
git clone https://{account}@bitbucket.org/{your repo path}.git {project dir}

실 서버에 구동시킬 소스코드를 git으로 내려받는다. 본 포스팅은 이미 잘 구동되고 있는 서버의 소스코드를 내려받아 설정할 것이다.


Git clone 실패시

sudo vi /etc/hosts
# 호스트 추가
# 설정 열기
104.192.143.2 bitbucket.org

bitbucket을 사용하시는 분들이라면 git clone시 오류가 발생할 수 있다. 오류가 발생했다면 위 설정을 추가해주자


가상환경 설정 (python virtualenv)

install virtualenv

# 필수 패키지 설치
sudo pip install virtualenv
sudo pip install virtualenvwrapper
 
# (에러나면 pip install —ignore-installed six) mkdir ~/.virtualenvs
export WORKON_HOME=~/.virtualenvs
 
# 재접속시 명령어 설정
~/.profile 에 source /usr/local/bin/virtualenvwrapper.sh 추가.
export VIRTUALENV_PYTHON=`which python3`

pip를 이용하여 virtualenv 환경을 설정한다. python 버전은 3를 쓰기 때문에 python2가 구동되지 않게 3를 명시해 준다


virtualenv 사용방법

mkvirtualenv {envName} # 생성하기 
workon {envName} # 들어가기 
deactivate # 나오기

환경변수명으로 가상환경 폴더를 만들고 workon 명령어를 통해 진입한다.

이 이후부터는 workon {환경변수명} 으로 가상환경에서 진입한 상태에서 모든 작업이 이루어진다


pip로 필수 패키지 설치

# virtualenv 환경안에 설치된 package 목록 리스트 추출.
# (나중에 추출할 때만 사용)
pip freeze > requirements.txt
 
# (requirements 설치시 에러나면 아래 명령 실행 Error: pg_config executable not found)
 
# root
pip install —upgrade setuptools
easy_install -U setuptools
sudo apt-get install libpq-dev
sudo apt-get install python3-dev
 
# 새로운 환경에서 설치.
pip install -r requirements.txt

본 포스팅에 사용된 django 소스코드는 requirements.txt가 포험되어 있기 때문에 환경설정시pip install -r requirements.txt 를 실행하면 되지만 초기 서버 세팅 상태라면 requirements.txt가 없기 때문에 참고용으로 본 프로젝트에 사용되는 requirements.txt를 공유한다

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
amqp==2.2.1
billiard==3.5.0.3
boto==2.42.0
celery==4.0.2
defusedxml==0.5.0
Django==1.11.1
django-celery-beat==1.0.1
django-celery-results==1.0.1
django-filter==0.13.0
django-modeladmin-reorder==0.2
django-storages==1.4.1
djangorestframework==3.4.0
kombu==4.0.2
Markdown==2.6.6
oauthlib==2.0.1
Pillow==3.3.0
psycopg2==2.6.2
pyfcm==1.0.5
Pygments==2.1.3
PyJWT==1.4.2
python-gcm==0.4
python3-openid==3.1.0
pytz==2016.6.1
redis==2.10.5
requests==2.11.1
requests-oauthlib==0.8.0
reverse==0.1.0
simplejson==3.10.0
six==1.10.0
social-auth-app-django==1.1.0
social-auth-core==1.2.0
uWSGI==2.0.13.1
vine==1.1.4
cs


uwsgi 설정

uwsgi를 구동하기 위한 설정파일을 하나 공유한다

uwsgi.ini

; uwsgi.ini
[uwsgi]
 
project = {projectName}
base = /home/ubuntu
 
chdir = %(base)/%(project)
home = %(base)/.virtualenvs/{envName}
module = %(project).wsgi:application
 
master = true
processes = 10
 
daemonize = %(base)/{logName}.log
 
socket = %(base)/%(project).sock
;chown-socket = www-data:www-data
chmod-socket = 664
vacuum = true

{envName} 에는 환경변수 이름을
{projectName} 에는 django프로젝트 이름을
{logName} 에는 로그파일 이름을 넣어주면 된다.


Nginx 설정

nginx를 구동하기 위한 설정파일을 하나 공유한다

nginx.conf

# nginx.conf upstream django { server unix:///home/ubuntu/{projectName}.sock; #server 127.0.0.1:8001; # for a web port socket } server { listen 8000; server_name {ip or host}; charset utf-8; client_max_body_size 75M; location / { uwsgi_pass django; include uwsgi_params; } }

{projectName} 에는 uwsgi 설정때 입력했던 것과 동일한 django 프로젝트 이름을 넣으면 된다. 눈치와 이해가 빠르신 분들은 눈치채셨겠지만 nginx는 uwsgi socket과 연결된다.

server_name에는 ip 혹은 domin을 입력한다.


서버 실행과 종료

# 서버 실행
uwsgi —ini ~/dalping/conf/dalping.ini
# 실행시마다 파일의 권한을 줘야한다.
sudo chown -R www-data:www-data ~/dalping.sock
sudo service nginx start
 
# 서버 종료
sudo service nginx stop
killall -9 uwsgi

서버 실행시 uwsgi를 먼저 실행시키고 socket의 권한을 바꿔준 후 nginx를 실행시킨다.
uwsgi는 실행시 10개의 프로세스가 돌고 있으므로 프로세스 이름을 찾아 모두 kill 해준다




마무리

아직 다뤄야할 주제가 많이 남아있다.
위 목차를 다 다루게 되면 본 포스팅을 수정할 예정이다


댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함