Humhub

De Reliable Brain

J'ai recherché récemment un outil permettant de créer un petit réseau social au niveau du boulot.

L'outil devait permettre le travail collaboratif, l'échange de documents, de gérer des groupes.

Je suis tombé sur HumHub que je n'avais jamais testé, et pour cause, l'outil est jeune mais extrêmement prometteur.

[modifier]

Debian 12

Prérequis

On va d'abord satisfaire les prérequis : https://docs.humhub.org/docs/admin/requirements

  1. Installer Apache2
    apt install apache2 libapache2-mod-fcgid
  2. Installer PHP 8.2 : [Debian 11:PHP8.2]
apt install php8.2-{imagick,gd,curl,zip,mysql,ldap,intl,apcu,sqlite3,fpm}
  1. Redémarrer Apache pour intégrer toutes les extensions PHP
     service apache2 restart
     a2enconf php8.2-fpm
  2. Installer serveur SQL
    apt install mariadb-server php-mysql
    # Sécuriser le serveur SQL<source>
     mysql_secure_installation
  3. Valider sans mot de passe, pour répondre Y à Set root password? [Y/n]
  4. Saisir 2 fois le mot de passe root
  5. Accepter "Remove anonymous users? [Y/n] Y"
  6. Accepter "Disallow root login remotely? [Y/n] Y"
  7. Accepter "Remove test database and access to it? [Y/n] Y"
  8. Accepter "Reload privilege tables now? [Y/n] Y"
  9. Se reconnecter avec le compte root
 mysql -u root -p
use mysql;
update user set plugin= where User='root';
flush privileges;
  1. Créer la base de données
 CREATE DATABASE `humhub` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  1. Donner les droits à un compte créé à la volée
 GRANT ALL ON `humhub`.* TO `humhub_dbuser`@localhost IDENTIFIED BY '<motdepasse>';
  1. Recharger les privilèges
 FLUSH PRIVILEGES;
  1. Et sortir
    exit;
  2. Activer FPM
 a2enmod proxy_fcgi setenvif && a2enconf php8.2-fpm
 systemctl restart apache2

Installation

Suivre la procédure d'installation :

  1. https://docs.humhub.org/docs/admin/server-setup
  2. https://docs.humhub.org/docs/admin/installation/

Finalisation

  1. Création des CronTab
crontab -e -u www-data
    1. Sélectionner "nano" puis copier les 2 lignes suivantes tout à la fin :
* * * * * /var/www/humhub/protected/yii queue/run >/dev/null 2>&1
* * * * * /var/www/humhub/protected/yii cron/run >/dev/null 2>&1
  1. Pour finaliser les pretty URL, quelques particularités :

Configuration des Pretty URL

Par défaut, l’URL de HumHub inclut un fichier index.php dans l’adresse, ce qui donne une URL du type « https://exemple.com/index.php?r=dashboard%2Fdashboard », par exemple. En utilisant la fonction des Pretty URL ou URL Rewriting, vous pouvez créer des URL plus courtes et plus simples à déchiffrer, telles que « https://exemple.com/dashboard ».

Pour activer cette fonction, il faut modifier la configuration de HumHub et éventuellement celle du serveur web.

Du côté de HumHub, vous devrez modifier le fichier de configuration

/var/www/humhub/protected/config/common.php en y ajoutant le bloc suivant :

'components' => [ 'urlManager' => [ 'showScriptName' => false, 'enablePrettyUrl' => true ] ]

Notre documentation propose une description plus détaillée des Pretty URL.

XSendFile : Téléchargement des PJ

Voilà l'un des points qui nous a donné le plus de fil à retordre. S'il est facile d'uploader sur HumHub, le download ne se faisait pas. Les images n'apparaissent pas, et le téléchargement proposait des fichiers de 0Kb.

Il faut procéder en 3 temps :

  1. Installer le composant XSendFile si ce n'est pas déjà fait
sudo apt install libapache2-mod-xsendfile
systemctl restart apache2
  1. Dans Humhub, activer l'option dans "Administration" > "Réglages" > "Fichiers" puis cocher la case "Activer le support X-Sendfile"
  2. Modifier le fichier de configuration d'Apache ou le .htaccess
  3. ajouter :
XSendFile On
XSendFilePath /path/to/humhub/uploads

Relancer Apache :

 /etc/init.d/apache2 restart

Normalement, tout devrait être OK.


Erreur SQLSTATE[HY000] [2002] No such file or directory

EtherPad

Ce module est génial, car il permet un vrai travail collaboratif, et un Chat. De plus, avec l'installation d'AbiWord, il devient possible d'importer et d'exporter des documents Microsoft Office ou LibreOffice, en plus des .rtf et .txt

Installation d'EtherPad

La démarche est ici : https://github.com/humhub/humhub-modules-notes/blob/master/README.md, mais plus précisément décrite ici : https://github.com/ether/etherpad-lite#installation

Ce qui donne, pour un serveur Debian sur lequel on en profitera pour installer node.js si ce n'est pas déjà fait :

