一、安装前准备
首先下载安装文件
1. 下载安装包
下载以下 7 个压缩包
- Apache依赖包:apr-1.7.0.tar.gz、apr-util-1.6.1.tar.gz、pcre-8.45.tar.gz
- Apache主程序:httpd-2.4.52.tar.gz
- MySQL数据库:mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz (⚠️注意:一定要下这种 linux-glibc 的通用二进制包,千万不要下 .rpm 包,小白用RPM包离线安装绝对会报错)
- PHP依赖包:libxml2-2.9.14.tar.gz
- PHP主程序:php-7.4.33.tar.gz
下载地址
https://resource.migshare.cn/static/202606/001/lamp_packages.zip
下载完后,拷贝到服务器上。
注意:接下来过程中如遇到错误提示,如系统未安装工具或权限等问题,请根据实际情况处理解决,最简单的方式就是把报错交给AI,按AI提供方案解决。
2. 在服务器上解压并建目录
- 把 lamp_packages.zip 放到服务器的 /opt 目录下。
- 登录服务器,执行以下命令,创建目录并解压:
创建统一存放目录
sudo mkdir -p /lamp_install
把压缩包解压到该目录
sudo unzip /opt/lamp_packages.zip -d /lamp_install

进入目录
cd /lamp_install
二、安装 Apache(网页服务器)
Apache 必须按顺序安装它的 3 个依赖,最后再装自己。
1. 安装 apr
sudo tar -zxvf apr-1.7.0.tar.gz

编译安装
cd apr-1.7.0
sudo ./configure --prefix=/usr/local/apr

出现下面的提示不用担心,直接忽略就行

make && sudo make install

2. 安装 apr-util
cd ..
sudo tar -zxvf apr-util-1.6.1.tar.gz

cd apr-util-1.6.1
编译安装
sudo ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

make && sudo make install
安装如果遇到下图错误,表示在编译过程中,系统尝试在当前目录(/lamp_install/apr-util-1.6.1)下创建或写入一个名为 .make.dirs 的隐藏文件时,被拒绝了。
不要着急按错误提示进行处理即可。

解决步骤
第一步:检查并修复源码目录权限
请执行以下命令,将 /lamp_install 目录的所有权修改为当前用户 xhf,这样您就有权限在里面进行编译操作了:
sudo chown -R xhf:xhf /lamp_install
第二步:清理之前的编译残留
由于之前的 make 失败,可能会留下一些残缺的临时文件。强烈建议先清理一下:
make clean
第三步:重新编译与安装
权限修复并清理完毕后,重新执行标准的编译安装命令:
make && sudo make install
这样上面报错问题就解决了。
如果报下面图问题,说明您的 Linux 系统中缺少了 Expat 库的开发包。
apr-util 内置了对 XML 解析的支持,在编译其 XML 模块时需要依赖 Expat 库的头文件(即 expat.h)。如果没有安装这个开发包,编译器就会找不到该文件并中断编译。

解决步骤
请根据您的 Linux 发行版,使用包管理器安装对应的开发包:
如果是 CentOS / RHEL 系统:
sudo yum install expat-devel -y
如果是 Ubuntu / Debian 系统:
sudo apt-get install libexpat1-dev -y

重新编译安装
安装完依赖包后,由于之前编译中断,建议先清理一下缓存,然后重新执行编译和安装命令:
make clean
make && sudo make install
成功截图

3. 安装 pcre
cd ..
sudo tar -zxvf pcre-8.45.tar.gz

cd pcre-8.45
编译安装,编译安装如果遇到权限问题参考上面解决步骤即可。
sudo ./configure --prefix=/usr/local/pcre
make && sudo make install
成功截图

4. 安装 Apache 本体
cd ..
sudo tar -zxvf httpd-2.4.52.tar.gz
cd httpd-2.4.52
编译安装,编译安装如果遇到权限问题参考上面解决步骤即可。
sudo ./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre

make && sudo make install
如果遇到下图问题,说明在编译 Apache (httpd) 时,链接器找不到 Expat 库(XML 解析库)的实现。

