源碼編譯部署 LAMP 架構詳細步驟說明
一、環境準備
1. 關閉防火墻和SELinux
[root@hrz ~]# systemctl stop firewalld
[root@hrz ~]# systemctl disable firewalld
[root@hrz ~]# setenforce 0
2. 配置YUM網絡源
[root@hrz ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@hrz ~]# yum -y install epel-release
二、部署Apache(HTTP服務)
1. 安裝依賴工具包
[root@hrz ~]# yum -y install bzip2 vim make wget openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ libxml2-devel
//安裝編譯Apache等組件所需的依賴工具和開發庫//- bzip2:用于解壓bzip2格式的壓縮包(如后續PHP的tar.bz2包)
// - vim:文本編輯器,用于修改配置文件(如Apache的configure腳本、PHP的配置文件等)
// - make:編譯工具,用于執行Makefile文件,將源代碼編譯為可執行程序
// - wget:命令行下載工具,可用于下載所需的源碼包(若未提前上傳)
// - openssl-devel:OpenSSL開發庫,支持Apache的SSL功能(--enable-ssl參數依賴)
// - pcre-devel:PCRE正則表達式開發庫,支持Apache的rewrite模塊(--enable-rewrite參數依賴)
// - expat-devel:XML解析庫開發包,Apache處理XML相關功能時依賴
// - libtool:編譯輔助工具,用于管理共享庫的創建和鏈接
// - gcc、gcc-c++:C和C++編譯器,用于編譯源代碼(幾乎所有源碼編譯都依賴)
// - libxml2-devel:XML處理庫開發包,支持Apache和PHP對XML的解析功能
2. 安裝APR(Apache可移植運行時)
[root@hrz ~]# cd /opt/
[root@hrz opt]# tar -xzvf apr-1.7.0.tar.gz
[root@hrz opt]# cd apr-1.7.0
[root@hrz opt]# vim configure //刪除沖突行,避免編譯報錯//
$RM "$cfgfile" /*查找并刪除這一行,可以使用sed -i '/$RM "$cfgfile"/d' configure 在命令行中刪除*/
[root@hrz apr-1.7.0]# ./configure --prefix=/usr/local/apr
配置APR的安裝路徑
/* ./configure:執行源碼目錄中的配置腳本,檢查系統環境并生成Makefile--prefix=/usr/local/apr:指定APR的安裝目錄為/usr/local/apr,便于后續管理
*/
[root@hrz apr-1.7.0]# make
/*備注:根據configure生成的Makefile編譯源代碼make命令會調用編譯器(如gcc)將源碼編譯為二進制文件,過程可能需要幾分鐘
*/[root@hrz apr-1.7.0]# make install
/*備注:將編譯好的二進制文件、庫文件等安裝到指定目錄(/usr/local/apr)安裝完成后,APR的可執行文件、頭文件、庫文件會分別放在該目錄的bin、include、lib子目錄中后續安裝APR-util和Apache時,需要指定此路徑關聯APR */
3. 安裝APR-util(APR工具庫)
[root@hrz apr-1.7.0]# cd /opt/
[root@hrz opt]# tar -xzvf apr-util-1.6.1.tar.gz
[root@hrz opt]# cd /opt/apr-util-1.6.1
[root@hrz apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
// 備注:配置APR-util的編譯參數
// - ./configure:執行配置腳本,檢查系統環境并生成Makefile
// - --prefix=/usr/local/apr-util:指定APR-util的安裝目錄為/usr/local/apr-util,與APR目錄分開管理,便于維護
// - --with-apr=/usr/local/apr:指定依賴的APR庫安裝路徑(必須與之前安裝APR的--prefix路徑一致)
// APR-util是APR的擴展工具庫,提供更多功能(如數據庫連接、加密等),必須依賴APR才能正常編譯和運行
// 執行此命令后,腳本會檢查APR的頭文件和庫文件是否存在,若路徑錯誤會報錯,需確保APR已正確安裝在指定目錄
[root@hrz apr-util-1.6.1]# make
[root@hrz apr-util-1.6.1]# make install
4. 安裝HTTPD(Apache服務)
[root@hrz apr-util-1.6.1]# cd /opt/
[root@hrz opt]# tar -xzf httpd-2.4.54.tar.gz
[root@hrz opt]# cd /opt/httpd-2.4.54
[root@hrz httpd-2.4.54]# ./configure --prefix=/usr/local/apache \
> --sysconfdir=/etc/httpd24 \
// --prefix=/usr/local/apache:設置Apache的安裝根目錄,所有程序文件、資源文件等將集中存放于此
// --sysconfdir=/etc/httpd24:指定配置文件的獨立存放目錄,與程序文件分離,便于系統級配置管理和備份
> --enable-so \
// 啟用動態共享對象(DSO)機制,允許Apache在運行時動態加載或卸載模塊,無需重新編譯整個服務
// 這是后續加載PHP模塊(mod_php)的必要前提
> --enable-ssl \
// 激活SSL/TLS模塊,使Apache支持HTTPS加密傳輸協議,保障數據傳輸安全
// 依賴系統中已安裝的openssl-devel庫,否則會配置失敗
> --enable-cgi \
// 啟用CGI(通用網關接口)支持,允許Apache運行外部CGI腳本程序(如Perl腳本)
// 擴展了Web服務器處理動態內容的能力
> --enable-rewrite \
// 啟用mod_rewrite模塊,支持基于規則的URL重寫功能
// 可實現URL地址美化、域名跳轉、防盜鏈、偽靜態等功能,對搜索引擎優化(SEO)友好
> --with-zlib \
// 關聯zlib壓縮庫,使Apache能夠對傳輸的網頁內容進行gzip壓縮
// 減少網絡傳輸數據量,提高頁面加載速度,降低帶寬消耗
> --with-pcre \
// 關聯PCRE(Perl Compatible Regular Expressions)正則表達式庫
// 為mod_rewrite模塊提供正則表達式支持,是URL重寫規則解析的基礎
> --with-apr=/usr/local/apr \
// 指定APR(Apache可移植運行時)庫的安裝路徑,Apache的跨平臺功能依賴此庫
// 路徑必須與之前安裝APR時的--prefix參數一致,否則無法正確關聯
> --with-apr-util=/usr/local/apr-util/ \
// 指定APR-util庫的安裝路徑,該庫是APR的擴展工具集,提供額外功能支持
// 需與APR保持版本兼容,路徑必須準確無誤
> --enable-modules=most \
// 編譯并啟用大多數常用的Apache模塊(如mod_auth、mod_log_config等)
// 避免手動逐個啟用模塊,同時排除少數不常用或實驗性模塊
> --enable-mpms-shared=all \
// 以動態共享方式編譯所有MPM(多處理模塊),包括prefork、worker、event等
// 支持在不重新編譯的情況下,通過修改配置文件切換不同的MPM工作模式
> --with-mpm=prefork \
// 指定默認使用prefork MPM工作模式,這是一種進程型處理模式
// 每個請求由獨立的子進程處理,進程間相互隔離,穩定性高,適合運行PHP等單線程應用
// 執行此命令前需確保所有依賴庫(apr、apr-util、openssl-devel、pcre-devel等)已正確安裝,否則會出現配置錯誤
[root@hrz httpd-2.4.54]# make
[root@hrz httpd-2.4.54]# make install
[root@hrz httpd-2.4.54]# cd
[root@hrz ~]# /usr/local/apache/bin/apachectl start
// 備注:啟動Apache服務
// /usr/local/apache/bin/apachectl:Apache的控制腳本,位于安裝目錄的bin子目錄下
// start:參數表示啟動服務,會加載/etc/httpd24/httpd.conf配置文件并啟動進程
// 啟動成功后,可通過訪問服務器IP(默認端口80)驗證,若出現Apache測試頁則表示啟動正常
// 其他常用參數:
// - stop:停止服務
// - restart:重啟服務(修改配置后需執行)
// - status:查看服務狀態
5. 驗證Apache
訪問服務器IP,默認頁面路徑為/usr/local/apache/htdocs/index.html
。
三、部署MySQL(數據庫服務,二進制方式)
1. 創建MySQL用戶
[root@hrz ~]# useradd -r -M -s /sbin/nologin mysql
// 備注:創建MySQL運行所需的系統用戶
// -r:表示創建系統用戶(UID范圍在系統預設的系統用戶區間,通常小于1000)
// -M:不創建用戶的家目錄(MySQL服務無需登錄交互,無需家目錄)
// -s /sbin/nologin:指定用戶的默認shell為/sbin/nologin,禁止該用戶通過終端登錄系統
// mysql:用戶名,用于運行MySQL進程,遵循最小權限原則,避免使用root用戶運行服務
2. 安裝依賴包
[root@hrz httpd-2.4.54]# yum -y install libncurses* libaio
// 備注:安裝MySQL運行依賴的系統庫
// libncurses*:終端圖形交互庫,MySQL的命令行客戶端(如mysql)依賴此庫實現終端交互功能
// libaio:異步I/O庫,MySQL在處理大量數據讀寫時使用異步I/O提升性能,尤其對InnoDB存儲引擎至關重要
// -y:yum命令自動確認安裝,無需手動輸入y確認
// 這兩個庫是MySQL二進制程序運行的必要依賴,缺少會導致MySQL啟動失敗
3. 配置MySQL
[root@hrz ~]# cd /opt/
[root@hrz opt]# tar -zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@hrz opt]# cd /usr/local/
[root@hrz local]# ln -sv mysql-5.7.37-linux-glibc2.12-x86_64/ mysql
// 備注:為解壓后的MySQL目錄創建軟鏈接,簡化路徑引用
// ln -sv:創建符號鏈接(軟鏈接),-s表示軟鏈接,-v顯示創建過程
// 原目錄名較長(mysql-5.7.37-linux-glibc2.12-x86_64),鏈接為簡短的mysql后,后續操作可直接使用/usr/local/mysql路徑
// 同時便于后續升級MySQL時,只需更新軟鏈接指向新目錄,無需修改大量配置
[root@hrz local]# chown -R mysql.mysql /usr/local/mysql # 設置權限
[root@hrz local]# mkdir -p /opt/data/ # 創建數據目錄
[root@hrz local]# chown -R mysql.mysql /opt/data/ # 授權數據目錄
4. 數據庫初始化
[root@hrz local]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/data/
// 備注:初始化MySQL數據庫
// --initialize-insecure:以無密碼方式初始化(root用戶初始無密碼,方便首次登錄)
// --user=mysql:指定初始化過程使用mysql用戶(與之前創建的系統用戶一致,確保權限正確)
// --datadir=/opt/data/:指定數據庫數據文件的存儲目錄(需提前創建并授權給mysql用戶)
// 初始化過程會創建系統數據庫(如mysql、information_schema)、生成初始表結構和權限信息[root@hrz local]# ln -sv /usr/local/mysql/include/ /usr/local/include/mysql
// 備注:為MySQL頭文件創建軟鏈接到系統標準頭文件目錄
// 頭文件(.h)用于編譯依賴MySQL的程序(如PHP的mysqli擴展),鏈接后編譯器可直接在/usr/local/include/mysql找到所需文件
// -s:創建軟鏈接,-v:顯示鏈接過程[root@hrz local]# vim /etc/ld.so.conf.d/mysql.conf
/etc/ld.so.conf.d/mysql.conf
// 備注:配置MySQL庫文件路徑,讓系統能識別MySQL的動態鏈接庫
// /usr/local/mysql/lib:MySQL的庫文件(.so)存放目錄
// 通過echo命令直接寫入更高效,避免手動編輯:echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf[root@hrz local]# ldconfig
// 備注:更新系統動態鏈接庫緩存,使剛才配置的MySQL庫路徑生效
// 執行后,系統可自動加載/usr/local/mysql/lib目錄下的庫文件,避免運行MySQL相關程序時出現"找不到庫文件"的錯誤
5. 編輯MySQL配置文件
[root@hrz local]# vim /etc/my.cnf // 清空原有內容,添加以下配置
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
// 備注:配置MySQL主配置文件,定義服務運行參數
// [mysqld]:配置段標識,僅對mysqld服務進程生效
// basedir = /usr/local/mysql:指定MySQL程序安裝目錄(與軟鏈接路徑一致)
// datadir = /opt/data:指定數據庫數據文件存儲目錄(與初始化時的--datadir一致)
// socket = /tmp/mysql.sock:指定MySQL本地通信的UNIX套接字文件路徑,客戶端連接本地數據庫時使用
// port = 3306:指定MySQL監聽的TCP端口(默認3306,可根據需求修改)
// pid-file = /opt/data/mysql.pid:指定進程ID文件路徑,用于標識MySQL服務進程
// user = mysql:指定運行MySQL服務的系統用戶(與之前創建的mysql用戶一致,遵循最小權限原則)
// skip-name-resolve:禁用DNS反向解析,加快客戶端連接速度(避免因DNS問題導致的連接延遲)
6. 配置MySQL服務管理
[root@hrz ~]# vim /usr/local/mysql/support-files/mysql.server
basedir=/usr/local/mysql
datadir=/opt/data
//也可用
//sed -ri "s#^(basedir=).*#\1/usr/local/mysql#g" /usr/local/mysql/support-files/mysql.server
//sed -ri "s#^(datadir=).*#\1/opt/data#g" /usr/local/mysql/support-files/mysql.server
[root@hrz local]# vim /usr/lib/systemd/system/mysqld.service // 添加以下內容
[Unit]
Description=mysql server daemon
// 描述服務:表示這是MySQL服務器守護進程
After=network.target
// 定義啟動順序:在網絡服務(network.target)啟動之后再啟動MySQL服務[Service]
Type=forking
// 服務類型:forking表示服務啟動后會fork一個子進程作為主進程,父進程退出
ExecStart=/usr/local/mysql/support-files/mysql.server start
// 啟動命令:執行MySQL自帶的啟動腳本啟動服務
ExecStop=/usr/local/mysql/support-files/mysql.server stop
// 停止命令:執行MySQL自帶的停止腳本停止服務
ExecReload=/bin/kill -HUP $MAINPID
// 重載命令:向主進程發送HUP信號(重新加載配置,不中斷服務),$MAINPID表示服務主進程ID[Install]
WantedBy=multi-user.target
// 安裝配置:表示當系統啟動到多用戶模式(正常運行模式)時,該服務需要被啟動
// 用于systemctl enable命令設置開機自啟[root@hrz local]# systemctl daemon-reload # 重載服務配置
[root@hrz local]# systemctl enable --now mysqld # 開機自啟并啟動服務
7. 配置MySQL環境變量
[root@hrz /]# vim /etc/profile
export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
/*也可在命令行用echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile*/
[root@hrz /]# source /etc/profile
8. 設置數據庫密碼
[root@hrz local]# mysql -uroot # 初始無密碼,直接登錄
mysql> set password=password('3edc4rfv'); # 設置密碼
mysql> exit
四、部署PHP
1. 安裝依賴包(含GD庫等)
[root@hrz local]# yum -y install \
libjpeg libjpeg-devel \
// libjpeg:提供JPEG圖像格式的基礎處理能力,是處理JPEG圖片的核心庫
// libjpeg-devel:包含編譯依賴JPEG功能的程序所需的頭文件(.h)和靜態鏈接庫,PHP編譯GD庫時需依賴此包
libpng libpng-devel \
// libpng:提供PNG圖像格式的編碼和解碼支持,處理透明圖片時必不可少
// libpng-devel:PNG庫的開發文件,PHP在編譯GD擴展以支持PNG圖像處理時需要此包
freetype freetype-devel \
// freetype:用于解析和渲染多種字體文件(如TrueType、OpenType),支持文字在圖像中的顯示
// freetype-devel:freetype庫的開發組件,PHP的GD庫要實現文字渲染功能必須依賴此包
libxml2 libxml2-devel \
// libxml2:高性能的XML解析庫,支持XML文檔的解析、驗證和生成
// libxml2-devel:XML解析庫的開發文件,PHP編譯XML擴展時需要此包以支持XML相關函數
zlib zlib-devel \
// zlib:提供數據壓縮和解壓縮功能(如gzip格式),可減少網絡傳輸數據量
// zlib-devel:zlib庫的開發文件,PHP編譯zlib擴展時依賴此包,以支持壓縮相關函數
curl curl-devel
// curl:支持多種網絡協議(HTTP、HTTPS、FTP等)的客戶端工具庫,用于發起網絡請求
// curl-devel:curl庫的開發文件,PHP編譯curl擴展時需要此包,以實現通過PHP代碼發送HTTP請求等功能
// -y:yum命令自動確認安裝,無需手動輸入"y"確認
2. 解壓并編譯安裝PHP
[root@hrz local]# cd /opt/
[root@hrz opt]# tar -xjf php-7.1.10.tar.bz2
[root@hrz opt]# cd php-7.1.10
[root@hrz php-7.1.10]# ./configure \
--prefix=/usr/local/php \
// 指定PHP安裝目錄為/usr/local/php,統一管理路徑
--with-apxs2=/usr/local/apache/bin/apxs \
// 關聯Apache的apxs工具,用于生成PHP模塊(libphp7.so)并自動添加到Apache配置中,使Apache支持PHP解析
--with-mysql-sock=/tmp/mysql.sock \
// 指定MySQL套接字文件路徑,PHP通過本地套接字連接MySQL時使用(需與MySQL配置的socket路徑一致)
--with-mysqli \
// 啟用mysqli擴展,提供增強的MySQL交互功能(支持存儲過程、事務等)
--with-zlib \
// 關聯zlib庫,支持PHP的zlib壓縮功能(如gzencode、gzdecode函數)
--with-curl \
// 關聯curl庫,啟用curl擴展,支持PHP發起HTTP/HTTPS請求、文件上傳等網絡操作
--with-gd \
// 啟用GD庫擴展,支持PHP處理圖像(縮放、水印、格式轉換等)
--with-jpeg-dir \
// 指定JPEG庫路徑,使GD庫支持JPEG圖像處理(自動識別系統安裝的libjpeg)
--with-png-dir \
// 指定PNG庫路徑,使GD庫支持PNG圖像處理(自動識別系統安裝的libpng)
--with-freetype-dir \
// 指定freetype庫路徑,使GD庫支持在圖像中渲染文字(依賴freetype庫)
--with-openssl \
// 關聯openssl庫,支持PHP的SSL/TLS功能(如https請求、數據加密)
--enable-mbstring \
// 啟用多字節字符串擴展,支持中文、日文等多字節字符處理(解決中文亂碼問題)
--enable-xml \
// 啟用XML擴展,支持PHP解析和生成XML文檔
--enable-session \
// 啟用會話(Session)功能,支持在多個請求間保存用戶狀態
--enable-ftp \
// 啟用FTP擴展,支持PHP通過FTP協議上傳/下載文件
--enable-pdo \
// 啟用PDO(PHP Data Objects)擴展,提供統一的數據庫訪問接口(支持多種數據庫)
--enable-tokenizer \
// 啟用tokenizer擴展,支持PHP代碼的詞法分析(常用于框架和模板引擎)
--enable-zip \
// 啟用ZIP擴展,支持PHP壓縮/解壓縮ZIP文件
[root@hrz php-7.1.10]# make
[root@hrz php-7.1.10]# make install
3. 配置PHP
測試環境時使用php.ini-development文件,生產環境使用php.ini-production文件
//復制默認配置文件
[root@hrz php-7.1.10]# cp php.ini-development /usr/local/php/lib/php.ini//設置時區
[root@hrz php-7.1.10]# vim /usr/local/php/lib/php.ini /*sed -i 's/;date.timezone =/date\.timezone = \Asia\/Shanghai/' /usr/local/php/lib/php.ini*/
4. 配置Apache支持PHP
/*修改httpd服務配置文件,讓apache支持php*/
[root@hrz php-7.1.10]# vim /etc/httpd24/httpd.conf
/*在最末行寫入*/
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
/* 大約在262行寫index。php*/
<IfModule dir_module>DirectoryIndex index.html index.php
</IfModule>/*或者在命令行使用
echo "AddType application/x-httpd-php .php" >> /etc/httpd24/httpd.conf
echo "AddType application/x-httpd-php-source .phps" >> /etc/httpd24/httpd.conf
sed -i 's/index.html/index\.php index\.html/' /etc/httpd24/httpd.conf
*/
/*驗證php測試頁*/
[root@hrz php-7.1.10]# rm -f /usr/local/apache/htdocs/index.html[root@hrz php-7.1.10]# vim /usr/local/apache/htdocs/index.php
<?php
phpinfo();
?># 設置默認索引頁為index.php
[root@hrz php-7.1.10]# sed -i 's/index.html/index.php index.html/' /etc/httpd24/httpd.conf
5. 驗證PHP環境
[root@hrz php-7.1.10]# rm -f /usr/local/apache/htdocs/index.html # 刪除默認HTML頁
[root@hrz php-7.1.10]# vim /usr/local/apache/htdocs/index.php # 創建PHP測試頁
<?php
phpinfo();
?># 重啟Apache生效
[root@hrz php-7.1.10]# /usr/local/apache/bin/apachectl stop
[root@hrz php-7.1.10]# /usr/local/apache/bin/apachectl start
訪問服務器IP,若顯示PHP信息頁,則LAMP環境部署成功。