环境准备
1.分配ip以及服务器
部署apache(apr、apr-util、http)、PHP、PHP-FPM — 192.168.30.124
部署Mysql — 192.168.30.125
2. 配置yum源(阿里云镜像)
为了加快软件包下载速度并确保依赖包能够顺利安装,建议将系统的yum源配置为国内镜像源(如阿里云镜像)。以下以阿里云镜像为例进行配置。
1.1配置两个服务器的阿里云Base源
CentOS 7 系统的默认Base源替换为阿里云镜像:
# 备份原有源文件(可选)
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载阿里云CentOS 7 Base源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理yum缓存并生成新缓存
yum clean all
yum makecache
1.2 配置阿里云EPEL源
EPEL(Extra Packages for Enterprise Linux)源提供了许多额外的软件包,对于LAMP环境部署很有帮助:
# 下载阿里云EPEL 7源
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
# 清理yum缓存并生成新缓存
yum clean all
yum makecache
1.3 配置Remi源
Remi 源是一个广受欢迎的第三方软件仓库,由开发者 Remi Collet 维护。它主要为 RHEL、CentOS 及其衍生版(如 Rocky Linux、AlmaLinux)提供最新版本的 PHP、MySQL/MariaDB 以及其他相关软件包
# 下载阿里云EPEL 7源
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# 清理yum缓存并生成新缓存
yum clean all
yum makecache
1.3 验证源配置
配置完成后,使用以下命令验证源是否生效:
# 查看所有启用的yum源
yum repolist
正常配置后,输出应类似如下(注意base、epel等源的地址显示为阿里云镜像):
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: ftp.iij.ad.jp
* extras: mirrors.aliyun.com
* remi-safe: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.aliyun.com
源标识 源名称 状态
base/7/x86_64 CentOS-7 – Base – mirrors.aliyun.com 10,072
epel/x86_64 Extra Packages for Enterprise Linux 7 – x86_64 13,791
extras/7/x86_64 CentOS-7 – Extras – mirrors.aliyun.com 526
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 – x86_64 5,596
updates/7/x86_64 CentOS-7 – Updates – mirrors.aliyun.com 6,173
repolist: 36,158

提示:
2.部署前置
2.1系统要求
- 内存:建议 ≥ 2GB
- 硬盘:建议 ≥ 20GB
- 网络:必须能联网,用于下载源码包和依赖
2.2 源码包准备
源码包下载地址:
https://download.csdn.net/download/qq_44769717/92924011
将下载好的 4 个 LAMP 相关源码包(如 httpd、php 等)上传到apache_php-fpm服务器(192.168.30.124)的 /usr/local/src/lamp 目录。
将1个MySQL包上传到mysql服务器(192.168.30.125)的 /usr/local/src/lamp 目录。
确保该目录存在,若不存在请先创建:
mkdir -pv /usr/local/src/lamp
进入该目录,确认所有源码包已就位:
cd /usr/local/src/lamp
ls -l


3. 系统安全配置
在部署 LAMP 环境前,建议对系统安全策略进行适当调整,以避免后续出现权限问题或端口访问限制。
3.1 关闭 SELinux
SELinux(Security-Enhanced Linux)是 Linux 的安全模块,但在部署 LAMP 时可能会因严格的权限控制导致 403 错误或其他权限问题。建议临时关闭并永久禁用:
# 临时关闭 SELinux(立即生效)
setenforce 0
# 永久禁用 SELinux(重启后生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 验证 SELinux 状态
getenforce
sestatus
注意:生产环境请谨慎操作,建议根据实际安全需求配置 SELinux 策略而非直接关闭。
3.2 防火墙配置
CentOS 7.9 默认使用 firewalld 作为防火墙管理工具。为了方便测试,可以暂时关闭防火墙,或在防火墙中放行 Web 服务端口。
方案一:关闭防火墙(推荐用于测试环境)
# 停止防火墙服务
systemctl stop firewalld
# 禁止防火墙开机自启
systemctl disable firewalld
# 查看防火墙状态
systemctl status firewalld
方案二:放行 HTTP/HTTPS 端口(如需保持防火墙开启)
# 放行 HTTP (80) 和 HTTPS (443) 端口
firewall-cmd –add-service=http –permanent
firewall-cmd –add-service=https –permanent
# 重新加载防火墙配置
firewall-cmd –reload
# 查看已放行的服务
firewall-cmd –list-services
提示:如果使用其他防火墙工具(如 iptables),请相应调整配置。
4. 安装编译依赖
在编译安装 LAMP 各组件之前,需要安装必要的编译工具和开发库。以下命令将一次性安装所有必需的依赖包。
4.1 安装基础编译工具和库
执行以下命令安装编译所需的核心工具和常用开发库:
# 安装基础编译工具链
yum -y install gcc gcc-c++ make autoconf automake libtool
# 安装 Web 服务器(如 Apache)相关依赖
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 安装 PHP 相关依赖
yum -y install libxml2 libxml2-devel curl curl-devel libpng libpng-devel
yum -y install freetype freetype-devel libjpeg libjpeg-devel
yum -y install libmcrypt libmcrypt-devel bzip2 bzip2-devel wget
4.2 使用单条命令安装(推荐)
为了简化操作,可以使用以下单条命令安装所有依赖:
yum -y install \\
gcc gcc-c++ make \\
pcre-devel openssl-devel expat-devel \\
bzip2-devel libxml2-devel \\
curl-devel libpng-devel libjpeg-devel freetype-devel \\
libzip-devel \\
wget
4.3 验证安装
安装完成后,可以验证关键工具是否安装成功:
# 检查编译器版本
gcc –version
g++ –version
make –version
# 检查常用开发库
pcre-config –version
openssl version
提示:
5. 创建运行用户
在编译安装 Apache 和 PHP-FPM 之前,建议创建一个专用的系统用户来运行这些服务。使用专用用户可以提高安全性,避免使用 root 用户运行 Web 服务带来的安全风险。
5.1 创建 Apache/PHP-FPM 运行用户
在apache_php-fpm(192.168.30.124)服务器中
执行以下命令创建一个名为 apache 的系统用户(该用户将用于运行 Apache 和 PHP-FPM):
# 创建系统用户 apache(不创建家目录,不允许登录)
useradd -r -M -s /sbin/nologin apache
# 验证用户是否创建成功
id apache

