Image From Google ImageImage From Google Image

今天我要講解如何在 PHP 的環境下安裝 MongoDB,並且介紹一些簡單的指令讓大家輕易的上手,在過去我們都透過 MySQL 來搭配,PHP 來運行,不過每次要優先定義欄位就覺得非常麻煩…,而且資料量一大,搜索的速度似乎就變慢了許多,所以我在想有沒有其他的替代方案呢?然而最近又在研究 MEAN.io,當下體驗到 MongoDB 的好處,所以就思考能不能讓 PHP 與 MongoDB 結合呢,經過測試原來真的可行,而且官方早已提供熟悉的套件指令給開發者,這真是一大福音,我就不多說,一起來實作吧。

Get Ready before hand

同樣的跟上篇一樣,我們必須先有 Ubuntu 的系統才可以安裝,雖然其他系統也可以拉,不過我只熟悉 Ubuntu…(被揍

Install PHP-MongoDB

Step 1: Install Apache2

看過其他的文章就知道,首先我們必須先安裝 Apache2 的網頁伺服器在我們的系統上:

1
sudo apt-get install apache2

在安裝完成之後你可以修改網頁的 Port,預設為 80 。你可以在 /etc/apache2/ports.conf ,這個路徑下去做修改。(這是非必須的)

Step 2: Install MongoDB

接下來你需要先匯入公開的鑰匙:

1
2
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list

之後透過 apt-get 進行安裝 MongoDB:

1
sudo apt-get install mongodb-org mongodb-org-server

Step 3: Install PHP5

接下來我們必須安裝 PHP 套件中的 MongoDB:

1
sudo apt-get install php5 php5-dev libapache2-mod-php5 apache2-threaded-dev php-pear php5-mongo

Step 4: Install MongoDB PHP Module

緊接著我們需要安裝 MongoDB PECL 擴展並且開啟他,他是 PHP 與 MongoDB 之間的橋樑:

1
2
3
sudo pecl install mongo

sudo echo "extension=mongo.so" >> /etc/php5/apache2/php.ini

Step 5: Verify Setup

最後我們要去檢查是否有安裝成功,我們必須在網頁伺服器下建立一個 PHP 的網頁去做測試,接著輸入以下:

1
2
3
<?php
phpinfo();
?>

接下來打開瀏覽器輸入網頁的所在地,接著點選 Ctrl+F 去搜尋 mongo ,假設有搜索到代表你安裝成功了!反之失敗。

Configure MongoDB username and password

當 MongoDB 安裝完成後,你可以進入系統設定一組帳號密碼並且通知 MongoDB 可以透過遠端去訪問。

Step 1: Open mongo shell

在設定帳號密碼之前,我們先打開 Mongo 的命令內:

1
mongo

如果你初始化發生錯誤可以修改環境變數:

1
2
export LC_ALL=C
mongo

※如果你輸入完,出現此錯誤: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refus ed,這代表 Mongo 拒絕你的訪問,我們需要到/etc/mongod.conf 修改 bindIp,可以把他從 bindIp = 127.0.0.1,修改成 bindIp = 0.0.0.0 或者把他註解起來 #bindIp = 127.0.0.1

除此之外拉到最下方如果發現 auth: true 請先刪掉他,不然沒認證無法啟動。

1
sudo nano /etc/mongod.conf

修改完成後接著 Ctrl + X 接著按 Y 並且 Enter 儲存,接著重啟 Mongod 就完成了。

1
sudo service mongod restart

※另外記得確認有沒把 TCP 的 27000-27020 的 Port 打開。

Step 2: Switch to the database admin

接著我們需要進入管理員的資料庫內:

1
use admin

※未來要進入任何資料庫可以透過指令 use database

Step 3: Create the root user

接下來我們要創建一個管理員帳號:

1
db.createUser({user:"admin", pwd:"admin123", roles:[{role:"root", db:"admin"}]})

成功之後他會出現: Successfully added user: …

Step 4: Edit MongoDB configuration file

完成之後我們輸入 exit ,離開 Mongo Shell ,緊接著透過指令修改 MongoDB 的設定檔:

1
sudo nano /etc/mongod.conf

在裡面我們可以看到 dbPath ,此路徑為資料儲存的地方,我們往下看可以找到 #security: ,我們把他前方的 # 去除並且在下方加入 authorization: "enabled" :

1
2
security:
authorization: "enabled"

另外如果想要開啟遠端訪問,可以把 bindIP 後方的 127.0.0.1 修正為 0.0.0.0 ,或者直接把他註解起來如 #bindIp: 127.0.0.1

Step 5: Restart MongoDB and Try to connect

接著我們重新啟動 MongoDB:

1
sudo service mongod restart

並且打開 Mongo Shell:

1
mongo -u admin -p admin123 --authenticationDatabase admin

-u 後方為剛剛創建的使用者, -p 後方為剛剛創建的密碼, --authenticationDatabase 後方為授權進入的資料庫。另外你可以嘗試省略 -p 後方的密碼,確定完系統會詢問你密碼,這樣能防止他人去觀看紀錄:

1
mongo -u admin -p --authenticationDatabase admin

Other: Change the db location

如果你想要修改資料的位置可以嘗試去修改剛才的 /etc/mongod.conf,但在修改前記得先拿掉 securityauthorization ,可以加個註解如:

1
2
#security:
#authorization: "enabled"

接著你可以放心修改 dbPath ,我自己是修改到 /data/db 裡,完成後記得新建一個 /data/db 的資料夾,另外記得授權給 mongod :

1
2
sudo mkdir /data/db
sudo chown -R mongod:mongod /data/db

之後記得依照 Step 1 的步驟新增使用者,即可完成!