LNMP环境部署

一、LNMP环境简介

LNMP是Linux、Nginx、MySQL、PHP的缩写,是目前主流的Web服务器架构之一,适用于中小型网站、博客、应用后台等场景。其核心优势在于轻量、高效、稳定,Nginx负责处理HTTP请求、反向代理,MySQL作为关系型数据库存储数据,PHP作为脚本语言解析动态内容,Linux作为底层操作系统提供运行环境。

本次部署环境:CentOS 7.x(64位),Nginx 1.24.0,MySQL 8.0,PHP 8.1(版本可根据需求调整,步骤通用)。

二、部署前准备

2.1 系统更新与依赖安装

首先更新系统软件包,确保依赖包最新,避免部署过程中出现版本兼容问题。

切换到root用户(后续所有操作建议用root权限,避免权限不足) su root # 更新系统软件包 yum update -y # 安装部署所需依赖(编译安装必备) yum install -y gcc gcc-c++ make cmake openssl openssl-devel pcre pcre-devel zlib zlib-devel libxml2 libxml2-devel libjpeg-devel libpng-devel freetype-devel curl curl-devel

2.2 关闭防火墙与SELinux

CentOS默认开启防火墙和SELinux,会拦截Nginx、MySQL的端口(80、3306等),部署期间临时关闭,后续可根据需求配置规则开启。

关闭防火墙(临时关闭,重启失效) systemctl stop firewalld # 禁止防火墙开机自启(永久关闭) systemctl disable firewalld # 关闭SELinux(临时关闭,重启失效) setenforce 0 # 永久关闭SELinux(修改配置文件,需重启生效) sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

注:永久关闭SELinux后,需重启系统生效,可部署完成后再重启。

三、分步部署LNMP组件

3.1 部署Nginx

3.1.1 下载并解压Nginx源码包

进入/usr/local/src目录(用于存放源码包) cd /usr/local/src # 下载Nginx 1.24.0源码包(可到官网获取最新版本链接) wget http://nginx.org/download/nginx-1.24.0.tar.gz # 解压源码包 tar -zxvf nginx-1.24.0.tar.gz # 进入解压后的目录 cd nginx-1.24.0

3.1.2 编译安装Nginx

配置编译参数(指定安装目录、启用SSL等) ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre # 编译(-j 4表示用4个线程编译,加快速度,根据CPU核心数调整) make -j 4 # 安装 make install

3.1.3 启动Nginx并设置开机自启

启动Nginx /usr/local/nginx/sbin/nginx # 验证Nginx是否启动成功(查看进程) ps -ef | grep nginx # 设置开机自启(创建系统服务) cat > /usr/lib/systemd/system/nginx.service << EOF [Unit] Description=nginx - high performance web server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target EOF # 重新加载系统服务 systemctl daemon-reload # 设置开机自启 systemctl enable nginx

验证:浏览器访问服务器IP,出现Nginx默认欢迎页,说明Nginx部署成功。

3.2 部署MySQL

3.2.1 卸载系统自带MySQL(若有)

查看系统自带MySQL相关包 rpm -qa | grep mysql # 卸载相关包(替换为实际查到的包名) rpm -e --nodeps 包名 # 查看并删除残留文件 find / -name mysql rm -rf 残留文件路径(如/var/lib/mysql、/etc/my.cnf等)

3.2.2 安装MySQL YUM源

下载MySQL 8.0 YUM源(CentOS 7版本) wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm # 安装YUM源 rpm -ivh mysql80-community-release-el7-3.noarch.rpm # 安装MySQL服务器 yum install -y mysql-community-server

3.2.3 启动MySQL并初始化

启动MySQL systemctl start mysqld # 设置开机自启 systemctl enable mysqld # 查看MySQL启动状态 systemctl status mysqld # 查看初始密码(MySQL 8.0默认生成临时密码,存放在日志中) grep 'temporary password' /var/log/mysqld.log # 登录MySQL(输入上述查到的临时密码) mysql -u root -p # 修改root密码(密码需包含大小写、数字、特殊字符,否则报错) ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourPassword@123'; # 授权root远程访问(方便本地连接服务器MySQL,生产环境可限制IP) use mysql; update user set host='%' where user='root'; flush privileges; # 退出MySQL exit

验证:本地使用Navicat等工具,输入服务器IP、root账号、新密码,能成功连接,说明MySQL部署成功。

3.3 部署PHP

3.3.1 安装PHP YUM源(默认YUM源PHP版本较低,需添加第三方源)

安装EPEL源 yum install -y epel-release # 安装Remi源(用于获取高版本PHP) yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm # 启用PHP 8.1模块 yum-config-manager --enable remi-php81

3.3.2 安装PHP及相关扩展

安装PHP及常用扩展(适配MySQL、Nginx) yum install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-cli php-opcache # 查看PHP版本,验证安装成功 php -v

3.3.3 配置PHP-FPM并启动

PHP-FPM是PHP的FastCGI进程管理器,用于与Nginx通信,解析PHP脚本。

