欢迎光临
我们一直在努力

基于Centos7.9部署编译安装LAMP分离式部署

CentOS7.9编译安装LAMP(Linux+Apache+Mysql+PHP)分离式部署

环境规划

节点角色操作系统 & 软件版本IP 地址备注
Web 应用服务器 CentOS 7.9 x86_64Apache/2.4.67PHP 8.2.0 192.168.30.153 集成 Apache 反向代理与 PHP-FPM,负责处理动态请求及连接数据库
数据库服务器 MySQL 8.0.12 192.168.30.154 独立部署,仅开放数据库端口供内网调用

在这里插入图片描述

关键路径与工具汇总

为方便后续操作查阅,现将各组件的关键路径与工具汇总如下:

Apache (Web 服务器)

  • 配置文件目录:/usr/local/apache/conf/
  • 网站根目录:/usr/local/apache/htdocs/
  • Discuz 站点目录:/usr/local/apache/htdocs/web7.yxl.com/

MySQL (数据库服务器)

  • 客户端工具路径:/usr/local/mysql/bin/mysql
  • 登录命令示例:/usr/local/mysql/bin/mysql -uroot -p'1'
  • 数据存放路径(默认):/usr/local/mysql/data/
  • 配置文件(通常):/etc/my.cnf 或 /usr/local/mysql/my.cnf

PHP (解析器)

  • 安装主目录:/usr/local/php82/
  • PHP-FPM 启动程序:/usr/local/php82/sbin/php-fpm
  • 配置文件 (php.ini):/usr/local/php82/etc/php.ini
  • FPM 进程配置:/usr/local/php82/etc/php-fpm.conf (及 php-fpm.d/www.conf)

Discuz (应用程序)

  • 完整程序文件路径:/usr/local/apache/htdocs/web7.yxl.com/

    注:此目录下应包含 upload 文件夹内的所有文件(如 index.php, config, data, uc_client 等)。

压缩包存放位置

  • 压缩包包存放位置:/usr/local/src/lamp/

CentOS 7.9- 配置阿里镜像源(两台服务器都部署)

#https://developer.aliyun.com/article/704987 可以去这个网站找源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

CentOS 7.9- 配置阿里镜像源 -epel

curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

清楚缓存

yun clean all

创建缓存

yum makecache

二,前置基础配置(两台服务器全部部署)

系统:CentOS 7.9 (kernel 3.10+) 内存建议 ≥ 2G,硬盘 ≥ 20G,务必能联网

把 5 个源码包统一放到 /usr/local/src/lamp放源码的目录

把discuz5.0也放入

discuz包在这里下载

mkdir -pv /usr/local/src/lamp
cd /usr/local/src/lamp

在这里插入图片描述

关闭 SELinux(否则容易 403/权限诡异)

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

防火墙放行 80/443(如果用 firewalld)

systemctl stop firewalld

如果你坚持开防火墙,至少:

firewall-cmd –add-service={http,https} –permanent && firewall-cmd –reload

环境准备(必须先执行)

安装基础编译依赖

yum -y install gcc gcc-c++ make autoconf automake libtool
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
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

创建运行用户(Apache/PHP-FPM 都用它):

useradd -r -M -s /sbin/nologin apache || true

三、编译安装Apache(在Web 应用服务器192.168.30.153上部署)

1、装编译基础依赖(必须)

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

2、编译安装 APR + APR-UTIL(Apache 依赖)

解压

cd /usr/local/src/lamp
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
yum -y install bzip2

3、编译安装 APR

cd /usr/local/src/lamp/apr-1.7.6
./configure –prefix=/usr/local/apr; echo $?
make -j$(nproc) && make install; echo $?

4、 编译安装 APR-UTIL

cd /usr/local/src/lamp/apr-util-1.6.3
./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr ; echo $?
make -j$(nproc) && make install; echo $?

5、编译安装 Apache 2.4.67

cd /usr/local/src/lamp/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 ; echo $?

6、编译安装

make -j$(nproc) && make install; echo $?

7、修改配置文件用户组

sed -i 's/^User daemon/User apache/' /usr/local/apache/conf/httpd.conf
sed -i 's/^Group daemon/Group apache/' /usr/local/apache/conf/httpd.conf

8、启动 Apache 并设置开机自启

/usr/local/apache/bin/apachectl start
echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local
chmod +700 /etc/rc.local

测试访问:浏览器打开 http://服务器IP 看到 It works! 说明 Apache 安装成功。

四,进制安装 MySQL 8.0.12(在数据库服务器192.168.30.154上部署)

1、 解压

