2007-07-07

AMP (Apache + MySQL + PHP) 的安裝設定

要利用 LinkStation 來架各種網站(個人網頁、Blog、Wiki 還是討論區),不能或缺的是 Linux 上必備的 AMP (Apache + MySQL + PHP),有了這些基本服務,只要抓程式碼回來解壓縮、做點調整,就可以提供各種 Web-based 的服務和功能。

第一個動作先來裝 Apache 這個 Web Server:

apt-get install apache2

安裝完畢,系統會自動啟動 Apache 服務(啟動過程會看到一點錯誤訊息,先不管),可以用瀏覽器試連網址:http://機器的IP位址,連上成功瀏覽器上會有「It works!」字樣。因為還沒搞好設定的部分,我們先停掉服務:

/etc/init.d/apache2 stop

如果未來有執行 Perl/CGI 的需求,記得要順道安裝給 Apache 用的 Perl 套件:

apt-get install libapache2-mod-perl2

接下來是調整主要設定檔。所有 Apache2 相關的設定檔都在 /etc/apache2 目錄下,以前可以在 /etc/apache2/apache2.conf 裡面一次搞定,現在卻要分散到各處來設定 XD。首先是 Apache 服務執行時預設的編碼語系。目前主流預設都是 UTF-8,但是 Apache 卻是 ISO-8859-1,先編輯 charset 設定檔:

nano /etc/apache2/conf.d/charset

把 AddDefaultCharset UTF-8 前面的 # 刪掉,這樣服務器預設使用的編碼就會是 UTF-8 了。而 Apache 服務的連接埠設定,在檔案:/etc/apache2/ports.conf 裡面,預設是 80,沒要更動所以不用改。接下來設定需要用到的用戶和群組,看 apache2.conf 裡面提到它是連結到檔案 /etc/apache2/envvars,裡面的內容是:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
...

顧名思義,它定義了執行時 Process 的身份、群組和 ID,預設用的是 www-data,為了好看 (?!)、還有和其他服務共享的目的,所以我新增一個帳號 www,並且更改群組到 users,要手動修改帳號資訊,要編輯 /etc/passwd:

nano /etc/passwd

在最後面新增一列:

www:x:106:100:www:/home/www:/bin/false

並且把 envvars 的內容改成:

export APACHE_RUN_USER=www
export APACHE_RUN_GROUP=users
....

新增的帳號名稱是 www,帳號 ID 是 106 (請自己找一個不重複的)、群組 ID 是 100 (屬於 users 這個群組,不確定可以看 /etc/group 內容)、帳號說明以及所屬根目錄 /home/www(這個目錄請自行建立、chown & chgrp 給 www & users),而且也不允許一般登入。以上非硬性規定,可以根據個人需要調整。還記得安裝完、服務自動啟動看到的錯誤訊息嗎?訊息像是:

Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

原因是服務不認得所在機器的名稱,只要在設定檔裡加入機器的 alias 就能排除這個訊息(其實不影響服務啟動),編輯設定檔:

nano /etc/apache2/httpd.conf

加入一行(用系統預設的 hostname):

ServerName %h