编辑PHP-FPM配置文件(调整用户和组,与Nginx一致) vi /etc/php-fpm.d/www.conf # 修改以下两项(将apache改为nginx) user = nginx group = nginx # 启动PHP-FPM systemctl start php-fpm # 设置开机自启 systemctl enable php-fpm # 查看PHP-FPM启动状态 systemctl status php-fpm

四、配置Nginx与PHP联动

默认情况下,Nginx无法解析PHP脚本,需修改Nginx配置文件,让Nginx将PHP请求转发给PHP-FPM处理。

编辑Nginx主配置文件 vi /usr/local/nginx/conf/nginx.conf # 找到server块,修改location ~ \.php 部分,确保配置如下: server { listen 80; server_name localhost; # 可改为自己的域名,如www.example.com # 网站根目录(可自定义,如/www/html) root /usr/local/nginx/html; index index.html index.htm index.php; # 新增index.php # 处理PHP请求 location \~ \\.php { root /usr/local/nginx/html; # 与上面的root一致 fastcgi_pass 127.0.0.1:9000; # PHP-FPM默认端口 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME document_rootfastcgi_script_name; # 关键配置,避免路径错误 include fastcgi_params; } } # 保存配置并重启Nginx,使配置生效 /usr/local/nginx/sbin/nginx -s reload

五、环境验证

创建一个PHP测试文件,验证Nginx能否正常解析PHP,以及PHP能否正常连接MySQL。

进入网站根目录 cd /usr/local/nginx/html # 创建test.php文件 vi test.php # 写入以下内容(连接MySQL并输出信息) <?php phpinfo(); // 输出PHP环境信息 link = mysqli_connect('localhost', 'root', 'YourPassword@123'); // 替换为自己的MySQL密码 if (link) { echo "PHP连接MySQL成功!"; } else { echo "PHP连接MySQL失败:" . mysqli_error($link); } ?> # 保存退出后,浏览器访问 http://服务器IP/test.php

验证结果:

  • 能看到PHP环境信息(phpinfo页面),说明Nginx与PHP联动成功;

  • 页面显示"PHP连接MySQL成功!",说明PHP与MySQL联动成功。

六、常见问题与解决方法

6.1 Nginx启动失败

原因1:80端口被占用(如Apache),解决:关闭Apache(systemctl stop httpd),或修改Nginx监听端口;

原因2:配置文件错误,解决:检查配置文件语法(/usr/local/nginx/sbin/nginx -t),根据提示修正错误。

6.2 PHP页面无法解析,显示源码

原因:Nginx配置文件中PHP请求转发配置错误,解决:重新检查nginx.conf中location ~ \.php$ 部分的配置,确保fastcgi_param路径正确,重启Nginx。

6.3 PHP无法连接MySQL

原因1:MySQL密码错误,解决:确认密码正确,重新修改密码并测试;

原因2:MySQL未授权远程访问,解决:重新执行授权命令(update user set host='%' where user='root'; flush privileges;);

原因3:PHP扩展缺失,解决:安装php-mysqlnd扩展(yum install -y php-mysqlnd),重启PHP-FPM。

七、注意事项

  1. 部署过程中全程使用root权限,避免权限不足导致操作失败;

  2. 版本选择:建议选择稳定版(如Nginx 1.24.x、MySQL 8.0.x、PHP 8.1.x),避免使用测试版;

  3. 安全设置:生产环境中,需开启防火墙,只开放80(HTTP)、443(HTTPS)、3306(MySQL,建议限制IP)端口;修改MySQL密码为强密码,避免root远程全IP访问;

  4. 日志查看:遇到问题可查看相关日志排查(Nginx日志:/usr/local/nginx/logs/error.log;MySQL日志:/var/log/mysqld.log;PHP-FPM日志:/var/log/php-fpm/www-error.log);

  5. 后续维护:定期更新系统和组件版本,备份MySQL数据库,避免数据丢失。

相关推荐
深念Y2 小时前
记一次完整的MongoDB环境配置实录
数据库·mongodb
DBA小马哥2 小时前
国产数据库选型实战:MySQL迁移的兼容性、安全与性能落地
数据库·mysql·安全
Lethehong2 小时前
深入浅出:复杂查询中基于代价的连接条件下推优化实战
数据库
郝学胜-神的一滴2 小时前
深度解析:Python元类手撸ORM框架,解锁底层编程魔法
数据结构·数据库·python·算法·职场和发展
报错小能手2 小时前
nginx集群聊天室(五)nginx配置tcp服务器负载均衡
服务器·tcp/ip·nginx
李恒-聆机智能专精数采2 小时前
从零开始了解数据采集技术篇(8)——为什么工业数据采集很难用“一站式平台”解决?从设备生态到系统架构的技术分析
运维·网络·数据库·数据分析·数据采集
小光学长2 小时前
基于ssm的书法学习交流系统25ki07v1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·开发语言·数据库·学习·ssm
sygydxfwd2 小时前
TwinCAT 3配合MySQL数据库实现ms级数据存储
数据库·mysql
IT成长日记2 小时前
国产数据库DM8实战手册:静默安装部署全教程
数据库·dm8·国产数据库·静默安装·部署教程