在 LNMP 平台中部署 Web 应用

在 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 的安装程序,根据页面提示安装。

相关推荐
pupudawang2 小时前
docker 安装 mysql
mysql·adb·docker
weixin199701080162 小时前
南网商城商品详情页前端性能优化实战
java·前端·性能优化
陈天伟教授2 小时前
WEB应用安全与防护 - 实操案例 2:CSRF(跨站请求伪造)—— 伪造用户操作
前端·安全·xss
一起搞IT吧2 小时前
Android功耗系列专题理论之十五:相机camera功耗问题分析方法
android·c++·数码相机·智能手机·性能优化
tntlbb2 小时前
苍穹外卖Day1:项目数据库连接问题排查与原理分析报告
android·adb
@PHARAOH2 小时前
HOW - 依赖包版本 lock 维护策略(pnpm)
前端
SuperEugene2 小时前
前端-后端-产品-项目-运维:互联网项目协作全流程解析
运维·前端·javascript
weixin199701080162 小时前
网易考拉商品详情页前端性能优化实战
java·前端·python·性能优化
A黄俊辉A2 小时前
openlayers+vue初学注意点
前端·javascript·vue.js