Shell脚本如何一键安装LNMP环境

wen 实用脚本 2

本文目录导读:

Shell脚本如何一键安装LNMP环境

  1. 📖 目录导读
  2. LNMP环境核心组件解析
  3. 为什么要用Shell脚本一键部署?
  4. 一键安装脚本的完整代码与逻辑
  5. 分步执行详解:关键参数说明
  6. 常见问题Q&A
  7. 优化与扩展:加入Redis、调整参数
  8. 总结:自动化部署的“道”与“器”

Shell脚本一键安装LNMP环境:从零搭建高效服务器实战指南

📖 目录导读

  1. LNMP环境核心组件解析
  2. 为什么要用Shell脚本自动化部署?
  3. 一键安装脚本的完整代码与逻辑
  4. 分步执行详解:Nginx、MySQL、PHP的自动化配置
  5. 常见问题Q&A:安装失败、端口冲突、数据库连接错误
  6. 优化与扩展:添加Redis、调整PHP-FPM参数
  7. 自动化部署的“道”与“器”

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.confworker_processes为CPU核心数
  • MySQL安全:脚本中已自动执行mysql_secure_installation,但密码设置为硬编码(示例中为test_password),生产环境必须替换为随机密码
  • PHP性能:修改/etc/php/8.2/fpm/php.ini中的memory_limit = 128Mupload_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捕获所有错误输出

验证脚本的最佳方式:在虚拟机中运行一次,确认所有服务正常后,再应用至生产服务器。

抱歉,评论功能暂时关闭!