2011. 9. 2. 18:52

ubuntu+php에서 mongoDB 설치하기

APM(Apache+PHP+MySQL) 조합 이외에,
PHP+mongo db가 사용가능합니다.

mongo db를 PHP에 설치/연동하는 방법을 공유합니다.

참고로, mongodb는 X86 OS에서 2GB 크기 제약이 따릅니다.
(2011/09/06 - [HTML/JS/PHP] - Ubuntu+PHP+mongoDB 구축시 유의 사항)
되도록 mongodb는 X64 OS에서 설치되는 것이 바람직합니다.

처음, PHP를 설치해야 하는데, 이는
2011/08/03 - [HTML/JS/PHP] - VMWare+Ubuntu+APM(Apache,PHP,MYSQL)+RSYNC 로 웹 서버 환경 구축 하기
를 참고하시기 바랍니다.

mongodb를 아래와 같이 설치합니다. (주의요망)
$ sudo apt-get install mongodb

만일 이런 경우, Ubuntu X64인 경우 spider monkey 버전이 낮아, UTF-8 형식의 스크립트 처리를 하지 못합니다. 따라서, 이를 막기 위해서, 이곳을 참고해야 합니다. 대충 따라가자면 다음과 같습니다.

$ sudo gedit /etc/apt/sources.list
하고, 마지막에
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
를 추가합니다. 물론 vi 가 편하다면 그것을 쓰십시요.

그리고 다음을 실행합니다.
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

해당 명령을 사용하는데, 만일 방화벽으로 막혀있다면, 다음과 같이 오류가 발생합니다.
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
...
gpgkeys: HTTP fetch error 7: couldn't connect: Connection refused
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0

그럼 이곳에 나와있는 pub key 값으로 다음과 같이 파일을 저장합니다.
$ gedit pubkey

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.10 (Darwin)


mQENBEtsQe8BCACm5G0/ei0IxyjVEp6EEtbEbWK1Q4dKaONtiCODwB8di+L8tlUd
Ra5QYxeyV90C+dqdh34o79enXxT6idHfYYqDdob2/kAPE6vFi4sLmrWIVGCRY++7
RPclZuezPm1sxG1TRAYEsW0VZUE9ofdoQ8xlUZDyn2BSjG8OCT2e4orRg1pHgzw2
n3hnWqJNuJS4jxcRJOxI049THIGUtqBfF8bQoZw8C3Wg/R6pGghUfNjpA6uF9KAH
gnqrC0swZ1/vwIJt9fnvAlzkqLrssYtKH0rMdn5n4g5tJLqY5q/NruHMq2rhoy3r
4MC1w8GTbP7qR83wAyaLJ7xACOKqxB3SrDFJABEBAAG0I1JpY2hhcmQgS3JldXRl
ciA8cmljaGFyZEAxMGdlbi5jb20+iQE4BBMBAgAiBQJLbEHvAhsDBgsJCAcDAgYV
CAIJCgsEFgIDAQIeAQIXgAAKCRCey+xGfwzrEGXbB/4nrmf/2rEnztRelmup3duI
eepzEtw1cv3uHg2oZXGS6S7o5Fsk+amngaWelWKfkSw5La7aH5vL4tKFKUfuaME1
avInDIU/0IEs8jLrdSWq601HowLQcxAhqNPdaGONDtHw56Qhs0Ba8GA6329vLWgZ
ODnXweiNSCDrv3xbIN6IjPyyO5AoUkxmJfD0mVtp3u5Ar7kfIw7ieGGxokaHewNL
Xzqcp9rPiUR6dFw2uRvDdVRrXFUPlgVugaHKytm15JpHmQfyzQiMdYXnIz0oofJO
WM/PY1iw+QJZ2M7PnfbTJeADXIc/EoOAJDRggih533SjhiCaT6FdPMMk6rCZ5cgl
uQENBEtsQe8BCADlNPIJZVSL2i6H9X19YK4CpEqsjIUGISMB1cDT311WFSnhfuMs
GL9xYRb8dlbyeJFFOyHNkIBmH5ekCvGRfS6qJYpcUQZZcWSjEMqBYQV5cw1efd0B
ek64jfvrsLz8+YhKzn+NI8O3nyGvpEEWvOhN4hNjwkDhYbXLvAlsqagbnSMf+Htf
3lgCGYa2gLiNIqNKWCsEVAan/Er6KS39WANGXi6ih0yjReBiU8WR6Qh2ylMi2xKw
yHnTOsbWxP0hqALUa7N4AEGCXS/qn+vUz/hcIbt+eUNy45qoZcTT3dZsWGfJqknh
RFMIuPiej7/WY4Ugzes5NG02ecDkDkpJvrSNABEBAAGJAR8EGAECAAkFAktsQe8C
GwwACgkQnsvsRn8M6xABeggAlNkqbqa12L1bgaCgnGGdCiuXB3F6/VFmSQdUKpts
EuqWH6rSp30r67PupzneX++ouh+9WD5O7gJ0kP3VQJpmXjT/QnN5ANjI4kAtRZUW
qCXlXOxVAeXHL5oiKz0NM23Xc2rNAyfBQY8+SUYrKBalNBq5m68g8oogX8QD5u2F
x+6C+QK9G2EBDD/NWgkKN3GOxpQ5DTdPHI5/fjwYFs1leIaQjjiyJwAifxB/1+w0
VCHe2LDVpRXY5uBTefF2guhVYisKY6n5wNDaQpBmA8w17it5Yp8ge0HMN1A+aZ+6
L6MsuHbG2OYDZgAk8eKhvyd0y/pAhZpNuQ82MMGBmcueSA==
=74Cu
-----END PGP PUBLIC KEY BLOCK-----


