第一步:准备环境 & 准备脚本文件

1. 你在 CentOS 7 的服务器/虚拟机里打开终端,确认你有 root 权限或者能用 sudo

输入下面命令确认你的系统版本:

cat /etc/centos-release

你应该看到类似:

CentOS Linux release 7.9.2009 (Core)


2. 用 vimnano 创建脚本文件

假设文件名叫 lnmp_install.sh

vim lnmp_install.sh

打开后,先不要急着输入内容,咱们先做个简单的测试,确保能保存和运行。

i 进入编辑模式,写入:

#!/bin/bashecho "Hello LNMP"

然后按 Esc,输入 :wq 保存并退出。


3. 给予脚本执行权限

chmod +x lnmp_install.sh

4. 运行脚本试试

./lnmp_install.sh

你应该看到输出:

Hello LNMP

第二部. 编辑脚本,加入安装 Nginx 的代码

打开刚才的脚本:

vim lnmp_install.sh

i 进入编辑模式,把原来的内容改成下面这样(我保留了 Hello LNMP,方便你确认脚本执行流程):

#!/bin/bashecho "Hello LNMP"echo ">>> 安装 Nginx..."
yum install -y epel-release
yum install -y nginxecho ">>> 启动并设置 Nginx 开机自启..."
systemctl start nginx
systemctl enable nginxecho ">>> 检查 Nginx 状态..."
systemctl status nginx --no-pager

2. 保存并退出

Esc,输入 :wq 回车。


3. 运行脚本

./lnmp_install.sh

4. 验证 Nginx 是否成功安装

curl -I http://localhost

HTTP/1.1 200 OK Server: nginx/1.20.1 ...

或者你也可以在浏览器访问你的服务器 IP,看是否出现 Nginx 默认欢迎页。


第三步:安装 MySQL(MariaDB 版本)

CentOS 7 默认用 MariaDB 代替 MySQL,指令兼容,而且安装更简单。


1. 编辑脚本

打开脚本:

vim lnmp_install.sh

在安装 Nginx 代码的 后面,加上这段 MariaDB 安装和初始化的内容:

echo ">>> 安装 MariaDB(MySQL兼容版)..."
yum install -y mariadb-server mariadbecho ">>> 启动并设置 MariaDB 开机自启..."
systemctl start mariadb
systemctl enable mariadbecho ">>> 初始化 MariaDB(设置 root 密码并开启安全选项)..."
DB_ROOT_PASS="123456"  # 这里可以换成你想要的密码
mysql_secure_installation <<EOFy
$DB_ROOT_PASS
$DB_ROOT_PASS
y
y
y
y
EOF

2. 保存并退出

Esc:wq → 回车。


3. 运行脚本(测试 MariaDB 部分)

./lnmp_install.sh 

4. 验证 MySQL(MariaDB)是否安装成功

mysql -uroot -p

输入你刚才脚本里设定的密码(默认 123456),如果能看到:

Welcome to the MariaDB monitor. Commands end with ; or \g.

说明数据库安装成功。


第四步:安装 PHP 并配置 Nginx 支持 PHP

1. 编辑脚本

继续在 lnmp_install.sh 里,MariaDB 安装的后面加上 PHP 部分代码:

echo ">>> 安装 PHP 及扩展..."
# 安装 Remi 仓库(支持不同 PHP 版本)
yum install -y yum-utils
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm# 启用 PHP 7.4 源(可以改成 72 / 80 / 81 等版本)
yum-config-manager --disable 'remi-php*'
yum-config-manager --enable remi-php74# 安装 PHP-FPM 和常用扩展
yum install -y php php-fpm php-mysql php-mbstring php-xml php-gd php-opcache php-cliecho ">>> 启动并设置 PHP-FPM 开机自启..."
systemctl start php-fpm
systemctl enable php-fpmecho ">>> 配置 Nginx 支持 PHP..."
cat >/etc/nginx/conf.d/default.conf <<EOF
server {listen       80;server_name  localhost;root   /usr/share/nginx/html;index  index.php index.html index.htm;location / {try_files \$uri \$uri/ =404;}location ~ \.php\$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  \$document_root\$fastcgi_script_name;include        fastcgi_params;}
}
EOFecho ">>> 创建 PHP 测试页面..."
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/index.phpecho ">>> 重新加载 Nginx..."
systemctl reload nginx

2. 保存并退出

Esc:wq → 回车。


3. 运行脚本

./lnmp_install.sh

4. 验证 LNMP 是否成功

方式 1:命令行验证

curl -I http://localhost

返回 200 OK 表示页面存在。

方式 2:浏览器访问

用浏览器访问服务器 IP,例如:

http://你的服务器IP

如果看到 PHP 信息页面(phpinfo),说明 LNMP 完全 OK。

第五步:加上防火墙自动放行端口 + 自动检测 LNMP 页面可访问

1. 编辑脚本

打开你的 lnmp_install.sh

vim lnmp_install.sh

在脚本 最后一部分(Nginx reload 之后) 加上这段代码:

