LAMP (Linux + Apache + MySQL + PHP) 經典架構源碼編譯安裝全流程,適合學習組件交互原理、特定版本需求、離線環境部署。生產環境建議使用包管理器/容器。
mkdir -p /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cat > /etc/yum.repos.d/CentOS-Media.repo <
yum -y install gcc gcc-c++ make autoconf automake libtool \
libxml2-devel libcurl-devel openssl-devel bzip2-devel \
libjpeg-devel libpng-devel freetype-devel \
pcre-devel zlib-devel
# 停止 RPM 安裝的服務
service httpd stop 2>/dev/null; service mysqld stop 2>/dev/null
chkconfig httpd off; chkconfig mysqld off
# 關閉 SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 即時生效需重啟,或 setenforce 0
# 關閉防火牆 (演示環境)
iptables -F; iptables -X; iptables -Z
service iptables save
# 保留核心服務: network, sshd, syslog, crond, irqbalance, microcode_ctl, sendmail, atd
# 其餘可關閉
ntsysv # 圖形界面管理
# 解壓到 /usr/local
tar zxvf mysql-5.5.15-linux2.6-x86_64.tar.gz -C /usr/local
cd /usr/local
mv mysql-5.5.15-linux2.6-x86_64 mysql
# 用戶/權限
groupadd mysql; useradd -r -g mysql -s /sbin/nologin mysql
cd /usr/local/mysql
chown -R mysql:mysql .
chown -R root .
chown -R mysql data
# 初始化
scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
# 配置文件
cp support-files/my-medium.cnf /etc/my.cnf
# 啟動腳本
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld; chkconfig mysqld on
service mysqld start
# 環境變量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
# 庫文件
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
ldconfig
ln -s /usr/local/mysql/include /usr/include/mysql
# 1. 依賴庫 APR, APR-util, PCRE (見 16430 文章詳情)
# 此處假設已安裝到 /usr/local/apr, /usr/local/apr-util, /usr/local/pcre
# 2. Apache 源碼
cd /usr/src
wget https://archive.apache.org/dist/httpd/httpd-2.4.25.tar.gz
tar zxvf httpd-2.4.25.tar.gz
cd httpd-2.4.25
# 3. 配置編譯
./configure \
--prefix=/usr/local/apache2 \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--with-pcre=/usr/local/pcre \
--enable-so \
--enable-rewrite \
--enable-ssl \
--enable-mods-shared=most \
--with-mpm=prefork
# 4. 編譯安裝
make -j$(nproc) && make install
# 5. 基礎配置 httpd.conf
# ServerName localhost:80
# 加載 PHP 模塊 (待 PHP 編譯後添加)
cd /usr/src
wget https://cn2.php.net/distributions/php-5.4.45.tar.gz
tar zxvf php-5.4.45.tar.gz
cd php-5.4.45
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags
make -j$(nproc) && make install
# 配置文件
cp php.ini-production /usr/local/php/lib/php.ini
# 修改時區、上傳限制、錯誤顯示等
# Apache 載入 PHP 模塊 (make install 已自動添加 LoadModule)
# 確認 httpd.conf 有:
# LoadModule php5_module modules/libphp5.so
# SetHandler application/x-httpd-php
# DirectoryIndex index.php index.html
# 1. 重啟 Apache
/usr/local/apache2/bin/apachectl restart
# 2. 創建測試頁
echo '' > /usr/local/apache2/htdocs/phpinfo.php
# 3. 瀏覽器訪問 https://IP/phpinfo.php
# 應顯示 PHP 信息,含 mysql, gd, mbstring, curl, openssl 等擴展
# 4. 測試 MySQL 連接
echo '' > /usr/local/apache2/htdocs/db_test.php
| 組件 | 安裝路徑 | 配置文件 | 啟動命令 |
|---|---|---|---|
| Apache | /usr/local/apache2 | /usr/local/apache2/conf/httpd.conf | /usr/local/apache2/bin/apachectl start |
| MySQL | /usr/local/mysql | /etc/my.cnf | service mysqld start |
| PHP | /usr/local/php | /usr/local/php/lib/php.ini | (嵌入 Apache, 隨 Apache 啟動) |
| 錯誤關鍵字 | 缺少依賴 | 解決包 |
|---|---|---|
| apr.h not found | APR | apr-devel / 自編譯 APR |
| pcre.h not found | PCRE | pcre-devel |
| libxml2 not found | libxml2 | libxml2-devel |
| curl/curl.h not found | libcurl | libcurl-devel |
| openssl/ssl.h not found | OpenSSL | openssl-devel |
| jpeg.h not found | libjpeg | libjpeg-devel |
| png.h not found | libpng | libpng-devel |
| freetype/freetype.h not found | FreeType | freetype-devel |
| mysql.h not found | MySQL 客戶端庫 | mysql-devel / 指定 --with-mysql 路徑 |
本文詳細記錄了 LAMP 組件源碼編譯安裝的完整依賴鏈、配置參數、驗證步驟。核心難點在於:**APR/APR-util/PCRE 先於 Apache 編譯**、**PHP `--with-apxs2` 關聯 Apache 生成 libphp5.so**、**MySQL 客戶端庫路徑指定正確**。掌握此流程,可應對任意版本組合的編譯安裝需求。**現代生產環境請優先選擇 `yum/apt` 安裝官方包或 Docker 容器化部署。**