使用 Helm 部署 Wiki.js

📚️ 参考文档:

Wiki.js 官方文档 - 安装 - Kubernetes

Wiki.js 使用 Helm 安装

Wiki.js 官方文档 - 安装 - 侧加载

官方教程

Kubernetes

开始使用 Helm Chart 在 Kubernetes 上安装

先决条件
  • Kubernetes 集群
  • Helm
  • PostgreSQL 数据库
❗️ 重要
  • 您必须先部署单个实例才能设置应用程序。设置完成后,您可以将副本数量增加到任意数量。
  • 尽管wiki.js支持其他数据库引擎,但多副本要求必须使用PostgreSQL
安装 Helm Chart

有关详细的安装说明,请参阅wiki.js helm repo

介绍

此图表使用Helm包管理器在Kubernetes群集上启动wiki.js部署。

它还可选地将PostgreSQL打包为数据库,但您可以自由携带自己的数据库。

先决条件
  • 如果您想要数据持久性,则需要由基础设施中的PV 供应商支持(启用持久存储)
安装 Chart

要安装带有my-release 发布名称的 chart,请在此 (helm) 目录运行以下情况:

📚️ 参考文档:

Wiki.js helm chart git 仓库地址

需要先将该 Git 仓库 clone 下来, 并跳转到 (helm) 目录, 然后执行下面的命令.

使用 Helm3:

$ helm install my-release .

使用 Helm2:

$ helm install --name my-release . 

