介绍
Common Ground 是一个演示用的社区网站。访客可以浏览 Linux Evening 活动、打开详情并阅读报名方法。下一个版本会将活动地点从 Room A 改为 Community Hall。你负责发布这份已准备好的更新,同时保留当前版本。
你将区分已安装版本与正在运行的版本,选择更新版,并测试真实网站。应用与发布辅助脚本均已提供,无需编写代码或配置 Nginx。具备基本终端操作能力即可。所有活动和地址均为虚构。
| 标签页 | 用途 |
|---|---|
| Website | 浏览真实运行的社区网站。 |
| Workstation | 使用准备好的工作目录和发布辅助脚本。 |
| Topology | 了解终端、文件和网站之间的关系。 |
每个实验都从各自独立的预配置环境开始。所有标签页均已准备就绪。
认识网站并准备更新
本步骤中,你将确认网站的正常行为,并在不改变访客所见内容的情况下安装新版本。先选择 Website 标签页。
了解正常的访问体验
首页介绍了 Common Ground,并在 On the horizon 下列出 Linux Evening。活动目前显示 Location: Room A。滚动到底部,小字页脚显示 Release: event-v1。发布版本就是保存下来的一套特定版本的网站文件。

在 Website 中点击 Linux Evening 活动行。详情页显示周二 18:00,地点为 Room A。点击该页中的 Registration instructions,阅读演示用的邮件报名流程。无需真正报名。点击顶部 COMMON GROUND 标志,在同一标签页内返回首页。
这些都是必须保留的用户访问路径。一个首页不能代表整个服务。
准备独立副本
切换到 Workstation。终端已经位于提供的发布工作目录 /home/labex/project/website-release。ls 列出当前目录中的名称:
ls
你会看到 packages、releases、current 和 release.sh。可以把 packages 理解为提供的待安装版本,把 releases 理解为已安装版本。current 决定向访客提供哪个版本,下一步会检查它。
release.sh 是提供的小型辅助脚本。bash 用于运行它;文件名之后的词指定动作,以及必要时指定版本。你是在操作脚本,无需编写 Bash 代码。
bash release.sh help
阅读简短帮助。install 将版本包复制到独立目录;deploy 选择网站要提供的版本;rollback 选择一个已安装版本。它们都不会判断业务页面是否正常。
列出提供的版本:
bash release.sh list
名称为 event-v1 和 event-v2。安装更新版:
bash release.sh install event-v2
预期输出:
Installed event-v2. The current website was not changed.
确认两个安装目录都存在。添加 releases 参数,就是告诉 ls 要列出哪个目录:
ls releases
应该能找到 event-v1 和 event-v2。安装独立副本保留了旧版本,但尚未发布更新。
切回 Website 并刷新页面。地点仍是 Room A,页脚仍显示 event-v1。这是预期现象:下一步才会选择更新版。
选择并发布更新版
本步骤中,你将更改网站选用的版本,同时保留恢复用版本。从 Workstation 开始。
理解版本选择
符号链接是文件系统中指向另一个位置的引用。这里的 current 是指向一个已安装版本目录的符号链接。提供的 Web 服务器 Nginx 通过这个链接读取网站文件。
readlink 输出符号链接的目标:
readlink current
预期输出:
releases/event-v1
这个相对路径表示本工作目录下 releases 中的 event-v1 目录。每个版本目录包含 HTML 页面、本地 CSS 样式、本地图形和一个小型版本文件,共同构成完整的网站版本。
cat 显示文件内容。发布之前,确认恢复用版本的身份:
cat releases/event-v1/version.txt
输出为 event-v1。保留这个完整目录。如果更新未通过检查,恢复方案就是重新选择它;重建或删除它都会破坏这个方案。
发布已安装的版本
选择更新版:
bash release.sh deploy event-v2
预期输出:
Selected event-v2. The server reports:
event-v2
Selection finished. Check the required pages before accepting this release.
辅助脚本复用已安装目录,通过临时链接和重命名切换 current,并实际请求版本信息。这避免了覆盖旧网站文件,但不能证明每个页面都正常,也不保证整个浏览器会话一次性切换版本。
检查当前选择:
readlink current
现在输出 releases/event-v2。
切换到 Website。如果打开的是其他页面,先点击 COMMON GROUND 标志返回首页,再刷新页面。On the horizon 下的活动现在显示 Location: Community Hall。页脚标识为 event-v2。

新地点和页脚说明网站已经变化。接受本次发布之前,仍需检查重要的用户访问路径。
验证网站并保留恢复能力
本步骤中,你将分别以访客和客户端的方式检查新版本,并确认旧版本仍可用于恢复。从 Website 开始。
沿着用户路径访问
点击 Linux Evening 活动行。详情侧栏应该显示 Community Hall,而不是 Room A。点击侧栏中的 Registration instructions。页面必须显示报名步骤和 events@example.test,不能是缺失页面提示。

在 Website 内点击 COMMON GROUND 返回首页。
检查真实 HTTP 响应
切换到 Workstation。HTTP 是网站使用的请求与响应协议。请求指定路径,例如 /registration.html;服务器返回状态和内容。状态 200 表示请求响应成功,状态 404 表示找不到所请求的页面。
curl 用于发送请求。-sS 隐藏进度信息,但仍显示连接错误。-o /dev/null 丢弃响应正文;/dev/null 是系统用于丢弃输出的位置。-w 输出后面的格式字符串。单引号把格式作为一个整体,%{http_code} 选取状态码,\n 为输出添加换行。
127.0.0.1 表示当前实验环境;端口 8081 是准备好的网站入口。请在 Workstation 中使用这个地址,而不是在自己电脑的终端中使用。末尾的 / 请求首页。
检查首页:
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8081/
结果为 200。
分别检查详情和报名路径:
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8081/events/linux-evening.html
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8081/registration.html
两者都必须返回 200。在 Website 中查看内容同样重要:返回错误页面的 200 响应不算成功。
也可以请求小型版本响应,并保留其正文:
curl -sS http://127.0.0.1:8081/version.txt
输出为 event-v2。这是有用的辅助证据,但版本标识不能代替前面的页面与链接检查。
保留恢复选项
原版本必须完整保留:
cat releases/event-v1/version.txt
它仍输出 event-v1。页面、样式和图形也要保留,仅修改版本标识并不能保存一个完整网站。
切换到 Topology。Homepage reachable 仅表示首页能够响应,不是整个发布的验收结论。现在你已独立检查用户路径,并保留了完整的恢复用版本。
总结
你安装了独立的发布版本,在不覆盖旧文件的情况下选择了它,并验证了真实页面和链接。同时,你保留了完整、已知正常的版本用于恢复。下一实验将练习:当新版本首页正常、关键用户路径却失效时,如何使用这个恢复选项。



