自动化一键部署 LNMP 环境

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

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

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

bash 复制代码
cat /etc/centos-release

你应该看到类似:

CentOS Linux release 7.9.2009 (Core)


2. 用 vimnano 创建脚本文件

假设文件名叫 lnmp_install.sh

bash 复制代码
vim lnmp_install.sh

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

i 进入编辑模式,写入:

bash 复制代码
#!/bin/bash

echo "Hello LNMP"

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


3. 给予脚本执行权限

bash 复制代码
chmod +x lnmp_install.sh

4. 运行脚本试试

bash 复制代码
./lnmp_install.sh

你应该看到输出:

Hello LNMP

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

打开刚才的脚本:

bash 复制代码
vim lnmp_install.sh

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

bash 复制代码
#!/bin/bash

echo "Hello LNMP"

echo ">>> 安装 Nginx..."
yum install -y epel-release
yum install -y nginx

echo ">>> 启动并设置 Nginx 开机自启..."
systemctl start nginx
systemctl enable nginx

echo ">>> 检查 Nginx 状态..."
systemctl status nginx --no-pager

2. 保存并退出

Esc,输入 :wq 回车。


3. 运行脚本

bash 复制代码
./lnmp_install.sh

4. 验证 Nginx 是否成功安装

bash 复制代码
curl -I http://localhost

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

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


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

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


1. 编辑脚本

打开脚本:

bash 复制代码
vim lnmp_install.sh

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

bash 复制代码
echo ">>> 安装 MariaDB(MySQL兼容版)..."
yum install -y mariadb-server mariadb

echo ">>> 启动并设置 MariaDB 开机自启..."
systemctl start mariadb
systemctl enable mariadb

echo ">>> 初始化 MariaDB(设置 root 密码并开启安全选项)..."
DB_ROOT_PASS="123456"  # 这里可以换成你想要的密码
mysql_secure_installation <<EOF

y
$DB_ROOT_PASS
$DB_ROOT_PASS
y
y
y
y
EOF

2. 保存并退出

Esc:wq → 回车。


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

bash 复制代码
./lnmp_install.sh 

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

复制代码
bash 复制代码
mysql -uroot -p

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

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

说明数据库安装成功。


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

1. 编辑脚本

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

bash 复制代码
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-cli

echo ">>> 启动并设置 PHP-FPM 开机自启..."
systemctl start php-fpm
systemctl enable php-fpm

echo ">>> 配置 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;
    }
}
EOF

echo ">>> 创建 PHP 测试页面..."
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/index.php

echo ">>> 重新加载 Nginx..."
systemctl reload nginx

2. 保存并退出

Esc:wq → 回车。


3. 运行脚本

bash 复制代码
./lnmp_install.sh

4. 验证 LNMP 是否成功

方式 1:命令行验证

bash 复制代码
curl -I http://localhost

返回 200 OK 表示页面存在。

方式 2:浏览器访问

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

http://你的服务器IP

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

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

1. 编辑脚本

打开你的 lnmp_install.sh

bash 复制代码
vim lnmp_install.sh

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

bash 复制代码
cho ">>> 配置防火墙,放行 80 和 443 端口..."
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

echo ">>> 检测 LNMP 是否正常工作..."
sleep 3
if curl -s -I http://localhost | grep -q "200 OK"; then
    echo "✅ LNMP 部署成功!可以访问 http://你的服务器IP"
else
    echo "❌ LNMP 部署失败,请检查 Nginx/PHP/MySQL 日志"
fi

2. 保存退出

Esc:wq → 回车。


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

bash 复制代码
./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 脚本参数处理与流程控制

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

相关推荐
荣光波比10 小时前
ZooKeeper与Kafka分布式协调系统实战指南:从基础原理到集群部署
运维·分布式·zookeeper·kafka·云计算
三坛海会大神55510 小时前
ELK分析系统详解
运维·elk
小何好运暴富开心幸福11 小时前
操作系统之初识Linux
linux·运维·服务器·bash
半导体守望者11 小时前
TR帝尔编码器GSD文件 PROFIBUS XML PROFINET EtherCAT 文件 ADH CDH CMV等
xml·经验分享·笔记·机器人·自动化·制造
北京耐用通信13 小时前
一“网”跨协议,万“设”皆可通!耐达讯自动化Modbus TCP转Profibus ,让控制无界,让能源有道。
网络·人工智能·网络协议·自动化·信息与通信
晓梦初醒p13 小时前
finalshell 连接服务器报错channel is not opened
linux·运维·服务器
准时准点睡觉13 小时前
HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容——错误代码:0x00000000
运维·服务器·iis·asp.net
cpsvps14 小时前
环境变量管理于美国服务器多环境部署的实施标准
运维·服务器·数据库
IvorySQL14 小时前
【生态再升级】IvorySQL 4.5 与银河麒麟高级服务器操作系统V11完成适配认证!
运维·服务器·数据库·postgresql·ivorysql
网硕互联的小客服14 小时前
服务器密码错误被锁定如何解决?
运维·服务器·网络·安全