網站製作學習誌

記錄學習製作網站的一切

在 Linux 上建構 PHP 5.3 測試環境

這裡把我在 Linux 上安裝 PHP 5.3 測試環境的步驟記錄下來,所有內容都是參考以前寫的「在 Linux 上建構 PHP5 開發與測試環境 」 一文。

安裝目標

以下就是我這次要安裝的平台:

  • Linux 平台 (採用 CentOS)
  • Apache 2.2.x
  • MySQL 5.1.x
  • PHP 5.3.x

目錄配置

以下依照一些先進的經驗,加上個人的喜好,將平台中相關目錄配置如下:

原始碼存放位置 /usr/local/src
Apache 網站根目錄 /home/www/wwwroot
MySQL 數據庫位置 /var/mysql/data
MySQL 設定檔 /etc/my.cnf
PHP 設定檔 /etc/php.ini

建立 Linux 平台

下載 CentOS

我選擇的 Linux 平台是 CentOS ,目前其穩定的版本為 5.4 (2010-12) 。可以透過以下網址,下載 ServerDVD ISO 檔:

1
http://ftp.isu.edu.tw/pub/Linux/CentOS/5.4/isos/i386/CentOS-5.4-i386-bin-DVD.iso

下載回來後,我將它燒錄成 DVD 光碟以便安裝。

安裝簡述

基本上安裝步驟就是參考鳥哥的網站,而詳細的步驟就按照安裝畫面一一設定即可。但特別要注意 SELinux 要先關掉,免得到時候遇到一堆網路問題。

由於這是測試用的環境,所以其實也不用安裝太多不必要的服務。不過有兩個服務要預先安裝,那就是 vsftpd 和 sshd 。這樣後面要操作系統及存取檔案時,會比較容易一些。

另外就是 httpd 、 mysql 和 php 也都不要勾選,因為後面我們要採用 tarball 的方式來安裝。

註:另外也要注意防火牆有沒有擋掉 WWW 服務。

定時校正伺服器時間

接下來要定時將伺服器的時間做校正動作,這裡要先安裝 ntp 套件:

1
# yum install ntp

安裝好後,我們要修改排程表:

1
# crontab -e

加入以下這行:

1
0 23 * * * /usr/sbin/ntpdate time.stdtime.gov.tw > /dev/null 2>&1

完成後存檔,這樣伺服器就會在每天的 23:00 根據國家時間與頻率標準實驗室的 NTP 伺服器來自動校準時間。

註:以上設定 CentOS 的步驟也可以參考學生用伺服器建置流程(CentOS 5 版),這篇教學在 CentOS 的設定上寫的比較完整。

設定 FTP 伺服器

首先要建一個 www 帳號,專門用來上傳 web 程式:

1
# useradd www

然後編輯 /etc/vsftpd/vsftpd.conf ,參考鳥哥的 vsFTPd 檔案伺服器,我將設定調整如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=000
connect_from_port_20=YES
chown_uploads=YES
chown_username=nobody
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to My FTP service.
chroot_local_user=YES
chroot_list_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
listen=YES
tcp_wrappers=YES
use_localtime=YES

安裝編譯套件

因為後面需要編譯 Tarball 原始碼,因此這裡我們需要先把編譯所需要的相關套件用 yum 指令來安裝好:

1
2
3
4
5
6
# yum install \
gcc gcc-c++ gcc-g77 flex bison autoconf \
automake bzip2-devel zlib-devel ncurses-devel \
gd gd-devel \
libjpeg-devel libpng-devel libtiff-devel libxml2-devel freetype-devel pam-devel \
sqlite curl curl-devel

這些套件因為較無版本問題,而且如果自行編譯會比較麻煩;因此這裡採用 yum 安裝會快一點。

小提示:以 xxx-devel 為名的,就是用來協助編譯的套件,它們通常會包含一些編譯用的表頭檔。

編譯安裝目標套件

編譯 Tarball 可以參考鳥哥網站裡的原始碼與 Tarball 套件管理員,大致的步驟如下:

  1. 下載套件原始檔,並放到 /usr/local/src 底下。
  2. 解開套件原始檔,然後進到解開後的目錄。
  3. 設定套件相關選項。
  4. 編譯與安裝。

特別要注意設定套件相關選項時,一定要仔細考慮清楚自己所要的配置。如果有任何不清楚的地方,可以在設定前輸入以下指令來瞭解各個選項的意義:

1
# ./configure --help

編譯與安裝 MySQL 5.1.x

