应用 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: SecretapiVersion: v1metadata:  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, 相比默认的只减少了一行:

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

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

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

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

  4. 待 wikijs Deployment重启好之后, 就能够进入页面进行装置. 别离填入:

    1. 管理员邮箱
    2. 管理员明码, 再次确认管理员明码
    3. wikijs 站点的 URL
    4. 就会主动装置配置实现.
  5. 进入之后就能够在这里配置中文:

  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 编写.