最近在搬移 trac, moinmoin wiki 與 svn server 這篇文章記錄一下過程
原本的舊 server 是跑 apache
由於新的 server 是 VM 所以我覺得選用比較 light weight 的 nginx 似乎比較好
首先先講解在新的 server 重新建立環境
1. nginx 的安裝
首先到 nginx 下載頁 下載 (BTW 今天剛好釋出 1.0 萬歲)
然後依序解壓縮並且 compile 與安裝到指定位置 (敝單位 自己安裝的程式習慣裝在 /home 下面)
這樣 nginx 就會裝好在 /home/nginx 底下了
設定檔會在 /home/nginx/conf/nginx.conf 這裡
2. uWSGI 安裝
因為 trac 跟 moinmoin 都是 python 所以要找一個適合他們的 cgi 給 nginx 接而 uWSGI 似乎是不錯的選擇而且 nginx 也有原生的 uwsgi module
所以一樣依照下列步驟裝起來
make 完之後就會在同一個目錄下產生出 uwsgi 的執行檔在手動複製到想要的地方即可
3. subversion 安裝
基本上用套件管理程式裝一下就好了 敝單位目前都採用 SLES11sp1 所以指令如下
4. trac 的安裝
trac 要安裝可以參考這裡
大概就是用 easy_install 就全部搞定了
5. moinmoin wiki 的安裝
首先到 http://static.moinmo.in/files/moin-1.9.3.tar.gz 抓 source 在用 python install 即可
這樣 moinmoin 應該會被裝在 /usr/local/lib64/python2.6/site-packages/moin-1.9.2-py2.6.egg 之類的路徑 (SLES11sp1 是 x64 的)
五個都準備好了之後就開始來搬移啦
首先摘要一下搬移的方法
1. trac
基本上 trac 要搬移是最簡單的 把原本的目錄直接搬移過來就好了 (假設原本 trac 的 db 是用 sqlite 不然的話要連資料庫的檔案都一起搬) 所以指令大概如下
在 /home/www
這樣 trac 整個目錄就會被抓過來本地端了 (假設 trac 底下只有一個計畫案叫 xuite 的資料夾)
2. moinmoin wiki
moinmoin wiki 要搬移跟 trac 一樣簡單 基本上只要抓 moinmoin wiki 的 data 那個資料夾就夠了!
在 /home/moin 底下
qweqweqe
這樣 data 整個目錄就會被抓過來本地端了
3. svn 備份
svn 的搬移顯然不能直接複製目錄 參考這篇文章
先在舊的 server dump 出資料
然後再新的 server 抓 dump 的檔案回來後 倒回去
稍微把權限給設定一下 首先先建立 nginx 的使用者(與群組[非必要]) 修復一下權限
這麼一來檔案也都準備好了 開始準備建立 server 吧!
稍微整理一下 假設我們的資料目錄分別是
1. trac 的在 /home/www/trac/xuite
2. wiki 的在 /home/moin/data
3. svn 的在 /home/svn
然後程式的部份
1. nginx 在 /home/nginx
2. trac 跟 moinmoin wiki 的 egg 應該會被裝在 /usr/local/lib64/python2.6/site-packages/
前面提過 trac 跟 wiki 要用 uwsgi 跑起來 所以首先我們來設定 uwsgi 吧
trac on uwsgi
首先要先讓 trac generate 出 uwsgi 可以吃的設定檔所以先移動到 /home/www/trac
這個指令會 generate 出各種 cgi 的設定檔 ( /home/www/trac/xuite/cgi-bin ) 與一些 static file ( js,css, etc. ) (/home/www/trac/xuite/htdocs ) 提供伺服器做網址與資料夾的 alias 用
於是 uwsgi 可以用的檔案就會產生在 /home/www/trac/xuite/cgi-bin/trac.wsgi
有了這個檔案我們就可以 run uwsgi 了
注意! 要用 nginx 這個使用者 run 程式
moinmoin on uwsgi
在 run moinmoin 之前有一些設定檔要設定首先
然後修改 /usr/local/lib64/python2.6/site-packages/moin-1.9.2-py2.6.egg/share/moin/moin.wsgi 裡的一部分 修改處如下
然後 /usr/local/lib64/python2.6/site-packages/moin-1.9.2-py2.6.egg/share/moin/wikiconfig.py 也要做客製化的修改
改完這兩個檔案後接下來就可以準備跑 uwsgi 了
moinmoin 本身已經有 wsgi 的設定所以直接執行吧!
如果需要 uwsgi 的最佳化可以自行查詢 uWSGI docs
所以目前我們有兩個 server 分別 listen 在 /tmp/trac.sock 與 /tmp/moin.sock
接下來就是如何把 nginx 對應到這兩個 sock 上
基本上在 nginx 的 server { } 那一段裡設定如下
location ^~ /trac/xuite 與 location ^~ /xwiki 那兩段是把 網址分別像 http://xxxx/trac/xuite 與 http://xxxx/xwiki 送往對應的 sock 去處理 (因為要保留與舊的網址相容)
設定裡都有一個 uwsgi_param SCRIPT_NAME 與 uwsgi_modifier1 30 是因為網址前面有 prefix 提醒 nginx 要記得加 prefix
而 location ^~ /trac/xuite/chrome 與 location ^~ /xwiki/moin_static192 則是把 static files 做 alias 加速處理 不要送給 uwsgi 浪費資源並且加上 expires 的 header 節省網路傳輸資源
都設定好之後就起動 nginx 吧
然後測試網址 http://xxxx/trac/xuite 與 http://xxxx/xwiki 應該就可以看到對應的 trac 與 moinmoin wiki 的畫面了