在 LNMP 平台中部署 Web 应用
一、LNMP 部署核心思路
- Nginx:80 端口对外,处理静态资源
- PHP-FPM:监听 9000(或 sock),处理 .php
- MySQL:存储业务数据
- 动静分离、路径统一、权限极小化
二、部署流程
1)系统初始化
bash
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2)安装 LNMP 组件
MySQL
bash
yum -y install mysql mysql-server
systemctl start mysqld
systemctl enable mysqld
mysql -uroot -p # 默认密码为空,登录后建议重置密码
mysql> alter user 'root'@'localhost' identified by '123';
mysql> flush privileges;
mysql> exit
Nginx
bash
yum install -y nginx
systemctl start nginx && systemctl enable nginx
PHP + PHP-FPM
PHP-FPM(PHP FastCGI Process Manager)是 PHP 的 FastCGI 进程管理池,专为高并发场景设计,用于高效处理 PHP 脚本请求。它通过管理 PHP 进程池,显著提升 PHP 应用的性能和稳定性,是 Nginx 等 Web 服务器处理 PHP 请求的核心组件。
yum 安装流程
bash
yum install -y php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-zip
systemctl start php-fpm && systemctl enable php-fpm
源码包安装流程
bash
# 依赖环境安装
dnf install -y gcc make cmake autoconf libtool bison re2c gcc-c++ openssl-devel libxml2-devel zlib-devel curl-devel libpng-devel libjpeg-turbo-devel freetype-devel libicu-devel oniguruma-devel sqlite-devel libxslt-devel libzip-devel pcre-devel apr-devel apr-util-devel ncurses-devel wget
bash
# 编译安装 php
tar zxvf php-9.2.20.tar.gz
cd php-8.2.20
# 编译
./configure --prefix=/usr/local/php --with-openssl --with-zlib --with-curl --enable-mbstring --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-freetype --with-jpeg --with-zip --with-libxml --enable-intl --enable-gd --enable-fpm --enable-opcache
# 安装
make && make install
3)使用 RPM 安装后 PHP 配置
bash
# 修改 php.ini 配置文件
cp php.ini-development /usr/local/php/lib/php.ini
sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/' /usr/local/php/lib/php.ini
sed -i 's/memory_limit = 128M/memory_limit = 256M/' /usr/local/php/lib/php.ini
# 修改 php-fpm 启动脚本
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
# 修改 php-fpm 启动用户
useradd -M -s /sbin/nologin php
sed -i 's/user =/user = php' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/group =/group = php' /usr/local/php/etc/php-fpm.d/www.conf
bash
# 编写 php-fpm 启动脚本
[Unit]
Description=PHP FastCGI Process Manager
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PIDFile=/usr/local/php/var/run/php-fpm.pid
[Install]
WantedBy=multi-user.target
bash
systemctl daemon-reload
systemctl start php-fpm
ss -tnl | grep 9000
4)Nginx 配置
bash
vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm index.php;
}
# 配置 Nginx 支持 php 解析
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
5)测试
在浏览器上显示服务器的 PHP 环境信息
php
# 编写一个 ".php" 格式的测试文件
vim /usr/local/nginx/html/index.php
# 写入
<?php
phpinfo();
?>
在浏览器网址栏输入 你的虚拟机ip/index.php
测试 PHP 网页能否访问 MySQL 数据库
php
vim /usr/local/nginx/html/index.php
# 写入
<?php
# phpinfo();
$link=mysqli_connect('127.0.0.1','root','passwd');
if($link) echo "数据库连接成功";
mysqli_close($link);
?>
浏览器访问 index.php 显示 "数据库连接成功" 字样
三、部署 discuz 论坛实验
1)Discuz
bash
# 在源码包目录下解压
unzip Discuz-X3.5-SC-UTF8-v20231001.zip
# 将解压出的 upload 文件放置到 LNMP 服务器的网站根目录
mkdir -p /usr/local/nginx/html/bbs
cp -ra upload/* /usr/local/nginx/html/bbs/
# 更改配置文件
cd /usr/local/nginx/html/bbs/config/
cp config_global_default.php config_global.php
cp config_ucenter_default.php config_ucenter.php
chown php:php /usr/local/nginx/html/bbs/ -R
# 更改 php.ini 防止连接数据库出错
vim /usr/local/php/lib/php/ini
mysqli_default_socket = /var/lib/mysql/mysql.sock
pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
systemctl restart php-fpm
2)创建数据库
Discuz 论坛中的帖子、板块等信息需要保存在数据库中,所以要针对 Discuz 创建数据库。为了降低 Web 应用程序对数据库的风险,建议设置专用的数据库授权用户。
sql
mysql -uroot -p
mysql> create user 'discuz_user'@'localhost' identified by 'discuz';
mysql> grant all privieges in discuz_db.* to 'discuz_user'@'localhost';
mysql> flush privileges;
mysql> alter user 'discuz_user'@'localhost' identified with mysql_native_password by 'discuz';
mysql> flush privileges;
mysql> create database discuz_db default character set utf8mb4 collate utf8mb4_unicode_ci;
mysql> exit
3)安装 web 应用
访问浏览器 URL 地址(http://你的nginx服务器ip/bbs/install),将会打开 Discuz 的安装程序,根据页面提示安装。