根本原因:
您在之前编译 apr-util 时,可能使用了 –with-expat=builtin(内置副本),或者系统当时没有安装 Expat 的开发包,导致生成的 libaprutil-1.so 动态链接库中缺失了 XML 相关的底层依赖。当 Apache 尝试链接这个库时,就会报找不到符号的错误。
解决步骤
要彻底解决这个问题,需要重新编译安装 apr-util,让它正确链接到系统的 Expat 库,然后再重新编译 Apache。
第一步:安装系统级 Expat 开发包
如果您之前没有安装,请先执行以下命令安装:
CentOS / RHEL 系统:
sudo yum install expat-devel -y
Ubuntu / Debian 系统:
sudo apt-get install libexpat1-dev -y
如果出现截图中的问题,说明系统里是有 Expat 库的,但 APR-Util 在编译时没有正确链接到它。这通常是因为 APR-Util 的 configure 脚本没能自动检测到库的位置,或者缓存了错误的配置。

请按照以下步骤强制重新编译 APR-Util:
第一步:清理并重新配置 APR-Util
进入你的 APR-Util 源码目录(根据你的截图应该是 /lamp_install/apr-util-1.6.1),执行以下命令:
cd /lamp_install/apr-util-1.6.1
清理之前的编译残留(非常重要)
make clean
重新配置,–with-expat=/usr 是关键参数,强制指定使用系统的 expat
sudo ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-expat=/usr
成功截图

执行安装
make && sudo make install
如下图显示,说明 APR-Util 已经重新编译并安装成功了

接下来的操作步骤
请在终端中依次执行以下命令:
进入 Apache 源码目录
cd /lamp_install/httpd-2.4.52
清理旧的编译文件(非常重要)
为了避免旧的错误缓存干扰,必须执行 clean:
make clean
重新配置 Apache
你需要再次告诉 Apache 去哪里找刚才修好的 APR 和 APR-Util。请确保路径与你之前安装的一致(通常是 /usr/local/apr 和 /usr/local/apr-util):
sudo ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
再次编译如果出现下图问题,意味着系统里缺少 PCRE 库的开发文件

使用系统包管理器安装
我使用的是 Ubuntu/Debian 系(根据之前的 apt-get 命令判断),直接用系统包管理器安装是最稳妥的,它会自动处理依赖和路径问题。
安装旧版 PCRE (8.x) 开发包
sudo apt-get install libpcre3-dev -y
成功截图

回到 Apache 源码目录并清理旧缓存
cd /lamp_install/httpd-2.4.52
make clean
重新执行 Apache 的 configure 命令,关键参数:–with-pcre
sudo ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
成功截图

sudo make && sudo make install
验证安装是否成功
安装完成后,你可以运行以下命令查看 Apache 的版本信息
/usr/local/httpd/bin/apachectl -v

启动 Apache 服务
由于你是源码编译安装的,我们使用 apachectl 脚本来管理它:
sudo /usr/local/httpd/bin/apachectl start
验证是否启动成功,如果看到 “It works!” 的默认欢迎页面,就说明 Apache 已经完美运行了
curl http://localhost

三、安装 MySQL(数据库)
MySQL 我们用的是免编译的二进制包,不需要 make,但需要手动初始化。
1. 创建专属用户和目录
sudo groupadd mysql
sudo useradd -r -g mysql mysql
sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql
2. 解压并移动
sudo tar -zxvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz
sudo mv mysql-5.7.39-linux-glibc2.12-x86_64 /usr/local/mysql
3. 初始化数据库
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
如遇到下图问题,说明您的 Linux 系统中缺少了 libaio(Linux 异步 I/O 库)。
MySQL 在启动或初始化时,强依赖 libaio.so.1 这个共享库来进行高效的磁盘操作。如果系统中没有安装该库,mysqld 进程就会直接报错退出。

解决步骤
请根据您的 Linux 发行版,使用包管理器安装对应的依赖库:
如果是 CentOS / RHEL 系统:
sudo yum install libaio -y
如果是 Ubuntu / Debian 系统:
sudo apt-get update
sudo apt-get install libaio-dev -y
sudo ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64.0.2 /usr/lib/x86_64-linux-gnu/libaio.so.1
sudo ldconfig
重新初始化 MySQL
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
成功截图

临时密码:sTT,bmro26Z*
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
作用:将 MySQL 安装包自带的服务控制脚本(mysql.server)复制到 Linux 系统的初始化脚本目录(/etc/init.d/)下,并重命名为 mysqld。
目的:/etc/init.d/ 是 Linux 系统集中管理系统服务的目录。把脚本放在这里,就可以像管理系统自带服务一样来管理 MySQL。
启动数据库
sudo systemctl status mysqld.service
如果启动报下图错误,说明MySQL 正在尝试把错误日志写到 /usr/local/mysql/data/ 目录下,但是这个目录在您的系统中根本不存在!
因为目录不存在,mysqld_safe 脚本无法创建日志文件,导致启动流程直接中断崩溃。
结合您之前的操作,您初始化数据库时指定的数据目录是 /data/mysql,但 MySQL 默认还在寻找 /usr/local/mysql/data。

