CentOS 8.1下搭建LAMP环境(Linux + Apache + MySQL + PHP)这件事,说简单也简单,说麻烦也确实能折腾一整天。尤其是对刚接触服务器部署的人来说,从系统依赖、软件源、版本兼容到服务启动顺序,每一步都可能卡住,但如果把逻辑理顺,其实整套环境的搭建是非常固定的流程。本篇内容尽量按照真实服务器操作的节奏来写,不刻意拆得很碎,也不会把每一个命令单独拎成一小节,而是更贴近实际部署时的连续操作过程。
一、系统初始化与基础环境准备
在正式安装LAMP之前,第一步永远不是直接安装软件,而是把系统基础环境整理干净。CentOS 8.1虽然已经属于比较成熟的发行版本,但默认的软件源结构和模块机制(AppStream)与传统CentOS 7有明显差异,如果不提前处理,很容易在安装Apache或PHP时出现依赖冲突。
通常第一件事是更新系统包:
dnf update -y
在CentOS 8里,dnf已经完全替代了yum,虽然yum还能用,但本质上只是软链接。更新系统的意义不仅仅是拿到最新补丁,更重要的是避免后续安装MySQL或PHP时因为旧库冲突导致编译失败。
更新完成之后,一般会关闭或调整一些不必要的服务,比如防火墙策略或者SELinux。在生产环境中不建议直接关闭SELinux,但在测试环境或者快速部署场景中,可以先设为宽松模式:
setenforce 0
如果想永久修改,需要编辑:
/etc/selinux/config
将 SELINUX=enforcing 改为 permissive 或 disabled。
防火墙方面,如果你是做Web服务,一般至少要放行80和443端口:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
这些基础配置看似简单,但很多人后面访问网页失败,其实问题就出在这里。
二、安装Apache(httpd)并完成基础验证
LAMP中的“A”指的就是Apache HTTP Server,在CentOS 8.1中,它的包名是httpd,直接通过dnf安装即可:
dnf install httpd -y
安装完成之后,先不要急着改配置,第一步是直接启动服务并设置开机自启:
systemctl start httpd
systemctl enable httpd
启动之后可以用状态命令确认是否正常运行:
systemctl status httpd
如果看到active (running),说明服务已经正常拉起。
这个时候可以直接在浏览器访问服务器IP,如果能看到Apache默认页面,说明Web层已经打通。很多人卡在这里,其实问题往往不是Apache本身,而是防火墙或者云服务器安全组没有放行80端口。
Apache的主配置文件在:
/etc/httpd/conf/httpd.conf
不过在实际生产环境中,很少直接大改这个文件,通常会在:
/etc/httpd/conf.d/
目录下新增站点配置文件,这样更清晰,也方便后期维护。
比如创建一个简单站点:
vim /etc/httpd/conf.d/test.conf
写入:
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName your-domain.com
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
然后重启Apache:
systemctl restart httpd
到这里,Web服务器这一层已经基本完成。
三、安装MySQL(MariaDB或官方MySQL)
CentOS 8默认提供的是MariaDB,但很多生产环境还是更倾向使用Oracle MySQL。这里以官方MySQL 8.0为例说明,因为兼容性和生态更标准。
首先需要添加MySQL官方YUM源:
dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm -y
然后安装MySQL:
dnf install mysql-community-server -y
安装完成后启动服务:
systemctl start mysqld
systemctl enable mysqld
MySQL首次启动时会生成一个临时密码,可以通过日志查看:
grep 'temporary password' /var/log/mysqld.log
拿到密码之后,进入安全配置流程:
mysql_secure_installation
这个步骤非常关键,它会依次让你修改root密码、删除匿名用户、禁止远程root登录、删除测试数据库等。很多服务器被入侵,其实就是这个步骤没有认真执行。
登录MySQL:
mysql -u root -p
验证是否正常:
show databases;
如果能看到系统数据库,说明MySQL层已经正常运行。
四、安装PHP及扩展模块
LAMP的核心在于PHP,因为它负责连接Web层和数据库层。
CentOS 8默认PHP版本较旧或者模块不全,因此建议使用Remi源来获取较新版本PHP。
先安装EPEL和Remi源:
dnf install epel-release -y
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
重置PHP模块并启用指定版本(例如PHP 8.1):
dnf module reset php -y
dnf module enable php:remi-8.1 -y
安装PHP及常用扩展:
dnf install php php-cli php-fpm php-mysqlnd php-opcache php-gd php-xml php-mbstring -y
安装完成后检查版本:
php -v
如果输出版本信息,说明PHP已经安装成功。
接下来需要让Apache支持PHP解析,通常通过mod_php或者php-fpm方式,这里推荐php-fpm方式,更稳定。
启动php-fpm:
systemctl start php-fpm
systemctl enable php-fpm
然后编辑Apache配置,让它识别PHP:
vim /etc/httpd/conf.d/php.conf
一般默认会自动生成,如果没有,可以添加:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
重启服务:
systemctl restart httpd
systemctl restart php-fpm
五、LAMP联调测试与排错思路
到了这一步,其实系统已经是一个完整的LAMP环境,但真正关键的是“能不能跑通”。
通常会创建一个测试文件:
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
然后访问:
http://服务器IP/info.php
如果页面正常显示PHP信息,说明Apache + PHP已经打通。
如果打不开,一般排查顺序是:
先看Apache是否运行:
systemctl status httpd
再看端口:
ss -tlnp | grep 80
再检查防火墙:
firewall-cmd --list-all
如果PHP页面直接下载而不是解析,说明PHP模块没有正确绑定Apache。
如果数据库连接失败,一般是PHP扩展缺失,比如php-mysqlnd没装。

六、生产环境优化与常见结构调整
一个真正上线的LAMP环境,不只是“能跑”,而是要稳定、可扩展。
Apache方面通常会调整KeepAlive参数,提高并发性能:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
PHP方面会调整php.ini:
memory_limit = 256M
upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 30
MySQL方面则需要根据内存调整innodb_buffer_pool_size,一般占总内存的50%到70%更合理。
同时建议把日志单独分离出来,避免/var分区被日志打满。
LAMP环境的本质其实不是“安装四个软件”,而是把三个层打通:Apache负责入口请求,PHP负责逻辑处理,MySQL负责数据存储,中间通过FastCGI或模块方式连接。很多初学者容易陷入“命令复制”的误区,但真正的问题往往出现在系统细节,比如SELinux、端口、模块依赖、PHP版本兼容这些看似不起眼的地方。
在CentOS 8.1上搭建LAMP的过程,其实也是一次对Linux服务管理能力的完整训练,从dnf包管理到systemd服务控制,再到网络端口和权限体系,每一步都是服务器运维的基本功。如果把这一套真正跑通,再去部署WordPress、Laravel或者其他PHP系统,就会轻松很多,因为底层已经稳定了。

全球服务器测评


