# 模板 06：云发布部署模板（腾讯云为例）

> 目标：静态 HTML 课件稳定对外服务 + 一键更新。参考实现：腾讯云 111.231.0.226（OpenCloudOS 9.6），端口 1234。

## 一、服务器端一次性部署

```bash
# 1) 目录与解压（/var/www/spm 为站点根）
mkdir -p /var/www/spm && tar xzf /root/spm-courseware.tar.gz -C /var/www/spm

# 2) systemd 服务（开机自启 + 崩溃重启）—— 不依赖 nginx，零依赖
cat > /etc/systemd/system/spm-web.service <<'EOF'
[Unit]
Description=Courseware static web
After=network.target
[Service]
ExecStart=/usr/bin/python3 -m http.server 1234 --bind 0.0.0.0 --directory /var/www/spm
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload && systemctl enable --now spm-web
systemctl is-active spm-web          # → active
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:1234/   # → 200
```

## 二、本机打包与上传（一键脚本）

```bash
# 打包（排除内部文件）：在课件项目根目录执行
tar czf /tmp/spm-courseware.tar.gz --exclude='_素材' --exclude='*.py' \
    --exclude='__pycache__' index.html styles.css quiz.js logo.png assets lecture*

# 上传（SSH/scp 助手，expect 自动输密码——先按你的服务器改 IP/用户/密码）
~/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 && sleep 1 && systemctl is-active spm-web'
```

> 若更新只动了 styles.css/quiz.js（无新页面），只需上面的 tar→scp→解压→restart，无需本地 rebuild；
> 若动了内容模块，先 `python3 _build.py` 再打包含新页面。

## 三、访问与安全组

| 项 | 值 |
|---|---|
| 公网 URL | http://<公网IP>:<端口>/ （本案例 http://111.231.0.226:1234/） |
| 端口冲突 | 80 常被其他服务占用 → 选非常用端口（1234/8899/8080），必须同时：控制台安全组放行 TCP 入站 |
| 安全组 | 腾讯云控制台 → 安全组 → 入站规则 → TCP <端口> 0.0.0.0/0（或限定来源段） |
| 服务端防火墙 | 若 firewalld 开启：`firewall-cmd --permanent --add-port=<端口>/tcp && firewall-cmd --reload` |
| 排障 | 公网不通先 `curl 127.0.0.1:<端口>` 区分"服务没起/被墙/安全组"三因 |

## 四、HTTPS（可选后续）

- 有域名后：nginx 监听 443（证书）反代 `127.0.0.1:<端口>`；
- 参考记录：`dl-hub/22-软件项目管理教学包/课件云发布记录.md`。

## 五、部署记录模板

每个项目维护一份 `课件云发布记录.md`（照 `22-软件项目管理教学包/课件云发布记录.md` 抄）：服务器信息、目录、systemd 单元、更新命令、注意事项（端口/安全组/占位页/素材排除）。