该命令在Kubernetes群集上的default 租户中部署wiki.js。[[使用 Helm 部署 Wikijs#配置]] 部分列出了安装过程中可以配置的参数。

提示: 使用helm list列出所有版本
卸载 Chart

卸载/删除my-release部署:

$ helm delete my-release

命令会删除与 该 Chart 关联的所有 Kubernetes 组件并删除该 release。

警告:数据库的 PVC 不会自动删除。它们需要手动删除
$ kubectl delete pvc/data-wiki-postgresql-0
配置

下表列出了维基图表的可配置参数.js及其默认值。

参数描述默认
image.repositorywiki.js imagerequarks/wiki
image.tagwiki.js image taglatest
imagePullPolicy镜像拉取策略IfNotPresent
replicacount要运行的wiki.js服务pod数量1
resources.limitswiki.js服务资源限制nil
resources.requestswiki.js服务资源请求nil
nodeSelectorwiki.js 的 nodeSelector{}
affinitywiki.js pod分配的亲和力设置{}
schedulerNamewiki.js pod 备用调度器的名称nil
tolerationswiki.js 吊舱分配的容忍标签[]
ingress.enabled启用入口控制器资源false
ingress.annotations入口注释{}
ingress.hosts入口规则列表[{"host": "wiki.local", "paths": ["/"]}]
ingress.tls入口 TLS 配置[]
postgresql.enabled是否部署 postgresql(见下文)true
postgresql.postgresqlDatabasepostgresql数据库名称wiki
postgresql.postgresqlUserpostgresql 用户名postgres
postgresql.postgresqlHostpostgresql 主机nil
postgresql.postgresqlPasswordpostgresql 密码nil
postgresql.postgresqlPortpostgresql 端口5432
postgresql.persistence.enabled使用 PVC 启用 postgresql 持久性true
postgresql.persistence.existingClaim为 postgresql 提供已有PersistentVolumeClaimnil
postgresql.persistence.storageClasspostgresql PVC存储类(例如:nfs)nil
postgresql.persistence.sizepostgresql PVC 存储大小需求8Gi

使用--set key=value[,key=value]参数指定每个参数来 helm install。例如,

$ helm install --name my-release \
  --set postgresql.persistence.enabled=false \
   . 

或者,在安装 chart 时可以提供指定上述参数值的 YAML 文件。例如,

$ helm install --name my-release -f values.yaml . 
提示:您可以使用默认values.yaml
PostgreSQL

默认情况下,作为Chart 的一部分安装PostgreSQL。

使用外部 PostgreSQL 服务器

要使用外部PostgreSQL服务器,设置postgresql.enabledfalse然后设置postgresql.postgresqlHostpostgresql.postgresqlPassword。其他选项postgresql.postgresqlDatabasepostgresql.postgresqlUser(和)postgresql.postgresqlPort可能也需要从其默认值中更改。

您还需要在部署中添加以下 Helm 模板:

kind: Secret
apiVersion: v1
metadata:
  name: {{ template "wiki.postgresql.secret" . }}
data:
  {{ template "wiki.postgresql.secretKey" . }}: "{{ .Values.postgresql.postgresqlPassword | b64enc }}"
持久化

PVC 用于在整个部署中保留数据。请参阅 [[使用 Helm 部署 Wikijs#配置]] 部分以配置 PVC 或禁用持久化。

Ingress

此Chart 为Ingress 资源提供支持。如果你有一个可用的 ingress 控制器,如Nginx 或 Traefik,你可能想设置ingress.enabled为真,并为URL选择一个ingress.hostname。然后,您应该能够使用该地址访问安装。

离线环境下使用 Helm 部署 Wiki.js

📚️ 参考文档:

Wiki.js 官方文档 - 安装 - Kubernetes

Wiki.js 使用 Helm 安装

Wiki.js 官方文档 - 安装 - 侧加载

概述

根据官方文档和 GitHub issues 的分析. 离线环境下, 那么需要将从internet下载的数据侧载(sideload)。

这是通过手动下载一组文件并将它们放置在wiki安装中的特定目录来实现的。这些文件将在初始化期间导入。

在Wiki.js安装文件夹的path data/sideload中创建一个新文件夹。

例如,如果您的wiki安装在路径/wiki (wikijs的docker image 里wiki的安装路径为 /wiki),那么您需要在路径/wiki/data/sideload 创建一个文件夹.

Locales

为了安装locale包,您需要主locale文件+至少一个locale包文件

ℹ️ 信息:

这些文件可以从https://github.com/Requarks/w...下载。这些档案每天晚上都是最新的。

主文件

主文件locales.json 包含有关所有可用语言的信息,并且必须安装。

将此文件放在先前创建的sideload 文件夹中。

Locale 包

语言环境软件包文件xx.jsonxx-zz.json 包含所选语言的所有翻译。 您可以同时加载任意数量的语言环境。

⚠️ 警告:

英语包en.json 是必须的,因为这是安装期间的默认语言。 之后您可以更改语言.

将文件放在先前创建的sideload 文件夹中主文件的旁边。 现在,您的文件夹中应该具有locales.jsonen.json和任何其他语言。

Sideload

⚠️ 警告:

必须先修改 wiki.js 配置文件: config.yml. 增加如下一行: offline: true

运行Wiki.js(如果已经在运行,则重新启动进程),自动加载位于data/sideload 文件夹中的文件。

步骤

📝 备注:

由于笔者时间不足, 就不将额外的步骤整合到 helm chart 中去了.

以下步骤假设:

  1. 已安装 helm
  2. 已 clone wikijs的git 仓库
  3. 已 跳转到 helm/ 目录下
  1. 通过 helm 安装 wiki.js 和 postgresql:

    helm install wikijs . -n wiki --set image.tag=2,postgresql.persistence.storageClass=nfs-fast

    配置说明如下, 创建好了 helm 会有相关成功的提示, 此时可以使用, 但是加载不到 locale 语言包. 下一步需要 通过 sideload 加载语言包.

    1. wiki 租户下进行安装;
    2. wiki.js 的镜像版本tag 为2, 保证不会因为选择latest 标签, 导致wiki.js 突然从2 升级到3, 导致服务异常;
    3. postgresql的持久化存储的storageClassnfs-fast, 通过它自动申请存储.
  2. 因为需要 sideload. 需要修改config.yml, 通过如下 ConfigMap 的方式修改. 步骤如下:

    1. 创建如下ConfigMap - wiki-config, 相比默认的只增加了一行:

      image-20210227232511340

    2. 在 wikijs 的 Deployment中, 做如下修改, 将上边的 ConfigMap 通过 SubPath 挂载到指定位置

      image-20210227233052680

  3. 因为需要 sideload, 需要创建 data/sideload 文件夹, 并将 locales 文件放到该目录. 通过 PVC 实现

    1. 申请个50M 左右的 PVC - sideload-data (步骤略)
    2. 将 PVC 挂载到 wikijs Deployment指定目录:

      image-20210227233052680

    3. 再将下载好的locales.json, en.jsonzh.json放到容器中的指定目录: /wiki/data/sideload. 如下:

      image-20210227234116239

  4. 待 wikijs Deployment重启好之后, 就可以进入页面进行安装. 分别填入:

    1. 管理员邮箱
    2. 管理员密码, 再次确认管理员密码
    3. wikijs 站点的 URL
    4. 就会自动安装配置完成.
  5. 进入之后就可以在这里配置中文:

    image-20210227233926145

  6. 至此, 离线环境下使用 Helm 部署 Wiki.js 完成. 🎉🎉🎉

总结

相比在线环境, 多出了如下步骤:

  1. ConfigMap 通过 SubPath 方式挂载wiki.js 的配置文件 config.yml, 配置文件多了一句: offline: true
  2. 申请一个新的PVC, 挂载到/wiki/data/sideload, 并将 locales 相关文件放进去.

离线环境下 在OpenShift 中使用 Helm 部署 Wiki.js

ℹ️ 信息:

OpenShift 4.4+ 版本支持 Helm3

OpenShift 中, 对权限要求比较严格, 最简单的适配步骤, 就是将 wiki.js 所用的 ServiceAccount 权限放开.

相比上一节, 多出来的, 或者有调整的具体操作如下:

  1. 通过 helm3 安装:

    helm install wikijs . -n wiki --set image.tag=2.5,postgresql.serviceAccount.enabled=true,postgresql.serviceAccount.name=wikijs,postgresql.persistence.storageClass=nfs-fast

    ℹ️ 说明如下:

    1. wikijs 安装的时候就是用的 wikijs 这个 ServiceAccount, 为了简化权限步骤, postgresql 也用这个 ServiceAccount
    2. 具体的参数就是: postgresql.serviceAccount.enabled=true,postgresql.serviceAccount.name=wikijs
  2. wikijs 这个用户赋权SCC: anyuid: oc adm policy add-scc-to-user anyuid -z wikijs -n wiki
  3. 其他步骤都和上一节一致.

总结

通过这篇文章的介绍, 可以看出 Wiki.js 功能还是很强大的, 值得一用.

在 Kubernetes 中用 helm 部署, 直接使用官方的最简命令即可;

在离线环境下的 Kubernetes 中用 helm 部署, 需要多2个步骤:

  1. ConfigMap 通过 SubPath 方式挂载wiki.js 的配置文件 config.yml, 配置文件多了一句: offline: true
  2. 申请一个新的PVC, 挂载到/wiki/data/sideload, 并将 locales 相关文件放进去.

在离线环境下的 OpenShift 中用 helm 部署, 由于权限限制严格, 需要调整 ServiceAccount 并授予更高权限.

🎉🎉🎉

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

东风微鸣云原生
30 声望9 粉丝