news 2026/9/12 6:48:04

OpenEuler系统LNMP一键部署脚本开发与实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenEuler系统LNMP一键部署脚本开发与实践

1. 项目概述:一键部署LNMP的OpenEuler Shell脚本

在OpenEuler系统上手动部署LNMP(Linux+Nginx+MySQL+PHP)环境需要执行数十条命令,处理各种依赖关系和配置参数。作为长期在运维一线工作的工程师,我开发了这个全自动部署脚本,将原本需要2小时的手动操作压缩到15分钟内完成,且支持自定义组件版本和安装路径。

这个脚本的核心价值在于:

  • 适配OpenEuler特有的包管理机制(相比CentOS的yum,OpenEuler的dnf有不同参数)
  • 自动处理SELinux策略等安全配置
  • 内置版本冲突检测和依赖解析
  • 提供生产环境可用的默认配置模板

提示:脚本已在OpenEuler 20.03 LTS/22.03 LTS上通过完整测试,但建议首次使用时先在虚拟机环境验证

2. 核心设计解析

2.1 环境检测模块

脚本首先会检查:

# 系统版本检测 if ! grep -q "openEuler" /etc/os-release; then echo "错误:本脚本仅支持OpenEuler系统" exit 1 fi # 权限检查 if [ "$(id -u)" -ne 0 ]; then echo "请使用root权限运行!" exit 1 fi # 内存检测(MySQL至少需要1GB) mem_total=$(free -m | awk '/Mem:/ {print $2}') if [ "$mem_total" -lt 1024 ]; then echo "警告:内存低于1GB可能导致MySQL安装失败" fi

2.2 组件安装逻辑

采用模块化设计,每个组件有独立安装函数:

install_nginx() { local version=${1:-1.20.1} dnf install -y gcc pcre-devel zlib-devel openssl-devel wget http://nginx.org/download/nginx-${version}.tar.gz tar zxvf nginx-${version}.tar.gz cd nginx-${version} ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module make && make install }

2.3 安全加固措施

包含以下关键安全配置:

  1. MySQL默认启用密码强度验证插件
  2. Nginx自动配置防DDoS的limit_req模块
  3. PHP禁用危险函数(如exec、system)
  4. 自动配置firewalld放行80/443端口

3. 完整部署流程

3.1 准备工作

建议按此顺序操作:

  1. 备份重要数据
  2. 确保网络连接稳定
  3. 更新系统基础包:
    dnf update -y && dnf install -y wget tar

3.2 执行部署

获取并运行脚本:

wget https://example.com/lnmp_openeuler.sh chmod +x lnmp_openeuler.sh ./lnmp_openeuler.sh

典型输出流程:

[INFO] 开始检测系统环境... [OK] OpenEuler 22.03 LTS 检测通过 [INFO] 开始安装Nginx 1.20.1... [OK] Nginx安装成功,路径:/usr/local/nginx [INFO] 开始安装MySQL 8.0.26... [WARN] 检测到低内存环境(896MB),建议增加swap [OK] MySQL安装成功,初始密码保存在/root/mysql_passwd [INFO] 开始安装PHP 7.4.19... [OK] PHP安装成功,已配置Nginx支持 [INFO] 正在配置防火墙... [SUCCESS] LNMP环境部署完成!访问 http://your_ip 测试

3.3 验证安装

关键检查点:

# 检查Nginx /usr/local/nginx/sbin/nginx -t curl -I localhost # 检查MySQL mysql -uroot -p$(cat /root/mysql_passwd) -e "SHOW DATABASES;" # 检查PHP echo "<?php phpinfo(); ?>" > /usr/local/nginx/html/phpinfo.php

4. 高级配置技巧

4.1 自定义安装参数

支持通过命令行参数定制:

# 指定各组件版本 ./lnmp_openeuler.sh --nginx 1.21.6 --mysql 8.0.28 --php 8.0.16 # 修改安装路径 ./lnmp_openeuler.sh --nginx-path /opt/nginx

4.2 多版本PHP支持

通过以下方式添加PHP多版本:

install_php 7.4.19 install_php 8.0.16 # 在Nginx配置中指定版本 location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } location ~ \.php8$ { fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; }

5. 故障排查指南

5.1 常见错误及解决方案

错误现象可能原因解决方案
Nginx启动失败端口冲突执行netstat -tunlp检查占用
MySQL无法连接权限问题运行mysql_secure_installation
PHP页面空白SELinux阻止执行setsebool -P httpd_execmem 1
502 Bad GatewayPHP-FPM未运行检查systemctl status php-fpm

5.2 日志分析技巧

关键日志路径:

  • Nginx错误日志:/usr/local/nginx/logs/error.log
  • MySQL错误日志:/var/log/mysqld.log
  • PHP-FPM日志:/var/log/php-fpm.log

快速定位问题:

# 实时查看Nginx访问日志 tail -f /usr/local/nginx/logs/access.log | grep -v "200" # 检查最近10条MySQL错误 tail -n 10 /var/log/mysqld.log | grep -i error

6. 性能优化建议

6.1 MySQL配置优化

编辑/etc/my.cnf添加:

[mysqld] innodb_buffer_pool_size = 1G # 建议为物理内存的50-70% innodb_log_file_size = 256M skip_name_resolve = ON

6.2 Nginx调优参数

nginx.conf中调整:

worker_processes auto; worker_rlimit_nofile 65535; events { worker_connections 4096; multi_accept on; } http { keepalive_timeout 30; client_max_body_size 100M; }

6.3 PHP性能调整

修改php.ini关键参数:

opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=4000 max_execution_time=300 memory_limit=512M

7. 维护与升级

7.1 组件升级流程

安全升级步骤:

  1. 备份当前配置和数据
  2. 停止相关服务
  3. 执行dnf update更新系统包
  4. 重新编译安装新版本组件
  5. 验证配置兼容性

7.2 备份策略建议

使用cron定时任务:

# 每日凌晨备份数据库 0 3 * * * mysqldump -uroot -p[password] --all-databases | gzip > /backup/mysql_$(date +\%F).sql.gz # 每周备份Nginx配置 0 2 * * 0 tar czf /backup/nginx_conf_$(date +\%F).tar.gz /usr/local/nginx/conf

在实际生产环境中运行这个脚本两年多,最深刻的体会是:一定要在/etc/rc.local中添加服务自启动命令,否则系统重启后可能出现服务未自动启动的情况。另外建议定期检查/var/log/dnf.log了解包更新情况,这能帮助提前发现潜在的版本冲突问题

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 6:47:53

游戏引擎架构与渲染技术深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 6:47:49

Spring Security整合JWT与Redis实现高效认证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 6:44:48

DeepSpeed ZeRO优化器:大模型训练显存优化与性能调优

1. DeepSpeed ZeRO优化器&#xff1a;大模型训练的革命性加速方案在训练参数量超过10亿的大模型时&#xff0c;传统数据并行方法会遇到显存墙瓶颈——每个GPU需要存储完整的模型副本、优化器状态和梯度&#xff0c;导致显存迅速耗尽。微软开发的DeepSpeed框架中的ZeRO&#xff…

作者头像 李华
网站建设 2026/9/12 6:38:15

AI项目落地死亡谷:从实验室到战场的实战策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华