Install Wordpress On Ubuntu 9.04

유명한 블로그 소프트웨어인 워드프레스(Wordpress)를 우분투 리눅스 위에 설치/설정한 과정의 기록이다.

WordPress started in 2003 with a single bit of code to enhance the typography of everyday writing and with fewer users than you can count on your fingers and toes. Since then it has grown to be the largest self-hosted blogging tool in the world, used on millions of sites and seen by tens of millions of people every day.

내 소유의 서버나 도메인이 없어서 설치형 블로그라는 것이 내게 큰 의미가 없다. 다만, 만약1을 위하여 블로그 호스팅 등을 찾을 때 open source 라이선스의 설치형 소프트웨어가 지원되는지는 꼭 확인하고 있다. 몇 년 전, 사내 커뮤니케이션 채널 구성을 위하여 몇몇 다른 소프트웨어와 함께 국산 설치형 블로그 소프트웨어인 tettertools를 설치했던 적이 있는데, 언제 기회가 되면 tettertools, trac, activecollab 등으로 구성했던 그 환경 또는 (현 시점을 반영한)유사품에 대해서도 기록해두겠다. 어쨌든 이번 설치는 조금 불순한 의도로 이루어졌다.

설치

설치는 Ubuntu 패키지를 이용하여 손쉽게 끝났다. OS 준비는 가상머신을 이용하였다.

OS 환경 준비

일단 기반 OS가 필요한데, 가상머신을 이용하여 ubuntu 9.04 amd64 jeos version으로 구성된 sandbox를 하나 만들었다. 과정은,

host$ copyvm.sh template-dir new-vm
host$ vi iptables-save update-iptables.sh
host$ virsh start new-vm
vm$ vi /etc/hostname /etc/hosts
vm$ apt-get update; apt-get upgrade

등으로 이루어지는데, 이 과정은 예전 글에 일부 설명이 되어있고 차후에 대시 정리하도록 하겠다.

패키지 설치

(기록을 남기려고 마음먹지 않았던 탓에, 초기 기록은 놓쳤다. 일단, 명령어 위주로 기록한다.)

다음 명령을 이용하여 wordpress와 그를 위하여 필요한 내용을 설치하였다.

$ sudo apt-get install wordpress

간접적으로, 이 때 설치된 부수적 패키지를 확인해보면 다음과 같다.

sio4@sandbox:/var/www$ sudo apt-get autoremove wordpress
[sudo] password for sio4: 
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 새 패키지가 전에 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  ttf-dejavu-extra ttf-dejavu-core php5 libapr1 libjs-prototype
  libapache2-mod-php5 xml-core apache2-mpm-prefork php5-gd libfreetype6
  libexpat1 apache2-utils apache2 apache2.2-common libt1-5 libjs-scriptaculous
  libphp-snoopy fontconfig-config libphp-phpmailer ssl-cert libxml2 libxpm4
  sgml-base libgd2-xpm ttf-dejavu libjpeg62 wwwconfig-common libpq5
  libfontconfig1 php5-mysql tinymce libjs-jquery libaprutil1 defoma
  php5-common javascript-common
다음 패키지를 지울 것입니다:
  apache2 apache2-mpm-prefork apache2-utils apache2.2-common defoma
  fontconfig-config javascript-common libapache2-mod-php5 libapr1 libaprutil1
  libexpat1 libfontconfig1 libfreetype6 libgd2-xpm libjpeg62 libjs-jquery
  libjs-prototype libjs-scriptaculous libphp-phpmailer libphp-snoopy libpq5
  libt1-5 libxml2 libxpm4 php5 php5-common php5-gd php5-mysql sgml-base
  ssl-cert tinymce ttf-dejavu ttf-dejavu-core ttf-dejavu-extra wordpress
  wwwconfig-common xml-core
0개 업그레이드, 0개 새로 설치, 37개 지우기 및 2개 업그레이드 안 함.
이 작업 후 40.1M바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까 [Y/n]? n
중단.
sio4@sandbox:/var/www$

아파치 웹서버, PHP, MySQL 등으로 이루어진 전형적인 LAMP 구성이다.

설치를 마치고 황당하게도, 나는 바로 동작까지 될 줄 알았다. 좀 황당한가? 어쨌든 그랬는데, 동작하지 않는다는 것을 확인한 후에야 패키지 구성 요소를 살펴보기 시작했다.

$ dpkg -L wordpress

/usr/share/doc/wordpress/README.Debian 파일을 읽어보니, examples/ 아래의 setup-mysql 명령을 사용하랜다. 아차차. MySQL은 설치되어 있던가? 확인해보니 client 패키지만 있었다. 그래서 다시 mysql-server를 설치하고,

$ sudo apt-get install mysql-server

설치를 계속 진행해보았다. 시키는데로 아래의 명령을 내렸다.

$ sudo bash /usr/share/doc/wordpress/examples/setup-mysql -n wordpress sandbox

뭔가 작업을 하더니 링크를 하나 만들고, 업로드된 파일을 위한 디렉토리를 하나 만들더니 오류없이 종료되었다. 그리고 다시 접속 시도

http://sandbox_ip:port/sandbox

그랬더니, 이번엔 뭔가가 다운로드되네? 어라? 그렇다면 apache가 php를 php로 인식하여 해석하지 않고 그냥 파일로 여기고 던진다는 이야기? 흠, 어찌 이야기가 슬렁슬렁 "설치" 단계에서 "설정" 단계로 넘어가 버린 느낌이다. 여기서 한 번 끊자.

