03 10月 2007

將Lifetype Server從Windows搬移至Linux

由於本站之前在windows上執行,有時候會造成Apache莫名奇妙地失靈,所以才想將server移至Linux Ubuntu上執行。這樣子所吃的資源可能也會比較少一點。

以下紀錄了移機的過程,主要遇到的問題有...編碼以及轉簡潔網址的問題。

[事前準備工作]

  1. 將Windows的資料備份出來
    • 將apache底下的lifetype整個資料夾壓縮備份起來(用zip壓縮,傳至Linux上再用unzip解壓縮)
    • 進入phpMyAdmin後,將lifetype資料庫輸出至檔案中lifetype.sql(請選擇「使用完整新增指令」)
  2. 在Ubunte上安裝Apache、Mysql、PHP(在這邊不多加著墨)
    • sudo apt-get install apache2
    • sudo apt-get install mysql
    • sudo apt-get install php
    • sudo apt-get install php-mysql
  3. 將原本Windows的lifetype程式碼,傳至apache2預設資料夾/var/www/
    • unzip lifetype.zip
  4. 上網下載phpMyAdmin,用來管理mysql資料庫

[重建Database]

  1. 利用phpMyAdmin建立一個lifetype資料庫,校對要調成utf8_unicode_ci
  2. 在Windows匯出的lifetype.sql檔前面加上
    • SET NAMES utf8;
      SET CHARACTER_SET_CLIENT=utf8;
      SET CHARACTER_SET_RESULTS=utf8;
  3. 在cmd line下指令,匯入lifetype.sql檔
    • mysql [lifetype DB name] -u[Name] -p[Password] < lifetype.sql \
      --default-character-set=utf8
    • # 因為mysql的預設編碼為latin1,因為需設定正確的character-set才能匯入
    • # 或是直接更改mysql預設的編碼方式為utf8就更乾脆了,可修改mysql的設定檔my.cnf
    • # [client]
      # default-character-set=utf8
      # [mysqld]
      # default-character-set=utf8
      # default-collation=utf8_general_ci
  4. ---- Error Message ----
    都按照上面的步驟做的話,應該就不會有所謂的亂碼出現才對。一開始我沒就直接匯入,也不疑有他,結果就犯了全天下男人都會犯的錯…ERROR 1064 (42000) at line 330: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xxxxxx' 主要的原因就是因為編碼問題,因為lifetype.sql中挾雜著鼎鼎大名的「許功蓋…」含有跳脫字元「」,所以就視為字串已結束,就出現錯了。
    不過我後來都照上面的做了,卻還是不斷出現同樣的錯誤訊息纏著我,讓我陷入人生中的低潮,後來才發現,原來是因為在Windows匯出lifetype.sql檔案,沒有選擇「使用完整新增指令」,所以才會不斷地出錯,當我又重新試了一次之後,終於成功了!!!讓我流下了感動的眼淚,並且大喝了一聲X,響徹雲霄!!!

[建置Lifetype網站]

  1. 把原本在Windows上的lifetype資料夾複製到/var/www後,建議是把wizard.php抓回來,重新建置一遍,這樣子會比較簡單一點,否則要自己動手修改一些東西。
    • 修改/lifetype/config/config.properties.php內的db_host為
      $config['db_host'] = localhost
    • tmpgallery這兩個資料夾權限改為777
      % cd /var/www/lifetype
      % chmod 777 tmp
      % chmod 777 gallery
    • 為了安全性起見,不將gallery底下的資料夾權限全開,因此必須將它的Owner改為apache的名字,我的主機上apache的名稱為www-data
      % chown -R www-data gallery
    • 看gallery底下有幾個資料夾就改幾個資料夾的權限,因為這些都是blog user上傳檔案的資料夾,因為本站只有一個user,blog_user_id為1,所以就只有一個資料夾「1」
      % cd gallery
      % chmod 755 1
      再將1資料夾底下的previews&previews-med的權限改成755
      % cd 1
      % chmod 755 previews
      % chmod 755 previews-med
  2. 輸入網站的網址,試試看是否正常運作。照理來說,到目前為止應該都是正常的。
    % /etc/init.d/apache2 start
    如果出現Error Message: apache2: Could not determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
    在/etc/apache2/apache2.conf中,加入ServerName localhost即可
  3. 但是,要進入admin.php的後台管理系統卻會失敗,因為原本網站的IP跟新網站的IP不一樣,而原本的DB中紀錄的base_url導致網頁中的連結都不正常了。
    @解決方法:利用phpMyAdmin進入lifetype的DB,進入lt_config這個Table。修改其中的兩項參數:
    base_url
    blog_does_not_exist_url
    將這兩個url參數中的網址改成新的IP就行了!
  4. 網站中有使用authImage外掛,可能會發現在產生驗證圖檔時,出現錯誤訊息「You don't have GD support compiled in, we cannot create an authimage. Please activate GD Support.」。這是因為你的php5沒有使用GD module,因為只要將GD module安裝起來即可,以下為Ubuntu的做法
    % apt-get install php5-gd
    % /etc/init.d/apache2 restart

[使用簡潔網址]

  1. 有使用簡潔網址的人,因為Ubuntu預設沒有掛載mod_rewrite,所以要先將module rewrite掛進來,因為apache在安裝時,其實已經裝載好,只是尚未load而已。而load的語法已寫好放在/etc/apache2/mods-available中,只要做個link放至mods-enabled,apache就會自動去load了
    % sudo ln -s /etc/apache2/mods-available/rewrite.load \
    /etc/apache2/mods-enabled/rewrite.load
    或是
    %
    sudo a2enmod rewrite
  2. 修改/etc/apache2/sites-enabled/000-default
    先找到
    <Directory /var/www>
    ...
    </Directory>
    將其中的AllowOverride後的None改為All
    Options後面要有FollowSymLinks

    然後重新啟動Apache
    /etc/init.d/apache2 restart
  3. 順利的話,應該就一切正常了:)
    可惜的是,我一點也不順利....Orz,我開網頁時,一直遇到error 500,打開apache的error.log檔來看時,顯示的錯誤是:「/var/www/lifetype/.htaccess: </Files> without matching <Files> section 」我一直不知道是哪裡的問題,千萬百試之後,才發現,我的.htaccess檔的編碼是utf8,後來把它改成ansi編碼就OK了~我猜可能是從windows複製過來linux後的才變這樣。

沒有留言: