(5) 静态前端网站容器化 - 容器篇 - 自定义 HTTP Server
(5) 静态前端网站容器化 - 容器篇 - 自定义 HTTP Server
建议点击 查看原文 查看最新内容。
原文链接: https://typonotes.com/posts/2025/02/09/static-sap-dockerize-customize-httpserve/
众所周知, 我们在容器化 静态网站 的时候为了实现 一次编译, 处处运行 的目标, 在 index.html
中插入了一个变量 __CONFIG__
, 在启动的时候进行替换为正式后端的地址。 可以参考
然后在实践中经常会遇到各种条件的约束。 平台团队以安全为由,锁定了 K8s pod 策略, 将目录限制为只读状态。 虽然可以使用 mount 目录方式绕过, 但是我懒啊, 不想因为不同平台再定制不同的管理策略。
对于这种情况, 我使用 gin-gonic/gin
自定义一个 HTTP Server, 使用
https://github.com/spf13/afero
创建了一个内存文件系统, 将所有静态资源全部复制 内存空间 中, 这样就随便我修改了。
除此之外还有一个好处: 自定服务器还有一个好处时可以通过 环境变量 更方便的管理各种功能, 比花实践折腾配置模版(nginx) 体验更好。
Demo 项目可以参考: https://github.com/tangx/httpstatic
重点来了
在 gin 中提供了 StaticFS
, 但参数要求是 http.FileSystem
接口
|
|
于是使用了 http.FS()
将 fs.FS
接口进行封装。
|
|
但是, 使用 spf13/afero
创建的内存系统的默认返回接口是 afreo.Fs
|
|
解决方法
解决方法很简单, 自定一个 结构体 mfswrapper
实现 fs.FS
接口即可。
|
|
部分代码如下
- 创建内存文件系统
m
。 copywalk()
将本地文件复制到内存文件系统 m 中。- 读取
index.html
并使用inject()
函数替换__CONFIG__
为真实变量。
|
|
为什么要这样
这样就绕过了 只读文件系统 的要求。 更重要的是, 无论以后应用部署到其他任何容器平台, 都不用再为其管理专门的 部署配置。
- 原文链接:https://typonotes.com/posts/2025/02/09/static-sap-dockerize-customize-httpserve/
- 本文为原创文章,转载注明出处。
- 欢迎 扫码关注公众号
Go与云原生
或 订阅网站 https://typonotes.com/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。
