MediaWiki
Una forma de documentar prácticamente cualquier cosa es utilizar una Wiki, estas son prácticamente una hoja en blanco donde podemos construir las plantillas que queramos, con un buscador de serie y capacidad para editar.
De entre todas las Wikis disponibles, MediaWiki es la utilizada en la Wikipedia. Esto no la convierte en la mejor, pero la gente la conoce así que es más sencillo empezar.
Además, dispone de una lista bastante ampliar de plugins para adaptar a lo que necesitemos.
Requisitos
MediaWiki requiere de MariaDB. Se utilizará el existente en vez de que proviene el Helm.
Los datos y plugins se almacenan en un volumen de Longhorn. Tanto la instalación de plugis como la configuración (que se encuentra en el fichero LocalSettings.php) requieren modificar los datos directamente en el volumen, pero Longhorn no tiene una forma propia para "acceder" a los ficheros. A esto se añade que los contenedores de Bitnami no permiten el uso de debug o attach para acceder al volumen. Esto nos da la opción de añadir un sidecar en el despliegue o crear un contenedor temporal con acceso al mismo volumen, siendo más sencilla la segunda opción.
Despliegue
Más detalles en Artifact Hub.
Añadimos el repositorio.
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
Creamos un volumen independiente del despliegue.
vi mediawiki-pvc.yaml
Este volumen tiene que permitir ser accedido desde diferentes pods.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mediawiki
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: longhorn
  resources:
    requests:
      storage: 2Gi
Definimos el fichero de propiedades.
vi mediawiki-values.yaml
Configuramos MediaWiki, SMTP y MariaDB externo.
mediawikiUser: admin
mediawikiPassword: "admindamin"
mediawikiEmail: [email protected]
mediawikiName: My Wiki
mediawikiHost: "wiki.domain.cat"
allowEmptyPassword: no
smtpHost: "smtp-relay.email-relay-mngmt"
smtpPort: "25"
persistence:
	enabled: true
	existingClaim: mediawiki
service:
  type: ClusterIP
ingress:
  enabled: true
  ingressClassName: nginx-extranet
  hostname: wiki.domain.cat
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 256m
mariadb:
  enabled: false
externalDatabase:
  host: database.domain.intranet
  port: 3306
  user: user
  password: password
  database: wiki
La contraseña debe tener 8 caracteres o más. Si no es correcta, el proceso se quedará atascado en la tarea de instalación.
Si hemos configurado el SMTP, añadimos el acceso.
vi mediawiki-allow-relay.yaml
Abrimos acceso al nuevo servicio en su namespace.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-mediawiki
  namespace: email-relay-mngmt
spec:
  podSelector:
    matchLabels:
      app.kubernetes.io/instance: smtp-relay
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: mediawiki
          podSelector:
            matchLabels:
              app.kubernetes.io/instance: mediawiki
      ports:
        - protocol: TCP
          port: 25
Aplicamos todos los cambios.
kubectl create namespace mediawiki
kubectl apply -f mediawiki-pvc.yaml -n mediawiki
helm install mediawiki bitnami/mediawiki -f mediawiki-values.yaml -n mediawiki
kubectl apply -f mediawiki-allow-relay.yaml
Configuración
Tanto la configuración como los plugins requieren acceso al volumen para modificar y subir nuevos ficheros. Para facilitar el proceso, se crea un pod temporal con acceso al mismo volumen, y en este se instalará cualquier herramienta que necesitemos.
Definimos el pod.
vi mediawiki-pod.yaml
El pod es un nginx con base Debian y acceso root. Esto nos da un pod que se mantiene activo, con capacidad para instalar y acceso al volumen en /data/mediawiki.
apiVersion: v1
kind: Pod
metadata:
  name: temp
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: storage
      mountPath: /data
  volumes:
  - name: storage
    persistentVolumeClaim:
      claimName: mediawiki
Desplegamos el pod.
kubectl apply -f mediawiki-pod.yaml -n mediawiki
Una vez desplegamos, accedemos al pod e instalamos cualquier editor.
kubectl exec -it -n mediawiki temp -- /bin/bash
Recordar borrarlo tras terminar la configuración.
LocalSettings.php
El fichero maestro de configuración es el LocalSettings.php. Según lo que queramos configurar habrá que ajustar unas partes u otras.
Esta es una lista de links hacia la documentación de los más típicos:
- Logos
- Favicon
- Cambiar extensiones soportadas para subir
- Permisos de usuarios
- Iniciar plugins
- Plugin: Editor
Algunos cambios requieren reiniciar el pod de MediaWiki.
La lista de plugins activos se muestra en la pantalla de versión:
https://wiki.domain.cat/wiki/Special:Version
Algunos plugins requieren actualizar el sistema, por ejemplo, para crear nuevas tablas en la base de datos. Tras activar el plugin se debe acceder al pod de MediaWiki y lanzar el siguiente comando:
php /opt/bitnami/mediawiki/maintenance/update.php