CentOS 7 LAMP环境深度部署:从源码编译到生产级调优的实战手册
对于许多刚接触Linux服务器运维的朋友来说,LAMP环境的搭建往往是第一个需要翻越的“小山丘”。这个由Linux、Apache、MySQL和PHP组成的经典技术栈,至今仍是大量Web应用赖以生存的基石。然而,看似简单的“安装-配置-启动”流程背后,隐藏着无数可能让你耗费数小时甚至数天的“坑”——依赖库版本冲突、服务配置不匹配、权限设置不当、安全加固缺失……这些问题在官方文档中往往语焉不详,却在实际部署中频频出现。
今天,我将基于自己在CentOS 7系统上的多次实战经验,为你呈现一份不仅仅是“能跑起来”,而是稳定、高效、安全的LAMP环境部署指南。我们会从最基础的源码编译开始,逐步深入到生产环境所需的优化配置,特别是针对PHP 5.5.38这个特定版本(虽然较旧,但仍有不少遗留系统在使用)的深度调优。无论你是运维新手,还是需要为特定项目搭建环境的开发者,这篇文章都能提供切实可行的解决方案。
1. 环境准备与依赖管理:打好地基
在开始安装任何服务之前,充分的准备工作能避免后续80%的兼容性问题。CentOS 7默认的软件仓库版本相对保守,我们需要先更新基础工具链并安装必要的开发工具。
1.1 系统基础配置
首先,确保你的系统是最新状态,并安装编译所需的基础工具:
# 更新系统到最新状态
yum update -y
# 安装开发工具组和常用工具
yum groupinstall "Development Tools" -y
yum install wget vim net-tools epel-release -y
# 安装编译Apache、PHP所需的依赖库
yum install -y gcc make cmake autoconf libtool \
zlib-devel openssl-devel pcre-devel \
libxml2-devel libcurl-devel libjpeg-turbo-devel \
libpng-devel freetype-devel gd-devel \
sqlite-devel readline-devel
注意:
epel-release是Extra Packages for Enterprise Linux的仓库源,提供了许多CentOS官方仓库中没有的软件包。安装它能为后续的依赖安装提供更多选择。
1.2 用户与目录规划
合理的用户和目录规划不仅便于管理,也关系到系统安全。我建议为每个服务创建独立的系统用户:
# 创建Apache运行用户(如果不存在)
if ! id -u apache >/dev/null 2>&1; then
useradd -r -s /sbin/nologin apache
fi
# 创建MySQL运行用户(如果不存在)
if ! id -u mysql >/dev/null 2>&1; then
useradd -r -s /sbin/nologin mysql
fi
# 创建统一的软件安装目录
mkdir -p /usr/local/src/{software,source}
mkdir -p /data/{www,logs,mysql}
chmod 755 /data
目录结构说明:
/usr/local/src/software:存放下载的软件包/usr/local/src/source:存放解压后的源码/data/www:网站根目录/data/logs:统一日志目录/data/mysql:MySQL数据目录(如果选择自定义路径)
1.3 防火墙与SELinux配置
CentOS 7默认启用firewalld和SELinux,这可能会阻止Web服务的正常访问。我们需要进行适当配置:
# 配置firewalld开放HTTP/HTTPS端口
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# 查看防火墙状态
firewall-cmd --list-all
# SELinux配置(生产环境建议保持开启,仅调整策略)
# 临时设置为宽容模式(重启后失效)
setenforce 0
# 永久禁用SELinux(不推荐生产环境)
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
对于SELinux,我更推荐的是学习其策略调整,而不是直接禁用。比如,如果Web服务需要访问非标准目录,可以使用:
# 为/data/www目录设置SELinux上下文
semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
restorecon -Rv /data/www
2. Apache 2.4的编译安装与优化
Apache HTTP Server作为LAMP中的"A",承担着Web服务的核心角色。虽然CentOS 7的yum仓库提供了Apache 2.4,但通过源码编译可以获得更好的性能调优和模块定制。
2.1 下载与编译Apache
我习惯将软件下载到统一的目录,便于管理和清理:
cd /usr/local/src/software
# 下载Apache 2.4.58(请检查官网获取最新稳定版)
wget https://downloads.apache.org/httpd/httpd-2.4.58.tar.gz
wget https://downloads.apache.org/apr/apr-1.7.4.tar.gz
wget https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz
# 验证文件完整性(可选但推荐)
md5sum httpd-2.4.58.tar.gz
# 对比官网提供的MD5值
# 解压所有源码
tar -zxvf httpd-2.4.58.tar.gz -C /usr/local/src/source/
tar -zxvf apr-1.7.4.tar.gz -C /usr/local/src/source/
tar -zxvf apr-util-1.6.3.tar.gz -C /usr/local/src/source/
# 移动apr到Apache源码目录
mv /usr/local/src/source/apr-1.7.4 /usr/local/src/source/httpd-2.4.58/srclib/apr
mv /usr/local/src/source/apr-util-1.6.3 /usr/local/src/source/httpd-2.4.58/srclib/apr-util
现在进入编译环节。Apache的编译选项很多,这里我选择了一个兼顾性能和功能的配置:
cd /usr/local/src/source/httpd-2.4.58
# 配置编译参数
./configure --prefix=/usr/local/apache2 \
--enable-so \
--enable-rewrite \
--enable-ssl \
--enable-deflate \
--enable-expires \
--enable-headers \
--with-mpm=prefork \
--with-pcre \
--enable-modules=most \
--enable-mods-shared=most \
--with-apr=/usr/local/src/source/httpd-2.4.58/srclib/apr \
--with-apr-util=/usr/local/src/source/httpd-2.4.58/srclib/apr-util
# 编译并安装
make -j$(nproc) # 使用所有CPU核心加速编译
make install
关键参数解释:
--with-mpm=prefork:选择prefork多进程模块,与PHP模块模式兼容性最好--enable-so:允许动态加载模块(DSO支持)--enable-rewrite:启用URL重写功能(WordPress等CMS必需)--enable-deflate:启用压缩传输,减少带宽占用
2.2 Apache服务配置与管理
编译安装完成后,我们需要创建系统服务以便管理:
# 创建Apache服务脚本
cat > /etc/systemd/system/httpd.service << 'EOF'
[Unit]
Description=Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/apache2/logs/httpd.pid
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl stop
ExecReload=/usr/local/apache2/bin/apachectl graceful
PrivateTmp=true
Restart=on-abort
[Install]
WantedBy=multi-user.target
EOF
# 重新加载systemd配置
systemctl daemon-reload
# 设置环境变量
echo 'export PATH=/usr/local/apache2/bin:$PATH' > /etc/profile.d/apache.sh
source /etc/profile.d/apache.sh
# 测试Apache配置
/usr/local/apache2/bin/apachectl configtest
2.3 基础安全与性能调优
默认的Apache配置需要调整才能适应生产环境。编辑主配置文件/usr/local/apache2/conf/httpd.conf:
vim /usr/local/apache2/conf/httpd.conf
进行以下关键修改:
# 修改监听地址(仅本地访问,通过反向代理暴露)
# Listen 80 改为:
Listen 127.0.0.1:80
# 修改服务器信息,减少信息泄露
ServerTokens Prod
ServerSignature Off
# 调整超时设置
Timeout 30
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
# 修改运行用户和组
User apache
Group apache
# 修改网站根目录
DocumentRoot "/data/www"
<Directory "/data/www">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# 启用压缩(在LoadModule部分确保deflate模块已加载)
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
DeflateCompressionLevel 6
</IfModule>
# 设置日志格式和路径
ErrorLog "/data/logs/apache_e


1万+

被折叠的 条评论
为什么被折叠?



