어려운 내용은 아니지만, 서버를 구축하면서 반드시 해야 할 작업중의 하나가 시간을 제대로 맞추는 것이다. Debian/Ubuntu 에는 ntp 데몬을 쉽게 설치할 수 있으며, 이것이 주기적으로 인터넷에 있는 시간서버와 주시적으로 시간을 맞추도록 되어 있다. 그리고, 해당 지역의 로컬 시간을 설정하기 위해서는 /etc/localtime 을 원하는 지역의 것으로 바꾸어주면 된다. 방법은 직접 수동으로 하는 것과, dpkg-reconfigure 라는 툴을 이용하는 2가지 방법을 이용할 수 있다. 간단하니 아래와 같이 직접 설정해보자. 사실 지금도 내 개발서버의 시간이 맞지 않아서, 백업이 엉뚱한 시간이 이루어지고 있었다. ^^;

[수동 설정]

$ cd /etc
$ sudo rm localtime
$ sudo cp /usr/share/zoneinfo/Asia/Seoul localtime
$ sudo apt-get install ntp
$ date
Mon Mar 12 10:05:40 KST 2012

[툴을 이용한 설정]

$ sudo dpkg-reconfigure tzdata --> Asia, Seould 선택
$ sudo apt-get install ntp
$ date
Mon Mar 12 10:05:40 KST 2012

 

Django를 Deploy하기 위한 여러가지 방법들을 소개했었는데, 이번 방법이 내가 가장 선호하는 방식이다. Instance 별로 정상동작 유무를 확인하기가 쉽고, NginX 에서는 로드밸런싱을 하고, 하나의 Instance 에 문제가 발생하면 자동으로 제외되어 무장애/무중단 서비스를 제공할 수 있다.

여기에서 더 나아가 memcached 등을 이용하여 캐싱까지 처리하면 성능에서도 상당히 만족스러운 결과를 볼 수 있을 것이다. 또한, trunserver 조작에 대해서 개선할 부분이 많이 있다. 이런 부분들은 다음에 생각해보고, NginX와 trunserver 를 이용한 방법을 살펴보자.

  1. Install Python
    $ apt-get install zlibc zlib1g-dev libxml2 libxml2-dev libbz2-dev curl build-essential python
    $ curl -kL http://github.com/utahta/pythonbrew/raw/master/pythonbrew-install | bash
    $ echo 'source ~/.pythonbrew/etc/bashrc' >> ~/.bashrc
    $ source ~/.bashrc
    $ pythonbrew install --force --no-test 2.7.2
    $ pythonbrew switch 2.7.2
    
  2. Install Django, trunserver
    $ pip install django psycopg2 trunserver
    
  3. Create Project
    $ mkdir -p /opt/project
    $ cd /opt/project
    $ django-admin.py startproject sample_project
    $ cd sample_project
    $ mkdir media
    
  4. /opt/project/sample_project 에 start.sh를 만든다.
    nohup python manage.py trunserver --verbosity=0 --noreload 0.0.0.0:9000 > /dev/null 2>&1 &
    nohup python manage.py trunserver --verbosity=0 --noreload 0.0.0.0:9001 > /dev/null 2>&1 &
    
    $ chmod 755 start.sh
    
  5. trunuwsgi 실행
    $ ./start.sh
    
  6. Install NginX
    $ aptitude install nginx
    
  7. Configure NginX
    $ cd /etc/nginx/sites-available
    $ vi django 
    upstream sample_project {
        ip_hash;
        server 127.0.0.1:9000;
        server 127.0.0.1:9001;
    }
    
    server {
        listen 80;
        server_name mydomain.com;
        
        location /site_media  {
            root /opt/project/sample_project/media/;
        }
    
        location / {
            proxy_pass sample_project;
            proxy_set_header XRealIP $remote_addr;
        }
    }
    
    $ cd /etc/nginx/sites-enabled
    $ ln -s /etc/nginx/sites-available/django django
    
  8. Run NginX
    $ /etc/init.d/nginx restart
    
  1. Install Python
    $ apt-get install zlibc zlib1g-dev libxml2 libxml2-dev libbz2-dev curl build-essential python
    $ curl -kL http://github.com/utahta/pythonbrew/raw/master/pythonbrew-install | bash
    $ echo 'source ~/.pythonbrew/etc/bashrc' >> ~/.bashrc
    $ pythonbrew install --force --no-test 2.7.2
    $ pythonbrew switch 2.7.2
    
  2. Install Django, uWSGI
    $ pip install django psycopg2 uwsgi
    
  3. Create Project
    $ mkdir -p /opt/project
    $ cd /opt/project
    $ django-admin.py startproject sample_project
    $ cd sample_project
    $ mkdir media
    
  4. /opt/project/sample_project 에 django0.ini를 만든다.
    [uwsgi]
    socket = 127.0.0.1:8000
    chdir = /opt/project/sample_project
    pythonpath = /opt/project
    env = DJANGO_SETTINGS_MODULE=sample_project.settings
    module = django.core.handlers.wsgi:WSGIHandler()
    master = true
    processes = 4
    daemonize = /opt/project/sample_project/uwsgi0.log
    pidfile = /opt/project/sample_project/uwsgi0.pid
    
  5. /opt/project/sample_project 에 django1.ini를 만든다.
    [uwsgi]
    socket = 127.0.0.1:8001
    chdir = /opt/project/sample_project
    pythonpath = /opt/project
    env = DJANGO_SETTINGS_MODULE=sample_project.settings
    module = django.core.handlers.wsgi:WSGIHandler()
    master = true
    processes = 4
    daemonize = /opt/project/sample_project/uwsgi1.log
    pidfile = /opt/project/sample_project/uwsgi1.pid
    
  6. uwsgi 실행
    $ uwsgi django0.ini
    $ uwsgi django1.ini
    
  7. Install NginX
    $ aptitude install nginx
    
  8. Configure NginX
    $ cd /etc/nginx/sites-available
    $ vi django
    
    upstream sample_project {
        ip_hash;
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
    }
    
    server {
        listen 80;
        server_name mydomain.com;
        
        location /site_media  {
            root /opt/project/sample_project/media/;
        }
    
        location / {
            include uwsgi_params;
            uwsgi_pass sample_project;
        }
    }
    
    $ cd /etc/nginx/sites-enabled
    $ ln -s /etc/nginx/sites-available/django django
    
  9. Run NginX
    $ /etc/init.d/nginx restart
    

