精读笔记 · 第30章 Shell 实战:自动化部署 LAMP 应用
大约 4 分钟
精读笔记 · 第30章 Shell 实战:自动化部署 LAMP 应用
精读整理自 RHCE9 随堂讲义(原文字版 仅 1 页大纲)|同名视频(第02套,第30章仅 1 节:综合实战) 关联知识文件:
分章笔记/01-Linux/02-07-Shell编程;基础服务前置章节:第16/17/19章(文件/Web/数据库)
一、章节定位
- 本章是“Shell 编程及自动化运维实现”的收尾章,以一段 SHELL 脚本自动化部署 LAMP 环境为综合实战,把第 25~29 章(变量/流控/循环/数组/三剑客)与前面 Linux 服务章节(Apache、MySQL、Nginx 等)串起来。
- 官方 PPT 仅 1 页提纲,真正的实现细节在视频演示与手写脚本中;精读重点=掌握“部署类脚本”的通用套路,再迁移到三种业务。
二、三个在线部署实战
| 实战 | 业务形态 | 典型技术栈 | 主要演练点 |
|---|---|---|---|
| 之一 论坛系统(discuz.sh) | 在线论坛(Discuz) | LAMP:Linux + Apache + MySQL/MariaDB + PHP | 下载解压、建库授权、站点配置、一键上线 |
| 之二 网校系统 | 在线教育/网校 | LAMP 或 LNMP | 环境差异下的部署参数化、安装向导脚本化 |
| 之三 电子商城 | 电商网站 | LAMP/LNMP | 多模块组合安装、服务依赖检查与回显 |
三、部署脚本通用套路(学习主线)
- 环境准备:检查 root 权限、关闭防火墙/SELinux、yum 安装所需软件包(httpd/mariadb/php 等)并启动服务。
- 准备程序包:下载/上传源码包到约定目录,解压并把站点文件拷贝到网站根目录(如
/var/www/html),设置属主属组与权限。 - 初始化数据库:启动 mariadb 后用 SQL 建库建用户授权(forum 库 + 专用账号),再执行业务初始化。
- 配置与联调:写 Apache 虚拟主机/PHP 配置,用 sed 批量改配置文件(呼应第29章);浏览器验证页面可访问。
- 封装与回显:整段逻辑写进一个
xxx.sh,加入read提示、if判断上一步是否成功、echo输出进度;失败即exit中断。
- 本质=“把手工敲过的命令按顺序+判断装进脚本”,与第 25~28 章变量、函数、case 菜单、while/for、break/continue 直接复用。
四、命令速查表(实战骨架)
| 环节 | 常用命令 |
|---|---|
| 权限与环境 | id -u、systemctl stop firewalld、setenforce 0 |
| 安装软件 | yum -y install httpd mariadb-server mariadb php php-mysql |
| 启动服务 | systemctl start/enable httpd mariadb |
| 解压与拷贝 | tar xf、cp -a、chown -R apache:apache |
| 初始化数据库 | mysql -e "create database ...; grant all on ..." |
| 改配置 | sed -ri 's#...#...#g'、grep -v '^#' |
| 过程控制 | read -p、if [ $? -ne 0 ]; then exit; fi、case 菜单、函数封装 |
| 一键执行 | bash discuz.sh 或 sh xxx.sh |
五、易错点
- 大纲页≠全部内容:三个“在线部署”的细节在视频/脚本里,笔记只给骨架;要补齐需按视频画面学习(抽帧整理)或补录脚本。
- 部署脚本必须带失败即停判断(
if [ $? -ne 0 ]; then echo 失败; exit 1; fi),否则中间报错仍会继续执行。 - 数据库授权主机与密码要一致(
grant ... identified by '密码'),否则网站连不上库。 - 防火墙/SELinux 不处理时,浏览器常超时或 403——先排环境再排脚本。
- 下载源(如 Discuz 包)可能依赖外网/镜像,脚本里要留超时与重试或本地包兜底。
六、实操清单
按“论坛→网校→商城”递进复刻:手工搭一次 LAMP+Discuz(对照第16/17/19章)→ 把每个手工步骤写成函数(install_env/deploy_site/init_db/config_web)→ 主流程加菜单/提示/失败判断 → 用变量把站点名、端口、库名参数化(不同项目改参数即用)→ 最终产出 discuz.sh 一键脚本并在干净虚拟机验证幂等性(重复执行不报错)。
七、本章自测
- 部署类脚本的通用五个环节是什么?
- 为什么每一步后要检查
$??不检查会有什么后果? - LAMP 中 Apache、MySQL、PHP 三者如何协作?
- 如何让同一脚本适配“论坛/网校/商城”三种项目(参数化思路)?
- 本章与第 25~29 章哪些知识点直接相关?