命令参数说明:
- -r:创建系统用户(UID < 1000)
- -M:不创建用户家目录
- -s /sbin/nologin:设置登录 shell 为 /sbin/nologin,禁止该用户登录系统
- apache:用户名(可根据需要修改,如 www-data、nginx 等)
5.2 验证用户信息
创建完成后,可以通过以下命令查看用户详细信息:
# 查看用户基本信息
id apache
# 查看用户配置文件
grep '^apache:' /etc/passwd
# 查看用户所属组
groups apache
正常输出应类似:
uid=997(apache) gid=995(apache) groups=995(apache)
apache:x:997:995::/home/apache:/sbin/nologin
apache : apache

5.3 后续使用说明
安全建议:
编译安装Apache(服务器IP:192.168.30.124)
Apache HTTP Server 是 LAMP 环境的核心组件之一。在编译安装 Apache 之前,需要先安装其依赖库 APR(Apache Portable Runtime)和 APR-UTIL。
1. 解压源码包
首先进入源码目录并解压相关源码包:
# 进入源码目录
cd /usr/local/src/lamp
# 解压 APR、APR-UTIL 和 Apache 源码包
tar -zxf apr-1.7.6.tar.gz
tar -zxf apr-util-1.6.3.tar.gz
tar -jxf httpd-2.4.67.tar.bz2
# 查看是否解压
ls -l

2. 安装 APR 和 APR-UTIL
APR 和 APR-UTIL 是 Apache 的底层运行库,提供了跨平台的操作系统抽象层,确保 Apache 在不同系统上的可移植性。
2.1 编译安装 APR
APR 是 Apache 的底层运行环境,需要先安装:
# 进入 APR 源码目录
cd apr-1.7.6
# 配置编译选项(安装到 /usr/local/apr)
./configure –prefix=/usr/local/apr
# 检查配置是否成功(返回 0 表示成功)
echo $?
# 编译并安装(使用多核加速编译)
make -j$(nproc) && make install
# 检查安装是否成功(返回 0 表示成功)
echo $?

2.2 编译安装 APR-UTIL
APR-UTIL 是 APR 的实用工具库,依赖于已安装的 APR:
# 返回上级目录并进入 APR-UTIL 源码目录
cd ../apr-util-1.6.3
# 配置编译选项(指定 APR 的安装路径)
./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr
# 检查配置是否成功
echo $?
# 编译并安装
make -j$(nproc) && make install
# 检查安装是否成功
echo $?

2.3 验证安装
安装完成后,验证 APR 和 APR-UTIL 是否安装成功:
# 检查 APR 安装目录
ls -la /usr/local/apr/
# 检查 APR-UTIL 安装目录
ls -la /usr/local/apr-util/
# 查看 APR 版本
/usr/local/apr/bin/apr-1-config –version
# 查看 APR-UTIL 版本
/usr/local/apr-util/bin/apu-1-config –version
正常输出应显示类似以下信息:
apr-1.7.6
apu-1.6.3

提示:
3. 编译安装 Apache HTTP Server
完成 APR 和 APR-UTIL 的安装后,现在可以开始编译安装 Apache HTTP Server 2.4.67。
3.1 进入 Apache 源码目录并配置
# 返回上级目录并进入 Apache 源码目录
cd ../httpd-2.4.67
# 配置编译选项
./configure \\
–prefix=/usr/local/apache \\
–with-apr=/usr/local/apr \\
–with-apr-util=/usr/local/apr-util \\
–enable-so \\
–enable-ssl \\
–enable-cgi \\
–enable-rewrite \\
–enable-modules=most \\
–enable-mpms-shared=all \\
–with-pcre \\
–with-zlib \\
–with-mpm=event
# 检查配置是否成功(返回 0 表示成功)
echo $?