該服務的基本設定到此差不多就搞定了,接下來要設定的是網站實際網頁檔案放置的目錄,也就是網頁對外提供服務的根目錄。這裡先處理預設的網站,系統裝好用的預設目錄是 /var/www,對應到網站的根目錄 (http://localhost),要修改關於預設站台的設定檔:

nano /etc/apache2/sites-available/default

範例的設定檔內容為:

<VirtualHost *:80>
        ServerAdmin root@localhost
        DocumentRoot /home/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        ScriptAlias /cgi/ /home/www/cgi-bin/
        <Directory /home/www/cgi-bin>
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>
        ErrorLog /var/log/apache2/error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
...
</VirtualHost>

以上已經把 www 的目錄指定到 /home/www,也就是把預設網站的網頁根目錄從 /var/www 改到 /home/www。原先的 cgi 目錄指定到 /usr/lib/cgi-bin/,這裡移到 /home/www/cgi-bin/ 下面(目錄也要記得自己建啊),方面網站檔案管理。最後有一段關於 doc 的 alias,完全沒用所以我就拿掉了。最後記得把剛剛那個會顯示「It works!」的網頁檔案複製到新目錄:

cp /var/www/index.html /home/www

啟動伺服器囉(以上設定都正確的話,應該沒有任何錯誤訊息):

/etc/init.d/apache2 start

接下來檢驗服務是否有啟動(每個服務驗證都適用喔):

nmap localhost

裡面應該要有一筆 Port 80 的記錄(像這樣:80/tcp open http),代表服務在跑囉~然後用你的瀏覽器直接連 http://機器的IP位址,一樣看到「It works!」就成功啦!既然上面有裝 CGI 用的 Perl,這裡一定也要測試一下,在設定放 CGI 的目錄下建立一個檔案:

nano /home/www/cgi-bin/test.pl

裡面的內容是:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World!";

存檔後離開,記得更改成可執行檔的屬性(chmod a+x /home/www/cgi-bin/test.pl),然後用瀏覽器連網址:http://機器的IP位址/cgi/test.pl,如果有看到「Hello, World!」,那麼 Perl CGI 也運作正常啦!

如果要在 Apache 上面做 Virtual Host (不同網址、指定到同一個 IP、卻指向不同目錄的網頁目錄),在 /etc/apache2/sites-available 目錄下建立一個設定檔,假設以網域名稱當檔名 (範例的網域叫做 forum.test.com,而對應到的實體路徑是 /home/www/forum):

nano /etc/apache2/sites-available/forum.test.com.conf

然後貼入以下內容(請依網域名稱和網頁目錄更改):

<VirtualHost *>
        ServerAdmin webmaster@localhost
        Servername forum.test.com
        DocumentRoot /home/www/forum
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /home/www/forum>
                Options -Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

在 /home/www/forum 放入一個測試的首頁檔,接下來在 /etc/apache2/sites-enabled 目錄下建立虛擬網站的連結(該目錄應該已經有一個上述 default 的網站連結),以上面的設定檔為例:

ln -s /etc/apache2/sites-available/forum.test.com.conf ./001-forum.test.com

接著重啟 Apache (/etc/init.d/apache2 restart) ,虛擬站台 forum.test.com 就可以生效了(可以開瀏覽器連連看)!搞定網頁伺服器,依照順序 (A、M、P),接著來安裝 MySQL:

apt-get install mysql-server

安裝過程會要求你輸入 MySQL Server 資料管理員 root 的密碼(和系統 root 帳號不一樣),安裝完也會順便啟動服務,可以用下面的命令(和剛剛設定的密碼)去檢查:

mysqladmin -u root -p ping

如果想實際登入,用命令列操作本機的資料庫,可以用以下命令:

mysql -p

這樣預設是以管理者帳號 (root) 登入本機 (localhost),只要輸入剛剛建立的密碼就行了(登入後可以用命令 'show variables;' 看看目前預設的參數設定)。資料庫編碼和語系的問題很常見,尤其是中文亂碼,所以在裝完資料庫後直接設定 Daemon 和 Client 的編碼方式,強制全都用 UTF8,這樣就一勞永逸了~先編輯設定檔:

nano /etc/mysql/my.cnf

裡面找到兩個 Section,分別是 [mysqld] 和 [client],各加入以下設定:

[client]
....
default-character-set = utf8

[mysqld]
...
default-character-set = utf8
init-connect = 'SET NAMES UTF8'

編輯完後存檔,重新啟動 MySQL:

/etc/rc.d/init.d/mysql restart

這時候就搞定資料庫預設編碼的問題啦(一樣可以用 mysql -p 登入資料庫,用 'show variables;' 看看目前關於編碼的參數,原來 character_set_xx 和 collation_xx 後面有 latin1 字集的設定,應該都變成 utf8 了)!至於登入之後有什麼命令、怎麼使用資料庫,請參閱中文參考手冊。最後把 PHP 支援給裝上,主要包括 PHP5 (for Apache),對 MySQL 資料庫和加密功能的支援:

apt-get install php5 php5-mysql php5-mcrypt

完成之後就通通搞定了。以上套件都安裝完先不要重啟,還有設定要改。接下來對 PHP 做設定,編輯設定檔:

nano /etc/php5/apache2/php.ini

搜尋 (Ctrl+W) default_charset,原來是 iso-8859-1,改成:

default_charset = "utf-8"

現在可以重啟 Apache 了 (/etc/init.d/apache2 restart)。要驗證 PHP 能不能動,可以做一個測試檔,然後看看能不能顯示完整的 PHP 和相關功能。在網頁目錄下做一個 test.php (nano /home/www/test.php),填入下面的內容:

<?php
phpinfo();
?>

接著用瀏覽器連接 http://機器的IP位址/test.php,測試正常的話會秀出 PHP 的資訊。有了 PHP,我們來裝一套一套透過 PHP 來管理 MySQL 的網頁工具:PHPMyAdmin,為求安裝單純和程式的最新版,我們不用套件安裝的方法來做 (apt-get install phpmyadmin),抓最新版解壓縮就能用了。直接上官網、到下載頁面找最後的版本,複製連結後在 LinkStation 裡再 wget 下載。舉個例子來說明,我下載的是 3.1.4 全語系版,下載並解壓縮在 /tmp 下面(以下連結不一定能用,請確定官網的最新連結和檔名),把整個目錄改名稱搬到我們預設的網頁根目錄下 (/home/www)、最後刪除用不到了的壓縮檔:

cd /tmp
wget http://prdownloads.sourceforge.net/phpmyadmin/phpMyAdmin-3.1.4-all-languages.tar.bz2
tar -xjf phpMyAdmin-3.1.4-all-languages.tar.bz2
mv phpMyAdmin-3.1.4-all-languages /home/www/phpMyAdmin
rm -f phpMyAdmin-3.1.4-all-languages.tar.bz2

接下來要做個設定檔(預設沒有),並且自訂一個 cookie secret 這樣 phpMyAdmin 才能動(本步驟是參考官網的 Quick Install):

cp /home/www/phpMyAdmin/config.sample.inc.php /home/www/phpMyAdmin/config.inc.php
nano /home/www/phpMyAdmin/config.inc.php

找到下面這一行,填入一段十六進位的亂數,長度內容不限(下面紅色那個是範例,請訂自己專用的):

$cfg['blowfish_secret'] = 'ba17c1ec07d65003';  // use here a value of your choice

這樣就搞定了。 瀏覽器輸入 http://機器的IP位址/phpMyAdmin,用剛剛安裝 MySQL 那組帳號 (root) 和密碼就能登入。如果嫌 phpMyAdmin 名字太長,可以去更改網頁根目錄下面 phpMyAdmin 這個目錄名稱就行了。登入後,可以仿造 root 權限新增一個資料庫管理者帳號,像是 admin,設定完整權限後再砍掉原先的 root 帳號,會比較不容易和系統 root 搞混。(如果愛用命令列登入的,因為管理者帳號不是 root 改成 admin 了,記得用 mysql -u admin -p 來登入)

備註:後來發現登入 phpMyAdmin 常有奇怪的警告,雖然好像不理也沒關係,但一直有個問題總不大舒服,因此這邊加註解決方法。

1. 關聯資料表的附加功能未能啟動。這是因為預設 phpMyAdmin 需要在 mySQL 裡面有一個自己用的資料庫,剛灌完 mySQL 當然沒有、phpMyAdmin 也不會自己建,所以要自己手動處理。先用 mysql -p -u admin 登入 mySQL 資料庫,建立需要的資料庫:

create database phpmyadmin;

用 quit 登出後,用預先定義好的 table 資料匯入剛剛建好的資料庫 phpmyadmin:

mysql -p -u admin < /home/www/phpMyAdmin/scripts/create_tables.sql

接著編輯 phpMyAdmin 的設定檔(/home/www/phpMyAdmin/config.inc.php),移掉 Advanced phpMyAdmin features 下面十行前面的 "//" remark 符號,登出再重新用 phpmyadmin 登入就沒有這個訊息了。

2. Server running with Suhosin. Please refer to documentation for possible issues. 這是提示有啟用 Suhosin 的 PHP 保護機制,要你去調整一些參數有的沒的(請自行瞭解那是幹嘛的),討厭看到這個紅字的,可以到設定檔最後加上如下關閉 warning 提示的參數就行了。

$cfg['SuhosinDisableWarning'] = true;

相關軟體差不多都設定完了,為避免未來安裝其他程式和存取共用的問題,可以把整個網頁根目錄 (/home/www) 的使用者和群組通通設定成上述我們新增的那個工作帳號 (www) 及所屬群組 (users):

chown -R www:users /home/www

到此 AMP 就都安裝設定完畢,現在我們有一個強大的網頁伺服器 Apache、還可以設定虛擬站台,有 PHP5 的支援,還有一套 MySQL 資料庫,這個資料庫還有 Web 介面的管理工具:PHPMyAdmin,有了這些個軟體環境,不管單純做個網站,還是要架設討論區、Blog,都可以很容易地架設起來了。

回應: 7

jason 提到...

請問大大是否有安裝好的LinkStation HG改機環境可以提供下載
因為我在安裝大大所寫的AMP的安裝設定
發生了問題 好像是apache有新版的 照成後續的安裝動作無法完成 請問大大有安裝好的備份檔嗎 或是 安裝過程中所需的所有軟體可供下載 感恩~

Abin 提到...

To jason: 抱歉,我並沒有提供什麼改機環境、備份檔或軟體下載。

jason 提到...

請問大大是否可以提供LinkStation HG改機所需要的軟體 現在網路很多新版軟體 造成安裝上的困難 多謝大大幫忙

jason 提到...

喔 那這樣的話 只能用LinkStation 提供的陽春功能了 感恩~

ChungMin 提到...

可否請你教我LS_GL改機嗎?可以付若干的費用做給我上一課好嗎?因為我一直安裝不起來了....

Abin 提到...

To Chungmin:
付費上課?我倒從來沒想過這回事。我自認沒有強到能開課啦,遇到問題我也不一定能解決,改機單純只是靠熱血和前人的耕耘,我只不過只是整理改機的步驟和個人想法罷了。
其實改機並不是給一般沒經驗的人來玩的,不過既然你買了、開始做,你可以參照我的步驟一個個做,有問題在發問,看是卡在哪裡,自我學習的部份多參照 Linkstation 的論壇、鳥哥的 Linux 筆記或自購 Linux 書,只要有那個心還是搞得起來的。要不然,只好付費請別人幫你改好,要上一課就能統統搞定,應該沒有人敢做這樣的保證吧!

提到...

http://0rz.tw/e74TL
http://0rz.tw/f84Yf
大大這各有救嗎???^^

張貼留言

歡迎留言或發表意見,不過要理性不做人身攻擊。匿名的朋友得到回應的速度會比較慢喔~
發問相關的禮貌和規矩請先參考這篇文章,不當留言、和本文無關的回應可能會被直接刪除無視喔!