欢迎光临
我们一直在努力

基于CentOS7.9——分离式部署lamp(apache_php-fpm和mysql分离)并部署discuz

环境准备

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

在这里插入图片描述

提示:

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

    提示:

  • 如果某些包在默认仓库中不存在,可以尝试启用 EPEL 仓库:yum install epel-release -y
  • 安装过程可能需要几分钟时间,请确保网络连接正常
  • 所有 -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-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 时:在 ./configure 阶段可以通过 –with-mpm=prefork –with-user=apache –with-group=apache 参数指定运行用户
  • 配置 PHP-FPM 时:在 php-fpm.conf 或 www.conf 中设置 user = apache 和 group = apache
  • 目录权限设置:Web 根目录(如 /var/www/html)的所有者可以设置为 apache:apache 或通过 ACL 设置相应权限
  • 安全建议:

  • 生产环境中,建议为 Apache 和 PHP-FPM 分别创建不同的用户,实现更细粒度的权限控制
  • 定期检查运行用户权限,确保没有不必要的特权
  • 使用 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

    在这里插入图片描述

    提示:

  • -j$(nproc) 参数表示使用所有 CPU 核心并行编译,可以显著加快编译速度
  • echo $? 用于检查上一条命令的退出状态,返回 0 表示成功,非 0 表示失败,echo $? 可以加在命令后面,在使用的时命令与echo $? 中间要有个;符号,例如 ls -l ; echo $?
  • 如果编译过程中出现错误,请检查是否已安装所有必要的编译依赖(参考第 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 安装
  • 通过命令行测试 :

    # 使用 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 通过浏览器测试
  • 打开浏览器,访问:http://你的服务器IP地址
  • 如果看到 Apache 的 “It works!” 页面,说明 Apache 正常运行
  • 访问:http://你的服务器IP地址/index.php
  • 如果看到 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 $?

    在这里插入图片描述

    初始化注意事项:

  • 初始化过程会生成一个临时的 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

    修改方法:

  • 在开始菜单搜索「记事本」
  • 右键 → 以管理员身份运行
  • 文件 → 打开 → 路径粘贴 C:\\Windows\\System32\\drivers\\etc\\hosts(右下角文件类型选「所有文件」)
  • 在文件末尾追加以下内容: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'@'数据库服务器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

    在这里插入图片描述

    说明

    如何进入论坛:
    在这里插入图片描述

    如何进入管理页面:
    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 基于CentOS7.9——分离式部署lamp(apache_php-fpm和mysql分离)并部署discuz
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址