配置参数说明:
- –prefix=/usr/local/apache:指定安装目录
- –with-apr=/usr/local/apr:指定 APR 安装路径
- –with-apr-util=/usr/local/apr-util:指定 APR-UTIL 安装路径
- –enable-so:启用动态模块加载(DSO)
- –enable-ssl:启用 SSL/TLS 支持
- –enable-cgi:启用 CGI 支持
- –enable-rewrite:启用 URL 重写模块
- –enable-modules=most:启用大多数常用模块
- –enable-mpms-shared=all:将所有 MPM(多处理模块)编译为共享模块
- –with-pcre:使用 PCRE 正则表达式库
- –with-zlib:使用 zlib 压缩库
- –with-mpm=event:指定使用 event MPM(高性能多处理模块)
3.2 编译并安装 Apache
# 编译并安装(使用多核加速)
make -j$(nproc) && make install
# 检查安装是否成功(返回 0 表示成功)
echo $?

编译过程可能需要 5-15 分钟,具体时间取决于服务器性能。
3.3 修改 Apache 配置文件
安装完成后,需要修改 Apache 配置文件,将运行用户和组从默认的 daemon 改为之前创建的 apache 用户:
# 修改运行用户为 apache
sed -i 's/^User daemon/User apache/' /usr/local/apache/conf/httpd.conf
# 修改运行组为 apache
sed -i 's/^Group daemon/Group apache/' /usr/local/apache/conf/httpd.conf
# 验证修改是否成功
grep -E '^User|^Group' /usr/local/apache/conf/httpd.conf
正常输出应为:
User apache
Group apache

3.4 启动 Apache 并设置开机自启
# 启动 Apache 服务
/usr/local/apache/bin/apachectl start
# 检查 Apache 进程是否运行
ps aux | grep httpd
# 检查 Apache 监听端口
netstat -tlnp | grep :80
# 设置 Apache 开机自启
echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local
# 确保 rc.local 文件有执行权限
chmod +x /etc/rc.local
# 验证 rc.local 配置
cat /etc/rc.local

3.5 测试 Apache 安装
通过命令行测试 :
# 使用 curl 测试本地 Apache
curl -I http://localhost
# 或者使用 wget
wget -q -O – http://localhost | head -20

– 在浏览器地址栏输入:http://服务器IP地址
–如果看到 Apache 的默认页面显示 “It works!”,说明 Apache 安装成功

编译安装PHP(服务器IP:192.168.30.124)
PHP 是 LAMP 环境中的动态脚本语言组件,负责处理 Web 应用的后端逻辑。这里采用源码编译安装方式,以获得更好的性能和定制化配置。
1. 安装 PHP 额外依赖
在编译 PHP 之前,需要安装一些额外的依赖包,以确保编译过程中不会缺少必要的扩展支持:
# 安装 PHP 编译所需的额外依赖
yum -y install \\
oniguruma-devel \\
sqlite-devel
依赖包说明:
- oniguruma-devel:正则表达式库,为 PHP 的 mbstring 扩展提供支持
- sqlite-devel:SQLite 数据库开发包,为 PHP 的 SQLite 扩展提供支持
2. 编译安装 PHP-FPM
2.1 解压 PHP 源码包
# 进入 LAMP 源码目录
cd /usr/local/src/lamp
# 解压 PHP 8.2.26 源码包
tar xf php-8.2.0.tar.bz2
# 进入 PHP 源码目录
cd php-8.2.0

2.2 配置编译选项
# 配置 PHP 编译选项
./configure \\
–prefix=/usr/local/php82 \\
–with-config-file-path=/usr/local/php82/etc \\
–enable-fpm \\
–with-fpm-user=apache \\
–with-fpm-group=apache \\
–with-openssl \\
–with-curl \\
–with-zlib \\
–with-jpeg \\
–with-freetype \\
–with-mysqli=mysqlnd \\
–with-pdo-mysql=mysqlnd \\
–enable-gd \\
–enable-mbstring \\
–enable-xml \\
–enable-session \\
–enable-opcache \\
–disable-rpath
# 检查配置是否成功(返回 0 表示成功)
echo $?

