Wiki.js et Kubernetes

Posted by
La documentation c'est bon, mangez en :)

Wiki.js est un wiki moderne qui bien que toujours en développement propose déjà de nombreuses fonctionnalités. L’interface est claire est rapide d’utilisation. Malheureusement la documentation ne propose pas encore de fichier YML pour le déployer sur Kubernetes.

On commence par créer un namespace dédié à notre wiki

apiVersion: v1
kind: Namespace
metadata:
  name: wikijs
  labels:
    name: wikijs

J’ai choisi de le configurer avec MariaDB et un stockage sur un volume local.

---
apiVersion: v1
kind: Service
metadata:
  name: mariadb
  namespace: wikijs
spec:
  selector:
    app: mariadb
  ports:
  - name: mariadb
    protocol: TCP
    port: 3306
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mariadb
  namespace: wikijs
  labels:
    app: mariadb
spec:
  selector:
    matchLabels:
      app: mariadb
  template:
    metadata:
      labels:
        app: mariadb
    spec:
      containers:
      - name: mariadb
        image: mariadb:10.4
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mariadb-secret
              key: ROOT_PASSWORD
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: mariadb-secret
              key: DATABASE
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: mariadb-secret
              key: USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mariadb-secret
              key: PASSWORD
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mariadb-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mariadb-storage
        hostPath:
          path: /var/wikijs
          type: Directory

Nous allons maintenant configurer Wiki.js. À noter, le paramètre imagePullPolicy configuré à Always afin de toujours récupérer la dernière version de l’image.

---
apiVersion: v1
kind: Service
metadata:
  name: "wikijs"
  namespace: wikijs
spec:
  ports:
    - name: http
      port: 3000
  selector:
    app: "wikijs"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wikijs
  namespace: wikijs
  labels:
    app: wikijs
spec:
  selector:
    matchLabels:
      app: wikijs
  template:
    metadata:
      labels:
        app: wikijs
    spec:
      containers:
      - name: wikijs
        image: requarks/wiki:beta
        imagePullPolicy: Always
        env:
        - name: DB_TYPE
          value: "mariadb"
        - name: DB_HOST
          value: "mariadb"
        - name: DB_PORT
          value: "3306"
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: mariadb-secret
              key: database
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: mariadb-secret
              key: USER
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: mariadb-secret
              key: PASSWORD
        ports:
        - containerPort: 3000
          name: http

Il ne nous manque plus que le fichier de configuration de MariaDB qui contient la nom de la base de données, l’utilisateur et les mots de passe.

apiVersion: v1
kind: Secret
metadata:
  name: mariadb-secret
  namespace: wikijs
type: Opaque
data:
  ROOT: cGFzc3dvcmQ=
  DATABASE: d2lraWpz
  USER: d2lraWpz
  PASSWORD: cGFzc3dvcmQ=

N’oubliez pas de changer au moins les mots de passe (ROOT et PASSWORD), ils doivent être encodés en base 64. Pour générer la chaîne de caractères en base64, sur GNU/Linux or sur Mac :

echo -n 'votrechaine' | base64

Mettez tout dans un fichier YML (wikijs.yml dans l’exemple) et déployez

kubectl apply -f wikijs.yml

Votre wiki est maintenant accessible à l’adresse http://wikijs.wikijs.svc.cluster.local:3000, il ne vous reste plus qu’à configurer votre reverse proxy (par exemple Nginx) pour y accéder.

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *