
Wiki.js est un outils selfhosted développé en javascript qui permet de mettre en place simplement un système de wiki puissant, complet et jolie.
L'un des gros avantages de ce dernier c'est la synchronisation avec git directement pour la sauvegarde et le versionning.
La version 3.0 devrais sortir d'ici la fin d'année avec beaucoup de nouveautés:
Site officiel : https://js.wiki
Documentation : https://docs.requarks.io
Tous d'abord pour la mise en place de Wiki.js il nous faut une base de donnée.
Pour ma part je vais utiliser MariaDB dans sa dernière version stable : https://mariadb.org/download/?t=repo-config&d=Debian+11+"Bullseye"&v=10.7&r_m=xtom_ams
Voici les commandes à exécuter pour ajouter MariaDB à votre système :
sudo apt-get install software-properties-common dirmngr apt-transport-https
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64,i386,arm64,ppc64el] https://mirrors.xtom.nl/mariadb/repo/10.7/debian bullseye main'
Vous pouvez également créer un fichier MariaDB sources.list personnalisé. Pour ce faire, copiez et collez ce qui suit dans un fichier sous /etc/apt/sources.list.d (nous suggérons de nommer le fichier MariaDB.list ou quelque chose de similaire), ou ajoutez-le au bas de votre /etc/apt/sources.list/file.
# MariaDB 10.7 repository list - created 2022-04-29 14:32 UTC
# https://mariadb.org/download/
deb [arch=amd64,i386,arm64,ppc64el] https://mirrors.xtom.nl/mariadb/repo/10.7/debian bullseye main
deb-src https://mirrors.xtom.nl/mariadb/repo/10.7/debian bullseye main
Une fois la clé importée et le référentiel ajouté, vous pouvez installer MariaDB avec :
sudo apt-get update
sudo apt-get install mariadb-server -y
systemctl enable mariadb
A présent il nous faut initialiser la base de donnée MariaDB:
mysql_secure_installation
Le mot de passe de l’utilisateur root est demandé. Il ne s’agit pas ici du mot de passe de l’utilisateur root sur la machine elle-même mais de l’utilisateur SQL (base de données). A ce stade, aucun mot de passe ne lui a été configuré, c’est donc ce que nous allons faire. Appuyez simplement sur Entrée.

A la question suivante, tapez la lettre Y pour répondre Yes et appuyez sur Entrée.


A la question suivante, on vous demande justement si vous voulez attribuer un mot de passe au compte root. Tapez la lettre Y pour répondre Yes et appuyez sur Entrée.

Saisissez 2 fois le mot de passe que vous voulez donner au compte SQL root.
Attention, aucun symbole ne va s’afficher pendant la saisie, soyez vigilant à votre frappe !

Vous pourrez par la suite répondre Yes à toutes les autres questions posées.