配置参数说明:
- –prefix=/usr/local/php82:指定 PHP 安装目录
- –with-config-file-path=/usr/local/php82/etc:指定 PHP 配置文件目录
- –enable-fpm:启用 PHP-FPM(FastCGI Process Manager)
- –with-fpm-user=apache:设置 PHP-FPM 运行用户
- –with-fpm-group=apache:设置 PHP-FPM 运行组
- –with-openssl:启用 OpenSSL 支持
- –with-curl:启用 cURL 支持
- –with-zlib:启用 zlib 压缩支持
- –with-gd:启用 GD 图像处理库
- –with-jpeg:启用 JPEG 图像支持
- –with-freetype:启用 FreeType 字体支持
- –with-mysqli=mysqlnd:启用 MySQLi 扩展(使用 MySQL Native Driver)
- –with-pdo-mysql=mysqlnd:启用 PDO MySQL 扩展(使用 MySQL Native Driver)
- –enable-mbstring:启用多字节字符串支持
- –enable-xml:启用 XML 支持
- –enable-session:启用会话支持
- –enable-opcache:启用 OPcache 字节码缓存
- –disable-rpath:禁用运行时路径搜索
2.3 编译并安装 PHP
# 编译并安装 PHP(使用多核加速)
make -j $(nproc) && make install
# 检查安装是否成功(返回 0 表示成功)
echo $?

编译过程可能需要 10-30 分钟,具体时间取决于服务器性能。
3. 配置 PHP 和 PHP-FPM
3.1 配置 php.ini 文件
# 复制 PHP 生产环境配置文件
cp -av php.ini-production /usr/local/php82/etc/php.ini
# 验证配置文件是否复制成功
ls -l /usr/local/php82/etc/php.ini

3.2 配置 PHP-FPM
# 复制 PHP-FPM 配置文件
cp -av /usr/local/php82/etc/php-fpm.conf.default /usr/local/php82/etc/php-fpm.conf
cp -av /usr/local/php82/etc/php-fpm.d/www.conf.default /usr/local/php82/etc/php-fpm.d/www.conf
# 编辑 www.conf 配置文件
vim /usr/local/php82/etc/php-fpm.d/www.conf
在编辑器中,至少需要修改以下配置项:
; 设置 PHP-FPM 运行用户和组
user = apache
group = apache
; 设置 PHP-FPM 监听地址和端口
listen = 127.0.0.1:9000
; 设置监听 socket 的所有者和组
listen.owner = apache
listen.group = apache
; 设置进程管理方式为动态
pm = dynamic
; 设置最大子进程数
pm.max_children = 50
; 设置启动时的子进程数
pm.start_servers = 10
; 设置空闲时的最小子进程数
pm.min_spare_servers = 5
; 设置空闲时的最大子进程数
pm.max_spare_servers = 20






保存并退出编辑器后,验证配置修改:
# 查看修改后的配置(过滤空行和注释行)
grep -Ev "^$|;" /usr/local/php82/etc/php-fpm.d/www.conf

3.3 启动 PHP-FPM
# 测试 PHP-FPM 配置语法
/usr/local/php82/sbin/php-fpm -t
# 启动 PHP-FPM
/usr/local/php82/sbin/php-fpm
# 检查 PHP-FPM 进程
ps axu | grep php-fpm

4. 配置 Apache 与 PHP-FPM 集成
4.1 启用 Apache 的 proxy_fcgi 模块
检查 Apache 是否已加载必要的模块:
# 检查 proxy_module 和 proxy_fcgi_module 是否已加载
grep -En 'proxy_module|proxy_fcgi_module' /usr/local/apache/conf/httpd.conf

如果输出中没有显示已加载,则需要启用这两个模块:
# 启用 proxy_module
sed -i 's@#LoadModule proxy_module modules/mod_proxy.so@LoadModule proxy_module modules/mod_proxy.so@g' /usr/local/apache/conf/httpd.conf
# 启用 proxy_fcgi_module
sed -i 's@#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@g' /usr/local/apache/conf/httpd.conf
# 再次验证模块是否已启用
grep -En 'proxy_module|proxy_fcgi_module' /usr/local/apache/conf/httpd.conf

4.2 修改 Apache 配置文件
编辑 Apache 主配置文件:
vim /usr/local/apache/conf/httpd.conf
在配置文件中添加以下内容:
配置 PHP 文件处理
(在配置文件中添加):
# PHP 解析转发到 PHP-FPM
<FilesMatch \\.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

设置默认首页支持 index.php
(找到
<IfModule dir_module>
部分修改):
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

重要提示:
- 如果使用 VirtualHost,请将上述配置添加到相应的 VirtualHost 配置块内
- 如果使用全局配置,请确保配置在适当的 Directory 指令之后
4.3 重启 Apache 服务
# 重启 Apache 使配置生效
/usr/local/apache/bin/apachectl restart
# 检查 Apache 和 PHP-FPM 进程状态
ps aux | grep -E '(httpd|php-fpm)'
# 如果php-fpm没有启动执行以下指令
/usr/local/php82/sbin/php-fpm
# 检查端口监听状态
ss -tulanp | grep -E ':80|:9000'

