主要观点:作者为获取 Yesod 知识而更新知识,以 Haskell 编写 Fisher's Fountain 网站,该网站需监控单独服务器进程的运行时间,虽违反政策但可靠性应与 nginx 相近。介绍实现单二进制部署的挑战,包括编译外部资源、静态链接不同 libc 等,还讲述了嵌入静态内容、配置 Warp 仅监听本地主机、在生产环境中设置站点根 URL 等方面的内容,以及反向代理时尾随斜杠的相关问题。
关键信息:
- Yesod 是生产级 Web 框架,Fisher's Fountain 适合练习。
- 过去六年的侧项目多为 run-your-own-command 或完全客户端 JavaScript。
- 实现单二进制部署需编译外部资源和静态链接不同 libc。
- 可通过 Template Haskell 嵌入静态内容。
- 静态链接 musl 可解决 glibc 版本问题。
- 配置 Warp 仅监听本地主机可增强安全性。
- 需在生产环境中设置站点根 URL 以适应 nginx。
重要细节: - 代码 100 行 Haskell,链接文件 200 行(含样式表和基础 HTML 模板)。
- 编译资源到二进制称为“嵌入静态内容”。
- 静态链接意味着库与二进制捆绑。
- Fedora 40 下需用 podman 配合 SELinux。
- Yesod 应用由三层组成,Web 服务器通过 wai 服务 Yesod 站点。
warp
函数不能选择监听的 IP 地址,需用 wai 函数配置。- 环境变量
YESOD_APPROOT
用于设置站点根 URL。 - 反向代理时尾随斜杠组合很重要,需正确设置。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。