第一步:准备环境 & 准备脚本文件
1. 你在 CentOS 7 的服务器/虚拟机里打开终端,确认你有 root 权限或者能用 sudo
。
输入下面命令确认你的系统版本:
bash
cat /etc/centos-release
你应该看到类似:
CentOS Linux release 7.9.2009 (Core)
2. 用 vim
或 nano
创建脚本文件
假设文件名叫 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 脚本参数处理与流程控制
实践自动化部署思路,提高了实际动手能力和问题排查能力