MySQL 5.1 也是要在 PHP 5.3 之前安裝,這裡參考的是官方的安裝說明。首先要先建立執行 MySQL 時所需要的帳號:

1
2
# groupadd mysql
# useradd -g mysql mysql

然後就按照標準程序安裝:

1
2
3
4
5
6
7
8
9
# cd /usr/local/src
# wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.x.tar.gz/from/http://mysql.ntu.edu.tw/
# tar xvzf mysql-5.1.x.tar.gz
# cd mysql-5.1.x
# ./configure \
--prefix=/usr/local \
--localstatedir=/var/mysql/data \
--enable-thread-safe-client
# make && make install

有關 configure 選項的說明如下: (參考自官方網站的 2.3.2. Typical configure Options)

選項 說明
–prefix=/usr/local MySQL 的安裝目錄
–localstatedir=/var/mysql/data 資料庫的存放路徑
–enable-thread-safe-client 啟用 thread safe 的用戶連結方式

註:我在參考對岸網友的安裝心得時,到最後都一直無法成功安裝預設資料庫。後來在 ./configure 中使用以上的選項後,才順利把 MySQL 安裝起來。

編譯安裝完成後,接下來要將 MySQL 設定檔複製到預設的位置:

1
# cp support-files/my-medium.cnf /etc/my.cnf

然後安裝預設的資料庫,這裡要特別注意權限的設定:

1
2
3
4
# cd /usr/local
# mkdir /var/mysql
# mkdir /var/mysql/data
# bin/mysql_install_db --user=mysql

安裝好預設資料庫後,我們要將 MySQL 加入伺服器的啟動服務項目裡:

1
2
3
4
# cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on

接下來啟動 MySQL ,並設定 root 的密碼:

1
2
3
# service mysqld start
# bin/mysqladmin -u root password "password_for_root"
# service mysqld stop

編譯與安裝 Apache 2.2.x

因為後面的套件在安裝時需要夠知道 Apache 安裝的目錄,所以這裡要先安裝 Apache 。 Apache 的安裝基本上也是採用標準步驟:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# cd /usr/local/src
# wget http://ftp.mirror.tw/pub/apache/httpd/httpd-2.2.x.tar.gz
# tar zxvf httpd-2.2.x.tar.gz
# cd httpd-2.2.x 
# ./configure \
--prefix=/usr/local \
--enable-module=so \
--enable-dav=shared \
--enable-deflate=shared \
--enable-expires=shared \
--enable-rewrite=shared \
--enable-authn-dbm=shared \
--enable-authn-anon=shared \<!-- - - enable-authn-dbd=shared \ -->
--enable-auth-basic=shared \
--enable-cache \
--enable-file-cache \
--enable-mem-cache \
--enable-disk-cache \
--enable-static-support \
--enable-static-htpasswd \
--enable-static-htdigest \
--enable-static-rotatelogs \
--enable-static-logresolve \
--enable-static-htdbm \
--enable-static-ab \
--enable-static-checkgid
# make && make install

有關 configure 選項的說明如下: (參考自 Apache HTTP Server Documentation::configure - Configure the source tree)

選項 說明
–prefix=/usr/local Apache 的安裝目錄
–enable-module=so 啟用 so 模組,可以讓 Apache 支援 DSO
–enable-dav=shared 啟用 WebDAV ,Subversion 需要用到
–enable-deflate=shared 啟用網頁壓縮
–enable-expires=shared 啟用 HTTP 控制
–enable-rewrite=shared 啟用網址重寫
–enable-cache 啟用快取
–enable-file-cache 啟用檔案快取
–enable-mem-cache 啟用記憶體快取
–enable-disk-cache 啟用磁碟快取
–enable-static-support 啟用靜態支援
–enable-static-htpasswd 編譯 htpasswd - 管理採用基本認證的檔案
–enable-static-htdigest 編譯 htdigest - 管理採用摘要認證方式的檔案
–enable-static-rotatelogs 編譯 rotatelogs - 輪替 Apache 紀錄的管道日誌程序
–enable-static-logresolve 編譯 logresolve - 解析 Apache 紀錄中的 IP 地址為主機名
–enable-static-htdbm 編譯 htdbm - 操作 DBM 密碼數據庫
–enable-static-ab 編譯 ab - Apache HTTP 服務器性能測試工具
–enable-static-checkgid 編譯 checkgid

接下來要將 Apache 設為伺服器的啟動服務項目,首先把 Apache 的控制程式複製成伺服器的服務項目:

