# 软件项目管理课件 · 腾讯云发布记录

> 更新时间：2026-09-16（第 2 章上线）｜ 服务器：**111.231.0.226**（OpenCloudOS 9.6，与备课平台 ai-lesson-prep 同机）
> 服务：`spm-web.service`（systemd，静态站，端口 **1234**，开机自启＋崩溃重启）
> 公网访问：**http://111.231.0.226:1234/**（**需腾讯云安全组放行 TCP 1234 入站**——放行前公网不通，服务器本机 127.0.0.1:1234 正常）

## 一、部署内容

| 项 | 值 |
|---|---|
| 本地源 | `dl-hub/22-软件项目管理教学包/课件成品-HTML/软件项目管理-16周课件/` |
| 服务器路径 | `/var/www/spm/`（index.html＝课程主页；lecture1/ 第 1 次课 52 页；**lecture2/ 第 2 次课 28 页（2026-09-16 上线）**；lecture3–16/ 占位页） |
| 服务方式 | `python3 -m http.server 1234 --bind 0.0.0.0 --directory /var/www/spm` |
| 打包范围 | index.html + styles.css + logo.png + assets/ + lecture1–16/（不含 _素材 与生成脚本） |
| 大小 | 约 7.9MB（压缩包）/ 9.0MB（解压后） |

## 二、运维命令（SSH root@111.231.0.226，密码见本机 ssh_cloud.sh）

```bash
systemctl status spm-web        # 状态
systemctl restart spm-web       # 重启
journalctl -u spm-web -f        # 日志
```

## 三、更新课件（改完本地后重新发布）

```bash
# 本机（课件目录下，排除素材与脚本）
cd "dl-hub/22-软件项目管理教学包/课件成品-HTML/软件项目管理-16周课件"
tar czf /tmp/spm-courseware.tar.gz --exclude='_素材' --exclude='*.py' --exclude='__pycache__' index.html styles.css logo.png assets lecture*
# 上传
~/Downloads/scp_cloud.sh /tmp/spm-courseware.tar.gz /root/spm-courseware.tar.gz
# 服务器解压覆盖
~/Downloads/ssh_cloud.sh 'tar xzf /root/spm-courseware.tar.gz -C /var/www/spm && systemctl restart spm-web'
```

## 四、注意事项

- 80 端口被 ai-lesson-prep 备课平台占用，故课件用 1234 独立端口；两者互不影响。
- 腾讯云安全组需放行 **TCP 1234 入站**（0.0.0.0/0 或限定来源）；服务器端 firewalld 当前未启用，无需额外配置。
- 若要 HTTPS：可后续上 nginx 反代 443 → 127.0.0.1:1234（需域名＋证书）。
- 第 3–16 次课目前为占位页；逐课制作后按第三节流程重新发布即可。
- **幻灯片返回入口修复**（2026-09-16，用户反馈"第二章/第一章没有返回目录的地方"）：
  - 原因：原返回入口只有右上角一条 **30% 透明度的小字面包屑**（`主页 / 第N次课 / 页码`），在深色背景上几乎不可见。
  - 改法（`_build.py` 的 `slide_page()` + `styles.css`）：
    ① **页眉文字"软件项目管理 · 第 N 次课"变成按钮**（悬停显示"☰ 返回本课目录"，白底蓝字高亮），点击返回**本课目录** `index.html`；
    ② **页眉 logo 图标**点击返回**课程主页** `../index.html`；
    ③ 右上角面包屑改为**深色胶囊**（🏠 课程主页 / 第 N 次课目录 / 第 N.M 页），清晰可见；
    ④ 新增**快捷键 Esc** 返回本课目录（底部提示同步更新为"← → 翻页 ｜ Esc 返回本课目录"）。
  - 样式表版本 `styles.css?v=20260916b` → **`?v=20260916c`**（破除浏览器缓存，否则改动不可见）；lecture1/lecture2 与占位页全部重新生成后发布。
  - 线上验证（Chromium 实测）：lecture1/1.12 与 lecture2/2.6 点击页眉 → 本课目录 ✅、按 Esc → 本课目录 ✅、logo → 课程主页 ✅。
  - 备课台同步保护：预览 iframe 内点课件里的链接不再打断备课台，改为**新标签打开**。
- **第 2 次课制作**（2026-09-16）：`_build2.py` 一键生成 lecture2（28 页，复用 lecture1 模板），内容来自学校 PPT 第 2 章 28 页＋教案第 2 次课思政点（遵纪守法/程序合规），含智能库存管理系统案例、干系人表、章程 11 项、启动会纪要模板；生成后按第三节打包发布（本次含 quiz.js）。
- **幻灯片自适应修复**（2026-09-16，用户反馈"侧边显示不全"）：
  - **根因**：`styles.css` 的「PPT 全屏」规则把正文写成固定 `font-size:2.1rem`（33.6px）且 `.slide-content{overflow:hidden}`；全站只有 `@media(max-width:768px)` 一个断点。于是 **769–1600px 的常见笔记本/窗口**下字号不缩、内容超框被**静默裁掉**（实测 800×810：内容高 1195px 仅 562px 可见；1366×768：758px 仅 520px 可见），被裁部分无法滚动查看。
  - **修复**：改用随视口自适应的流体基准 `--su:min(2vw,3.05vh)`，全部字号/内边距改为 `clamp()` 派生（1920×1080≈32.9px、1366×768≈23.4px、800×810≈16px）；`.slide-content` 改 `overflow:auto`（溢出可滚动，绝不再静默裁切）；网格改 `auto-fit` 自动折行；补 `min-width:0`/`max-width:min(1920px,100%)`/`img{max-width:100%}`/表格 `word-break:break-word` 等防溢出兜底；CSS 链接加版本号 `?v=20260916b` 破除浏览器缓存。
  - **验证**：本地无头 Chromium 对 lecture1+lecture2 共 80 页 × 5 种视口（800×810 / 1024×768 / 1366×768 / 1536×864 / 1920×1080）= **400 次检测，0 处裁切或横向溢出**；线上同法复测 3 种视口全部通过。对照截图见 `课件成品-HTML/_自适应修复对照-20260916/`。
  - 注：内容较长的页（如第 2 章可行性研究报告表）在卡片内可滚动查看，属预期行为。
