【问题标题】:Build static site once and deploy on multiple hosts一次构建静态站点并在多个主机上部署
【发布时间】:2019-02-27 09:02:14
【问题描述】:

我想构建我的文档以托管在多个离线环境中,托管在 docker 容器上。这需要静态站点生成器中的以下关键功能,

  • 使用所有资源(js/css),通过静态 html 文件在本地托管。
  • 在部署时(docker 容器启动时)配置urlbaseUrl

这两种配置可以帮助实现,一次构建,随处部署,并且在离线环境中。

两个问题,

  • 部署时如何设置url?
  • 如何将所有资源设置为本地托管?

【问题讨论】:

  • 对你有好处。那么,这里有什么问题呢?
  • 怎么办?在文档中不可用。
  • 两个问题,*部署时如何设置url? * 如何设置所有资源本地托管?

标签: javascript static-site docusaurus


【解决方案1】:

你可能认为你应该在https://{{ baseUrl }}/a.js中写url,并在编译选项中设置baseUrl,实际上你不需要这样做。

只用相对路径,建议你有图片标签

  • <img src="somephoto.jpg" /> 表示文件与当前页面位于同一目录
  • <img src="../somephoto.jpg" /> 表示文件位于当前页面的上层目录
  • <img src="/somephoto.jpg" /> 表示文件位于网站根目录

【讨论】:

  • 文档建议您在运行 npm run build - docusaurus.io/docs/en/publishing 时必须这样做
  • @HassanFarid 抱歉,我没有注意到问题与 docusaurus 有关,我以前从未使用过它。由于 docusaurus 将您的文件构建为静态网站文件,这意味着构建结果中不存在动态内容。但也许这是一个解决方案,您可以将docusaurus.io/docs/en/publishingsiteConfigurl字段设置为process.env.SITE_URL,然后将ENV SITE_URL https://your.domain.name添加到Dockerfile中,并使npm run build发生在docker镜像构建中。
  • 我想实现,一次构建,到处部署。必须有一些 HTML / JS 文件,存储此变量并每次重新加载。这样我们就可以在容器启动时覆盖这个地方。
【解决方案2】:

您必须编写一个自定义脚本来覆盖其中的siteConfig.js。这是如何发生的高级流程:

  • 运行脚本,将siteConfig.js 中的 URL 替换为主机 1 (replace1.js)
  • 运行部署脚本。
  • 运行脚本,将siteConfig.js 中的 URL 替换为主机 2 (replace2.js)
  • 运行部署脚本。

package.json 中,在scripts 部分添加一行:

"scripts": {
  ...
  "deploy-multiple": "./replace1.js && docusaurus-build && ./replace2.js && docusaurus-build",
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2016-01-06
    • 2015-10-17
    相关资源
    最近更新 更多