nginx('엔진엑스'라고 읽는다. 러시아어가 기본이니 정확한 발음은 모르겠다)는 작고 파워풀한 웹엔진의 능력과 간결한 셋팅은 유명하다. 테스트 해본결과 static 파일의 경우 apache나 lighttpd에 비해 월등한 성능을 보인다. 그러나 fastcgi+php쪽으로는 속도가 apache 보다 못하다. proxy. cache or memcached 기능으로 다양한 조합을 하면 각각 상황에 알맞는 재미있는 구성이 가능할것 같다.
그래서 내가 주로 쓰는 centos, ubunt에 정리겸 설치 및 설정 방법을 정리해봤다.
1. centos 5.4 - install nginx
centos에는 배포본이 아직 없는듯 (0점대 버젼이라 그런가...)...암튼 그래서 구글링을 했다.
wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz tar xvfz spawn-fcgi-1.6.3.tar.gz cd spawn-fcgi-1.6.3 ./configure --prefix=/usr make make install
vi /etc/init.d/php-cgi #!/bin/sh # # php-cgi - php-fastcgi swaping via spawn-fcgi # # chkconfig: - 85 15 # description: Run php-cgi as app server # processname: php-cgi # config: /etc/sysconfig/phpfastcgi (defaults RH style) # pidfile: /var/run/php_cgi.pid # Note: See how to use this script : # http://www.cyberciti.biz/faq/rhel-fedora-install-configure-nginx-php5/ # Source function library. . /etc/rc.d/init.d/functions
# Exit if the package is not installed [ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh
# Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions
# If the daemon is not enabled, give the user a warning and then exit, # unless we are stopping the daemon if [ "$START" != "yes" -a "$1" != "stop" ]; then log_warning_msg "To enable $NAME, edit /etc/default/$NAME and set START=yes" exit 0 fi
do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \ --background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- \ $DAEMON_ARGS \ || return 2 }
do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE > /dev/null # --name $DAEMON RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac
init script 설정 파일 추가한다
chmod +x /etc/init.d/php-fastcgi vi /etc/default/php-fastcgi START=yes
# Which user runs PHP? (default: www-data)
EXEC_AS_USER=www-data
# Host and TCP port for FASTCGI-Listener (default: localhost:9000)
FCGI_HOST=localhost FCGI_PORT=9000
# Environment variables, which are processed by PHP
PHP_FCGI_CHILDREN=4 PHP_FCGI_MAX_REQUESTS=1000
기본 default vhost 설정에 추가
vi /etc/nginx/sites-available/default location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; include fastcgi_params; }
yum install flex bison openssl-devel wget http://mmonit.com/monit/dist/monit-5.0.3.tar.gz tar xvfz monit-5.0.3.tar.gz cd monit-5.0.3 ./configure make; make install
설정 파일은 다음과 같이(/etc/monitrc)
set daemon 60 set logfile syslog facility LOG_daemon set mailserver localhost set alert admin@abc.com set httpd port 8080 address localhost allow localhost
check process apache with pidfile "/var/run/httpd.pid" start = "/etc/init.d/httpd start" stop = "/etc/init.d/httpd stop" if failed host 127.0.0.1 port 80 and protocol http and request "/abc.txt" then restart if cpu usage is greater than 60 percent for 2 cycles then alert if cpu usage > 98% for 5 cycles then restart if 2 restarts within 3 cycles then timeout alert admin@abc.com
check process mysql with pidfile "/var/run/mysqld/mysqld.pid" group database start program = "/etc/init.d/mysqld start" stop program = "/etc/init.d/mysqld stop" if failed host 127.0.0.1 port 3306 then restart if cpu usage > 98% for 5 cycles then restart if 5 restarts within 5 cycles then timeout
centos 에서 php의 버젼은 고질적인 문제다. php5.1인데 yum을 이용해 업그레이드 할 수 있는 안전한 방법은 custom repository를 이용하는 것인데, 이 방법에는 문제가 있다. 문제는 바로 php배포본뿐만 아니라 여타 다른 배포본까지 업데이트 해야 하는 문제가 있다. 만일 다시 원래 repo로 돌아가려면 영향받는 mysql 등까지도 다시 깔아야 하는데 이건 도통 귀찮은 방법이다.
그래서 방법을 찾던 중 제일 간편하고, 다시 원래 배포본으로 돌아갈 수 있는 방법이 있었으니 다음과 같다. ^^
wget http://ftp.de.debian.org/debian/pool/main/s/ssmtp/ssmtp_2.64.orig.tar.bz2 tar xvfj ssmtp_2.64.orig.tar.bz2 cd ssmtp-2.64 ./configure --sysconfdir=/etc make; make install
wget http://ftp.de.debian.org/debian/pool/main/s/ssmtp/ssmtp_2.62.orig.tar.gz wget http://ftp.de.debian.org/debian/pool/main/s/ssmtp/ssmtp_2.62-3.diff.gz tar xvfz ssmtp_2.62.orig.tar.gz gunzip ssmtp_2.62-3.diff.gz mv ssmtp-2.62 ssmtp patch -p0 < ssmtp_2.62-3.diff mv ssmtp ssmtp-2.62 cd ssmtp-2.62/ssmtp ./configure --sysconfdir=/etc make; make install
그리고 sendmail을 대치한다. 만일 sendmail을 지우지 않았다면 다음과 같이 대치 한다. 아니면 /etc/alternatives 가서 mta관련 링크를 수정해야 한다. (근데 sendmail 지워주고 깔면 알아서 셋팅된다.) 참고 : http://linux.com/archive/feature/132006
# # /etc/ssmtp.conf -- a config file for sSMTP sendmail. # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=postmaster # The place where the mail goes. The actual machine name is required # no MX records are consulted. Commonly mailhosts are named mail.domain.com # The example will fit if you are in domain.com and you mailhub is so named. mailhub=mail ← 바꾸려는 메일서버 주소 # Where will the mail seem to come from? #rewriteDomain= # The full hostname hostname=localhost ← 서버 hostname fromlineoverride=yes ← php등에서 메일 보낼때 from을 오버라이딩 가능하게
yum install libevent libevent-devel wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz tar -xvzf memcached-1.4.0.tar.gz cd memcached-1.4.0 ./configure --with-libevent=/usr/lib/ make; make install
php 라이브러리 추가
yum install php-pecl-memcache
혹은 버젼이 안되면, 직접 컴파일
wget http://pecl.php.net/get/memcache-2.2.5.tgz tar xvfz memcache-2.2.5.tgz cd memcache-2.2.5 phpize ./configure --enable-memcache make cp modules/memcache.so /usr/lib/php/modules
PHP 관련 설정도 해주고..
vi /etc/php.d/memache.ini
extension=memcache.so
기본 설정 파일도 만들어주고..
vi /etc/memcached.conf
#Memory a usar -m 16 # default port -p 11211 # user to run daemon nobody/apache/www-data -u nobody # only listen locally -l 127.0.0.1
MS가 지난 5월 24일 무료 시험판(베타2 버전)을 일제히 배포한 비스타(Vista)는 네이버·야후·구글 등 포털 사이트와 시만텍·안철수연구소·하우리 등 보안 소프트웨어 업체들의 수익모델을 한꺼번에 뒤흔들 가능성도 있다.
비스타가 위협적인 이유는 검색과 보안이 ‘기본 기능’이기 때문이다. 네이버·구글에 접속하지 않고도 운영체제에서 키워드 검색이 가능하다. 컴퓨터 바이러스 등을 차단하고 치료하는 소프트웨어 제품도 별도로 구입할 필요가 없다. 달력·시계·계산기·전자지도·날씨·환율·증권·사진·동영상 보기 등 각종 서비스 중에서 필요한 것을 선택해 운영체제 위에 설치함으로써 운영체제의 기능도 넓혔다.
여기에 비스타와 함께 출시될 차세대 인터넷 익스플로러(IE)인 ‘IE 7’은 동시에 여러 개의 인터넷사이트를 띄워 놓고 이곳 저곳을 맘대로 골라보는 ‘탭 브라우징(Tab Browsing)’ 기능을 제공한다. 탭 브라우징은 MS IE의 강력한 경쟁자인 파이어폭스의 뛰어난 기능. MS가 이 기능을 한층 업그레이드한 형태로 IE 7에 집어넣었다. 컴퓨터 화면에 여러 인터넷 사이트의 첫 화면들을 나란히 배열해 동시에 보여주도록 한 ‘퀵 탭스 뷰(quick tabs view)’가 그것이다. 이 기능은 각 포털 사이트의 시장 점유율을 무의미하게 만든다. 이를테면 네이버·다음·야후·엠파스 등이 컴퓨터 화면에 한꺼번에 뜨게 돼 인터넷 초기화면 설정의 의미가 없다. 페이지뷰, 검색이용빈도 등에서 압도적 1위인 네이버 입장에서 볼 때, 비스타와 IE 7은 위협적인 존재가 아닐 수 없다. IT칼럼니스트이자 ‘시맨틱웹’의 저자인 김중태씨는 “네이버 같은 포털 사이트들은 심각한 위기에 직면할 것이며, 영원히 사라질 포털도 있을 것”이라고 경고했다.
기사에서는 윈도 비스타가 뭔가 새로운 서비스로 무장했다 그래서 돌풍이 될것이다 말하는 것 같다.
허나 잘 읽어보면 MS가 아직도 정신못차리고, 그 동안 반독점법을 무시하고, OS 플랫폼으로써의 통합서비스를 하겠다는 얘기뿐이다.
"각 포털 사이트의 시장 점유율을 무의미하게 만든다."는 "퀵 탭스"의 기능이 사실 파이어 폭스 텝 브라우지 기능해서 그렇게 새로울게 없는 서비스다.
오 라일리는 웹 2.0의 첫 번째 원칙을 ‘플랫폼으로서의 웹’이라고 규정한다. 사라진 넷스케이프와 살아남은 구글의 차이를 살펴보면 이 개념을 쉽게 이해할 수 있다. 넷스케이프는 웹 브라우저라는 응용 프로그램을 플랫폼으로 만들려고 했다. 그러나 웹 브라우저는 마이크로소프트의 윈도우즈라는 플랫폼에서 돌아가는 서비스 가운데 하나로 전락해버렸고, 넷스케이프는 설 자리를 잃게 됐다.
거 꾸로 구글은 일찌감치 데이터베이스 관리에 역량을 집중했다. 구글은 넷스케이프처럼 어떤 종류의 응용 프로그램을 팔려고 하지도 않았고 대량의 서버를 갖추고 있으면서도 그 서버로 돈을 벌어들이려고 하지도 않았다. 방대한 정보를 제공하지만 그 정보는 구글의 소유가 아니고 소유하려고 하지도 않는다. 구글은 다만 데이터베이스를 수집해 관리하고 유용한 정보를 뽑아내 사용자들에게 전달해주는 시스템, 즉 플랫폼의 역할에 주력했던 것이다.
인 터넷 서점 아마존이나 경매 사이트 이베이 역시 플랫폼을 가진 기업이 성공한 경우다. 이들의 경쟁력은 응용 프로그램이 아니라 정보의 전달 프로세스, 즉 플랫폼에 있다. 냅스터의 계보를 잇는 P2P 서비스 비트토런트 역시 마찬가지다. 파일 하나 소유하고 있지 않지만 비트토런트는 세계적인 규모의 파일 공유 플랫폼을 만들어냈다. 웹 1.0 시대에는 이처럼 플랫폼을 가진 기업이 응용 프로그램을 가진 기업을 밀어내고 살아남았다.
그러나 웹 2.0 시대에는 플랫폼을 가진 기업들끼리의 싸움이 시작된다. 이것이 바로 핵심이다. 이제는 플랫폼의 경쟁력을 고민해야 할 때다. 오라일리는 “플랫폼 대 응용 프로그램이 아니라 플랫폼 대 플랫폼인 지금의 경쟁은 더 이상 불공평하지 않다”고 전제하고 “어떤 플랫폼이 될 것인가, 즉 어떤 기술과 어떤 비즈니스 모델이 앞에 놓여 있는 기회에 더 적합한가가 관건”이라고 말했다.
여기서 잠깐 처음의 질문으로 돌아가본다. 네이버의 플랫폼은 과연 경쟁력이 있을까. 지식검색을 비롯해 블로그와 뉴스 서비스, 그리고 트래픽에 의존한 광고 매출 등은 앞으로도 계속 유효한 비즈니스 모델일까. 업계 1위라는 선점효과는 계속 유효할까.
이글의 대략 논지는 웹2.0의 시대에는 웹 플랫폼의 시대가 될것이며, 그 안에서 현재 네이버의 여러 서비스들이 웹표준화, 웹2.0, 시만텍 웹 트랜드에 맞지 않고 있다라는 얘기다.
그래서 네이버같은 포탈이 현재의 서비스에 자만하고, 자성하지 않을 때 위험하다는 얘기다. 겨우 "퀵 탭스" 기능과 이래저래 비대해진 윈도우 비스타 때문이 아니고 말이다.
대충 기사쓴게 확 티나는 부분이다. 이런 것을 기사로 내고 있으니, 일등신문 좆선일보의 인프라가 얼마나 좆같음을 느낄수 있다. 어이 좆선!! 언제나 얘기하지만, 공부 좀 하고 기사를 쓰라고...
그리고, 웹개발자로 한마디 하건데, 퀵텝이고 나발이고, 텝브라우징 필요없고, 윈도우 비스타의 IE7 가 제발 엑티브엑스 버리고 기본 웹표준화에 근접하기만을 바랄 뿐이다.
젠투 리눅스를 각종 컴퓨터와 좀 특이하게 vmware 등에 깔아봤지만, 이번 프로라인언트 DL380에 까는 것은 만만치 않았다. 그래서 각종 업무와 술자리가 일정을 더디게 하여 걸린 기간 딱 10일!!
암튼 그 비법을 소개할터이니 10일의 고통을 한큐에 공개하는게 아깝긴 하지만, 이 괴물 만드는 법을 여러분에게 알려드리겠다.
대충의 서버 스펙
서버명 : Compaq Proliant DL380-G4
프로세서 : Intel® Xeon™ 프로세서 3.06GHz * 2
메모리 : 2GB
칩셋 : ServerWorks GC-LE 칩셋
네트워크 컨트롤러 : Broadcom Tigon3 Gigabit NIC * 2
스토리지 컨트롤러 : 스마트 어레이 5i 플러스 컨트롤러
하드 디스크 : 72.8GB 15,000 rpm U320 범용 핫 플러그 * 2
그래픽 : 8MB SDRAM 비디오 메모리와 통합된 ATI RAGE XL
첨엔 팀장에게 좋은 서버 사야 된다고 졸랐지만, 리눅스를 깔아야 한다는 특명을 감지하고선 대충하면 되겠지 했다. 그러나 그 괴물이 내 눈앞에 있자, 대충 살껄이란 후회가 막심했다.
이유는? 바로 Compaq서버들에게 독특하게 존재하는 스마트 어레이란 넘때문에 그런다. 대충 눈치로 보니 이 컨트롤러는 분리되어있는 scsi하드 디스크를 하나로 만들어주고 잡다한 좋은 기능들이 들어가 있는 것 같다.
윈도야 대충 깔면 되지만, 리눅스란 넘은 하나 하나 잡아줘야 함에 바로 문제가 있다.
암튼 가보자!!
1.
먼저 Gentoo 최신 씨디를 구하자. http://www.gentoo.org/main/en/mirrors.xml 가서 minimal 버젼을 구하면 되겠다.(이 포스트에서 쓰이는 젠투 버젼은 "Gentoo x86 minimal 2004.3"이요)
대충 씨디를 굽고, 다시 한번 Gentoo Handbook을 한번은 읽어보자!!
2.
스마트 어레이 or Laid를 설정하고(72기가 하드를 둘을 통 하나로 만들었다.) BIOS 셋업 들어가서 기본적인 것들을 셋팅하면 들어다 보자. (이부분은 잘모른다. -_-a)
특히 날짜는 잘 잡아주자. 그리곤 서버에 씨디를 넣고 부팅을 하자.
다행이도 젠투로 부팅이 된다. ^^
3.
2004. 1버젼이전에는 스마트 어레이를 자동으로 잡아주지 못했던 것 같다. 해외의 각종 포스트를 검색해 본 결과 수동으로 잡아주는데, 2004. 3버젼은 운수좋게도 자동으로 잡힌다. 아싸~~
허나 에러를 동반하고 있다.
특히 이런 문구로 "/dev/cciss/part0/~~"로 에러가 나오는데...
걍 무시하자. cciss 드라이버가 자동 하드디스크를 잡는데 약간의 문제를 동반하고 있다. 후에 언급하겠다.
4.
서버실이 졸라 추우므로 네트워킹을 설정하고 sshd를 초기화 하자.
서버실을 나와 사무실로~~
# mount /dev/ccisss/c0d0p3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mkdir /mnt/gentoo/home
# mount /dev/ccisss/c0d0p1 /mnt/gentoo/boot
# mount -t proc none /mnt/gentoo/proc
6.
# date MMDDhhmmYYYY <--시간도 맞춰주고...
# cd /mnt/gentoo
# links2 http://www.gentoo.org/main/en/mirrors.xml
# tar -xvjpf /mnt/cdrom/stages/stage1-????-2004.3.tar.bz2
쓰던 버릇으로 hotplug를 걍 쓰는 사람들이 있는데, 버젼업한 coldplug를 써주자!!
8.
# nano -w /etc/fstab
자!! 여기서 중요한것은 2.4대 커널과 2.6대 커널 특히 devfs와 udev를 사용하는 것으로 dev node이름이 달라진다.
Gentoo x86 minimal 2004.3 에서는 커널 2.6과 udev를 써서 /dev/cciss/cXdXpX 형식으로 쓰여지나, 커널 2.4에 devfs는 /dev/cciss/discX/partX 형식으로 쓰여진다...-_-
그러니 대충 유추해서 사용하자!! 아래와 같이
real_root를 devfs방식으로 적자!
보통 하던데로 grub 하고 root (hd0,0)하면 "Error 21: Selected disk does not exist" 에러만 나온다...
헥? 선택한 디스크가 없다고? 이기 무슨...
몇몇 사이트를 돌아댕겨 보니 grub에서 자동적으로 하드웨어를 인식 못하는 모양이다. 그럴땐...
# grub --device-map=device.map
하고 들어갔다 나오면 /boot/grub 폴더에 device.map파일이 생긴다 그 안을보면...
(fd0) /dev/fd0
되어있는데, "(hd0) /dev/cciss/c0d0"를 추가해주자!!
그리고 해봐도...안된다. 또 열라 웹등을 뒤져서 나온 정보를 토대로 해보자. 아마도 device.map을 가지고 mtab파일을 참조하는 것 같다.
# grep ext /proc/mounts > /etc/mtab
# grub-install --root-directory=/boot /dev/cciss/c0d0
Installation finished. No error reported.
This is the contents of the device map /boot/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.