cd /usr/local/src/lamp/
tar -zxf mysql-8.0.12-el7-x86_64.tar.gz -C /usr/local/
mv -v /usr/local/mysql-8.0.12-el7-x86_64 /usr/local/mysql

2、# 创建用户与数据目录

useradd -r -M -s /sbin/nologin 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、# 配置 my.cnf

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

############# —- ########### support-files/mysql.server 是个启动脚本,它会先读 my.cnf,再读脚本内的变量: 优先读取: (1)/etc/my.cnf (2)/etc/mysql/my.cnf (3)~/.my.cnf

查看 MySQL 配置文件读取优先级(最准指令) #必须用 mysqld(服务端),不要用 mysql 客户端 mysqld –help –verbose | grep -E 'Default options|my\\.cnf' ############# —- ###########

!初始化与启动【记住:初始化只能初始化一次,如果初始化多次,你的元数据信息就被冲了,必须删除数据目录,重新来做】【若是生产环境有数据,那么,赶紧提桶跑路把!!

4、 初始化(生成临时密码)—初始化(会生成一个临时 root 密码,务必记下)

/usr/local/mysql/bin/mysqld \\
–initialize \\
–user=mysql \\
–basedir=/usr/local/mysql \\
–datadir=/data/mysql/mysql3306 ; echo $?

在这里插入图片描述

如果这里报 “libnuma.so.1 / libaio.so.1 not found”: yum -y install numactl-libs libaio 然后再重新执行一次上面的 –initialize。

5、 复制启动脚本

cp -av /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld

6、 设置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
chkconfig –add mysqld
chkconfig mysqld on

7、 启动 MySQL

systemctl start mysqld

查看进程和端口

ss -tulanp | grep mysqld

在这里插入图片描述

ps axu | grep mysqld

在这里插入图片描述 ##### ps的输出:必须注意你的basedir和datadir是上面设置的才是正确的。#####

8、修改 MySQL 密码

/usr/local/mysql/bin/mysql -uroot -p"你的初始密码"

使用第4点的初始密码密码来重置密码

9、进入MySQL后执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你想创建的新密码';
FLUSH PRIVILEGES;
exit

测试MySQL新密码登录

/usr/local/mysql/bin/mysql -uroot -p'1' -e "\\s"

输出结果如下 在这里插入图片描述

五、编译安装PHP(在Web 应用服务器192.168.30.153上部署)

1、编译安装 PHP 8.2.26(我给你两套方案,你选其一)

先装 PHP 额外依赖(不然 ./configure 一定会少扩展)

yum -y install \\
oniguruma-devel \\
sqlite-devel

✅ 方案 A(更推荐/更像“企业交付”):PHP-FPM + Apache ProxyFCGI

优点:PHP 与 Apache 解耦、升级 PHP 不用动 httpd;Discuz/WP 都跑得很稳。 缺点:需要多配几行 httpd 的代理规则(我给你现成的)。

解压 PHP-FPM

cd /usr/local/src/lamp
tar xf php-8.2.0.tar.bz2
cd php-8.2.0

编译安装PHP-FPM

./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 \\
–enable-gd \\
–with-jpeg \\
–with-freetype \\
–with-mysqli=mysqlnd \\
–with-pdo-mysql=mysqlnd \\
–enable-mbstring \\
–enable-xml \\
–enable-session \\
–enable-opcache \\
–disable-rpath ; echo $?

make -j $(nproc) && make install ; echo $?

配置PHP-FPM进程池(调优性能)

将php.ini-production复制为生产环境配置

cp -av php.ini-production /usr/local/php82/etc/php.ini

将php-fpm.conf和www.conf从默认模版复制出来

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

编辑 /usr/local/php82/etc/php-fpm.d/www.conf(至少核对这几项):

vim /usr/local/php82/etc/php-fpm.d/www.conf

user = apache #确认运行的用户和组
group = apache
listen = 127.0.0.1:9000 #通信接口,PHP-FPM将本地9000端口监听,等待Apache的连接
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

在这里插入图片描述

启动 php-fpm:

#启动前检查配置文件是否有语法错误,防止启动失败
/usr/local/php82/sbin/php-fpm -t
#启动服务
/usr/local/php82/sbin/php-fpm
#启动PHP-FPM服务
ps axu |grep php-fpm

在这里插入图片描述

Apache 侧启用 proxy_fcgi,并把 .php 交给 PHP-FPM

在 /etc/httpd/conf/httpd.conf确保加载(一般编译时已带): vim /usr/local/apache/conf/httpd.conf

#修改httpd.conf,取消注释LoadModule proxy_module和LoadModule proxy_fcfi_module
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

在这里插入图片描述

如果不是,可以用一下语句直接替换

