抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Docker Hugo Doks 部署指南

在上一篇文章末尾我有贴一个主题,名为 Doks,官网:https://getdoks.org 折腾了很久,以为其可以在 Hugo 容器中直接运行,后来发现并不是这么一回事,思考的方向反了。

首先 Doks 主题是一个集成环境,会自动安装 Hugo 以及部署 Hugo 启动,环境需要 Node.js ,那么很明显其最适合在宿主机器上直接运行,但就是想在docker 上运行怎么办?办法是有的,不要直接用 Hugo ,也不要用原生的 Ubuntu 等,而是直接运行一个 Node.js 容器:

version: "3"
services:
  hugo-doks:
    image: node:slim
    container_name: hugo-doks
    user: "node"
    working_dir: /src
    volumes:
      - "./hugo-doks:/src"
    command: tail -F anything
    ports:
      - "1313:1313"

可以看到配置和之前 Hugo 的差不多,但是稍微有点区别。主要是:

command: tail -F anything

其作用是为了让容器保持运行,不然启动就会结束,这和编程的main函数一样,如果你只需要一个单纯的 Ubuntu 环境,也需要加上这行,不然 Ubuntu 容器启动便会结束,不再多说。运行容器:

docker-compose -f hugo-doks.yml -p server up -d

然后进入到容器中:

docker exec -it hugo-doks /bin/bash

因为已经是基于 node 的容器,所以 Node.js 以及 npm 都已经具备,接下来就直接交给 Doks,上述配置中我的工作文件夹配置的 src,所以先:

cd /src

接着就是按照doks主题的说明进行初始化:

  • 克隆 Doks
git clone https://github.com/h-enk/doks-child-theme.git my-doks-site
  • 安装相关组件
cd my-doks-site
npm install 

这个步骤一步不会发生报错,如果发生,一般都是环境不对,要么 node 版本、 npm 版本 或者 linux 版本不匹配。

  • 启动 Doks 服务
npm run start 

如果提示是这样:

那么可以在本地1313端口看到doks的运行情况了。但目前容器自动运行并不会启动Doks,所以容器配置最终应该是这样的:

version: "3"
 services:
   hugo-doks:
     image: node:slim
     container_name: hugo-doks
     user: "node"
     working_dir: /src
     environment:
       - NODE_ENV=production
     volumes:
       - "./hugo-doks:/src"
     command: "npm run start"
     ports:
       - "1313:1313"

注: NODE_ENV 设置生产环境后会导致一些依赖无法下载,只有当 npm install 完成后,正式部署时才需要将其设置为 production

当然,可以将 working_dir: /src/my-doks-site 精简为 /src ,只是说 my-doks-site 中的内容需要移动到 src 中。重新创建容器,会发现一切如约而至,实际上这些步骤可以改为 DockerFile,有空我再写。

界面和官网界面一致,这个 UI 写文档,看起来很舒服。只是这个 Node.js 和 npm (也实在是有点大,近 1GB,对比起来,WordPress 的300m环境都算轻量了)换成 slim 版本就好了。

参考:

https://github.com/nodejs/docker-node/blob/main/README.md#how-to-use-this-image

https://getdoks.org/docs/prologue/quick-start/

https://stackoverflow.com/questions/38546755/docker-compose-keep-container-running


本站由以下主机服务商提供服务支持:

2条评论

  • 赵知了

    您好,Blog菜单页展示的文章列表是用框线隔开的。我新建一个菜单,其文章列表样式缺没有这个框线。
    如果我想增加一个菜单,这个菜单也展示成blog列表样式,如何操作呢?

    • Mosaic-C

      我简单看了下,那个样式应当是固定在了 blog 那个菜单,对应的渲染 html 文件是 layouts/blog/list.html(路径匹配的),里面用了 Hugo 的模板语法,所以在文章的头部注释中应当具备与 content/en/blog/say-hello-to-doks/index.md 中相同的那些字段,具体我也没深究,因为我没用到这一块儿,你可以多试试,祝你好运。

发表评论