cho ">>> 配置防火墙,放行 80 和 443 端口..."
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reloadecho ">>> 检测 LNMP 是否正常工作..."
sleep 3
if curl -s -I http://localhost | grep -q "200 OK"; thenecho "✅ LNMP 部署成功!可以访问 http://你的服务器IP"
elseecho "❌ LNMP 部署失败,请检查 Nginx/PHP/MySQL 日志"
fi

2. 保存退出

Esc:wq → 回车。


3. 再运行一遍脚本(测试自检功能)

./lnmp_install.sh
  • 它会自动放行 80、443 端口

  • 等 3 秒后用 curl 请求首页

  • 成功则输出 ✅ LNMP 部署成功!


4. 浏览器访问测试

在浏览器访问:

http://你的服务器IP

如果出现 PHP 信息页面(phpinfo),LNMP 就已经完全跑起来了。

项目名称:专业 LNMP 一键部署自动化脚本
项目描述:
基于 CentOS 7,使用 Shell 脚本实现 Nginx、MariaDB(MySQL 兼容)、PHP 环境的一键自动化安装和配置。
支持参数化输入 PHP 版本和数据库密码,自动检测并释放端口冲突,防火墙自动放行 HTTP/HTTPS 端口,实现全流程无人值守部署。

技术栈:
Shell 脚本、CentOS 7、Nginx、MariaDB、PHP-FPM、firewalld、systemctl、自动化运维

项目亮点:

通过参数化设计,支持用户自定义 PHP 版本及 MySQL 密码,提高脚本适用性和灵活性

实现端口占用自动检测和释放,避免服务启动冲突,提升部署稳定性

自动配置防火墙放行80/443端口,保证服务外部访问

部署后自动测试服务状态,输出彩色日志,提升运维体验

项目脚本可在多台机器快速复用,极大节省环境搭建时间

提升运维自动化能力,适用于开发测试和生产环境部署

收获与反思:

深入理解 Linux 服务管理与防火墙配置

掌握 Shell 脚本参数处理与流程控制

实践自动化部署思路,提高了实际动手能力和问题排查能力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94959.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94959.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94959.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react之React.cloneElement()

react提供的这个方法克隆组件的方法&#xff0c;可能我们在平常的开发中用的很少&#xff0c;主要可能是我们并不知道或者并不了解这个方法。因为我在之前react的children文章中用到过&#xff0c;所以我就进行了一系列的测试&#xff0c;发现真的非常的好用。我们同样使用一些…

学习Java的Day27

今天学习的主要内容是在IntelliJ IDEA开发环境中&#xff0c;通过部署Tomcat服务器并连接MySQL数据库&#xff0c;实现了一个完整的留言板系统。这个项目涵盖了前后端开发的全流程&#xff0c;具体包括以下关键环节&#xff1a;开发环境搭建使用IntelliJ IDEA Ultimate版&#…

【计算机网络 | 第3篇】物理媒介

文章目录物理媒介介绍与物理媒体的分类&#x1f95d;成本考量引导型传输媒体&#x1f34b;引导型传输媒体&#xff1a;双绞线&#x1f34b;‍&#x1f7e9;双绞线类别双绞线的发展历程双绞线的物理限制引导型传输媒体&#xff1a;同轴电缆&#x1f34b;‍&#x1f7e9;结构组成…

golang的切片

切片 为什么需要切片 用于元素的个数不确定&#xff0c;所以无法通过数组的形式来进行统计。此时就需要切片 切片&#xff0c;也因此可以粗略地理解为动态数组数组的长度不能用变量来确定&#xff0c;这时候切片slice也就派上用场了 切片地基本介绍 切片的英文是slice切片是数组…

在labview中实现视频播放

这里分享一个迅雷的视频播放控件APlayer&#xff0c;非常的好用。具体操作步骤如下&#xff1a; 1.下载控件: 首先下载http://aplayer.open.xunlei.com/codecs.zip&#xff0c;将codecs文件解压后打开&#xff0c;按快捷键contrlA,随后contrlc复制里面所有的文件&#xff1b;…

ubuntu 22.04 使用yaml文件 修改静态ip

前提&#xff1a; 启动服务 sudo systemctl start systemd-networkd 设置开机自启 sudo systemctl enable systemd-networkd 检查状态&#xff08;确保显示 active (running)&#xff09; sudo systemctl status systemd-networkd 若想停止&#xff1a; 停止当前运行的服务 sud…

闸机控制系统从设计到实现全解析:第 4 篇:Redis 缓存与分布式锁实现

第 4 篇&#xff1a;Redis 缓存与分布式锁实现 一、Redis 在系统中的核心作用票证信息缓存&#xff1a;将高频访问的票证数据&#xff08;如状态、有效期&#xff09;缓存至 Redis&#xff0c;减少数据库查询&#xff0c;提升验证响应速度。分布式锁&#xff1a;在高并发场景下…

北京天津唐山廊坊沧州打捞日记

北京天津唐山廊坊沧州打捞日记 打捞搜蚯蚓疏通 北京&#xff1a;护城河畔的情谊打捞 清晨&#xff0c;北京的护城河在朝阳的映照下泛着微光。我接到一位年轻小伙的电话&#xff0c;声音中满是焦急。原来&#xff0c;他与女友在河边约会时&#xff0c;不小心将女友送他的定情玉佩…