5. 测试 PHP 解析
5.1 创建 PHP 测试文件
# 创建 PHP 信息测试文件
cat > /usr/local/apache/htdocs/index.php << 'EOF'
<?php
phpinfo();
?>
EOF
# 验证文件内容
cat /usr/local/apache/htdocs/index.php

5.2 通过浏览器测试


5.3 通过命令行测试
# 测试 PHP 命令行版本
/usr/local/php82/bin/php –version
# 创建简单的 PHP 测试脚本
cat > /tmp/test.php << 'EOF'
<?php
echo "PHP is working!\\n";
echo "PHP Version: " . phpversion() . "\\n";
echo "Current Date: " . date('Y-m-d H:i:s') . "\\n";
?>
EOF
# 执行测试脚本
/usr/local/php82/bin/php /tmp/test.php


编译安装mysql(服务器IP:192.168.30.125)
MySQL 是 LAMP 环境中的数据库组件。这里采用二进制包安装方式,相比源码编译安装更加快捷方便。
1. 解压 MySQL 二进制包
# 进入到目录 /usr/local/src/lamp
cd /usr/local/src/lamp
# 解压 MySQL 8.0.12 二进制包到 /usr/local 目录
tar -zxf mysql-8.0.12-el7-x86_64.tar.gz -C /usr/local/
# 重命名目录为 mysql(便于管理)
mv -v /usr/local/mysql-8.0.12-el7-x86_64 /usr/local/mysql

2. 创建 MySQL 用户与数据目录
# 创建 MySQL 系统用户(不创建家目录,不允许登录)
useradd -r -M -s /sbin/nologin mysql
# 创建 MySQL 数据目录
mkdir -pv /data/mysql/mysql3306
# 设置目录权限
chown -R mysql:mysql /data/mysql/mysql3306 /usr/local/mysql
chmod -R 755 /data/mysql/mysql3306
# 验证目录权限
ls -lhrt -d /data/mysql/mysql3306

3. 配置 MySQL 配置文件(my.cnf)
创建 MySQL 配置文件,指定基础目录、数据目录等关键参数:
cat > /etc/my.cnf << EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql/mysql3306
socket=/data/mysql/mysql3306/mysql3306.sock
user=mysql
port=3306
character-set-server=utf8mb4
default-storage-engine=INNODB
max_connections=1000
lower_case_table_names=1
[mysql]
socket=/data/mysql/mysql3306/mysql3306.sock
EOF
# 验证配置文件内容
cat /etc/my.cnf

配置文件参数说明:
- basedir:MySQL 安装目录
- datadir:MySQL 数据存储目录
- socket:MySQL 套接字文件路径
- user:MySQL 运行用户
- port:MySQL 服务端口(默认 3306)
- character-set-server:服务器默认字符集(推荐 utf8mb4)
- default-storage-engine:默认存储引擎(推荐 INNODB)
- max_connections:最大连接数
- lower_case_table_names=1:表名不区分大小写
4. 初始化 MySQL 并启动服务
4.1 初始化 MySQL 数据库
重要提醒:初始化操作只能执行一次!如果多次初始化,会覆盖原有的元数据信息。如果生产环境已有数据,请勿重新初始化!
# 初始化 MySQL(生成临时 root 密码,务必记下)
/usr/local/mysql/bin/mysqld \\
–initialize \\
–user=mysql \\
–basedir=/usr/local/mysql \\
–datadir=/data/mysql/mysql3306
# 检查初始化是否成功
echo $?

初始化注意事项:
初始化过程会生成一个临时的 root 密码,请务必记下(在初始化输出的最后几行)
如果初始化失败并提示 “libnuma.so.1” 或 “libaio.so.1” 找不到,请先安装依赖:
yum -y install numactl-libs libaio
然后重新执行初始化命令
4.2 配置 MySQL 启动脚本
# 复制 MySQL 启动脚本
cp -av /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 添加执行权限
chmod +x /etc/init.d/mysqld
# 在启动脚本中添加 basedir 和 datadir 配置
sed -i '2i\\basedir=/usr/local/mysql' /etc/init.d/mysqld
sed -i '3i\\datadir=/data/mysql/mysql3306' /etc/init.d/mysqld
# 验证配置是否添加成功
grep -En 'basedir|datadir' /etc/init.d/mysqld
# 添加 MySQL 到系统服务并设置开机自启
chkconfig –add mysqld
chkconfig mysqld on



4.3 启动 MySQL 服务
# 启动 MySQL 服务
systemctl start mysqld
# 检查 MySQL 进程
ps aux | grep mysqld
# 检查 MySQL 监听端口(3306)
ss -tulanp | grep mysqld

