雖然現代部署多使用 yum/dnf、Docker 或編譯安裝腳本,但掌握手動編譯安裝 Apache、MySQL、PHP 的完整流程,有助於深入理解組件依賴、參數調優、權限模型與故障排查。本文基於 RedHat 9.0 環境,記錄生產級編譯部署關鍵步驟與避坑指南。
| 組件 | 版本 | 安裝路徑 | 關鍵配置 |
|---|---|---|---|
| Apache | 1.3.29 | /usr/local/apache | --enable-module=so 支援 DSO 動態載入 |
| MySQL | 3.23.58 | /usr/local/mysql | --sysconfdir=/etc --localstatedir=/var/lib/mysql |
| PHP | 4.3.4 | /usr/local/php | --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs |
前置條件:
• 最小化安裝 Linux,**不要**勾選系統預設 Apache/MySQL/PHP 包
• 已安裝編譯工具鏈:gcc gcc-c++ make autoconf libtool
• 已安裝依賴庫:zlib-devel openssl-devel pcre-devel expat-devel
# 解壓與配置
tar zxvf mysql-3.23.58.tar.gz
cd mysql-3.23.58
./configure --prefix=/usr/local/mysql \
--sysconfdir=/etc \
--localstatedir=/var/lib/mysql \
--enable-assembler \
--with-charset=gbk --with-extra-charsets=all
make && make install
# 初始化資料庫
/usr/local/mysql/bin/mysql_install_db
# 建立專用用戶與權限(關鍵步驟)
useradd -M -r -d /var/lib/mysql -s /bin/bash -c "MySQL Server" -u 27 mysql
chown -R mysql:mysql /var/lib/mysql
chown -R root:mysql /usr/local/mysql
chmod 750 /var/lib/mysql
# 啟動腳本註冊
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
# 庫文件鏈接(避免 PHP 編譯找不到庫)
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
ln -s /usr/local/mysql/include/mysql /usr/include/mysql
# 啟動驗證
/etc/rc.d/init.d/mysqld start
mysql -u root -p
常見錯誤:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' → 99% 為 /var/lib/mysql 權限不正確,執行 chown -R mysql:mysql /var/lib/mysql 即可。
tar zxvf apache_1.3.29.tar.gz
cd apache_1.3.29
./configure --prefix=/usr/local/apache \
--enable-module=so \
--enable-rule=SHARED_CORE
make && make install
tar zxvf php-4.3.4.tar.gz
cd php-4.3.4
./configure --prefix=/usr/local/php \
--with-apxs=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php/etc \
--enable-mbstring \
--with-zlib \
--with-gd \
--enable-ftp
make && make install
# 複製生產配置
cp php.ini-dist /usr/local/php/etc/php.ini
# 編輯 php.ini:extension_dir、date.timezone、display_errors=Off 等
編輯 /usr/local/apache/conf/httpd.conf:
# 載入 PHP 模組(編譯時 --with-apxs 已自動生成 LoadModule 行)
AddType application/x-httpd-php .php .php3 .phtml
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html
/usr/local/apache/bin/apachectl start
# 建立測試頁
echo "" > /usr/local/apache/htdocs/info.php
# 瀏覽器訪問 https://server_ip/info.php
mysql:mysql,權限 750。ldconfig 或 ln -s 將庫文件鏈接至 /usr/lib、/usr/include 標準路徑,避免指定 --with-mysql 路徑。--with-charset=gbk、PHP mbstring、HTML meta charset、資料庫建表 CHARSET=gbk 全鏈路統一。手動編譯雖繁瑣,但能精確控制每個組件的編譯參數、安裝路徑、權限模型,是排查疑難雜症、實現極致效能調優的基礎技能。生產環境建議改用 Ansible Playbook 或 Docker 實現不可變基礎設施部署。