sed -i 's@#LoadModule proxy_module modules/mod_proxy.so@LoadModule proxy_module modules/mod_proxy.so@g' /usr/local/apache/conf/httpd.conf
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

在这里插入图片描述

测试文件

vim /usr/local/apache/conf/httpd.conf
#然后在你的 <VirtualHost>(或全局 Directory 之后)加:
<FilesMatch \\.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
DirectoryIndex index.php index.html

在这里插入图片描述

#可以查看是否已经改成功
grep -n -A12 FilesMatch /usr/local/apache/conf/httpd.conf

1)PHP 解析转发到 php-fpm(你要求的规则) <FilesMatch \\.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>

2)默认首页支持 index.php plaintext DirectoryIndex index.php index.html

重启 apache:

/usr/local/apache/bin/apachectl
/usr/local/apache/bin/apachectl -k restart

![在这里插入图片描述]

测试Apache解析PHP动态脚本

cat >> /usr/local/apache/htdocs/index.php <<EOF
<?php
phpinfo();
?>
EOF

chrome浏览器,可以看到php的版本,环境变量,各种配置等信息。 http://192.169.30.153/index.php 在这里插入图片描述

✅ 方案 B(更快、更“老派”,但能用):mod_php(libphp.so)

如果你想 省事一条龙,就用这个;缺点是 Apache 必须 prefork、且 PHP 强耦合 httpd。

cd /usr/local/src/php-8.2.26
./configure \\
–prefix=/usr/local/php82 \\
–with-config-file-path=/usr/local/php82/etc \\
–with-apxs2=/usr/local/apache2/bin/apxs \\
–with-openssl \\
–with-curl \\
–with-zlib \\
–enable-gd \\
–with-jpeg \\
–with-freetype \\
–with-mysqli=mysqlnd \\
–with-pdo-mysql=mysqlnd \\
–enable-mbstring \\
–enable-opcache ; echo $?

make -j $(nproc) && make install ; echo $?

装完后 httpd.conf 会被自动插入类似:

LoadModule php_module modules/libphp.so

你补一行:

DirectoryIndex index.php index.html

以及(稳妥)在 vhost 里:

AddHandler php-script .php

=============== Virtual Hosts ====================

配置基于域名的虚拟主机(在Web 应用服务器192.168.30.153上部署)

实际生产环境,建议一个虚拟主机,使用一个单独的配置文件进行控制。【解耦】

修改 httpd-vhosts.conf

cd /usr/local/apache/conf/extra
cp -av httpd-vhosts.conf /opt/httpd-vhosts.conf.bak
cd /usr/local/apache/conf/extra
touch web7.yxl.com.conf

基于域名(name-based)的虚拟主机

服务器: 192.168.30.153

cat > /usr/local/apache/conf/extra/httpd-vhosts.conf <<'EOF'
## ———- web7: HTML 站点 ———-
<VirtualHost *:80>
ServerName web7.yxl.com
ServerAdmin admin@yxl.com
DocumentRoot "/usr/local/apache/htdocs/web7.yxl.com"
DirectoryIndex index.html index.php

<Directory "/usr/local/apache/htdocs/web7.yxl.com">
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>

ErrorLog "logs/web2-error_log"
CustomLog "logs/web2-access_log" common
</VirtualHost>
EOF

创建网站目录

mkdir -pv /usr/local/apache/htdocs/web7.yxl.com

修改权限

chown -R apache:apache /usr/local/apache/htdocs/web7.yxl.com
ll -d /usr/local/apache/htdocs/web7.yxl.com

Linux 本机 /etc/hosts 配置

cat >> /etc/hosts <<'EOF'
##### apache vhosts by yxl $(date +%F_%T) #####
192.168.30.153 web7.yxl.com
##### apache vhosts by yxl $(date +%F_%T) #####
EOF

ping网页是否可以ping通

cat /etc/hosts
ping -c 2 web7.yxl.com &> /dev/null ;echo $?

输出为0则为通

Windows 客户端写 hosts 文件

修改方法 hosts 文件位置: C:\\Windows\\System32\\drivers\\etc\\hosts ⚠️ 必须用管理员权限编辑,否则保存会失败。

管理员权限打开记事本

1.开始菜单搜索 记事本 2.右键 → 以管理员身份运行 3.文件 → 打开 → 路径粘贴 C:\\Windows\\System32\\drivers\\etc\\hosts(右下角文件类型选"所有文件") 4.末尾追加: 192.168.30.153 web7.yxl.com

开启 Apache 的虚拟主机配置功能,并重启服务使其生效。

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
/usr/local/apache/bin/apachectl -k restart

部署Discuz(在Web 应用服务器192.168.30.153上部署)

第一步:确定 Web 根目录

