部署单二进制 Haskell Web 应用程序

主要观点:作者为获取 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。
  • 反向代理时尾随斜杠组合很重要,需正确设置。
阅读 8
0 条评论