# 安裝編譯工具鏈與依賴庫
apt-get update
apt-get install -y build-essential libxml2-dev libssl-dev libbz2-dev libcurl4-openssl-dev \
libjpeg-dev libpng-dev libfreetype6-dev libgmp-dev libldap2-dev libmcrypt-dev \
libmysqlclient-dev libpspell-dev librecode-dev libsnmp-dev libtidy-dev libxslt-dev \
libzip-dev zlib1g-dev libncurses5-dev libreadline-dev libedit-dev libsqlite3-dev \
libonig-dev pkg-config autoconf bison re2c
cd httpd-2.4.2
./configure --prefix=/usr/local/apache \
--with-libxml2 \
--enable-modules=most \
--enable-mods-shared=all
make
make install
# 測試
/usr/local/apache/bin/apachectl start
curl 127.0.0.1 # 應顯示 "It works!"
關鍵點:Apache 2.4 需 APR、APR-Util、PCRE,若 configure 報錯缺少,需先編譯安裝這三個依賴或指定 --with-apr 等路徑。
cd mysql-5.1.62
./configure --prefix=/usr/local/mysql \
--with-mysqld-user=mysql \
--with-extra-charsets=all \
--enable-thread-safe-client
make
make install
# 初始化資料庫
/usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# 配置 my.cnf
cp support-files/my-medium.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 加入:
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
user=mysql
[client]
default-character-set=utf8
# 目錄權限
chown -R mysql:mysql /usr/local/mysql
# 啟動
/usr/local/mysql/bin/mysqld_safe --user=mysql &
# 驗證
ps aux | grep mysqld
cd php-5.3.11
./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-mysql-sock=/tmp/mysql.sock \
--with-pdo-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--enable-mbstring=all \
--enable-zend-multibyte \
--with-gd \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-bz2 \
--with-curl \
--with-openssl \
--enable-ftp \
--enable-sockets \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-soap \
--enable-zip \
--with-xmlrpc \
--with-xsl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-gmp \
--with-gettext \
--with-mhash \
--with-mcrypt \
--enable-pcntl \
--disable-rpath \
--enable-inline-optimization
make
make test # 可能有測試失敗,但不影響安裝
make install
# 複製生產環境 php.ini
cp php.ini-production /usr/local/php/lib/php.ini
# 編輯關鍵配置
# error_log = /usr/local/php/php_error.log
# date.timezone = "Asia/Shanghai"
# session.save_path = "/tmp"
# extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626"
# extension=mysqli.so
# extension=pdo_mysql.so
# extension=gd.so
# extension=curl.so
# extension=mbstring.so
# ... 其他擴展
# 編輯 /usr/local/apache/conf/httpd.conf
# 確保載入 PHP 模組(make install 應自動添加)
LoadModule php5_module modules/libphp5.so
# 新增類型映射
AddType application/x-httpd-php .php .php5 .phtml
AddType application/x-httpd-php-source .phps
# 設定 DirectoryIndex
DirectoryIndex index.php index.html
# 重啟 Apache
/usr/local/apache/bin/apachectl restart
<?php
phpinfo();
?>
瀏覽器訪問 https://server-ip/info.php,確認 Apache、PHP、MySQL 模組、GD、cURL、mbstring 等擴展正常載入。
| 問題 | 解決 |
|---|---|
| configure: error: xml2-config not found | apt-get install libxml2-dev |
| configure: error: Cannot find OpenSSL's <evp.h> | apt-get install libssl-dev 並指定 --with-openssl=/usr |
| make: *** [ext/gd/gd.o] Error 1 | 缺少 freetype/jpeg/png dev 包,安裝後重新 configure |
| apxs: command not found | Apache 未安裝或路徑錯誤,確認 --with-apxs2 路徑正確 |
| MySQL client library not found | apt-get install libmysqlclient-dev 或指定 --with-mysql=/usr/local/mysql |
| PHP make test 失敗 | 部分測試對環境敏感,不影響功能,可忽略;關鍵擴展測試通過即可 |
opcache.enable=1、opcache.memory_consumption=256。innodb_buffer_pool_size 設為實體記憶體 70%。logrotate 管理 Apache/PHP/MySQL 日誌。disable_functions、open_basedir、expose_php=Off、隱藏版本號。源碼編譯安裝雖繁瑣,但能精確控制版本、模組、優化參數,適合特定版本相容性需求或極致效能調優場景。現代生產環境建議優先使用發布版套件管理器或容器化部署,降低維護成本。