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数据库,避免数据丢失。

相关推荐
晚风吹长发2 分钟前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ21310 分钟前
Docker Compose 安装与配置指南
运维·docker·容器
麦聪聊数据13 分钟前
企业数据市场建设(三):API 化服务封装,让数据开箱即用、避免重复开发
数据库
麦聪聊数据25 分钟前
企业数据市场建设(四):流程闭环与价值运营,让数据市场真正转起来
运维·数据库
正儿八经的少年32 分钟前
redis 的大 key 和热 key 详解
数据库·redis·缓存
AI砖家35 分钟前
多智能体系统实战:架构设计、数据库表设计与 Skill 体系
数据库·多智能体·skill·agent架构设计·agengt
shencz20001 小时前
在windows10里的apache2.4加php7.2的环境下上安装Laravel5.8框架
php·laravel
是潮汕的灿灿展吖1 小时前
Centos离线部署nfs操作
linux·运维·centos
FII工业富联科技服务1 小时前
从灯塔工厂到AI Factory新模式:AI正在重构制造业的四大核心能力
大数据·运维·人工智能·重构·ar·制造
小五传输1 小时前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全