centos

centos lnmp如何实现自动部署

小樊
51
2025-10-09 05:57:06
栏目: 智能运维

CentOS下LNMP自动部署的实现方法

在CentOS系统中,实现LNMP(Linux+Nginx+MySQL/MariaDB+PHP)环境的自动部署,核心是通过自动化脚本完成软件安装、配置及服务管理,减少手动操作步骤。以下是具体实现方案:

一、基础准备

  1. 系统要求:确保CentOS系统为7/8版本(或其他兼容版本),且已更新至最新状态(yum update -y)。
  2. 权限要求:脚本需以root用户运行(或通过sudo提权),避免权限不足导致安装失败。
  3. 网络要求:服务器需联网,以便下载依赖包及软件源码包。

二、自动部署脚本实现步骤

1. 编写Shell脚本

创建一个Shell脚本文件(如lnmp_auto_deploy.sh),内容包含依赖安装、Nginx部署、MySQL/MariaDB部署、PHP部署及服务配置等环节。以下是一个简化但完整的示例:

#!/bin/bash
# LNMP自动部署脚本(CentOS 7/8适用)
# 功能:自动安装Nginx、MariaDB、PHP及基础配置

# 检查root权限
if [ "$(id -u)" != "0" ]; then
    echo "错误:必须使用root用户运行此脚本!"
    exit 1
fi

# 安装系统依赖
install_dependencies() {
    echo "正在安装系统依赖..."
    yum install -y epel-release wget gcc make cmake openssl-devel pcre-devel zlib-devel \
                libxml2-devel libjpeg-devel libpng-devel freetype-devel \
                curl-devel libxslt-devel bzip2-devel sqlite-devel
    yum groupinstall -y "Development Tools"
}

# 安装Nginx
install_nginx() {
    echo "正在安装Nginx..."
    yum install -y nginx
    systemctl start nginx
    systemctl enable nginx
    echo "Nginx安装完成,状态:$(systemctl is-active nginx)"
}

# 安装MariaDB(MySQL兼容)
install_mariadb() {
    echo "正在安装MariaDB..."
    yum install -y mariadb-server mariadb
    systemctl start mariadb
    systemctl enable mariadb
    
    # 安全初始化(设置root密码及移除匿名用户)
    DB_ROOT_PASS="your_root_password"  # 替换为你的root密码
    mysql_secure_installation <<EOF
$DB_ROOT_PASS
$DB_ROOT_PASS
y
y
y
y
EOF
    echo "MariaDB安装完成,root密码:$DB_ROOT_PASS"
}

# 安装PHP及扩展
install_php() {
    echo "正在安装PHP..."
    # 添加Remi仓库(支持PHP多版本)
    yum install -y yum-utils
    yum-config-manager --enable remi-php82  # 替换为所需PHP版本(如remi-php74、remi-php81)
    
    # 安装PHP及常用扩展
    yum install -y php php-fpm php-mysqlnd php-opcache php-gd php-curl php-mbstring php-xml
    systemctl start php-fpm
    systemctl enable php-fpm
    
    # 配置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
    systemctl reload nginx
    echo "PHP安装完成,Nginx已配置支持PHP。"
}

# 主流程
main() {
    install_dependencies
    install_nginx
    install_mariadb
    install_php
    
    # 验证部署
    echo "正在验证LNMP环境..."
    if curl -s -I http://localhost | grep -q "200 OK"; then
        echo "✅ LNMP环境部署成功!可通过浏览器访问http://服务器IP查看效果。"
    else
        echo "❌ LNMP环境部署失败,请检查日志排查问题。"
    fi
}

# 执行主流程
main

2. 赋予脚本执行权限

保存脚本后,通过chmod命令赋予执行权限:

chmod +x lnmp_auto_deploy.sh

3. 运行脚本

执行脚本(需root权限):

./lnmp_auto_deploy.sh

4. 验证部署

三、进阶优化方向

  1. 参数化配置:将脚本中的版本号(如Nginx、PHP、MariaDB)、密码(如root密码)、安装目录等改为变量,通过命令行参数传入,提升脚本灵活性。
  2. 端口冲突检测:在安装前添加端口占用检测逻辑(如检查80、3306、9000端口是否被占用),避免服务启动失败。
  3. 防火墙自动配置:通过firewall-cmd命令自动放行HTTP(80)、HTTPS(443)端口,无需手动操作。
  4. 日志记录:将脚本执行过程中的输出重定向到日志文件(如./lnmp_auto_deploy.sh > lnmp_deploy.log 2>&1),便于后续排查问题。

四、注意事项

通过上述步骤,可实现CentOS系统下LNMP环境的快速、自动化部署,大幅减少手动操作时间,提升运维效率。

0
看了该问题的人还看了