解决步骤
我们需要通过配置文件,彻底把 MySQL 的所有路径都指向您实际的 /data/mysql 目录。
第一步:创建缺失的目录并赋予权限(保底操作)
为了防止后续还有零散文件需要写入,我们先把这个默认目录也建出来:
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql/data
第二步:修改 MySQL 配置文件(核心修复)
打开配置文件:
sudo vim /etc/my.cnf
在 [mysqld] 配置段下,明确指定数据目录和日志路径,确保 MySQL 不再乱找默认路径:
[mysqld]
user=mysql
datadir=/data/mysql
log-error=/data/mysql/myserver.err
pid-file=/data/mysql/myserver.pid
socket=/data/mysql/mysql.sock
[client]
socket=/data/mysql/mysql.sock

(保存并退出:按 Esc,输入 :wq 回车)
第三步:修改 systemd 服务文件(修复 PID 报错)
日志最后一行提示 Can’t open PID file /run/mysqld/mysqld.pid,说明 systemd 还在找默认的 PID 路径。我们需要修改服务文件:
sudo vim /etc/systemd/system/mysqld.service
在 [Service] 段下,修改或添加 PID 文件路径,使其与配置文件一致:
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --user=mysql
PIDFile=/data/mysql/myserver.pid
完整的配置如下图

(保存并退出)
第四步:重载配置并启动
sudo systemctl daemon-reload
sudo systemctl start mysqld
第五步:验证启动状态
sudo systemctl status mysqld
启动成功

修改密码
sudo /usr/local/mysql/bin/mysql -u root -p
如果报下图错误,是因为 MySQL 客户端程序依赖 libncurses.so.5 这个动态链接库文件,但当前的 Ubuntu 24.04 系统中没有安装这个特定版本的库。
由于 MySQL 5.7 等较旧版本对旧版库有硬编码依赖,而新版 Ubuntu 已经升级了该库,因此我们需要通过创建软链接的方式来“欺骗” MySQL,让它使用新版库文件。
解决步骤
第一步:查找系统中现有的高版本库文件
首先,我们需要确认系统中实际存在的 libncurses 版本(通常是 .so.6 版本)。请执行:
find / -name 'libncurses.so*'
通常输出会包含类似 /usr/lib/x86_64-linux-gnu/libncurses.so.6 的路径。
第二步:创建软链接
假设上一步找到的文件路径是 /usr/lib/x86_64-linux-gnu/libncurses.so.6,我们将其链接为 MySQL 需要的 .so.5 版本:
sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5
第三步:刷新动态链接器缓存
sudo ldconfig
第四步:重新测试登录
sudo /usr/local/mysql/bin/mysql -u root -p
重要预警:可能出现的“连环报错”
在解决 libncurses.so.5 的问题后,当您再次执行登录命令时,极有可能会紧接着报出另一个极其相似的错误:
libtinfo.so.5: cannot open shared object file: No such file or directory
这是因为 libncurses 和 libtinfo 是一对依赖库,它们同时缺失了旧版本。如果您遇到了这个新报错,请使用完全相同的逻辑解决:
查找现有版本
find / -name 'libtinfo.so*'
创建软链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
刷新缓存
sudo ldconfig
再次登录 MySQL
sudo /usr/local/mysql/bin/mysql -u root -p
回车后,输入你刚才记下的临时密码(输入时屏幕不会显示,正常的)

登录进去后,执行以下 SQL 语句把密码改成 123456(你可以自己定):
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

exit;
四、第五步:安装 PHP
1. 安装 libxml2 依赖
sudo tar -zxvf libxml2-v2.9.14.tar.gz

cd libxml2-v2.9.14
编译安装
sudo ./autogen.sh --prefix=/usr/local/libxml2
如果出现截图报错,系统提示您缺少编译 libxml2 所必需的三个核心工具:autoconf、automake 和 libtool。
根据您提供的网页链接,这些都是 GNU 组织开发的标准开源工具。

解决方案:一键安装依赖
既然您使用的是基于 Debian/Ubuntu 的系统(从之前的 apt 命令推断),您可以使用以下命令一次性安装这三个工具以及 pkg-config(编译库时通常也需要它):
sudo apt update
sudo apt install autoconf automake libtool pkg-config
再次执行编译安装
sudo ./autogen.sh --prefix=/usr/local/libxml2
sudo make -j$(nproc) && sudo make install
成功截图

