如何在Ubuntu上实现LNMP自动化运维
导读:Ubuntu 上 LNMP 自动化运维落地方案 一、目标与总体架构 目标:在 Ubuntu 上实现 LNMP(Nginx、MySQL、PHP-FPM) 的自动化部署、配置、发布、回滚、健康检查与自愈、监控与日志集中,以及批量与多环境管理。...
Ubuntu 上 LNMP 自动化运维落地方案
一、目标与总体架构
- 目标:在 Ubuntu 上实现 LNMP(Nginx、MySQL、PHP-FPM) 的自动化部署、配置、发布、回滚、健康检查与自愈、监控与日志集中,以及批量与多环境管理。
- 架构建议:
- 单机/小团队:使用 Shell/Ansible 做标准化安装与配置,配合 systemd 自愈与 CI/CD 做发布。
- 多机/中大型:使用 Ansible 批量编排,或 Docker 容器化部署;接入 Prometheus + Grafana 监控与 ELK 日志集中,形成闭环。
二、自动化部署与配置
-
方式一 Shell 一键脚本(适合快速落地与学习)
- 思路:更新系统、安装依赖、下载并编译 Nginx/PHP,二进制部署 MySQL 8,生成 systemd 单元,配置 Nginx 与 PHP-FPM 联动,输出 临时 root 密码 与访问地址。
- 要点:
- Nginx systemd 示例(适配编译安装路径):
- ExecStartPre 指向 /usr/local/nginx/sbin/nginx -t 做配置语法校验
- PIDFile 指向 /usr/local/nginx/logs/nginx.pid
- ExecReload 使用 /usr/local/nginx/sbin/nginx -s reload
- PHP-FPM 建议以 systemd 管理(Type=simple,ExecReload 发送 USR2 热重启)
- MySQL 8 二进制包初始化后从日志提取 临时密码,并执行 mysql_secure_installation 完成加固
- Nginx systemd 示例(适配编译安装路径):
- 适用:需要可控编译参数、内网离线环境、特定目录布局。
-
方式二 Ansible 编排(适合标准化与批量)
- 思路:编写 Playbook 安装 Nginx、MySQL、PHP-FPM,推送模板化配置(Jinja2),执行 mysql_secure_installation,并配置 systemd 开机自启与平滑重载。
- 示例任务片段(安装与配置 Nginx):
- apt 安装 Nginx
- template 推送 /etc/nginx/sites-available/default
- notify: restart nginx(Handler 执行 systemctl restart nginx)
- 运行:ansible-playbook lnmp.yml,可批量在多台 Ubuntu 主机上一致交付。
-
方式三 一键脚本与集成方案(适合快速交付与生态集成)
- 集成脚本/工具:如 lnmp-oneinstack 等,支持多发行版、多版本选择、SSL、虚拟主机、备份脚本等,适合快速交付与运维集成。
三、自愈与自动重启
-
首选 systemd 原生能力(推荐)
- 为 Nginx、MySQL、PHP-FPM 启用并配置 systemd 单元,设置 Restart=on-failure,即可在崩溃或异常退出时自动拉起;变更配置使用 systemctl reload 实现零中断(或最小中断)生效。
- Nginx 单元关键项:
- Type=forking,PIDFile=/run/nginx.pid
- ExecStartPre=/usr/sbin/nginx -t(语法校验)
- ExecReload=/bin/kill -s HUP $MAINPID(热加载)
- PHP-FPM 单元关键项:
- Type=simple,ExecReload=/bin/kill -USR2 $MAINPID(平滑重启)
- 建议:统一使用 systemd 管理,避免多套进程管理工具混用。
-
备选 Supervisor(多进程统一管控)
- 适用场景:需要跨语言/多进程统一托管与日志采集。
- 配置要点:
- 为 nginx、mysql、php-fpm 创建 program 段,开启 autostart=true、autorestart=true
- 指定 stdout/stderr 日志路径,便于集中采集
- 执行:supervisorctl reread & & supervisorctl update & & supervisorctl start all。
-
兜底脚本 + Cron(不建议作为首选)
- 思路:定时检测进程存活并启动,作为 systemd 失效时的兜底。
- 示例:每 5 分钟 检测并重启,日志落盘到 /var/log/lnmp_restart.log
- 风险:可能掩盖根因,建议仅作临时兜底并尽快修复根因。
四、CI/CD 持续交付与回滚
- Jenkins 流水线
- 阶段:拉取代码(Git)→ 安装依赖(Composer)→ 单元测试(PHPUnit)→ 构建产物 → 发布到 /var/www/ → 执行 systemctl reload nginx(必要时重启 PHP-FPM/MySQL)→ 冒烟测试(如访问 /health 或 phpinfo 页面)。
- 安全:使用 SSH 密钥 或凭据插件,限制目标目录与权限,生产环境采用 蓝绿/金丝雀 发布策略降低风险。
- GitLab CI/CD
- 使用 .gitlab-ci.yml 定义 build/test/deploy 阶段,通过 only: main 限定主线发布;Runner 以 SSH 或 K8s Executor 部署到目标主机并重启服务。
- 回滚策略
- 代码层:基于 Git 标签/提交回滚
- 发布层:备份上一版目录与数据库(快照/导出),出现故障时一键回滚;容器化可用镜像版本回滚。
五、监控、日志与批量运维
- 监控与告警
- 主机与应用指标:部署 Node Exporter → Prometheus 采集 → Grafana 可视化与阈值告警(如 Nginx 5xx、PHP-FPM 进程异常、MySQL 连接数/慢查询)。
- 日志集中
- 收集 Nginx access/error、PHP-FPM、MySQL error 等日志到 ELK(Elasticsearch、Logstash、Kibana) 或兼容栈,便于检索、分析与可视化。
- 批量与多环境
- 使用 Ansible Inventory 管理多环境(dev/staging/prod),配合 Tag 与 Playbook 分层执行;镜像化场景可用 Docker Compose 或 Kubernetes 管理多实例与滚动升级。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上实现LNMP自动化运维
本文地址: https://pptw.com/jishu/766220.html
