mirror of https://github.com/requarks/wiki
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
249 lines
20 KiB
249 lines
20 KiB
<div align="center">
|
|
|
|
<img src="https://static.requarks.io/logo/wikijs-full.svg" alt="Wiki.js" width="600" />
|
|
|
|
[](https://github.com/Requarks/wiki/releases)
|
|
[](https://github.com/requarks/wiki/blob/master/LICENSE)
|
|
[](http://standardjs.com/)
|
|
[](https://github.com/Requarks/wiki/releases)
|
|
[](https://hub.docker.com/r/requarks/wiki/)
|
|
[](https://github.com/Requarks/wiki/actions/workflows/build.yml)
|
|
[](https://huntr.dev/bounties/disclose)
|
|
[](https://github.com/users/NGPixel/sponsorship)
|
|
[](https://opencollective.com/wikijs)
|
|
[](https://wiki.requarks.io/slack)
|
|
[](https://twitter.com/requarks)
|
|
[](https://www.reddit.com/r/wikijs/)
|
|
[](https://blog.js.wiki/subscribe)
|
|
|
|
##### A modern, lightweight and powerful wiki app built on NodeJS
|
|
|
|
</div>
|
|
|
|
- **[Official Website](https://wiki.js.org/)**
|
|
- **[Documentation](https://docs.requarks.io/)**
|
|
|
|
<h2 align="center">Donate</h2>
|
|
|
|
<div align="center">
|
|
|
|
Wiki.js is an open source project that has been made possible due to the generous contributions by community [backers](https://wiki.js.org/about). If you are interested in supporting this project, please consider [becoming a sponsor](https://github.com/users/NGPixel/sponsorship), [becoming a patron](https://www.patreon.com/requarks), donating to our [OpenCollective](https://opencollective.com/wikijs), via [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FLV5X255Z9CJU&source=url) or via Ethereum (`0xe1d55c19ae86f6bcbfb17e7f06ace96bdbb22cb5`).
|
|
|
|
[](https://github.com/users/NGPixel/sponsorship)
|
|
[](https://www.patreon.com/requarks)
|
|
[](https://opencollective.com/wikijs)
|
|
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FLV5X255Z9CJU&source=url)
|
|
[](https://etherscan.io/address/0xe1d55c19ae86f6bcbfb17e7f06ace96bdbb22cb5)
|
|
[](https://checkout.opennode.com/p/2553c612-f863-4407-82b3-1a7685268747)
|
|
[](https://wikijs.threadless.com)
|
|
|
|
</div>
|
|
|
|
## Introduction
|
|
|
|
This chart bootstraps a Wiki.js deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
|
|
|
It also optionally deploys PostgreSQL as the database using the official PostgreSQL image from Docker Hub, but you are free to bring your own database.
|
|
|
|
## Prerequisites
|
|
|
|
- PV provisioner support in the underlying infrastructure (with persistence storage enabled) if you want data persistance
|
|
|
|
## Adding the Wiki.js Helm Repository
|
|
|
|
```console
|
|
$ helm repo add requarks https://charts.js.wiki
|
|
```
|
|
|
|
## Installing the Chart
|
|
|
|
To install the chart with the release name `my-release` run the following:
|
|
|
|
### Using Helm 3/4:
|
|
```console
|
|
$ helm install my-release requarks/wiki
|
|
```
|
|
### Using Helm 2:
|
|
```console
|
|
$ helm install --name my-release requarks/wiki
|
|
```
|
|
|
|
The command deploys Wiki.js on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
|
|
|
> **Tip**: List all releases using `helm list`
|
|
|
|
## Uninstalling the Chart
|
|
|
|
To uninstall/delete the `my-release` deployment:
|
|
|
|
```console
|
|
$ helm delete my-release
|
|
```
|
|
|
|
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
|
|
|
> **Warning**: Persistant Volume Claims for the database are not deleted automatically. They need to be manually deleted
|
|
|
|
```console
|
|
$ kubectl delete pvc/data-wiki-postgresql-0
|
|
```
|
|
|
|
## Configuration
|
|
|
|
The following table lists the configurable parameters of the Wiki.js chart and their default values.
|
|
|
|
| Parameter | Description | Default |
|
|
| ------------------------------- | ------------------------------- | ---------------------------------------------------------- |
|
|
| `image.repository` | Wiki.js image | `requarks/wiki` |
|
|
| `image.tag` | Wiki.js image tag | `2` |
|
|
| `imagePullPolicy` | Image pull policy | `IfNotPresent` |
|
|
| `replicacount` | Number of Wiki.js pods to run | `1` |
|
|
| `revisionHistoryLimit` | Total number of revision history points | `10` |
|
|
| `resources.limits` | Wiki.js service resource limits | `nil` |
|
|
| `resources.requests` | Wiki.js service resource requests | `nil` |
|
|
| `nodeSelector` | Node labels for the Wiki.js pod assignment | `{}` |
|
|
| `affinity` | Affinity settings for the Wiki.js pod assignment | `{}` |
|
|
| `schedulerName` | Name of an alternate scheduler for the Wiki.js pod | `nil` |
|
|
| `tolerations` | Toleration labels for the Wiki.js pod assignment | `[]` |
|
|
| `volumeMounts` | Volume mounts for the Wiki.js container | `[]` |
|
|
| `volumes` | Volumes for the Wiki.js pod | `[]` |
|
|
| `ingress.enabled` | Enable ingress controller resource | `false` |
|
|
| `ingress.className` | Ingress class name | `""` |
|
|
| `ingress.annotations` | Ingress annotations | `{}` |
|
|
| `ingress.hosts` | List of ingress rules | `[{"host": "wiki.local", "paths": ["/"]}]` |
|
|
| `ingress.tls` | Ingress TLS configuration | `[]` |
|
|
| `sideload.enabled` | Enable sideloading of locale files from git | `false` |
|
|
| `sideload.repoURL` | Git repository URL containing locale files | `https://github.com/Requarks/wiki-localization` |
|
|
| `sideload.env` | Environment variables for the sideload container | `{}` |
|
|
| `sideload.securityContext` | Security context for the sideload container | `nil` |
|
|
| `sideload.resources.limits` | Resource limits for the sideload container | `nil` |
|
|
| `sideload.resources.requests` | Resource requests for the sideload container | `nil` |
|
|
| `nodeExtraCaCerts` | Trusted certificates path | `nil` |
|
|
| `externalPostgresql.databaseURL` | External postgres connection string | `nil` |
|
|
| `postgresql.enabled` | Deploy postgres server (see below) | `true` |
|
|
| `postgresql.postgresqlDatabase` | Postgres database name | `wiki` |
|
|
| `postgresql.postgresqlUser` | Postgres username | `postgres` |
|
|
| `postgresql.postgresqlHost` | Postgres host | `nil` |
|
|
| `postgresql.postgresqlPassword` | Postgres password | `nil` |
|
|
| `postgresql.existingSecret` | Provide an existing `Secret` for postgres | `nil` |
|
|
| `postgresql.existingSecretKey` | The postgres password key in the existing `Secret` | `postgresql-password` |
|
|
| `postgresql.existingSecretUserKey` | The postgres username key in the existing `Secret` | `postgresql-username` |
|
|
| `postgresql.postgresqlPort` | Postgres port | `5432` |
|
|
| `postgresql.ssl` | Enable external postgres SSL connection | `false` |
|
|
| `postgresql.ca` | Certificate of Authority content for postgres | `nil` |
|
|
| `postgresql.persistence.enabled` | Enable postgres persistence using PVC | `true` |
|
|
| `postgresql.persistence.existingClaim` | Provide an existing `PersistentVolumeClaim` for postgres | `nil` |
|
|
| `postgresql.persistence.storageClass` | Postgres PVC Storage Class (example: `nfs`) | `nil` |
|
|
| `postgresql.persistence.size` | Postgres PVC Storage Request | `8Gi` |
|
|
| `postgresql.persistence.accessMode` | Postgres Persistent Volume Access Mode | `ReadWriteOnce` |
|
|
| `postgresql.image.repository` | PostgreSQL image repository | `postgres` |
|
|
| `postgresql.image.tag` | PostgreSQL image tag | `18` |
|
|
| `postgresql.image.pullPolicy` | PostgreSQL image pull policy | `IfNotPresent` |
|
|
| `postgresql.resources` | PostgreSQL resource requests/limits | `{}` |
|
|
| `postgresql.nodeSelector` | PostgreSQL node selector labels | `{}` |
|
|
| `postgresql.tolerations` | PostgreSQL toleration labels | `[]` |
|
|
| `postgresql.affinity` | PostgreSQL affinity settings | `{}` |
|
|
| `postgresql.service.type` | PostgreSQL service type | `ClusterIP` |
|
|
| `postgresql.service.port` | PostgreSQL service port | `5432` |
|
|
| `postgresql.service.annotations` | PostgreSQL service annotations | `{}` |
|
|
|
|
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
|
|
|
```console
|
|
$ helm install --name my-release \
|
|
--set postgresql.persistence.enabled=false \
|
|
requarks/wiki
|
|
```
|
|
|
|
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
|
|
|
```console
|
|
$ helm install --name my-release -f values.yaml requarks/wiki
|
|
```
|
|
|
|
> **Tip**: You can use the default [values.yaml](values.yaml)
|
|
|
|
## PostgreSQL
|
|
|
|
By default, PostgreSQL is installed as part of the chart using the official PostgreSQL image from Docker Hub (version 18).
|
|
|
|
### Using an external PostgreSQL server
|
|
|
|
To use an external PostgreSQL server, set `postgresql.enabled` to `false`, then use either:
|
|
|
|
#### Connection String
|
|
|
|
Set `externalPostgresql.databaseURL` to the full PostgreSQL connection string.
|
|
|
|
#### Connection Parameters
|
|
|
|
Set `externalPostgresql.host`, `externalPostgres.port`, `externalPostgres.database`, `externalPostgres.username`, `externalPostgres.existingSecret` *(secret name)* and `externalPostgres.existingSecretKey` *(key in the secret containing the password)*
|
|
|
|
Ensure the secret specified in `externalPostgresql.existingSecret` already exists, with a password set at the path specified in `externalPostgres.existingSecretKey`.
|
|
|
|
To use an SSL connection you can set `externalPostgresql.ssl` to `true` and if needed the path to a Certificate of Authority can be set using `externalPostgresql.ca` to `/path/to/ca`. Default `externalPostgresql.ssl` value is `false`.
|
|
|
|
### Using an existing PostgreSQL secret with built-in PostgreSQL
|
|
|
|
When using the built-in PostgreSQL (default behavior with `postgresql.enabled: true`), you can still use an existing Kubernetes secret for the database credentials by setting:
|
|
|
|
- `postgresql.existingSecret`: Name of the existing secret containing the credentials
|
|
- `postgresql.existingSecretKey`: Key in the secret containing the password (defaults to `postgresql-password`)
|
|
- `postgresql.existingSecretUserKey`: Key in the secret containing the username (defaults to `postgresql-username`)
|
|
Example usage:
|
|
```bash
|
|
# Create your existing secret
|
|
kubectl create secret generic my-postgres-secret \
|
|
--from-literal=postgresql-username=postgres \
|
|
--from-literal=postgresql-password=yourpassword
|
|
|
|
# Deploy with existing secret
|
|
helm install my-release requarks/wiki \
|
|
--set postgresql.enabled=true \
|
|
--set postgresql.existingSecret=my-postgres-secret
|
|
```
|
|
|
|
## Persistence
|
|
|
|
Persistent Volume Claims are used to keep the data across deployments. This is known to work in GCE, AWS, and minikube.
|
|
See the [Configuration](#configuration) section to configure the PVC or to disable persistence.
|
|
|
|
## Ingress
|
|
|
|
This chart provides support for Ingress resource. If you have an available Ingress Controller such as Nginx or Traefik you maybe want to set `ingress.enabled` to true and add `ingress.hosts` for the URL. Then, you should be able to access the installation using that address.
|
|
|
|
## Extra Trusted Certificates
|
|
|
|
To append extra CA Certificates:
|
|
|
|
1. Create a ConfigMap with CAs in PEM format, e.g.:
|
|
|
|
```yaml
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: ca
|
|
namespace: your-wikijs-namespace
|
|
data:
|
|
certs.pem: |-
|
|
-----BEGIN CERTIFICATE-----
|
|
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
-----END CERTIFICATE-----
|
|
```
|
|
|
|
2. Mount your CAs from the ConfigMap to the Wiki.js pod and set `nodeExtraCaCerts` helm variable. Insert the following lines to your Wiki.js `values.yaml`, e.g.:
|
|
|
|
```yaml
|
|
volumeMounts:
|
|
- name: ca
|
|
mountPath: /cas.pem
|
|
subPath: certs.pem
|
|
|
|
volumes:
|
|
- name: ca
|
|
configMap:
|
|
name: ca
|
|
|
|
nodeExtraCaCerts: "/cas.pem"
|
|
```
|