2. 安装 PHP 本体
cd ..
sudo tar -zxvf php-7.4.33.tar.gz

cd php-7.4.33
编译安装
sudo ./configure --prefix=/usr/local/php --with-apxs2=/lamp_install/httpd-2.4.52/support/apxs --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir=/usr/local/libxml2
如果遇到截图中错误, 标识当前用户没有执行权限。

解决方案
你只需要给 apxs 文件添加执行权限即可。请依次执行以下命令:
赋予执行权限
chmod +x /lamp_install/httpd-2.4.52/support/apxs
检查输出中是否包含 x(例如 -rwxr-xr-x),包含说明生效了

重新运行 PHP 的 configure 命令 进行编译
sudo ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd/bin/apxs --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir=/usr/local/libxml2
如果遇到下图问题,说明 PHP 的 configure 脚本在通过 pkg-config 工具寻找 libxml2 库时,没有找到对应的 .pc 描述文件

虽然之前可能编译安装了 libxml2,但系统默认的 pkg-config 并不知道它被安装到了 /usr/local/libxml2 这个非标准路径下。
我们需要手动告诉系统去哪里找它。请按照以下步骤操作:
解决方案:设置 PKG_CONFIG_PATH 环境变量
先确认你的 libxml2 描述文件在哪里
执行以下命令查找 libxml-2.0.pc 文件的位置:
find /usr/local/libxml2 -name "libxml-2.0.pc"

设置环境变量并重新配置 PHP
将找到的 pkgconfig 目录路径追加到 PKG_CONFIG_PATH 中
PKG_CONFIG_PATH="/usr/local/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH" \
sudo -E ./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-libxml-dir=/usr/local/libxml2
安装
make && sudo make install
如果出现下图报错,不用担心,仍然是权限问题

解决方案:给当前用户赋予源码目录的所有权
我们需要把整个 PHP 源码目录的所有权交还给当前的普通用户。请依次执行以下命令:
修复源码目录权限
sudo chown -R xhf:xhf /lamp_install/php-7.4.33
重新执行编译和安装,这个过程需要耐心等待
make && sudo make install
成功截图

生成配置文件
配置 php.ini 文件
sudo cp /lamp_install/php-7.4.33/php.ini-development /usr/local/php/lib/php.ini
重启 Apache 让配置生效
sudo /usr/local/httpd/bin/apachectl restart
终极验证:测试 PHP 是否正常工作
创建一个 PHP 测试文件:
sudo nano /usr/local/httpd/htdocs/info.php
在文件中写入以下代码
<?php
phpinfo();
?>
保存并退出(Ctrl+O 回车保存,Ctrl+X 退出)。
命令行访问
curl http://localhost/info.php
如果出现下图的问题,不要担心我们继续解决下

快速修复步骤:
清理旧的编译缓存
cd /lamp_install/php-7.4.33
sudo make clean
重新配置(去掉 apxs2,加上 fpm 和 opcache)
PKG_CONFIG_PATH="/usr/local/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH" \
sudo -E ./configure \
--prefix=/usr/local/php \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-libxml-dir=/usr/local/libxml2 \
--enable-fpm \
--with-fpm-user=nobody \
--with-fpm-group=nogroup \
--enable-opcache
(注:这里去掉了 –with-apxs2,加上了 –enable-fpm 和 –enable-opcache)
编译并安装
sudo make && sudo make install
配置并启动 PHP-FPM
复制配置文件
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
启动 PHP-FPM
sudo /usr/local/php/sbin/php-fpm
让 Apache 代理请求给 PHP-FPM
打开 Apache 配置文件:
sudo nano /usr/local/httpd/conf/httpd.conf
找到并取消以下两行的注释(启用代理模块):
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
在文件末尾添加一行,将所有 .php 请求转发给 FPM:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/usr/local/httpd/htdocs/$1
按 Ctrl + O,然后按 回车键 保存。
按 Ctrl + X 退出编辑器。
在命令行执行以下命令,重启 Apache 让配置生效:
sudo /usr/local/httpd/bin/apachectl restart
再次验证
curl http://localhost/info.php
输出html代码说明成功了
到此我们也就完成了linux安装LAMP的全部过程,坑很多遇到问题不要急,踩坑也是一种提升过程。
发表回复