FreeBSD 建置 Apache + mod_fastcgi + php-fpm

近日在實驗 Apache 使用 FastCGI (mod_fastcgi) 搭配 PHP 提供的 PHP-FPM 網頁架構。

Apache 如果什麼都沒有動的話,應該預設是跑 prefork ,也就是預先 fork 一些子程序出來等連線,這樣的架構在大量連線的伺服器來說不是很穩定。更改編譯選項可以換成用 worker mpm 方式,如此一來 Apache 可以用 thread  的方式來執行,資源利用較有效率。

除此之外,PHP 的部份也可以改用 FastCGI 的方式來執行。

預設安裝的 mod_php5 的執行方式是由 Apache 呼叫,等待 PHP 程式執行完畢之後再一起輸出給使用者。若是使用 CGI 的方式來執行,則當 Apache 收到 PHP 執行需求的時候,會去叫起 php-cgi 這隻程式,等待其執行完畢之後再回傳結果。當然這也不是有效率的作法,因為一次只接受一個連線,若有多個連線要叫起一堆的 php-cgi。若採用 FastCGI protocol 的方式執行,php-cgi 這隻程式會成為一隻 daemon 在背景執行,隨時等待連線。

FastCGI protocol 在 Apache 裡面的實做方式有兩種,mod_fastcgi 與 mod_fcgid。前者發展較早,由 fastcgi.com 維護,fastcgi process 開起來之後會一直在後台跑,隨時接受連線;後者為 Apache 基金會自己的項目,目標是可以隨時動態增減 fastcgi process 的數量,一旦用完就殺掉,有效利用資源又不致於在 晚上 流量大的時候被打掛。關於這兩個的優劣並沒有絕對,各位可以上網搜尋相關資料。

繼續閱讀 “FreeBSD 建置 Apache + mod_fastcgi + php-fpm”

FreeBSD 建置 Apache + mod_fastcgi + php-fpm

dokuwiki 整合 minecraft 驗證系統

dokuwiki 是一套我很喜歡的迷你 wiki 系統,他的特色包括輕巧又有足夠的功能、檔案以純文字撰寫等。

因為目前所架設的 Minecraft 伺服器有採用 AuthMe 驗證系統,因為要在遊戲裡面註冊帳號實在是很麻煩,因此很早以前就寫了個網站方便更改資料、註冊帳號。但是 wiki 也需要帳號,考量到使用者編輯的需要,每次都要使用者一直註冊帳號實在是很不方便,因此就嘗試結合 dokuwiki 的認證機制,讓使用者可以使用同一組帳號密碼登入遊戲與網站。

dokuwiki 支援各種登入驗證方式,預設是採用 plaintext,也就是密碼 hash 之後存在純文字檔案中。由於 AuthMe 是採用 MySQL 作為後台,因此我們就以 mysql_class.php 這個 MySQL 範例檔案來修改。

新建一個 local.protected.php 於 conf 資料夾中,這樣設定檔才不會被自動設定蓋掉。同時從 /conf/mysql.conf.php.example 可以看到各種應該寫的 MySQL query,我建議直接改名成 mysql.conf.php 然後直接 require 到  local.protected.php 中,這樣升級時就不會被覆蓋。同時,這邊也要搭配 AuthMe 的架構,如果你有更改過資料庫欄位的命名,也要配合調整 query。

由於要自己撰寫 authentication backend,所以將 /inc/auth/mysql.class.php 複製一份,更名為  minecraft.class.php。可以將 minecraft 更改為自己喜歡的名稱,但注意於之後都要使用同樣的 class 名稱。

class auth_minecraft extends auth_basic {
//auth_mysql 改成 auth_minecraft
...
    function checkPass($user,$pass){
    //主要驗證的程式
    ...
    return $rc;
    }
}

剩下要改寫的部份其實不多,照著官網提供的資料結構與 AuthMe 給的密碼加密方式 (sha256) 就可以了。這樣就完成最基本的驗證登入,剩下的部份也都照著改寫,應該就沒有問題了。