설정

잘 안됨

첫번째 시도에서는 파일을 raw하게 다운받았다. 그래서 php 모듈 로딩을 확인한 후 다시 시도했다. 그런데, 역시 결과는 똑같다. 이렇게 저렇게 확인해보니, /sandbox 나 /sandbox/ 를 호출할 때와 /sandbox/index.php를 호출할 때의 결과가 다르다.

sio4@heavy:~/downloads$ lynx -dump -head http://10.250.166.226:7380/sandbox
HTTP/1.1 301 Moved Permanently
Date: Sun, 23 Aug 2009 10:06:12 GMT
Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch
Location: http://10.250.166.226:7380/sandbox/
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Connection: close
Content-Type: text/html; charset=iso-8859-1

sio4@heavy:~/downloads$ lynx -dump -head http://10.250.166.226:7380/sandbox/
HTTP/1.0 404 Not Found
Date: Sun, 23 Aug 2009 10:06:19 GMT
Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch
X-Powered-By: PHP/5.2.6-3ubuntu4.1
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Connection: close
Content-Type: text/html

sio4@heavy:~/downloads$ lynx -dump -head http://10.250.166.226:7380/sandbox/index.php
HTTP/1.0 404 Not Found
Date: Sun, 23 Aug 2009 10:06:57 GMT
Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch
X-Powered-By: PHP/5.2.6-3ubuntu4.1
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Connection: close
Content-Type: text/html

sio4@heavy:~/downloads$

어라? 아니네? /sandbox 를 호출했을 때 Redirection이 일어나는 것은 별 문제가 아니고 정상적인 상황. 그런데 lynx로 확인한 결과는 /sandbox/ 나 /sandbox/index.php나 같네? 브라우져에 캐시가 남아있었나? 그런데 좀 수상하다.

sio4@heavy:~/downloads$ lynx -dump http://10.250.166.226:7380/sandbox/index.php
   404 Not found

sio4@heavy:~/downloads$ lynx -dump http://10.250.166.226:7380/sand
                                   Not Found

   The requested URL /sand was not found on this server.
     __________________________________________________________________

    Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch Server
    at 10.250.166.226 Port 7380
sio4@heavy:~/downloads$

그렇다. 이 404는 아파치에 의한 것이 아니다. 그 결과가 다르지 않은가! 뭔가 있다.

이런… FQDN이 없을 때

뒤졌다. 뭐가 문제인지. 설마 잘 돌아가지도 않는 프로그램을 배포했을까? 분명 설치 과정에 문제가 있었을 것이다. 그래서 찾아보니, /etc/wordpress/wp-config.php 이런 파일이 있다. 데비안다운 설정파일이랄까나? 그런데 내용이 이렇게 되어있다.

<?php
/** WordPress's Debianised default master config file
Please do NOT edit and read about how the configuration works in the README.Debian
**/
 
    #http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=435289
    #http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=440572 (underscores, not dashes)
    $debian_server = preg_replace('/:.*/', "", $_SERVER['HTTP_HOST']);
    $debian_file = '/etc/wordpress/config-'.strtolower($debian_server).'.php';
 
    if (!file_exists($debian_file)) {
        header("HTTP/1.0 404 Not Found");
        echo "404 Not found";
        exit(1);
    }
 
    require_once($debian_file);
 
define('ABSPATH', '/usr/share/wordpress/');
 
require_once(ABSPATH.'wp-settings.php');
?>

아뿔싸! 그런데 나에게 $_SERVER['HTTP_HOST'] 요런 게 있을리 없잖아? 그러고보니 처음 setup 스트립트를 돌릴 때 뭐라 뭐라 했던 것 같다.

sio4@sandbox:/var/www$ sudo bash /usr/share/doc/wordpress/examples/setup-mysql
/usr/share/doc/wordpress/examples/setup-mysql [-n NAME] [-h | -d | -b] FQDN

Creates by default a Wordpress mysql configuration depending on required fully
qualified domain name(FQDN).

Options:
    -n  name for the mysql user and database
    -h  help
    -d  destroy and purge
    -b  backup

Example: You want your blog to be served from http://blog.example.com
         for user 'wordpress'.

Then run:
sudo bash setup-mysql -n wordpress blog.example.com

BUGS: See ../TODO.Debian
sio4@sandbox:/var/www$

뭐, 그렇다면 꽁수로 해보자.

일단 phpinfo() 함수로 변수의 내용을 알아보자.

HTTP_HOST     10.250.166.226:7380

그렇다면 그 조건에 맞춰주면 되겠지.

sio4@sandbox:/etc/wordpress$ sudo ln -s config-sandbox.php config-10.250.166.226:7380.php
sio4@sandbox:/etc/wordpress$

어라? 그래도 안된다. 스크립트를 고쳐서 시험해보니, 포트가 사라져있다. 뭐냐? 어이쿠! 스크립트를 다시 보니 포트를 지우는 preg_replace()를 쓰고 있었네…

좋아. 파일 이름을 바꿨더니, 와! 드디어 화면 보임!

맺기

자, 이쯤해서 오늘 작업의 목적을 밝히자면, … 아니다. 됐다.

References

http://wordpress.com/
http://wordpress.org/

https://help.ubuntu.com/community/WordPress
http://code.google.com/p/wordpress-ttxml-importer/

따로 명시하지 않는 한에서 이 사이트의 모든 콘텐츠는 다음의 라이선스를 따릅니다: Creative Commons Attribution-NonCommercial 3.0 License