原始碼編譯安裝可自訂模組、優化參數、掌握版本,適合生產環境需高度客製化的場景。本文以 FreeBSD/Linux 通用流程示範 Apache 2.2、MySQL 5.0、PHP 5.2 編譯安裝,並說明關鍵配置與驗證步驟。
gcc、make、autoconf、libtool、openssl-devel、zlib-devel、pcre-devel 等。groupadd mysql && useradd -r -g mysql -s /sbin/nologin mysqlgroupadd www && useradd -r -g www -s /sbin/nologin www/usr/local/apache、/usr/local/mysql、/usr/local/php。tar zxvf httpd-2.2.4.tar.gz
cd httpd-2.2.4
./configure --prefix=/usr/local/apache \
--enable-shared=max \
--enable-module=most \
--enable-so \
--with-mpm=prefork
make && make install
--enable-so:支援動態載入模組 (DSO),後續 PHP 模組需此功能。--with-mpm=prefork:非執行緒安全的 PHP 必須搭配 prefork MPM。tar zxvf mysql-5.0.56.tar.gz
cd mysql-5.0.56
./configure --prefix=/usr/local/mysql \
--sysconfdir=/etc \
--localstatedir=/var/lib/mysql \
--with-charset=utf8 \
--with-collation=utf8_general_ci \
--with-extra-charsets=all \
--with-plugins=innobase,myisam,heap,csv
make && make install
cd /usr/local/mysql
cp support-files/my-medium.cnf /etc/my.cnf
./scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql
chown -R root .
chown -R mysql /var/lib/mysql
chgrp -R mysql .
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
/usr/local/mysql/bin/mysqladmin -u root password 'NewStrongPass'
# 允許遠程 root(生產環境建議建立專用帳號)
/usr/local/mysql/bin/mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'NewStrongPass' WITH GRANT OPTION; FLUSH PRIVILEGES;"
tar zxvf php-5.2.1.tar.gz
cd php-5.2.1
./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php/etc \
--with-openssl \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--enable-mbstring \
--enable-sockets \
--enable-bcmath
make && make install
cp php.ini-dist /usr/local/php/etc/php.ini
# 編輯 php.ini 關鍵項
# date.timezone = Asia/Taipei
# display_errors = Off
# log_errors = On
# error_log = /var/log/php_errors.log
# max_execution_time = 30
# memory_limit = 128M
# post_max_size = 8M
# upload_max_filesize = 2M
# 編輯 Apache httpd.conf
# 在 AddType 區段加入
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
# DirectoryIndex 加入 index.php
DirectoryIndex index.html index.php
# 載入 PHP 模組(make install 通常自動寫入,確認即可)
LoadModule php5_module modules/libphp5.so
# 建立測試頁
echo '' > /usr/local/apache/htdocs/index.php
# 重啟 Apache
/usr/local/apache/bin/apachectl restart
# 瀏覽器訪問 https://伺服器IP/index.php
# 應顯示 PHP 資訊頁,確認 MySQL 區段出現 Client API version
# Apache
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
chkconfig --add httpd
chkconfig httpd on
# MySQL 已於上節完成
# 防火牆開放 80/3306
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
| 現象 | 可能原因 | 解決 |
|---|---|---|
Apache 啟動報 libphp5.so 找不到 | PHP 編譯未指定 --with-apxs2 或路徑錯誤 | 重新編譯 PHP 並確認 apxs 路徑 | PHP 無法連線 MySQL | socket 路徑不符、權限、skip-networking | 檢查 mysql.default_socket、my.cnf socket 設定、防火牆 |
| 中文亂碼 | 字元集未統一 | 資料庫/表/連線/Apache/PHP 全統一 utf8mb4 |
| 編譯失敗缺少庫 | 缺開發套件 | yum install -y gcc make openssl-devel zlib-devel pcre-devel libxml2-devel curl-devel gd-devel |
原始碼編譯安裝 LAMP 雖步驟較多,但能精確控制版本、模組與優化參數。生產環境建議搭配配置管理工具將上述流程自動化,確保可重現、可審計。