编译安装的 Apache 默认根目录通常在 /usr/local/apache2/htdocs。为了方便管理,建议你在该目录下创建子目录。

第二步:解压并部署程序

请在终端执行以下命令:

部署 discuz

#下载依赖包
yum -y install bzip2 wget

# 1. 解压
cd /usr/local/src/lamp
unzip Discuz_X5.0_20260510.zip

# 2. 创建目录并移动文件 (upload目录里才是程序本体)
mkdir -p /usr/local/apache/htdocs/web7.yxl.com
mv upload/* /usr/local/apache/htdocs/web7.yxl.com/

# 3. 赋予权限 (Apache运行用户通常是daemon或nobody,编译安装默认多为daemon)
chown -R apache:apache /usr/local/apache/htdocs/web7.yxl.com
chmod -R 777 /usr/local/apache/htdocs/web7.yxl.com

第三步:配置虚拟主机

你需要编辑 Apache 配置文件。编译安装的配置文件通常在 /usr/local/apache2/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

清空文件内容,复制粘贴以下配置:

# — Discuz 虚拟主机 —
<VirtualHost *:80>
ServerName web7.yxl.com
ServerAdmin admin@yxl.com
DocumentRoot "/usr/local/apache/htdocs/web7.yxl.com"
DirectoryIndex index.php index.html

<Directory "/usr/local/apache/htdocs/web7.yxl.com">
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>

ErrorLog "logs/web2-error_log"
CustomLog "logs/web2-access_log" common
</VirtualHost>

第四步:重启 Apache

编译安装的服务不能用 systemctl,必须用绝对路径。

1. 检查配置语法是否正确(非常重要,防止配错导致起不来)

/usr/local/apache/bin/apachectl -t

如果显示 Syntax OK,继续下一步。

2. 重启服务

/usr/local/apache/bin/apachectl restart

第五步:数据库准备

这一步和安装方式无关,直接登录数据库操作:

1. 创建 Discuz 专用数据库(推荐 utf8mb4 字符集)
CREATE DATABASE discuz_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 创建专用用户并授权(允许从 Web 服务器 IP 连接)
CREATE USER 'discuz_user'@'192.168.30.153' IDENTIFIED BY 'YourStrongPassword';
GRANT ALL PRIVILEGES ON discuz_db.* TO 'discuz_user'@'192.168.30.153';

3. 刷新权限使配置生效
FLUSH PRIVILEGES;

配置 MySQL 远程访问(在)

默认情况下,MySQL 8.0 仅监听本地回环地址 (127.0.0.1),这会导致 Web 服务器无法连接。需要在数据库服务器 (192.168.30.154) 上修改配置,允许远程连接。

  • 编辑 MySQL 配置文件:

    vim /etc/my.cnf

  • 在 [mysqld] 模块下,添加或修改以下两行配置:

    [mysqld]
    bind-address = 0.0.0.0 # 监听所有网络接口。若仅允许 Web 服务器访问,可改为 192.168.30.154
    skip-name-resolve # 跳过 DNS 反向解析,提升连接性能并避免潜在的主机名解析错误

  • 保存并重启 MySQL 服务:

    systemctl restart mysqld

  • 修改 Discuz 数据库连接配置

    在 Discuz 安装界面若出现“数据库连接错误”,通常是因为其配置文件中的数据库地址仍指向本地。需要将其修改为数据库服务器的实际 IP。

  • 编辑 Discuz 的默认配置文件:

    vim /usr/local/apache/htdocs/web7.yxl.com/config/config_global_default.php

  • 定位并修改数据库服务器地址: 找到 $_config['db']['1']['dbhost'] 配置项,将其值从默认的 localhost 或 127.0.0.1 修改为数据库服务器的 IP 地址:

    $_config['db']['1']['dbhost'] = '192.168.30.154';

  • 第六步:本地 Hosts 绑定(测试用)

    1. 配置本地 Hosts 文件(在你的 Windows 电脑操作)

    找到路径:C:\\Windows\\System32\\drivers\\etc 找到名为 hosts 的文件。 右键该文件,选择“打开方式” -> “记事本”(或者用 Notepad++ 等编辑器)。 在文件的最底部添加:

    192.168.30.157 web7.yxl.com

    保存文件(Ctrl + S)。

    2. 验证访问

    打开你 Windows 电脑上的浏览器(Chrome/Edge):

    输入:

    http://web7.yxl.com/install

    该能看到 WordPress 的安装界面 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    这里就完成,这个主要是学习分离式部署。感谢阅读!!!

    赞(0)
    未经允许不得转载:171主机测评 » 基于Centos7.9部署编译安装LAMP分离式部署
    分享到: 更多 (0)

    评论 抢沙发

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