跳转至

22 · 独立网站、Nginx 与课程维护

22.1 当前交付形态

网站独立域名为 https://deepseek.baoer.me/,静态产物根目录 /var/www/deepseek-course,Nginx 配置 /etc/nginx/conf.d/deepseek-course.conf。前一套 Pi 课程继续在 pi.baoer.me,源码工作树、课程文件、证书、下载包均分别管理。

此网站只发布教材、源码阅读页与实验下载,不运行 dsh Web/Shell/MCP 服务。用户授权已经覆盖本服务器部署,所以所有准备、证书签发、配置验证与 reload 在完成具体产物后执行,无额外对话等待。

22.2 可复现的静态构建

源目录包括 docs、scripts、deployment/requirements.lock、mkdocs.yml。Markdown是唯一课程编辑源;prepare_course从固定Git树生成文件/包清单与源码页,assemble_course合并单文件和制作ZIP,MkDocs Material渲染可搜索网站。图由本地Mermaid资产渲染,不依赖读者从第三方CDN拉图。

cd /home/debian/codex/learn/deepseek-harness
uv venv .venv
uv pip install --python .venv/bin/python -r deployment/requirements.lock
.venv/bin/python scripts/prepare_course.py
.venv/bin/python scripts/assemble_course.py
.venv/bin/mkdocs build --strict
.venv/bin/python scripts/check_course.py
.venv/bin/python scripts/review_artifacts.py

下载的Markdown包带mkdocs.yml、hooks、全部章节、源码阅读页、Mermaid/CSS资产和许可;读者可自行安装同一requirements再重建。在线图渲染与标准Markdown软件的支持不同:不支持Mermaid的编辑器会显示图的源代码,图信息仍保留。

22.3 Nginx 的范围与证书

deployment/deepseek.baoer.me.conf包含80/443两个server。80保留 /.well-known/acme-challenge/静态challenge,其他路径redirect HTTPS;443只按静态文件查找,不做代理到Agent。

证书由Certbot HTTP-01签发,文件位于 /etc/letsencrypt/live/deepseek.baoer.me/。私钥不会复制进课程目录/ZIP/网站。certbot.timer负责续期,deployment/renewal-hook.sh在证书deploy后先nginx-t再reload。

sudo install -m 644 deployment/deepseek.baoer.me.conf /etc/nginx/conf.d/deepseek-course.conf
sudo install -m 755 deployment/renewal-hook.sh /etc/letsencrypt/renewal-hooks/deploy/deepseek-course.sh
sudo /usr/sbin/nginx -t
sudo systemctl reload nginx

Nginx写入只针对这个server的新配置;不覆盖其他domain配置。证书文件如果尚未签发,必须先用仓库中的http-bootstrap配置完成challenge;不能安装引用不存在证书的443配置再期待reload通过。

22.4 防止读者拿到旧下载

所有ZIP/原始Markdown下载使用独立文件名和revision查询参数,Nginx对 /assets/*.zip、/assets/*.md发送 Cache-Control: no-store。仍以实际公网响应字节与本地产物SHA256相等作为验收,而不只检查200和HTTPheader。读者也可查看公开研究记录。

dotfile路径返回403;网站构建仅复制明确公开artifact,不包含.env、auth.json、node_modules、runtime home和证书。静态发布目录的最小内容比对属于交付检查,不是对服务器所有服务的一般安全审计。

22.5 发布与回滚

先完成strictbuild、链接/源码/ZIP验证与peerreview,再把site同步至单独静态目录,reload验证后的域名配置。以后更新建议保留上一版静态产物,然后替换此站点目录;内容更新通常无需reloadNginx,配置更新才reload。

维护新版本时不要只修改首页版本号:建立新的官方Git快照,重新分析变动路径,更新所有source citations、profileoverlay、lockfile、Pythonvendor源指纹、实验与审核报告,再生成新revision下载。研究不变的旧快照应仍可按完整SHA复现。

22.6 验证网站与模型服务要分开

课程验收检查完整网页和移动导航、英文/中文搜索、Mermaid实际SVG、源码行号跳转、公网ZIP字节、originTLS和certbot状态。它不能替你验证一个未来上线的liveAgent授权系统。

若要把自己的dshWeb挂在域名上,必须另行处理host bind、proxy、browser authorization、Remote方法边界、真实identity/tenant、凭据和执行sandbox。publicUrl只改变对外地址声明,不自动改变监听地址或授权。本文静态站域名的配置不能直接当作Agent控制服务的反向代理模板。