Installer Wikijs avec Docker

Au sommaire :

  • 1-Qu'est-ce que Wikijs ?
  • 2-Prérequis
  • 3-Déploiement
  • 4-Configuration
  • 5-Exposer son instance avec Traefik

1-Qu'est-ce que Wikijs ?

Wikijs est une application sous Javascript/NodeJS qui va vous permettre d'héberger votre propre instance Wiki.

Si vous voulez un exemple d'instance, voir celle de Wiki-Tech.

Accueil
Une documentation pour différents projets !

C'est une application que j'ai utilisé pendant un temps (je dois m'y remettre prochainement) et ce que j'ai beaucoup apprécié, c'est sa légèreté en terme de ressource mémoire/processeur côté serveur (côté client, c'est une autre histoire).

2-Prérequis

Pour déployer Wikijs, vous devez disposer d'une machine virtuelle fonctionnant sous Ubuntu Server.

Création de la machine virtuelle :

Virtualisation avec Proxmox VE : Si vous partez de zéro, suivez mon guide détaillé pour virtualiser Ubuntu sur Proxmox VE avec des réglages optimisés.

Virtualiser Ubuntu Server sur Proxmox VE
Guide d’installation de Ubuntu Server sur Proxmox VE avec mes meilleurs réglages.

Automatisation avec Cloud-Init : Pour gagner du temps lors de la configuration, utilisez un template Cloud-Init. Cela permet d'automatiser et de simplifier l'initialisation de vos machines virtuelles. Retrouvez les instructions dans ce guide.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Installation des outils nécessaires :

Docker et Docker Compose : Une fois la machine virtuelle prête, installez Docker et Docker Compose, indispensables pour gérer et orchestrer vos conteneurs. Ce guide vous accompagnera dans l'installation.

Installer Docker
Guide d’installation de Docker.

Exposition de l'application :

Proxy inverse avec Traefik : Pour exposer vos applications sur Internet de manière sécurisée, configurez un proxy inverse. Traefik est une solution recommandée. Suivez ce guide pour l'installation.

Installer Traefik avec Docker
Guide d’installation de Traefik.

3-Déploiement

Commencez par créer un dossier "docker" à la racine du dossier utilisateur"

mkdir -p ~/docker

Créez un fichier nommé "compose.yml"

touch ~/docker/compose.yml

Ouvrez le fichier "compose.yml" et copiez cette configuration.

networks:
# Docker Bridge Network
  default:
    driver: bridge

services:

  wikijs:
    image: lscr.io/linuxserver/wikijs:latest
    container_name: wikijs
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
#      DB_TYPE: sqlite #optional
#      DB_HOST: #optional
#      DB_PORT: #optional
#      DB_NAME: #optional
#      DB_USER: #optional
"      DB_PASS: #optional
    ports:
      - 3000:3000
    volumes:
      - ${APPDATA}/wikijs/config:/config
      - ${APPDATA}/wikijs/data:/data
    restart: unless-stopped

Pour les options communes :

  • network : en bridge (l'adresse IP sera celle de la machine virtuelle ou du conteneur LXC)
  • services : c'est là qu'il faudra ajouter les configurations de vos conteneurs
  • image : nom du registry suivi du nom de l'application (lscr.io/linuxserver/app_name)
  • container_name : le nom du conteneur, sinon Docker en choisira un de manière aléatoire (mieux vaut le nommer vous même)
  • environment : il y a les variables de base (PUID, PGID, TZ) qui correspondent à l'utilisateur, le groupe et le fuseau horaire. Pour la partie base de données, c'est SQLite qui est utilisé par défaut donc si vous souhaitez utiliser une autre solution comme PostgreSQL, MySQL, MariaDB ou MS SQL Server, décochez les options. Pour plus de simplicité, on reste sur celle par défaut.
  • volumes : variable ${APPDATA) (/home/user_name/appdata) suivi du nom de l'application (/app_name)
  • ports : le port d'écoute pour accéder à l'interface web (désactivé en local)
  • restart : unless-stopped par défaut. Le daemon de Docker redémarrera automatiquement le conteneur sauf si vous l'arretez, il faudra le démarrer manuellement

Téléchargez l'image et déployez le conteneur.

docker compose pull && docker compose create

Puis démarrez le conteneur.

docker start wikijs

4-Configuration

Une fois l'application démarrée, tapez l'adresse IP de votre machine virtuelle suivi du numéro de port (3000).

Indiquez :

  • Votre adresse mail
  • Un mot de passe (utilisez le générateur de Bitwarden, comme d'habitude)
  • Le nom de domaine de votre instance (si vous souhaitez l'exposer via Traefik)
  • Activer ou désactiver la télémétrie

Cliquez sur "Install".

Vous avez le choix entre créer votre page d'accueil, soit d'aller dans les paramètres d'administration.

Cliquez sur "Create Home Page" et vous aurez le choix entre :

  • Markdown : langage de balisage léger
  • Visual Editor : l'éditeur de texte classique
  • AsciiDoc : similaire à Markdown
  • Code : langage HTML
  • From Template : import d'un template existant

Indiquez le titre de la page, une description courte, un tag, le chemin puis cliquez sur "Ok".

J'ai juste mis comme message "coucou" histoire de mettre quelque chose.

Un exemple de mon instance.

J'ai pris de mauvaises habitudes en terme de documentation en me basant trop sur Ghost (alors que c'est un CMS à la base) mais Wikijs devrait vraiment vous plaire de par sa simplicité de déploiement et si vous êtes comme moi quelqu'un qui note énormément. Je vous le conseille vivement.

5-Exposer son instance avec Traefik

networks:
# default network
  default:
    driver: bridge
# Traefik network
  web:
    name: web
    driver: bridge

services:

  wikijs:
    image: lscr.io/linuxserver/wikijs:latest
    container_name: wikijs
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
#      DB_TYPE: sqlite #optional
#      DB_HOST: #optional
#      DB_PORT: #optional
#      DB_NAME: #optional
#      DB_USER: #optional
"      DB_PASS: #optional
    ports:
      - 3000:3000
    volumes:
      - ${APPDATA}/wikijs/config:/config
      - ${APPDATA}/wikijs/data:/data
    restart: unless-stopped
    labels:
      - traefik.enable=true
      - traefik.http.routers.wikijs.entrypoints=websecure
      - traefik.http.routers.wikijs.rule=Host(`wikijs.<domain_name>`)
      - traefik.http.routers.wikijs.service=wikijs-svc
      - traefik.http.services.wikijs-svc.loadbalancer.server.port=3000
      - traefik.http.routers.wikijs.tls.certresolver=letsencrypt