首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Ubuntu 12.04 從原始碼編譯安裝 Apache、MySQL、PHP 完整實戰紀錄

     編輯:PHP 相關知識

前言

雖然現代 Linux 發行版提供套件管理器(apt/yum)可快速部署 LAMP 環境,但原始碼編譯安裝能讓你精確控制版本、模組與優化參數,適合生產環境定製化部署、效能調校或學習底層運作機制。本文記錄在 Ubuntu 12.04 上編譯安裝 Apache 2.4.2、MySQL 5.1.62、PHP 5.3.11 的完整流程、關鍵參數與避坑指南。

環境與版本

  • 作業系統:Ubuntu 12.04 LTS
  • Apache:2.4.2
  • MySQL:5.1.62
  • PHP:5.3.11

一、前置準備

安裝編譯工具與依賴庫

sudo apt-get update
sudo apt-get install build-essential libxml2-dev libssl-dev libcurl4-openssl-dev \
libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libreadline-dev \
libbz2-dev zlib1g-dev libgmp-dev libncurses5-dev libxslt1-dev

關鍵提示:Apache 2.4 需較新的 `libxml2`,Ubuntu 12.04 預設版本可能過舊,建議手動編譯安裝新版 `libxml2` 或啟用 backports 軟體源。

二、Apache 2.4.2 編譯安裝

下載與解壓

wget https://archive.apache.org/dist/httpd/httpd-2.4.2.tar.gz
tar -xzf httpd-2.4.2.tar.gz
cd httpd-2.4.2

配置參數解析

./configure \
--prefix=/usr/local/apache \
--with-libxml2=/usr/local/libxml2 \   # 指定新版 libxml2 路徑
--enable-modules=most \
--enable-mods-shared=all
  • --prefix:安裝根目錄,便於管理多版本共存。
  • --with-libxml2:指定 libxml2 路徑,解決版本相依問題。
  • --enable-mods-shared=all:將所有模組編譯為動態共享物件(DSO),啟用/停用靈活。

編譯安裝與驗證

make
sudo make install

# 測試啟動
sudo /usr/local/apache/bin/apachectl start
# 瀏覽器訪問 https://127.0.0.1 應顯示 "It works!"

三、MySQL 5.1.62 編譯安裝

配置參數

cd mysql-5.1.62
sudo ./configure \
--prefix=/usr/local/mysql \
--with-mysqld-user=mysql \
--with-extra-charsets=all \
--enable-thread-safe-client

注意:`./configure` 階段需仔細閱讀輸出訊息,缺少依賴庫會導致後續編譯失敗。若提示缺少庫,安裝對應 `-dev` 套件後重新 configure。

編譯安裝與初始化

make
sudo make install

# 複製設定檔
sudo cp /usr/local/mysql/share/mysql/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

權限設定與啟動

# 建立 mysql 使用者(若不存在)
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql

# 資料目錄權限
sudo chown -R mysql:mysql /usr/local/mysql

# 初始化資料庫
sudo /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

# 啟動服務
sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &

# 驗證
ps aux | grep mysqld
# 應看到 /usr/local/mysql/bin/mysqld 進程

四、PHP 5.3.11 編譯安裝(最複雜)

配置參數完整版

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=shared \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--enable-gd-native-ttf \
--with-curl \
--with-zlib \
--with-bz2 \
--enable-ftp \
--enable-sockets \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-soap \
--enable-zip \
--with-xmlrpc \
--with-xsl \
--with-gettext \
--with-gmp \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-mcrypt \
--with-openssl \
--enable-fpm \              # 若需 PHP-FPM(建議生產環境)
--with-config-file-path=/usr/local/php/etc

常見 configure 錯誤與解決

錯誤提示解決方案
缺少 libxml2安裝 `libxml2-dev` 或指定 `--with-libxml2-dir`
缺少 bz2`sudo apt-get install libbz2-dev`
缺少 zlib`sudo apt-get install zlib1g-dev`
缺少 ncurses`sudo apt-get install libncurses5-dev`
缺少 GD 依賴安裝 `libjpeg-dev libpng-dev libfreetype6-dev`
缺少 OpenSSL`sudo apt-get install libssl-dev`

關鍵技巧:`configure` 失敗時,查看 `config.log` 尋找具體錯誤;補裝依賴後必須重新執行 configure。

編譯、測試與安裝

make
# make test  # 可選,耗時較長,若報錯視情況決定是否繼續
sudo make install

# 複製生產環境建議的 php.ini
sudo cp php.ini-production /usr/local/php/etc/php.ini

五、整合 Apache 與 PHP

修改 Apache 設定檔(/usr/local/apache/conf/httpd.conf)

# 確保已載入 PHP 模組(make install 通常自動添加)
LoadModule php5_module modules/libphp5.so

# 新增 PHP 檔案類型關聯
AddType application/x-httpd-php .php .html
AddType application/x-httpd-php-source .phps

# 設定預設首頁

    DirectoryIndex index.php index.html


# 設定 DocumentRoot(根據實際專案路徑調整)
DocumentRoot "/var/www/html"

    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted

PHP 關鍵設定(/usr/local/php/etc/php.ini)

error_log = /usr/local/php/php_error.log
date.timezone = "Asia/Shanghai"
session.save_path = "/tmp"
display_errors = Off
log_errors = On
max_execution_time = 30
memory_limit = 128M
post_max_size = 8M
upload_max_filesize = 2M

六、驗證完整安裝

# 重啟 Apache
sudo /usr/local/apache/bin/apachectl restart

# 建立測試檔
echo '' | sudo tee /var/www/html/info.php

# 瀏覽器訪問 https://127.0.0.1/info.php
# 應顯示 PHP 5.3.11 資訊,且載入 mysql、gd、curl、mbstring 等模組

七、常見問題與避坑指南

  1. 共用軟體源衝突:避免在同一 `sources.list` 混用多個第三方源,優先使用官方源 + 手動編譯特定版本。
  2. 編譯耗時極長:PHP `make` 可能需 10-30 分鐘,若系統記憶體不足可能誤以為死機,請耐心等待或加大 swap。
  3. MySQL 啟動失敗:檢查錯誤日誌(`/usr/local/mysql/data/*.err`),常見於權限、字元集設定、port 衝突(3306)。
  4. PHP 模組載入失敗:`apachectl -t` 檢查語法;確認 `libphp5.so` 存在於 Apache modules 目錄;檢查 `ldd /usr/local/apache/modules/libphp5.so` 依賴庫是否完整。
  5. 權限問題:確保 Apache 執行使用者(通常為 `daemon` 或 `www-data`)對網站目錄有讀取權限。

八、總結與現代化建議

原始碼編譯安裝雖能極致客製化,但維護成本高(安全性更新需手動重編)。現代部署建議:

  • 開發/測試環境:使用 Docker** 官方映像(`php:apache`、`mysql`、`httpd`)秒級啟動、版本鎖定、隔離性佳。
  • 生產環境:採用配置管理工具(Ansible、Chef、Puppet)自動化部署標準化 LAMP 棧,或使用雲端託管服務(RDS、Cloud SQL、Elastic Beanstalk)。
  • 若必須自編譯:建立編譯腳本化流程(Shell/Ansible Playbook),記錄所有 `configure` 參數、依賴版本、編譯日誌,實現可重現部署。

這份實戰紀錄不僅是安裝手冊,更是理解 LAMP 底層依賴關係、編譯鏈路與排錯思維的完整案例。願它能助你在伺服器部署之路上更從容!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved