Wiki.js (sito ufficiale) è un ottimo portale wiki sviluppato in Node.js. E’ possibile installarlo su diverse piattaforme e supporta diverse tecnologie DB come backend.
Recentemente ho avuto necessità di effettuare una installazione su Openshift 4. Sebbene sia disponibile un helm chart, ho riscontrato un paio di problemi che impediscono il suo utilizzo su Openshift:
- i container vengono eseguiti come root (di default non permesso da Openshift e comunque sconsigliato)
- è necessario un accesso ad Internet diretto (niente proxy) per il download delle traduzioni (locales)
Ho raccolto in questo post e in un repository Github la procedura e i files necessari a completare l’installazione con successo.
1. Progetto
Ho creato un nuovo progetto che ospiterà l’istanza di Wikijs e il suo database:
oc new-project wikijs
2. Postgres
Ho scelto di utilizzare PostgreSQL come backend.
Openshift mette a disposizione due template per l’esecuzione di una istanza PostgreSQL, uno con storage persistente (quello che utilizzeremo) e uno con storage effimero (= i dati vengono persi ad ogni riavvio del POD).
Da GUI, è possibile accedere ai template tramite Developer Portal:
Da shell, ho creato una nuova applicazione basata sul template postgresql-persistent con il comando:
oc new-app --template postgresql-persistent -p VOLUME_CAPACITY=10Gi -p POSTGRESQL_VERSION=10-el8
Ho indicato al template di creare un volume persistente da 10Gb e di utilizzare la versione di PostgreSQL 10 basata su RHEL8.
E’ possibile vedere tutti i parametri supportati da un template con il comando:
oc process --parameters -n openshift postgresql-persistent
Il template crea automaticamente un deploymentConfig, un persistentVolumeClaim, un service e un secret. Il secret in particolare contiene tutte le informazioni necessarie per il collegamento al database:
Vedremo l’utilizzo di questo secret nella configurazione di Wiki.js nel paragrafo successivo.
3. Wiki.js
Esiste una docker image ufficiale per Wiki.js, che però presenta i due problemi indicati ad inizio articolo.
Ho quindi preparato un Dockerfile che modifica l’immagine cambiando l’utenza (da root a uid 1001) e utilizza la modalità sideloading per includere già nell’immagine i locales necessari e che normalmente verrebbero scaricati da Internet durante il processo di setup.
Se non avete la possibilità di fare la build della nuova immagine, l’ho già resa disponibile su DockerHub:
docker push lucadentella/wikijs-ocp4-sideload:2.5
Ho preparato un deploymentConfig che utilizza l’immagine per istanziare il POD applicativo di Wiki.js.
Per la configurazione del collegamento al database, utilizzo lo stesso secret creato dal template nel paragrafo precedente, in modo da recuperare in automatico tutti i dati:
Una volta applicato il deploymentConfig, è possibile verificare dai logs che Wiki.js venga eseguito correttamente e riesca a collegarsi al DB:
Infine, ho creato un service (porta TCP/3000) e una rotta (https) per esporre l’applicativo all’esterno e quindi potermi collegare via browser e completare il setup:
thanks, I built on it to use Crunchy PostgreSQL which has TLS enabled, the apps needs the CA to be setup.
I can make a PR if you like, documented/scripted some commands too.
PR made : https://github.com/lucadentella/wikijs-openshift4/pull/1PR made : https://github.com/lucadentella/wikijs-openshift4/pull/1