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

OpenEuler系统LNMP一键部署脚本开发与实践 1. 项目概述一键部署LNMP的OpenEuler Shell脚本在OpenEuler系统上手动部署LNMPLinuxNginxMySQLPHP环境需要执行数十条命令处理各种依赖关系和配置参数。作为长期在运维一线工作的工程师我开发了这个全自动部署脚本将原本需要2小时的手动操作压缩到15分钟内完成且支持自定义组件版本和安装路径。这个脚本的核心价值在于适配OpenEuler特有的包管理机制相比CentOS的yumOpenEuler的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 tar3.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_installationPHP页面空白SELinux阻止执行setsebool -P httpd_execmem 1502 Bad GatewayPHP-FPM未运行检查systemctl status php-fpm5.2 日志分析技巧关键日志路径Nginx错误日志/usr/local/nginx/logs/error.logMySQL错误日志/var/log/mysqld.logPHP-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.enable1 opcache.memory_consumption128 opcache.max_accelerated_files4000 max_execution_time300 memory_limit512M7. 维护与升级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了解包更新情况这能帮助提前发现潜在的版本冲突问题