草庐IT

使用Helm部署Wikijs

east4ming 2023-03-28 原文

使用 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.repository wiki.js image requarks/wiki
image.tag wiki.js image tag latest
imagePullPolicy 镜像拉取策略 IfNotPresent
replicacount 要运行的wiki.js服务pod数量 1
resources.limits wiki.js服务资源限制 nil
resources.requests wiki.js服务资源请求 nil
nodeSelector wiki.js 的 nodeSelector {}
affinity wiki.js pod分配的亲和力设置 {}
schedulerName wiki.js pod 备用调度器的名称 nil
tolerations wiki.js 吊舱分配的容忍标签 []
ingress.enabled 启用入口控制器资源 false
ingress.annotations 入口注释 {}
ingress.hosts 入口规则列表 [{"host": "wiki.local", "paths": ["/"]}]
ingress.tls 入口 TLS 配置 []
postgresql.enabled 是否部署 postgresql(见下文) true
postgresql.postgresqlDatabase postgresql数据库名称 wiki
postgresql.postgresqlUser postgresql 用户名 postgres
postgresql.postgresqlHost postgresql 主机 nil
postgresql.postgresqlPassword postgresql 密码 nil
postgresql.postgresqlPort postgresql 端口 5432
postgresql.persistence.enabled 使用 PVC 启用 postgresql 持久性 true
postgresql.persistence.existingClaim 为 postgresql 提供已有PersistentVolumeClaim nil
postgresql.persistence.storageClass postgresql PVC存储类(例如:nfs) nil
postgresql.persistence.size postgresql 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/wiki-localization下载。这些档案每天晚上都是最新的。

主文件

主文件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 并授予更高权限.

???

有关使用Helm部署Wikijs的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