Maintenant que l’accès aux bases de données est sécurisé, nous allons pouvoir nous y connecter avec le compte root et le mot de passe que nous venons de lui définir :
sudo mysql -u root -p
mysql> create database wiki_db character set utf8mb4 collate utf8mb4_bin;
mysql> create user wiki_user@localhost identified by 'password';
mysql> grant all privileges on wiki_db.* to wiki_user@localhost;
mysql> quit;
Pensez à changer le mot de passe
password!
Si vous installez votre base de donnée sur un autre serveur, changez la valeur localhost en "%".
wget https://github.com/requarks/wiki/releases/download/v2.5.278/wiki-js.tar.gz
mkdir /var/wiki
tar xzf wiki-js.tar.gz -C /var/wiki
cd /var/wiki
chmod 777 /var/wiki/data
config.sample.yml en config.yml :mv config.sample.yml config.yml
nano config.yml
#######################################################################
# Wiki.js - CONFIGURATION #
#######################################################################
# Full documentation + examples:
# https://docs.requarks.io/install
# ---------------------------------------------------------------------
# Port the server should listen to
# ---------------------------------------------------------------------
port: 3000
# ---------------------------------------------------------------------
# Database
# ---------------------------------------------------------------------
# Supported Database Engines:
# - postgres = PostgreSQL 9.5 or later
# - mysql = MySQL 8.0 or later (5.7.8 partially supported, refer to docs)
# - mariadb = MariaDB 10.2.7 or later
# - mssql = MS SQL Server 2012 or later
# - sqlite = SQLite 3.9 or later
db:
type: mariadb
# PostgreSQL / MySQL / MariaDB / MS SQL Server only:
host: localhost
port: 3306
user: wiki_user
pass: password
db: wiki_db
ssl: false
# Optional - PostgreSQL / MySQL / MariaDB only:
# -> Uncomment lines you need below and set `auto` to false
# -> Full list of accepted options: https://nodejs.org/api/tls.html#tls_tls_createsecurecontext_options
sslOptions:
auto: true
# rejectUnauthorized: false
# ca: path/to/ca.crt
# cert: path/to/cert.crt
# key: path/to/key.pem
# pfx: path/to/cert.pfx
# passphrase: xyz123
# Optional - PostgreSQL only:
schema: public
# SQLite only:
storage: path/to/database.sqlite
#######################################################################
# ADVANCED OPTIONS #
#######################################################################
# Do not change unless you know what you are doing!
# ---------------------------------------------------------------------
# SSL/TLS Settings
# ---------------------------------------------------------------------
# Consider using a reverse proxy (e.g. nginx) if you require more
# advanced options than those provided below.
ssl:
enabled: false
port: 3443
# Provider to use, possible values: custom, letsencrypt
provider: custom
# ++++++ For custom only ++++++
# Certificate format, either 'pem' or 'pfx':
format: pem
# Using PEM format:
key: path/to/key.pem
cert: path/to/cert.pem
# Using PFX format:
pfx: path/to/cert.pfx
# Passphrase when using encrypted PEM / PFX keys (default: null):
passphrase: null
# Diffie Hellman parameters, with key length being greater or equal
# to 1024 bits (default: null):
dhparam: null
# ++++++ For letsencrypt only ++++++
domain: wiki.yourdomain.com
subscriberEmail: admin@example.com
# ---------------------------------------------------------------------
# Database Pool Options
# ---------------------------------------------------------------------
# Refer to https://github.com/vincit/tarn.js for all possible options
pool:
# min: 2
# max: 10
# ---------------------------------------------------------------------
# IP address the server should listen to
# ---------------------------------------------------------------------
# Leave 0.0.0.0 for all interfaces
bindIP: 0.0.0.0
# ---------------------------------------------------------------------
# ---------------------------------------------------------------------
# Log Level
# ---------------------------------------------------------------------
# Possible values: error, warn, info (default), verbose, debug, silly
logLevel: info
# ---------------------------------------------------------------------
# Log Format
# ---------------------------------------------------------------------
# Output format for logging, possible values: default, json
logFormat: default
# ---------------------------------------------------------------------
# Offline Mode
# ---------------------------------------------------------------------
# If your server cannot access the internet. Set to true and manually
# download the offline files for sideloading.
offline: false
# ---------------------------------------------------------------------
# High-Availability
# ---------------------------------------------------------------------
# Set to true if you have multiple concurrent instances running off the
# same DB (e.g. Kubernetes pods / load balanced instances). Leave false
# otherwise. You MUST be using PostgreSQL to use this feature.
ha: false
# ---------------------------------------------------------------------
# Data Path
# ---------------------------------------------------------------------
# Writeable data path used for cache and temporary user uploads.
dataPath: ./data
# ---------------------------------------------------------------------
# Body Parser Limit
# ---------------------------------------------------------------------
# Maximum size of API requests body that can be parsed. Does not affect
# file uploads.
bodyParserLimit: 5mb
curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
apt-get install -y nodejs
node -v
sudo apt install nginx -y
sudo systemctl enable nginx
sudo nano /etc/nginx/sites-available/prot-web03.prot.local
N'oublier pas de changer le nom du fichier selon votre configuration.
server {
listen 80;
server_name prot-web03.prot.local;
return 301 https://prot-web03.prot.local$request_uri;
}
server {
listen 443 ssl;
listen [::]:443;
server_name prot-web03.prot.local;
#ssl on;
ssl_certificate /etc/nginx/ssl/prot-web03.cer;
ssl_certificate_key /etc/nginx/ssl/prot-web03.key;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Pour la partie SSL il vous faudra générer des certificats soit par Let's encrypt, soit en auto-signé. Nous verrons comment auto-signé des certificats plus bas avec AD CS.
sudo ln -s /etc/nginx/sites-available/prot-web03.prot.local /etc/nginx/sites-enabled
mkdir /etc/nginx/ssl
openssl req -new -sha256 -nodes -days 1095 -out /etc/nginx/ssl/prot-web03.csr -newkey rsa:2048 -keyout /etc/nginx/ssl/prot-web03.key -config <(
cat <<-EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C=FR
L=Nantes
CN = prot-web03.prot.local
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = www.prot-web03.prot.local
DNS.2 = prot-web03.prot.local
DNS.3 = localhost
IP.1 = 192.168.80.63
IP.2 = 127.0.0.1
EOF
)
Bien penser à modifier selon votre configuration
Il faut maintenant récupper le fichier .csr et le transferer sur votre serveur ADCS.
Maintenant sur votre serveur ADCS ouvre un terminal powershell ou cmd, puis lancer la commande suivante :
certreq -submit -attrib "CertificateTemplate:WebServer"
Vous sera demandé votre fichier .csr.

Choisissez votre autorité de certification.


Transferer ce fichier .cer sur votre serveur dans le dossier /etc/nginx/ssl/.
Maintenant on vérifie si notre configuration nginx est valide avec :
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
wiki.service dans le répertoire /etc/systemd/system.nano /etc/systemd/system/wiki.service
/var/wiki) : [Unit]
Description=Wiki.js
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always
# Consider creating a dedicated user for Wiki.js here:
User=nobody
Environment=NODE_ENV=production
WorkingDirectory=/var/wiki
[Install]
WantedBy=multi-user.target
Sauvegardez le fichier (CTRL+X, suivis de Y).
Redémarrez systemd :
systemctl daemon-reload
systemctl start wiki
systemctl enable wiki
systemctl restart nginx