在上一篇文章末尾我有贴一个主题,名为 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
本站由以下主机服务商提供服务支持:
赵知了
您好,Blog菜单页展示的文章列表是用框线隔开的。我新建一个菜单,其文章列表样式缺没有这个框线。
如果我想增加一个菜单,这个菜单也展示成blog列表样式,如何操作呢?
Mosaic-C
我简单看了下,那个样式应当是固定在了 blog 那个菜单,对应的渲染 html 文件是 layouts/blog/list.html(路径匹配的),里面用了 Hugo 的模板语法,所以在文章的头部注释中应当具备与 content/en/blog/say-hello-to-doks/index.md 中相同的那些字段,具体我也没深究,因为我没用到这一块儿,你可以多试试,祝你好运。