apt-get install gzip git curl python libssl-dev pkg-config build-essential
apt-get install curl
curl -sL https://deb.nodesource.com/setup | bash -
apt-get install -y nodejs build-essential

# Création d'un user ether pad
adduser etherpad
cd /home/etherpad

# Installation d'Etherpad via git
git clone git://github.com/ether/etherpad-lite.git

Il est possible de tester immédiatement :

bin/run.sh

Ouvrir un navigateur avec http://@IP:9001 pour tester si Etherpad permet de créer des notes. Faire Ctrl-C pour stopper EtherPad.

  1. Avec phpmyadmin, j'ai créé un user etherpad avec sa base de données éponyme, au format MyISAM
  2. Aussitôt après, modifier le fichier /home/etherpad/etherpad-lite/settings.json pour indiquer l'utilisation de cette base de données,
  3. Désactiver "dbType" : "dirty" au profit de "dbType" : "mysql"
  4. compléter les champs en dessous avec le nom de la base et du compte etherpad et mot de passe associé
  5. En profiter aussi pour modifier les paramètres suivants du fichier settings :
    1. "ip" : "Adresse IP de la machine"
    2. "sessionKey" : créer un code de 10 caractères de long ou plus
    3. "abiword" : normalement, une fois que ce module est installé, le chemin doit être "/usr/bin/abiword". A vérifier avec la commande "which abiword"
  6. Désactiver les /* et */ autour du bloc "users" afin de permettre l'utilisation des comptes user et admin surtout pour l'ajout de plugin en mode Web.
  7. Enregistrer le fichier settings.json
  8. Ouvrir le fichier APIKEY.txt, copier le contenu dans un presse-papier
  9. installer le module EtherPad dans HumHub depuis l'interface d'administration, puis l'activer, et le configurer
  10. Coller le presse-papier dans le champ APIKEY du module Etherpad dans l'interface d'administration de HumHub

quelques optimisations

  1. Open your settings.json file
    1. Set maxAge to a LARGE value such as 99999999
    2. Set minify to true
  2. Utiliser impérativement une base de donnée en lieu et place du module DirtyDB
  3. Utiliser le moteur de base MyISAM en lieu et place de InnoDB
  4. Supprimer les plugins inutiles

Source : https://github.com/ether/etherpad-lite/wiki/Optimizing-Etherpad


Ajouter Abiword

Abiword est un traitement de texte, mais il sera ici utilisé comme un service par etherpad.

sudo apt-get install abiword

Relancer Etherpad

Lancer etherpad comme un service

Suivre le document suivant : https://github.com/ether/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service

#!/bin/sh

### BEGIN INIT INFO
# Provides:          etherpad-lite
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts etherpad lite
# Description:       starts etherpad lite using start-stop-daemon
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/node/bin"
LOGFILE="/var/log/etherpad/etherpad.log"
EPLITE_DIR="/usr/share/etherpad"
EPLITE_BIN="bin/safeRun.sh"
USER="etherpad"
GROUP="etherpad"
DESC="Etherpad"
NAME="etherpad"

set -e

. /lib/lsb/init-functions

start() {
  echo "Starting $DESC... "
  
	start-stop-daemon --start --chuid "$USER:$GROUP" --background --make-pidfile --pidfile /var/run/$NAME.pid --exec $EPLITE_DIR/$EPLITE_BIN -- $LOGFILE || true
  echo "done"
}

#We need this function to ensure the whole process tree will be killed
killtree() {
    local _pid=$1
    local _sig=${2-TERM}
    for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
        killtree ${_child} ${_sig}
    done
    kill -${_sig} ${_pid}
}

stop() {
  echo "Stopping $DESC... "
  if test -f /var/run/$NAME.pid; then
    while test -d /proc/$(cat /var/run/$NAME.pid); do
      killtree $(cat /var/run/$NAME.pid) 15
      sleep 0.5
    done
    rm /var/run/$NAME.pid
  fi
  echo "done"
}

status() {
  status_of_proc -p /var/run/$NAME.pid "" "etherpad" && exit 0 || exit $?
}

case "$1" in
  start)
	  start
	  ;;
  stop)
    stop
	  ;;
  restart)
	  stop
	  start
	  ;;
  status)
	  status
	  ;;
  *)
	  echo "Usage: $NAME {start|stop|restart|status}" >&2
	  exit 1
	  ;;
esac

exit 0

Désormais, etherpad se lance, se stoppe et se relance comme apache : /etc/init.d/etherpad restart


Ajout de plugins

Se rendre sur la page <@IP du serveur>:9001/admin et s'authentifier.

Maintenance

Commandes en lignes de commande, à lancer dansle répertoire humhub/protected :

Commandes en ligne CLI

Mettre à jour

Faire un backup des bases de données et des fichiers

git pull
/var/www/<nom du répertoire contenant HumHub>/protected/yiic update

Nettoyer les anciens backups

Il arrive que le serveur sature si trop de backups saturent l'espace disque ou les ionodes sur Linux. Dans ce cas, le site devient inutilisable.

Il faut faire du ménage dans le répertoire "/protected/runtime/updater/backups" en supprimant les plus anciennes sauvegardes évidemment.