Reference:
https://www.dokuwiki.org/auth:mysql 
https://www.dokuwiki.org/devel:authentication_backends

UPDATED 20130329:

沒想到才過沒多久,Dokuwiki 就改變驗證後台的撰寫方式了 Orz

現在是採用 Authentication Plugin 的方式撰寫,其實跟之前的方法差不多,主要就是要寫一個外掛放在後台這樣子。

詳細資源請參考 https://www.dokuwiki.org/devel:auth_plugins 

dokuwiki 整合 minecraft 驗證系統

FreeBSD 9.0 Release

延伸閱讀:FreeBSD 8.0 升級
http://blog.snowtec.org/2010/02/freebsd-80-release/

FreeBSD.org 於 1/12 釋出了 9.0 的發行版本,寒假閒著沒事幹的我當然試著升級囉!

延伸閱讀
FreeBSD 9.0 Release Notes:http://www.freebsd.org/releases/9.0R/relnotes.html
FreeBSD 9.0 支援的新功能:http://ben6.blogspot.com/2011/08/freebsd-90.html

不過由於我的測試主機是虛擬機,效能不太好,因此上文提到的編譯全世界的方法就很花時間(當然我也很懶),因此這次就來嘗試之前沒有試過的 “freebsd-update” 工具程式。

根據 FreeBSD handbook 所述,這個工具程式可以直接下載編譯過後的 binary 執行檔,不用再重新編譯世界,速度上可以說是快了不少。所以就來更新吧!

首先,需要…. 嗯,根據說明這個工具超級自動化,事前準備幾乎都不需要了。當然,檔案與設定檔的備份都還是要做,畢竟這可是升級,各種恐怖的事情都有可能發生。

接下來就開始更新吧!

# freebsd-update -d /usr/freebsd-update -r 9.0-RELEASE upgrade

指定 -d 的參數是因為我 /var/db 下面的空間不夠,而 freebsd-update 預設會將檔案下載到這邊。如果硬碟空間不夠的話要另外指定資料夾才行。

接下來 freebsd-update 會開始下載更新所需要的 binary 檔案,執行完了之後進行下一步。

# freebsd-update -d /usr/freebsd-update install

過程中會詢問你需要合併之設定檔,然後重開機一次,若有需要的話(建議)更新所以系統上已安裝的 ports ,再執行一次:

# freebsd-update -d /usr/freebsd-update install

再重開機一次即可完成安裝。

FreeBSD 9.0 Release

Verico TM02 隨身碟測試報告

其實隨身碟的需求一直都在,但不幸的是之前主力的 Patriot XT 8GB 那隻假高速碟被我搞丟了 (還是只是放在某個角落…) 之後我就沒有隨身碟可以用了…

所以 一氣之下 一時興起 就上 PChome 購物訂了一隻標榜讀取寫入超高速的隨身碟,然後不知道在發什麼神經還選了 32GB 的版本。=_=

Verico TM02 長這個樣子

Verico TM02

然後就開始測試啦~

繼續閱讀 “Verico TM02 隨身碟測試報告”

Verico TM02 隨身碟測試報告

USBDLM 磁碟區代號管理

情境是這樣的:

我有一個 3.5″ USB 外接式硬碟,我主要是用他來養動物,然後我有為我的農場設定不同的分割區,所以分割區代號亂跳的話會非常麻煩…
這代表每次我都要重新設定下載資料夾,然後可能下載完的檔案還要重新 hash 一次。所以如果有方案是可以固定外接裝置的代號的話會非常方便。

之前我一直使用一套軟體, USB Safely Remove  ,來做這件事情。這個軟體會在 USB 硬碟根目錄裏面放一些 ini 檔案,這樣就可以分配到適當的代號了,不過該套軟體要付費,而我之前是透過 Givaway of the Day 下載,所以重灌之後之後就沒辦法用了。

然後我就透過 Google 找到 USBDLM 這個軟體。

繼續閱讀 “USBDLM 磁碟區代號管理”

USBDLM 磁碟區代號管理