环境准备

1.分配ip以及服务器

角色 OS和软件版本 服务器IP地址
Web服务器 CentOS 7.9 x86_64 192.168.30.124
Apache反向代理服务器 Apache 2.4.67 192.168.30.124
PHP程序(处理动态php脚本,连接数据库) PHP 8.2.0 192.168.30.124
MySQL数据库服务器 MySQL 8.0.12 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

正常配置后,输出应类似如下(注意baseepel等源的地址显示为阿里云镜像):

已加载插件: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

在这里插入图片描述

提示

  1. 如果服务器无法访问外网,请根据实际情况配置内网镜像源或使用本地源。
  2. 配置完成后,后续的yum install命令将从阿里云镜像站下载软件包,速度更快。
  3. 如果遇到curl命令无法执行,请先安装curl:yum install -y curl

2.部署前置

2.1系统要求
  • 内存:建议 ≥ 2GB
  • 硬盘:建议 ≥ 20GB
  • 网络:必须能联网,用于下载源码包和依赖
2.2 源码包准备
  1. 源码包下载地址:

    https://download.csdn.net/download/qq_44769717/92924011
    
  2. 将下载好的 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 目录。

  3. 确保该目录存在,若不存在请先创建:

    mkdir -pv /usr/local/src/lamp
    
  4. 进入该目录,确认所有源码包已就位:

    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

提示

  1. 如果某些包在默认仓库中不存在,可以尝试启用 EPEL 仓库:yum install epel-release -y
  2. 安装过程可能需要几分钟时间,请确保网络连接正常
  3. 所有 -devel 包提供了头文件和静态库,是编译源码所必需的

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-datanginx 等)
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 后续使用说明
  1. 编译 Apache 时:在 ./configure 阶段可以通过 --with-mpm=prefork --with-user=apache --with-group=apache 参数指定运行用户
  2. 配置 PHP-FPM 时:在 php-fpm.confwww.conf 中设置 user = apachegroup = apache
  3. 目录权限设置:Web 根目录(如 /var/www/html)的所有者可以设置为 apache:apache 或通过 ACL 设置相应权限

安全建议

  1. 生产环境中,建议为 Apache 和 PHP-FPM 分别创建不同的用户,实现更细粒度的权限控制
  2. 定期检查运行用户权限,确保没有不必要的特权
  3. 使用 ps aux | grep apache 可以查看 Apache 进程的实际运行用户

编译安装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

在这里插入图片描述

提示

  1. -j$(nproc) 参数表示使用所有 CPU 核心并行编译,可以显著加快编译速度
  2. echo $? 用于检查上一条命令的退出状态,返回 0 表示成功,非 0 表示失败,echo $? 可以加在命令后面,在使用的时命令与echo $? 中间要有个;符号,例如 ls -l ; echo $?
  3. 如果编译过程中出现错误,请检查是否已安装所有必要的编译依赖(参考第 4 章)
  4. 确保 /usr/local/apr/usr/local/apr-util 目录有足够的写入权限

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 安装
  1. 通过命令行测试 :

    # 使用 curl 测试本地 Apache
    curl -I http://localhost
    
    # 或者使用 wget
    wget -q -O - http://localhost | head -20
    

在这里插入图片描述

  1. 通过浏览器测试:
    – 在浏览器地址栏输入: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

在配置文件中添加以下内容:

  1. 配置 PHP 文件处理

    (在配置文件中添加):

    # PHP 解析转发到 PHP-FPM
    <FilesMatch \.php$>
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
    

在这里插入图片描述

  1. 设置默认首页支持 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 通过浏览器测试
  1. 打开浏览器,访问:http://你的服务器IP地址
  2. 如果看到 Apache 的 “It works!” 页面,说明 Apache 正常运行
  3. 访问:http://你的服务器IP地址/index.php
  4. 如果看到 PHP 信息页面,显1示 PHP 版本、配置信息、环境变量等,说明 PHP 解析成功
    在这里插入图片描述

在这里插入图片描述

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 $?

在这里插入图片描述

初始化注意事项

  1. 初始化过程会生成一个临时的 root 密码,请务必记下(在初始化输出的最后几行)

  2. 如果初始化失败并提示 “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 输出中的 basedirdatadir 是否正确指向 /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

修改方法

  1. 在开始菜单搜索「记事本」
  2. 右键 → 以管理员身份运行
  3. 文件 → 打开 → 路径粘贴 C:\Windows\System32\drivers\etc\hosts(右下角文件类型选「所有文件」)
  4. 在文件末尾追加以下内容:
    192.168.30.124   web1.lmx.com
    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'@'apache服务器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 的安装界面
在这里插入图片描述

重启apache

/usr/local/apache/bin/apachectl restart

在这里插入图片描述

7.安装discuz

进入页面,点击同意
在这里插入图片描述
检查环境显示没问题后点击下一步
在这里插入图片描述

选择中间的安装方式,点击下一步
在这里插入图片描述

填写完信息后,点击下一步
在这里插入图片描述

等待安装完成
在这里插入图片描述

点击进入管理后台,就进入了管理页面了
在这里插入图片描述

在这里插入图片描述

安装完成后,系统会提示删除 install 目录,务必执行:

rm -rf /usr/local/apache/htdocs/web1.lmx.com/install

在这里插入图片描述

说明
1.如果在网页上安装discuz中出现连接数据库失败,可以尝试进入discuz配置文件中指定数据库地址

修改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';

在这里插入图片描述

2.如何进入论坛:

在这里插入图片描述

3.如何进入管理页面:

在这里插入图片描述

更多推荐