跳到主要內容

Testlink on Ubuntu with postgresql, nginx, and LDAP

Testlink on Ubuntu with postgresql, nginx, and LDAP

目標

  • 在 Ubuntu 14.04 上架設 testlink
  • 使用 LDAP 管理 testlink 使用者
  • 使用 nginx 作為 web server

Step 1. 安裝

sudo apt-get install postgresql 
sudo apt-get install php5-fpm php5-pgsql php5-gd php5-ldap php5-json
sudo apt-get install nginx-extras

testlink 官方 sourceforge 取得 tar 檔

tar xvf testlink-1.9.10.tar.gz
mv testlink-1.9.10 /usr/share/nginx/html/testlink

Step 2. 設定 DB user

詳細設定請參考1

以 postgres (system user) 身份執行 psql 命令並切換成 postgres (db user) 身份

sudo -u postgres psql postgres

變更 postgres (db user) 的密碼

\password postgres
Enter Password: ...

這裡的 postgres 與密碼稍後在設定 testlink 會用到


Step 3. 設定 nginx

編輯 /etc/nginx/site-available/default

Note
這裡直接使用 default site 來設定,可自行修改

將 index.php 加進 index directive

index index.html index.htm index.php;

將 php 相關設定的註解拿掉

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        # With php5-cgi alone:
        # fastcgi_pass 127.0.0.1:9000;
        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

重新啟動 nginx

sudo service nginx restart

Step 4. 設定 PHP

編輯 /etc/php5/fpm/php.ini

; 延長 session timeout (1440 -> 2440)
session.gc_maxlifetime = 2440
; 延長最大執行時間 
max_execution_time = 120

重新啟動 php-fpm

sudo service php5-fpm restart

第一次以瀏覽器開啟 testlink, e.g. http://<your_ip>/testlink 時,會執行一些環境偵測與設定。
這個 blog 有螢幕截圖可以參考,記得我們是使用 postgresql 而不是 mysql。這些步驟中會用到 Step 2 中設定的帳密。

以上步驟包含設定給 testlink 用的 DB 名稱與使用者帳密,會存放在
/usr/share/nginx/html/testlink/config_db.inc.php

之後會需要這些資訊。

假設以下資訊

LDAP server 在 ldap.mydomain
root DN 是 example.com
LDAP 的管理帳密是 Acer Yang/mypassword

編輯 /usr/share/nginx/html/testlink/config.inc.php

$tlCfg->authentication['method'] = 'LDAP';
$tlCfg->authentication['ldap_server'] = 'ldap.mydomain';
$tlCfg->authentication['ldap_port'] = '389';
$tlCfg->authentication['ldap_version'] = '3'; // could be '2' in some cases
$tlCfg->authentication['ldap_root_dn'] = 'dc=example,dc=com';
$tlCfg->authentication['ldap_bind_dn'] = 'cn=Acer Yang,dc=example,dc=com';
$tlCfg->authentication['ldap_bind_passwd'] = 'mypassword'; 
$tlCfg->authentication['ldap_uid_field'] = 'sAMAccountName'; // For Active Directory
$tlCfg->authentication['ldap_automatic_user_creation'] = true;

最後一個選項允許當使用者以 LDAP 帳號登入 testlink 時自動建立 testlink 帳號

當啟用 LDAP 當成認證方法時,原本的 admin 帳號會無法使用,我們得手動將某一個帳號變更為管理者。

sudo -u postgres psql testlink
SELECT * FROM users; -- 列出所有使用者,假設要改的使用者 id 是 1
UPDATE TO users role_id=8 WHERE id=1;

Written with StackEdit.


  1. https://help.ubuntu.com/community/PostgreSQL ↩︎

留言

這個網誌中的熱門文章

得利油漆色卡編碼方式

得利油漆色卡編碼方式 類似 Munsell 色彩系統 ,編碼方式為 HUE LRV/CHROMA 例如 10GY 61/449 ( 色卡 ) 編碼數值 描述 10GY hue ,色輪上從 Y(ellow) 到 G(reen) 區分為 0 ~ 99 ,數值越小越靠近 Y,越大越靠近 G 61 LRV (Light Reflectance Value) 塗料反射光源的比率,數值從 0% ~ 100% ,越高越亮,反之越暗,也可理解為明度 449 chroma 可理解為彩度,數值沒有上限,越高顏色純度 (濃度) 越高 取決於測量儀器,對應至 RGB 並不保證視覺感受相同。 參考資料: 色卡對照網站 e-paint.co.uk Written with StackEdit .

UTF8 與 Unicode 的轉換 (C++)

UTF8 與 Unicode 的轉換 (C++) 先釐清一下這兩者的性質 Unicode: 為世界上所有的文字系統制訂的標準,基本上就是給每個字(letter)一個編號 UTF-8: 為 unicode 的編號制定一個數位編碼方法 UTF-8 是一個長度介於 1~6 byte 的編碼,將 unicode 編號 (code point) 分為六個區間如下表 1 Bits First code point Last code point Bytes Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 7 U+0000 U+007F 1 0xxxxxxx 11 U+0080 U+07FF 2 110xxxxx 10xxxxxx 16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx 21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 觀察上面的表應該可以發現 除了 7 bits 的區間外,第一個 byte 開頭連續 1 的個數就是長度,例如 110XXXXX 就是 2 byte 長,而 1110xxxx 就是 3 byte 除了第一個 byte 外,之後的 byte 前兩個 bit 一定是 10 開頭,這樣的好處在於確立了編碼的 self-synchronizeing,意即當編碼為多個 byte 時,任取一個 byte 無法正常解碼。 Note 第一點中的例外 (7 bits) 是為了與 ASCII 的相容性,而第二點會影響到 code point 至 UTF-8 的轉換。 為了與 UTF-16 的相容性,在 R...

C++17 新功能 try_emplace

C++17 新功能 try_emplace 回顧 emplace 大家的好朋友 Standard Template Library (STL) 容器提供如 push_back , insert 等介面,讓我們塞東西進去; C++11 之後,新增了 emplace 系列的介面,如 std::vector::emplace_back , std::map::emplace 等,差異在於 emplace 是在容器內 in-place 直接建構新元素,而不像 push_back 在傳遞參數前建構,下面用實例來說明: struct Value { // ctor1 Value ( int size ) : array ( new char [ size ] ) , size ( size ) { printf ( "ctor1: %d\n" , size ) ; } // ctor2 Value ( const Value & v ) : array ( new char [ v . size ] ) , size ( v . size ) { printf ( "ctor2: %d\n" , size ) ; memcpy ( array . get ( ) , v . array . get ( ) , size ) ; } private : std :: unique_ptr < char [ ] > array ; int size = 0 ; } ; struct Value 定義了自訂建構子 (ctor1),以指定大小 size 配置陣列,複製建構子 (ctor2) 則會配置與來源相同大小及內容的陣列,為了方便觀察加了一些 printf 。當我們如下使用 std::vector::push_back 時 std :: vector < Value > v ; v . push_back ( Value ( 2048 ) ) ; 首先 Value 會先呼叫 ctor1,傳給 push_ba...