1
# cp /usr/local/bin/apachectl /etc/rc.d/init.d/httpd

然後編輯這個服務項目:

1
# vi /etc/rc.d/init.d/httpd

然後在 #!/bin/sh 下面加入以下兩行:

1
2
# chkconfig: 2345 10 90
# description: Activates/Deactivates Apache Web Server

註:能讓 chkconfig 辨認出 httpd 的關鍵在是 chkconfig: 2345 10 90 這一行,第一個數字 2345 表示讓 Apache 在 2345 這四個級別都自動運行;第二個數字 10 表示程序啟動的優先級;第三個數字 90 表示程序停止的優先級。

然後就可以把 Apache 加到系統的啟動服務裡面:

1
2
# chkconfig --add httpd
# chkconfig httpd on

編譯與安裝 PHP 5.3.x

PHP5 的安裝也是採用標準模式,然後也要記得將 php.ini-recommend 複製成 /etc/php.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# cd /usr/local/src
# wget http://tw2.php.net/get/php-5.3.x.tar.gz/from/tw.php.net/mirror
# tar zxvf php-5.3.x.tar.gz
# cd php-5.3.x
# cp php.ini-development /etc/php.ini
# ./configure \
--prefix=/usr/local \
--with-apxs2=/usr/local/bin/apxs \
--with-zlib \
--with-bz2 \
--with-libxml-dir \
--with-gd \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-mysql \
--with-mysqli \
--with-pdo-mysql \
--with-config-file-path=/etc \
--with-iconv \
--with-curl \
--disable-ipv6 \
--enable-mbstring \
--enable-ftp
# make && make install

有關 configure 選項的說明如下:

選項 說明
–prefix=/usr/local PHP 的安裝目錄
–with-apxs2=/usr/local/bin/apxs 指定 Apache2 的執行檔路徑
–with-zlib 啟用 zlib 支援
–with-bz2 啟用 bz2 支援
–with-libxml-dir 啟用 libxml 支援
–with-gd 啟用 gd2 支援
–with-freetype-dir 啟用 freetype 支援
–with-jpeg-dir 啟用 jpeg 支援
–with-png-dir 啟用 png 支援
–with-mysql 啟用 mysql 支援
–with-mysqli 啟用 mysqli 支援
–with-pdo-mysql 啟用 pdo_mysql
–with-config-file-path=/etc 指定設定檔 php.ini 的路徑
–with-iconv 啟用 iconv 支援
–disable-ipv6 關閉 ipv6 支援
–enable-mbstring 啟用 mbstring 支援
–enable-ftp 啟用 ftp 支援

接下來要把 PHP 整合到 Apache 裡,先編輯 Apache 的設定檔:

1
# vi /usr/local/conf/httpd.conf

找到:

1
2
User daemon
Group daemon

改為:

1
2
User www
Group www

在最後一行或是 AddType 區段加上:

1
AddType application/x-httpd-php .php

然後要設定預設文件,一樣在 httpd.conf 中尋找:

1
DirectoryIndex index.html

改為:

1
DirectoryIndex index.php index.htm index.html

然後修改網站根目錄,找到:

1
DocumentRoot "/usr/local/htdocs"

改為:

1
DocumentRoot "/home/www/wwwroot"

然後再找到:

1
<Directory "/usr/local/htdocs">

改成:

1
<Directory "/home/www/wwwroot">

接下來要讓 .htaccess 可以作用,在上面的 <Directory "/home/www/wwwroot"> 往下幾行可以找到:

1
AllowOverride none

將它更改為:

1
AllowOverride all

最後將 httpd.conf 存檔並退出 vi 編輯器。

接著要更改 php.ini 的時區:

1
# vi /etc/php.ini

找到:

1
;date.timezone =

改為:

1
date.timezone = Asia/Taipei

儲存後離開。

測試開發環境

在最後的步驟裡,我們要測試剛剛建立的環境是否能正常動作。

首先要建立網站根目錄位置:

1
2
3
# cd /home/www
# mkdir wwwroot
# chown www.www -R wwwroot

接著再建立一個測試檔:

1
# vi /home/www/wwwroot/index.php

內容為:

1
2
3
4
<?php
$link = mysql_connect('localhost', 'root', "ikolp;['") or die(mysql_error());
phpinfo();
mysql_close($link);

再把伺服器啟動:

1
2
# service httpd start
# service mysqld start

然後開啟瀏覽器,在網址列輸入:

1
http://test_server_ip/

查看是否會正常出現 phpinfo 的內容即可。

Comments