우선, 어떤 디바이스가 USB 스틱인지를 찾아야 한다. 잘 못하면 다른 HDD 의 내용까지 날릴 수 있기 때문이다. USB 스틱을 PC/서버에 연결한 후에 dmesg 명령으로 어느 디바이스가 USB 스틱인지를 확인한다.

[ 69.902747] scsi 4:0:0:0: Direct-Access VBTM Store 'n' Go 5.00 PQ: 0 ANSI: 0 CCS
[ 69.903314] sd 4:0:0:0: Attached scsi generic sg3 type 0
[ 70.867573] sd 4:0:0:0: [sdy] 2013184 512-byte logical blocks: (1.03 GB/983 MiB)
[ 70.868085] sd 4:0:0:0: [sdy] Write Protect is off

위의 예에서는 sdy (/dev/sdy)가 USB 스틱이다. 다시 한번, 해당 디바이스가 USB 스틱인지 확인하기 바란다!

Debian 미러 사이트에서 boot.img.gz 과 netinstall iso 이미지를 다운로드 받는다.

# wget ftp://ftp.kr.debian.org/debian/dists/squeeze/main/installer-i386/current/images/hd-media/boot.img.gz
# wget ftp://ftp.kr.debian.org/debian-cd/6.0.3/i386/iso-cd/debian-6.0.3-i386-netinst.iso

boot.img.gz을 USB 스틱에 기록한다.

# zcat boot.img.gz > /dev/sdy

USB 스틱을 마운트하고 netinst.iso 이미지를 USB 스틱의 root 디렉토리에 복사한다.

# mkdir /mnt/usbstick
# mount /dev/sdy /mnt/usbstick
# cp debian-*-netinst.iso /mnt/usbstick
# umount /mnt/usbstick

이제 USB 스틱은 부팅이 되며, Debian netinstaller 를 시작할 수 있을 것이다.

'ETC > IT' 카테고리의 다른 글

IE9 에서 Flash 배경이 까맣게 나오는 현상 해결하기  (0) 2011.11.02
.tmux.conf  (0) 2011.11.01
FreeBSD 8.2 설치후 작업  (0) 2011.07.09
(Freeware for Business) 포토스케이프 : 국산 이미지 편집기  (0) 2011.07.06
SSHD 보안  (0) 2011.07.04

+ Recent posts