验证要点:
- 检查 ps aux | grep mysqld 输出中的 basedir 和 datadir 是否正确指向 /usr/local/mysql 和 /data/mysql/mysql3306
- 确认 ss -tulanp | grep mysqld 显示 MySQL 正在监听 3306 端口
5. 修改 MySQL root 密码
5.1 使用临时密码登录 MySQL
# 使用初始化时生成的临时密码登录 MySQL
# 注意:临时密码在初始化输出的最后几行,请替换 '临时密码' 为实际密码
/usr/local/mysql/bin/mysql -uroot -p'临时密码'
如果忘记临时密码,可以在 MySQL 错误日志中查找:
# 查看 MySQL 错误日志获取临时密码
grep 'temporary password' /data/mysql/mysql3306/error.log

5.2 修改 root 密码
成功登录 MySQL 后,执行以下 SQL 语句修改 root 密码:
— 修改 root 用户密码为 'root'(生产环境请使用强密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
— 刷新权限
FLUSH PRIVILEGES;
— 退出 MySQL
exit

6. 测试 MySQL 新密码登录
# 使用新密码测试登录并查看 MySQL 状态
/usr/local/mysql/bin/mysql -uroot -proot -e "\\s"

7. MySQL 安装验证
验证 MySQL 安装
# 查看 MySQL 版本
/usr/local/mysql/bin/mysql –version
# 查看 MySQL 运行状态
systemctl status mysqld
# 测试 MySQL 连接
/usr/local/mysql/bin/mysql -uroot -proot -e "SELECT VERSION();"

8. 常见问题排查
8.1 初始化失败问题
问题:执行初始化时提示 “libnuma.so.1: cannot open shared object file” 或 “libaio.so.1: cannot open shared object file”
解决方案:
# 安装缺失的依赖库
yum -y install numactl-libs libaio
# 重新初始化 MySQL
/usr/local/mysql/bin/mysqld –initialize –user=mysql –basedir=/usr/local/mysql –datadir=/data/mysql/mysql3306
8.2 启动失败问题
问题:MySQL 服务启动失败
排查步骤:
# 检查配置文件语法
/usr/local/mysql/bin/mysqld –defaults-file=/etc/my.cnf –validate-config
# 检查端口是否被占用
netstat -tlnp | grep :3306
# 检查目录权限
ls -ld /data/mysql/mysql3306 /usr/local/mysql
配置基于域名的虚拟主机(服务器IP:192.168.30.124)
在 LAMP 环境搭建完成后,配置基于域名的虚拟主机可以实现一台服务器同时托管多个网站。每个虚拟主机使用不同的域名进行区分,访问不同的网站目录。
1. 备份默认虚拟主机配置文件
在修改配置文件之前,建议先备份原始文件,以便出现问题时可以恢复:
# 进入 Apache 虚拟主机配置目录
cd /usr/local/apache/conf/extra
# 备份默认的虚拟主机配置文件
cp -av httpd-vhosts.conf /opt/httpd-vhosts.conf.bak

2. 配置基于域名的虚拟主机
实际生产环境中,建议一个虚拟主机使用一个单独的配置文件进行控制,实现配置文件的解耦管理。
2.1 创建独立的虚拟主机配置文件
# 创建两个虚拟主机的独立配置文件
touch web1.lmx.com.conf web2.lmx.com.conf
2.2 编写虚拟主机配置
使用以下命令覆盖默认的虚拟主机配置文件:
cat > /usr/local/apache/conf/extra/httpd-vhosts.conf <<'EOF'
# ====== Virtual Hosts ======
# 基于域名(name-based)的虚拟主机
# 服务器: 192.168.30.124
# ———- web1: PHP 站点 ———-
<VirtualHost *:80>
ServerName web1.lmx.com
ServerAdmin admin@lmx.com
DocumentRoot "/usr/local/apache/htdocs/web1.lmx.com"
DirectoryIndex index.php index.html
<Directory "/usr/local/apache/htdocs/web1.lmx.com">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog "logs/web1-error_log"
CustomLog "logs/web1-access_log" common
</VirtualHost>
# ———- web2: HTML 站点 ———-
<VirtualHost *:80>
ServerName web2.lmx.com
ServerAdmin admin@lmx.com
DocumentRoot "/usr/local/apache/htdocs/web2.lmx.com"
DirectoryIndex index.html index.php
<Directory "/usr/local/apache/htdocs/web2.lmx.com">
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog "logs/web2-error_log"
CustomLog "logs/web2-access_log" common
</VirtualHost>
EOF

配置参数说明:
- ServerName:虚拟主机对应的域名
- ServerAdmin:管理员邮箱地址
- DocumentRoot:网站根目录路径
- DirectoryIndex:默认首页文件(按优先级排列)
- Options -Indexes:禁止目录浏览
- Options +FollowSymLinks:允许符号链接跟随
- AllowOverride All:允许 .htaccess 文件覆盖配置
- Require all granted:允许所有用户访问
3. 创建网站目录和测试页面
3.1 创建网站根目录
# 批量创建两个虚拟主机的网站目录
mkdir -pv /usr/local/apache/htdocs/web{1..2}.lmx.com

3.2 创建 web1 测试页面(PHP 页面)
web1 站点用于测试 PHP 解析能力,验证 LAMP 环境是否正常工作:
cat > /usr/local/apache/htdocs/web1.lmx.com/index.php <<'EOF'
<?php
echo "<h1>Web1 lengmoxi.com – PHP 环境正常</h1>";
phpinfo();
EOF

3.3 创建 web2 测试页面(HTML 页面)
web2 站点仅用于展示静态 HTML 页面:
cat > /usr/local/apache/htdocs/web2.lmx.com/index.html <<'EOF'
<h1>Web2 lengmoxi.com – HTML 页面正常</h1>
EOF

4. 修改目录权限
将网站目录的所有者修改为 Apache 运行用户,确保 Web 服务器有权限读取文件:
# 修改目录所有者为 apache 用户和组
chown -R apache:apache /usr/local/apache/htdocs/web{1..2}.lmx.com
# 验证目录权限
ll -d /usr/local/apache/htdocs/web{1..2}.lmx.com

5. 配置本地 hosts 文件解析
5.1 Linux 本机 hosts 配置
在服务器本机添加域名解析,以便通过域名访问虚拟主机:
# 在 /etc/hosts 文件中添加域名解析记录
cat >> /etc/hosts <<'EOF'
##### apache vhosts by lmx $(date +%F_%T) #####
192.168.30.124 web1.lmx.com
192.168.30.124 web2.lmx.com
##### apache vhosts by lmx $(date +%F_%T) #####
EOF
# 查看 hosts 文件内容
cat /etc/hosts
# 测试域名解析是否成功
ping -c 2 web1.lmx.com &> /dev/null ; echo $?
ping -c 2 web1.lmx.com
ping -c 2 web2.lmx.com &> /dev/null ; echo $?
ping -c 2 web2.lmx.com


5.2 Windows 客户端 hosts 配置
如果需要在 Windows 客户端上测试访问,需要修改本地的 hosts 文件。
hosts 文件位置:
C:\\Windows\\System32\\drivers\\etc\\hosts
修改方法:
192.168.30.124 web2.lmx.com

注意:必须使用管理员权限编辑 hosts 文件,否则保存会失败。
6. 启用虚拟主机配置
6.1 取消 httpd.conf 中虚拟主机配置的注释
Apache 主配置文件默认注释掉了虚拟主机配置文件的引入,需要取消注释以启用虚拟主机功能:
# 取消 Include conf/extra/httpd-vhosts.conf 的注释
sed -i 's@#Include conf/extra/httpd-vhosts.conf@Include conf/extra/httpd-vhosts.conf@g' /usr/local/apache/conf/httpd.conf
# 验证修改是否成功
grep -n httpd-vhosts /usr/local/apache/conf/httpd.conf

6.2 重启 Apache 服务
# 重启 Apache 使配置生效
/usr/local/apache/bin/apachectl -k restart

7. 测试虚拟主机访问
7.1 测试 web1 站点(PHP 站点)
在浏览器中访问:http://web1.lmx.com/
预期结果:显示 PHP 信息页面,包含 PHP 版本、配置信息等,说明 PHP 解析正常。

7.2 测试 web2 站点(HTML 站点)
在浏览器中访问:http://web2.lmx.com/
预期结果:显示 “Web2 lengmoxi.com – HTML 页面正常” 的标题,说明静态页面正常。

8. 常见问题排查
8.1 访问时显示 Apache 默认页面
问题:访问虚拟主机域名时显示 “It works!” 默认页面
排查步骤:
# 检查虚拟主机配置是否已加载
/usr/local/apache/bin/apachectl -S
# 检查 hosts 文件解析是否正确
ping web1.lengmoxi.com
# 检查网站目录是否存在且权限正确
ls -ld /usr/local/apache/htdocs/web1.lengmoxi.com
8.2 访问时出现 403 Forbidden
问题:访问虚拟主机时出现 403 禁止访问错误
排查步骤:
# 检查目录权限
ls -ld /usr/local/apache/htdocs/web1.lengmoxi.com
# 检查 SELinux 状态(如果未关闭)
getenforce
# 检查 Apache 错误日志
tail -f /usr/local/apache/logs/error_log
8.3 PHP 文件无法解析
问题:访问 .php 文件时直接下载或显示源代码
排查步骤:
# 检查 proxy_fcgi 模块是否已加载
grep -E 'proxy_module|proxy_fcgi_module' /usr/local/apache/conf/httpd.conf
# 检查 PHP-FPM 是否正在运行
ps aux | grep php-fpm
# 检查 PHP-FPM 监听端口
ss -tulanp | grep :9000
部署Discuz(apache_php-fpm服务器192.168.30.124)
前置配置,在mysql服务器192.168.30.125中先修改配置
修改 MySQL 配置文件
vim /etc/my.cnf
编辑 [mysqld] 段,添加bind-address并确认端口为3306
bind-address = 0.0.0.0 # 监听所有网络接口(原可能为 127.0.0.1,仅本地)
port=3306 # 确认端口(默认 3306)

开始部署discuz论坛
在apache_php-fpm服务器中部署(192.168.30.124)
1. 确定 Web 根目录
编译安装的 Apache 默认根目录通常在 /usr/local/apache/htdocs。因为之前部署lamp后创建了虚拟主机目录了,选择第二个直接使用。
2. 解压并部署程序
请在终端执行以下命令:
#下载依赖包
yum -y install bzip2 wget unzip
# 1. 解压
cd /usr/local/src/lamp
mkdir -pv discuz
wget https://gitee.com/Discuz/DiscuzX/attach_files/2714621/download
mv download discuz.zip
unzip discuz.zip -d /usr/local/src/lamp/discuz
# 2. 移动文件 (upload目录里才是程序本体)
#移动重要文件
mv /usr/local/src/lamp/discuz/upload/* /usr/local/apache/htdocs/web1.lmx.com/
# 3. 赋予权限 (Apache运行用户通常是daemon或nobody,编译安装默认多为daemon)
chown -R daemon:daemon /usr/local/apache/htdocs/web1.lmx.com/
chmod -R 777 /usr/local/apache/htdocs/web1.lmx.com/


3. 配置虚拟主机
编辑 Apache 配置文件。编译安装的配置文件通常在 /usr/local/apache/conf/ 下。
1. 开启虚拟主机支持
编辑主配置文件:
vim /usr/local/apache/conf/httpd.conf
找到这一行,去掉前面的 # 号:
Include conf/extra/httpd-vhosts.conf

找到 ServerAdmin you@example.com ,在下面添加:
ServerName localhost:80

2. 编辑虚拟主机配置
编辑虚拟主机文件:
vim /usr/local/apache/conf/extra/httpd-vhosts.conf
修改的成如下配置:
# ———- web1: PHP 站点 ———-
<VirtualHost *:80>
ServerName web1.lmx.com
ServerAdmin admin@lmx.com
DocumentRoot "/usr/local/apache/htdocs/web1.lmx.com"
DirectoryIndex index.php index.html
<Directory "/usr/local/apache/htdocs/web1.lmx.com">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog "logs/web1-error_log"
CustomLog "logs/web1-access_log" common
</VirtualHost>
4. 重启 Apache
编译安装的服务不能用 systemctl,必须用绝对路径。
1. 检查配置语法是否正确(非常重要,防止配错导致起不来)
/usr/local/apache/bin/apachectl -t

如果显示 Syntax OK,继续下一步。
2. 重启服务
/usr/local/apache/bin/apachectl restart

5. 数据库准备(在mysql服务器里进行)
这一步和安装方式无关,直接登录数据库操作:
— 登录到数据库
/usr/local/mysql/bin/mysql –u root –proot
— 1. 创建数据库(推荐使用 utf8mb4 字符集,完美兼容中文和特殊符号)
CREATE DATABASE discuz_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
— 2. 创建专属用户并授权
CREATE USER 'discuz_user'@'apache服务器IP' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON discuz_db.* TO 'discuz_user'@'数据库服务器IP';
— 3. 刷新权限并退出
FLUSH PRIVILEGES;
EXIT;

6. 本地 Hosts 绑定(测试用)
1. 配置本地 Hosts 文件(在你的 Windows 电脑操作)
找到路径:C:\\Windows\\System32\\drivers\\etc
找到名为 hosts 的文件。
右键该文件,选择“打开方式” -> “记事本”(或者用 Notepad++ 等编辑器)。
在文件的最底部添加:
192.168.30.124 web1.lmx.com
保存文件(Ctrl + S)。
2. 验证访问
打开你 Windows 电脑上的浏览器(Chrome/Edge):
输入:
http://web1.lmx.com/install/
该能看到 Discuz 的安装界面

7.修改discuz配置文件,将数据库地址改为数据库服务器IP‘
在apache_php-fpm服务器中进行操作
进入虚拟主机目录的config中
/usr/local/apache/htdocs/web1.lmx.com/config/

编辑config_global_default.php文件
vim config_global_default.php
# 修改这一行的ip,改成mysql服务器的ip地址
$_config['db'][1]['dbhost'] = '192.168.30.125';

重启apache
/usr/local/apache/bin/apachectl restart

8.安装discuz
进入页面,点击同意

检查环境显示没问题后点击下一步

选择中间的安装方式,点击下一步

填写完信息后,点击下一步

等待安装完成

点击进入管理后台,就进入了管理页面了


安装完成后,系统会提示删除 install 目录,务必执行:
rm -rf /usr/local/apache/htdocs/web1.lmx.com/install

说明
如何进入论坛:

如何进入管理页面:



