外观
实训 05:部署并排查隔离 LNMP
约 970 字大约 3 分钟
云计算实训第05次课
2026-07-30
标准路径在个人 ECS 上完成;资源暂不可用时,只完成保底材料分析,不把给定输出冒充个人运行结果。
一、完成目标
- 启动 Nginx、WordPress PHP-FPM、MariaDB 三项服务;
- Web 入口只绑定远端回环地址,数据库不映射宿主机端口;
- 通过 SSH 隧道打开 WordPress 页面;
- 停止并恢复 PHP,保留 502/504、日志和回归证据;
- 完成 Word 报告并上传智慧职教。
二、安全边界
- 只在
~/cloud-course/lab-05操作。 - 项目名保持
cloud-course-lab-05,不要停止其他 Compose 项目。 - 不开放公网 3306,不提交
.env。 - 不使用现有业务端口;18005 被占用时先取证,再改成教师指定的课程端口。
- 默认使用
docker compose down停止服务,不使用--volumes删除数据。
三、准备 starter
把 starter/ 中的 compose.yaml、nginx-wordpress.conf 和 .env.example 传到 ECS:
[ECS] mkdir -p ~/cloud-course/lab-05
[ECS] cd ~/cloud-course/lab-05
[ECS] cp .env.example .env
[ECS] chmod 600 .env编辑 .env,为两个数据库密码填写不同的随机值。截图不得包含密码行。
四、任务 1:环境预检
运行:
[ECS] free -h
[ECS] df -hT /
[ECS] docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
[ECS] ss -lnt 'sport = :18005'检查点:
- 可用内存建议不少于 700 MiB;
- 根文件系统不能处于容量告警状态;
- 能指出哪些容器不属于本课;
- 18005 当前没有监听。
截图 1:资源、已有容器和端口预检,并写明“未停止其他项目”。
五、任务 2:检查并启动
[ECS] docker compose config --quiet
[ECS] docker compose up -d
[ECS] docker compose ps如果数据库仍显示 health: starting,等待十秒后只重跑 docker compose ps,不要反复执行 up。
检查点:
db最终为 healthy;php保持运行;web的端口是127.0.0.1:18005->80/tcp。
截图 2:三项服务和端口状态。
六、任务 3:验证服务链
[ECS] docker compose exec web getent hosts php db
[ECS] ss -lnt 'sport = :18005'
[ECS] curl -I http://127.0.0.1:18005/记录:
php和db是否可以通过服务名解析;- HTTP 状态是 200 还是跳转;
- 三条证据分别证明什么。
截图 3:服务名、端口和 HTTP 结果。
七、任务 4:从浏览器访问
在 WSL 保持以下命令运行:
[WSL] ssh -N -L 18005:127.0.0.1:18005 你的ECS登录目标Windows 浏览器打开 http://127.0.0.1:18005/。不要在 Word 中填写管理员密码。
截图 4:WordPress 安装页或首页。地址栏不得出现公网地址。
八、任务 5:PHP 故障闭环
保存正常状态:
[ECS] curl -sS -o /dev/null -w 'before=%{http_code}\n' http://127.0.0.1:18005/只停止本项目的 PHP:
[ECS] docker compose stop php请求并取日志:
[ECS] curl -sS -o /dev/null -w 'during=%{http_code}\n' http://127.0.0.1:18005/
[ECS] docker compose logs --tail 12 web恢复并验证:
[ECS] docker compose start php
[ECS] docker compose ps
[ECS] curl -sS -o /dev/null -w 'after=%{http_code}\n' http://127.0.0.1:18005/截图 5:停止 PHP 后的 502/504 与 Nginx 日志。
截图 6:PHP 恢复后的状态和 HTTP 结果。
故障记录必须包含:
现象:
请求到达了哪一层:
关键日志:
原因:
恢复操作:
回归验证:九、任务 6:识别持久化对象
[ECS] docker volume ls --filter label=com.docker.compose.project=cloud-course-lab-05写出:
- 哪个卷保存 WordPress 文件;
- 哪个卷保存数据库;
- 为什么“卷存在”还不能等同于“已经备份”。
十、验收与清理
在实训目录运行:
[ECS] bash verify.sh教师验收后停止服务:
[ECS] docker compose down再次确认没有课程端口:
[ECS] ss -lnt 'sport = :18005'最终上传:
班级_学号_姓名_第05次课_LNMP与WordPress部署报告.docx只提交 Word,不提交 .env、密码、数据卷导出或服务器地址。