만일, Ubuntu Desktop이 아니고 server군인 경우라면, 위 gedit가 어려울 수 있습니다.
이런 경우,
~$ wget https://t1.daumcdn.net/cfile/tistory/167B75484EB0995228
와 같이 하면 167B... 이름의 파일을 다운로드합니다.
(만일 proxy 환경이라면, ~$ sudo vi /etc/wgetrc 한뒤 proxy 세팅이 필요할지 모릅니다.)
중간의 URL은 위 public.txt를 새창으로 열기 했을때의 경로이니 참고하세요.
(그럼 아래쪽 명령은 ~$ sudo apt-key add 167B... 와 같이 실행해야 합니다.)

다음과 같이 key를 추가합니다. (wget으로 다운한 경우에는 다운한 파일명으로 pubkey 이름 변경하세요)
$ sudo apt-key add pubkey
OK
만일 gpg: no valid OpenPGP data found. 오류가 발생하면, 이곳 중간에 나오는 key 값을 다시 복사해서 사용하시기 바랍니다.

여기까지 오류 대응이였으며,
이제부터 설치 Step으로 들어갑니다.

$ sudo apt-get update
Ign http://extras.ubuntu.com natty InRelease                       
Ign http://us.archive.ubuntu.com natty InRelease                   
...
Ign http://us.archive.ubuntu.com natty-updates/universe Translation-en
Reading package lists... Done
$ sudo apt-get install mongodb-10gen
Reading package lists... Done
Building dependency tree      
Reading state information... Done
The following NEW packages will be installed:
  mongodb-10gen
...
Done.
mongodb start/running, process 2757
이와 같이 mongodb 설치가 완료되었습니다.

그다음, mongodb php 모듈을 설치합니다.
http://www.mongodb.org/display/DOCS/PHP+Language+Center

에서 다음과 같은 명령으로 설치 가능하다고 합니다.
$ sudo pecl install mongo

단, 아래와 같은 package가 설치되어 있어야 합니다.
$ sudo apt-get install php5-dev php5-cli php-pear

그럼 위 명령으로 실행해 보도록 하겠습니다.
$ sudo pecl install mongo
[sudo] password for greenfish:
No releases available for package "pecl.php.net/mongo"
install failed

만약 proxy 환경이라면 위와 같은 오류가 발생할 수 있으며, 아래 pear 명령으로 환경 세팅을 해야 합니다.
$ pear config-set http_proxy http://xxx.xxx.xxx.xxx:xxxx
config-set succeeded

그럼 다시 설치해 보도록 하겠습니다.
$ sudo pecl install mongo
[sudo] password for greenfish:
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading mongo-1.2.4.tgz ...
Starting to download mongo-1.2.4.tgz (78,927 bytes)
..................done: 78,927 bytes
36 source files, building
running: phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
building in /tmp/pear/temp/pear-build-rootAfIqUv/mongo-1.2.4
running: /tmp/pear/temp/mongo/configure
...
Build process completed successfully
Installing '/usr/lib/php5/20090626+lfs/mongo.so'
install ok: channel://pecl.php.net/mongo-1.2.4
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongo.so" to php.ini
와 같이 설치 성공 메시지를 확인할 수 있습니다.

참고로, Ubuntu Server인 경우, 경우에 따라 make 과정에서 오류가 발생합니다.
그런경우 $ sudo apt-get install make를 실행하시기 바랍니다.

단, 위 메시지 마지막에 extension=mongo.so를 php.ini에 추가해라고 나옵니다.

phpinfo()를 통해 확인해 보니,
 Loaded Configuration File  /etc/php5/apache2/php.ini

와 같이 php.ini는 /etc/php5/apache2/에 있습니다.

그럼 sudo vi /etc/php5/apache2/php.ini 혹은 sudo gedit /etc/php5/apache2/php.ini를 열고,
아래와 같이 추가&수정후 저장합니다.
만일 extension section이 있었다면, 그 이후에 찾아서 넣습니다.
물론, [extension] 없이도 되지만, 문서에 따르면 가능한 extension section에 넣으라고 합니다.
[extension]
extension=mongo.so

그리고 마지막으로 sudo service apache2 restart를 실행해서 apache2를 재시작 합니다.

그러면 아래와 같이 phpinfo()에서 mongo 부분이 추가됩니다!

mongo
 MongoDB Support  enabled
 enabled  1.2.4

 Directive  Local Value  Master Value
 mongo.allow_empty_keys  0  0
 mongo.allow_persistent  1  1
 mongo.auto_reconnect  1  1
 mongo.chunk_size  262144  262144
 mongo.cmd  $  $
 mongo.default_host  localhost  localhost
 mongo.default_port  27017  27017
 mongo.long_as_object  0  0
 mongo.native_long  0  0
 mongo.no_id  0  0
 mongo.utf8  1  1

'Web > PHP' 카테고리의 다른 글

Ubuntu+PHP+mongoDB 구축시 유의 사항  (2) 2011.09.06
PHP Shell  (0) 2011.08.03
VMWare+Ubuntu+APM(Apache,PHP,MYSQL)+RSYNC 로 웹 서버 환경 구축 하기  (0) 2011.08.03