全志刷机工具:PhoenixSuit-全志芯片处理器-刷机工具安装包及最详细使用教程指南

全志刷机工具&#xff1a;PhoenixSuit-全志芯片处理器刷机工具安装包及最详细使用教程指南&#xff0c;此文章主要是分享机顶盒、电视盒子&#xff0c;全志芯片盒子&#xff08;其中包含全志处理器、全志芯片、全志CPU等等&#xff09;的刷机工具、刷机工具安装教程以及如何使用…

浅谈 VM 桥接模式:让虚拟机像真实电脑一样接入网络

在虚拟化环境中&#xff0c;虚拟机&#xff08;Virtual Machine, VM&#xff09;与外部网络之间的通信方式有多种&#xff0c;比如 NAT 模式、Host-Only 模式、桥接模式&#xff08;Bridged Networking&#xff09; 等。其中&#xff0c;桥接模式是最接近“真实物理机”网络行为…

计算机视觉(1)-图像采集设备选型全景表(工业 + 医疗 + 车载)

图像采集设备选型全景表&#xff08;工业 医疗 车载&#xff09;一份面向工程师的“场景—设备—协议”速查表1 工业 & 医疗 & 通用场景应用场景主流设备形态接口 / 协议典型性能突出优势致命短板动态范围工业检测AOI / 量测 / 缺陷工业相机 采集卡Camera Link HSCo…

计算机视觉(3)深度学习模型部署平台技术选型与全栈实践指南

一、部署平台概述与分类 深度学习模型部署平台的分类需兼顾技术特性与应用场景的适配性&#xff0c;基于“技术定位-场景适配”双维度分类法&#xff0c;可将其划分为通用开源框架、云厂商服务及专用边缘工具三大类&#xff0c;各类别在设计目标、核心能力与场景覆盖上呈现显著…

Scratch编程:枪战游戏(附源码)

&#x1f3ae; 操作说明 W / A / S / D 或 方向键&#xff1a;移动 C&#xff1a;滑铲 空格键&#xff1a;取消滑铲 鼠标点击&#xff1a;开火 数字键 1 / 2 / 3 / 4&#xff1a;切换武器 G&#xff1a;快速使用道具 F&#xff1a;近战攻击 Q&#xff1a;瞄准 / 使用技能…

应急响应复现

一、前言&#xff1a;当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时&#xff0c;急需第一时间进行处理&#xff0c;使企业的网络信息系统在最短时间内恢复正常工作&#xff0c;进一步查找入侵来源&#xff0c;还原入侵事故过程&#xff0c;同时给出解决方案…

分布式事务Seata TCC模式篇

介绍 ​ 官网: https://seata.apache.org/zh-cn/docs/user/mode/tcc ​ 回顾Seata AT 模式基于 支持本地 ACID 事务 的 关系型数据库&#xff0c;如下&#xff1a; 一阶段 prepare 行为&#xff1a;在本地事务中&#xff0c;一并提交业务数据更新和相应回滚日志记录。二阶段 c…

Day37--动态规划--52. 携带研究材料(卡码网),518. 零钱兑换 II,377. 组合总和 Ⅳ,57. 爬楼梯(卡码网)

Day37–动态规划–52. 携带研究材料&#xff08;卡码网&#xff09;&#xff0c;518. 零钱兑换 II&#xff0c;377. 组合总和 Ⅳ&#xff0c;57. 爬楼梯&#xff08;卡码网&#xff09; 本文全部都是 ” 完全背包 “ 问题&#xff0c;从零到入坑&#xff0c;从入坑到爬出来。 本…

Linux文件操作

Linux文件Linux下的文件类型b 块设备文件---->存储类设备&#xff08;硬盘&#xff09;c 字符设备文件--->输入输出设备d 目录文件--->文件夹- 普通文件--> xxx.c xxx.h xxx.txt xxx.jpg xxx.mp4 a.outl 软链接文件-->快捷方式s 套接字文件-->网络通信p 管道…

Linux epoll 触发模式详解:LT vs ET

两种核心触发模式 1. 水平触发 (Level-Triggered, LT) 工作方式: 当文件描述符处于就绪状态时,epoll 会持续通知 只要状态未改变,每次调用 epoll_wait 都会返回该描述符 特点: c // 内核处理逻辑 (ep_send_events_proc) if (!(epi->event.events & EPOLLET)) { /…

STM32学习笔记6-TIM-2输出比较功能

第二部分&#xff0c;定时器的输出比较功能OC&#xff08;Output Compare&#xff09;输出比较输出比较可以通过比较CNT与CCR寄存器值的关系&#xff0c;来对输出电平进行置1、置0或翻转的操作&#xff0c;用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4…

MATLAB核心技巧:从入门到精通

一 1.数值 显示 格式 format style 设置 eg: pi format longE; or 2.清除指令 clc 清除命令行窗口 clear 清除工作区 cls 3.搜索路径设置 path(path,E:\ads\) or addpath 4.M文件 用户把要实现的命令写在一个以.m为扩展的文件中&#xff0c;然后由matlab系统进行解读…