本文目录导读:

- 📖 目录导读
- LNMP环境核心组件解析
- 为什么要用Shell脚本一键部署?
- 一键安装脚本的完整代码与逻辑
- 分步执行详解:关键参数说明
- 常见问题Q&A
- 优化与扩展:加入Redis、调整参数
- 总结:自动化部署的“道”与“器”
Shell脚本一键安装LNMP环境:从零搭建高效服务器实战指南
📖 目录导读
- LNMP环境核心组件解析
- 为什么要用Shell脚本自动化部署?
- 一键安装脚本的完整代码与逻辑
- 分步执行详解:Nginx、MySQL、PHP的自动化配置
- 常见问题Q&A:安装失败、端口冲突、数据库连接错误
- 优化与扩展:添加Redis、调整PHP-FPM参数
- 自动化部署的“道”与“器”
LNMP环境核心组件解析
LNMP是Linux+Nginx+MySQL+PHP的首字母缩写,专为高性能Web服务器设计,与LAMP(Apache替代Nginx)相比,Nginx处理静态文件更快,占用内存更少,典型工作流程为:用户请求→Nginx接收→动态请求转发至PHP-FPM→PHP程序处理MySQL数据库操作。
为什么要用Shell脚本一键部署?
手动安装LNMP需要多个步骤:编译安装Nginx、配置MySQL、修改PHP-FPM参数、设置用户权限等,新手易错漏,如忘记安装PHP扩展、MySQL未设置密码安全策略等,Shell脚本通过封装所有命令,实现:
- 时间节省:从手动60分钟缩短至5分钟
- 版本一致:避免不同服务器因软件版本差异导致的兼容性问题
- 可重复性:初始化新服务器时只需运行脚本
一键安装脚本的完整代码与逻辑
以下脚本支持CentOS 7/8、Ubuntu 20.04/22.04(自动检测系统)、使用官方源安装Nginx 1.24、MySQL 8.0、PHP 8.2。注意:请勿在生产服务器直接运行,建议先在测试环境验证。
#!/bin/bash
# LNMP一键安装脚本 v2.0 - 适配CentOS/Ubuntu
set -e # 遇到错误立即退出
# 颜色输出函数
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${GREEN}正在检测系统...${NC}"
# 1. 系统检查与源更新
if [ -f /etc/redhat-release ]; then
OS="centos"
yum update -y
yum install epel-release -y
elif [ -f /etc/lsb-release ]; then
OS="ubuntu"
apt update -y
apt install software-properties-common -y
add-apt-repository ppa:ondrej/php -y
else
echo -e "${RED}不支持的系统${NC}"
exit 1
fi
# 2. 安装Nginx
echo -e "${GREEN}正在安装Nginx...${NC}"
if [ "$OS" == "centos" ]; then
yum install nginx -y
else
apt install nginx -y
fi
# 3. 安装MySQL 8.0(自动配置密码策略)
echo -e "${GREEN}正在安装MySQL...${NC}"
if [ "$OS" == "centos" ]; then
yum install mysql-server -y
else
apt install mysql-server -y
fi
# 安全初始化:移除匿名用户、禁止root远程登录
mysql_secure_installation <<EOF
y
test_password
test_password
y
y
y
y
EOF
# 4. 安装PHP 8.2及相关扩展
echo -e "${GREEN}正在安装PHP...${NC}"
if [ "$OS" == "centos" ]; then
yum install php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-json -y
else
apt install php8.2-fpm php8.2-mysql php8.2-gd php8.2-mbstring php8.2-xml php8.2-json -y
fi
# 5. 启动服务并设置开机自启
systemctl start nginx mysql php8.2-fpm
systemctl enable nginx mysql php8.2-fpm
# 6. 验证安装
echo -e "${GREEN}安装完成,测试页面已创建${NC}"
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
chmod 755 /var/www/html/info.php
echo "请访问:http://服务器IP/info.php 查看PHP信息"
分步执行详解:关键参数说明
- nginx配置优化:默认站点根目录为
/var/www/html,需修改/etc/nginx/nginx.conf的worker_processes为CPU核心数 - MySQL安全:脚本中已自动执行
mysql_secure_installation,但密码设置为硬编码(示例中为test_password),生产环境必须替换为随机密码 - PHP性能:修改
/etc/php/8.2/fpm/php.ini中的memory_limit = 128M、upload_max_filesize = 20M
常见问题Q&A
Q1:脚本执行后Nginx启动失败,报错“port 80 already in use”
- 检查是否有Apache或其他服务占用端口:
netstat -tlnp | grep :80 - 若已安装Apache,先停止并卸载:
systemctl stop httpd && yum remove httpd -y
Q2:MySQL安装完成后无法通过root密码登录
- 停止MySQL服务:
systemctl stop mysql - 以安全模式启动跳过权限验证:
mysqld_safe --skip-grant-tables & - 修改root密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
Q3:PHP页面显示“502 Bad Gateway”
- 通常为PHP-FPM未启动或套接字错误,检查:
systemctl status php8.2-fpm - 查看错误日志:
tail -f /var/log/php8.2-fpm.log
优化与扩展:加入Redis、调整参数
一键脚本可扩展为“LNMPR”(增加Redis缓存),在“安装PHP”后添加:
# 安装Redis
echo -e "${GREEN}安装Redis...${NC}"
if [ "$OS" == "centos" ]; then
yum install redis -y
else
apt install redis-server -y
fi
# 安装PHP Redis扩展
pecl install redis
echo "extension=redis.so" > /etc/php/8.2/mods-available/redis.ini
phpenmod redis
systemctl restart php8.2-fpm nginx
自动化部署的“道”与“器”
Shell脚本一键安装LNMP不仅是一个工具(器),更体现了“自动化运维”的理念(道),通过封装重复劳动,开发者能专注于业务代码而非环境配置,但脚本不等于万无一失——生产环境需要:
- 版本锁死:在脚本中明确指定软件版本号(如
nginx-1.24),避免源更新导致不兼容 - 安全加固:MySQL密码不应硬编码,建议首次运行脚本时通过
read -p交互式输入 - 日志记录:添加
exec 2> /var/log/lnmp_install.log捕获所有错误输出
验证脚本的最佳方式:在虚拟机中运行一次,确认所有服务正常后,再应用至生产服务器。