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安装失败" fi2.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 安全加固措施
包含以下关键安全配置:
- MySQL默认启用密码强度验证插件
- Nginx自动配置防DDoS的limit_req模块
- PHP禁用危险函数(如exec、system)
- 自动配置firewalld放行80/443端口
3. 完整部署流程
3.1 准备工作
建议按此顺序操作:
- 备份重要数据
- 确保网络连接稳定
- 更新系统基础包:
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.php4. 高级配置技巧
4.1 自定义安装参数
支持通过命令行参数定制:
# 指定各组件版本 ./lnmp_openeuler.sh --nginx 1.21.6 --mysql 8.0.28 --php 8.0.16 # 修改安装路径 ./lnmp_openeuler.sh --nginx-path /opt/nginx4.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 Gateway | PHP-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 error6. 性能优化建议
6.1 MySQL配置优化
编辑/etc/my.cnf添加:
[mysqld] innodb_buffer_pool_size = 1G # 建议为物理内存的50-70% innodb_log_file_size = 256M skip_name_resolve = ON6.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=512M7. 维护与升级
7.1 组件升级流程
安全升级步骤:
- 备份当前配置和数据
- 停止相关服务
- 执行
dnf update更新系统包 - 重新编译安装新版本组件
- 验证配置兼容性
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了解包更新情况,这能帮助提前发现潜在的版本冲突问题