Installation d’etherpad-lite avec ldap / ssl / apache

Au boulo, suite à une demande d’utilisateurs, j’ai dû mettre en place un service de publication collaborative en ligne. Le choix s’est porté sur etherpad-lite qui a fait ses preuves.
Celui-ci est disponible sur le site: http://etherpad.org/

Installation

Le port n’existant pas dans gentoo, on va devoir se taper l’installation à la pogne.
Donc dans un premier temps, on installe les dépendances (ici node.js) puis on récupère l’archive.

echo "net-libs/nodejs ~amd64" >> /etc/portage/package.keywords
emerge -uD nodejs
cd /opt
git clone git://github.com/ether/etherpad-lite.git

On va créer l’utilisateur et le groupe etherpad et passer le dossier sous cette identité

useradd etherpad -U -d /opt/etherpad-lite -s /bin/bash
chown etherpad:etherpad ./etherpad-lite
cd ./etherpad-lite/bin

Enfin on teste:

ulysse bin # su etherpad -c /opt/etherpad-lite/bin/run.sh
Ensure that all dependencies are up to date...  If this is the first time you have run Etherpad please be patient.
Ensure jQuery is downloaded and up to date...
Clear minfified cache...
ensure custom css/js files are created...
start...
[2013-04-29 17:10:38.824] [WARN] console - You need to set a sessionKey value in settings.json, this will allow your users to reconnect to your Etherpad Instance if your instance restarts
[2013-04-29 17:10:38.826] [WARN] console - DirtyDB is used. This is fine for testing but not recommended for production.
[2013-04-29 17:10:39.211] [INFO] console - Installed plugins: ep_etherpad-lite
[2013-04-29 17:10:39.226] [INFO] console - Your Etherpad Lite git version is 2273cf9
[2013-04-29 17:10:39.226] [INFO] console - Report bugs at https://github.com/ether/etherpad-lite/issues
[2013-04-29 17:10:39.260] [INFO] console -    info  - 'socket.io started'
[2013-04-29 17:10:39.282] [INFO] console - You can access your Etherpad-Lite instance at http://127.0.0.1:9001/
[2013-04-29 17:10:39.282] [WARN] console - Admin username and password not set in settings.json.  To access admin please uncomment and edit 'users' in settings.json

En allant dans votre butineur favori, vous devriez voir ceci à l’adresse: http://127.0.0.1:9001/


Nous avons donc maintenant, une installation sommaire avec plein de log WARN (Cf ci-dessus)

Configuration

On va stocker les données dans une base MySQL. On va donc créer une base “etherpad” ainsi qu’un utilisateur “ethertap” avec des droits dessus:

CREATE DATABASE etherpad CHARACTER SET UTF8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON etherpad.* TO 'etherpad'@'localhost' IDENTIFIED BY 'MOTDEPASSEMYSQL';

Pour la connexion à MySQL, on passera par les sockets

Ici vous trouverez le nécessaire pour la génération des clés / certificats du serveur.

Puis, on complète le fichier de configuration est: /opt/etherpad-lite/settings.json

{
        "title": "Nom du PAD",
        "favicon": "favicon.ico",
        "ip": "adresse d'écoute",
        "port" : 9001,
        "sessionKey" : "chaine_session",
        "ssl" : {
                "key"  : "/etc/ssl/epad/epl-server.key",
                "cert" : "/etc/ssl/epad/epl-server.crt"
        },
        "dbType" : "mysql",
        "dbSettings" : {
                "user"    : "etherpad",
                "port"    : "/var/run/mysqld/mysqld.sock",
                "password": "MOTDEPASSEMYSQL",
                "database": "etherpad"
        },
        "defaultPadText" : "Message d'accueil sur un PAD vierge",
        "requireSession" : false,
        "editOnly" : false,
        "minify" : true,
        "maxAge" : 21600,
        "abiword" : null,
        "requireAuthentication": false,
        "requireAuthorization": false,
        "users": {
                "admin": {
                        "password": "MOTDEPASSEADMIN",
                        "is_admin": true
                }
        },
        "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],
        "loglevel": "INFO",
        "logconfig" : {
                "appenders": [
                        {
                                "type": "file",
                                "filename": "/opt/etherpad-lite/etherpad.log",
                                "backups": 3
                        }
                ]
        }
}

En ligne 14, on indique à MySQL que l’on veut s’y connecter au moyen de sockets.
En ligne 24, on a désactivé l’authentification pour les utilisateurs classiques, car on va se servir de ldap avec apache pour les authentifier.

Maintenant vous pouvez vous rendre sur: https://adresse_d_ecoute:9001
là vous devriez voir l’interface de création / ouverture d’un document.
L’interface web d’administration se trouve à l’adresse: https://adresse_d_ecoute:9001/admin/
vous y trouverez un onglet concernant les plugins, a vous de personnaliser votre etherpad-lite…

Mode reverse-proxy avec Apache + Authentification LDAP

Maintenant, on va faciliter l’accès: on va se donner une joli adresse web et faire une translation de port
Il va falloir installer apache avec son module proxy et modifier le fichier /etc/conf.d/apache2 en rajoutant -D PROXY dans la liste des options de lancement.
On va avoir besoin aussi d’un fichier de configuration de l’hôte virtuel:

<VirtualHost ADRESSE_SERVEUR:443>
        ServerAdmin admin@localhost
        ServerName NOM_DOMAINE
        ServerSignature Off
        CustomLog /var/log/apache2/etherpad_access.log combined
        ErrorLog /var/log/apache2/etherpad_error.log
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile /etc/ssl/epad/epl-server.crt
        SSLCertificateKeyFile /etc/ssl/epad/epl-server.key
        <Location />
                AuthType Basic
                AuthName "Access restreint"
                AuthBasicProvider       ldap
                AuthzLDAPAuthoritative  off
                AuthLDAPRemoteUserIsDN  off
                AuthLDAPGroupAttributeIsDN      off
                AuthLDAPURL             ldap://serveur_ldap/base_ldap?uid?sub
                Require valid-user
                addDefaultCharset UTF-8
        </Location>
        <Directory />
                Options -Indexes FollowSymlinks Multiviews
                AllowOverride All
                Order deny,allow
                Allow from all
        </Directory>
        <IfModule mod_proxy.c>
                ProxyVia On
                SSLProxyEngine on
                ProxyRequests Off
                SSLProxyCACertificateFile /etc/ssl/epad/epl-server.crt
                ProxyPass / https://ADRESSE_ECOUTE_ETHERPAD:9001/
                ProxyPassReverse / https://ADRESSE_ECOUTE_ETHERPAD:9001/
                ProxyPreserveHost on
                <Proxy *>
                        Options FollowSymLinks MultiViews
                        AllowOverride All
                        Order deny,allow
                        allow from all
                </Proxy>
        </IfModule>
</VirtualHost>

Les lignes 11 à 21 concernent l’authentification via LDAP. Les lignes 30 à 42 concernent le renvoie vers l’adresse du serveur etherpad sur le port 9001.

EtherPad-lite comme un service

Ici vous trouverez les différents scripts à mettre pour pouvoir lancer Etherpad-lite comme les autres services sur votre serveur.
En gros, sur la gentoo, on va créer un script /etc/init.d/etherpad-lite:

#!/sbin/runscript
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

depend() {
        need net mysql
        after apache2
}

start() {
        ebegin "Starting ${RC_SVCNAME}"
        start-stop-daemon -S -m --pidfile ${PIDFILE} -x ${NODE} -u ${USER} -d "${ETHERPATH}" -b -- ${ARGS}
        eend $?
}

stop() {
        ebegin "Stopping ${RC_SVCNAME}"
        start-stop-daemon -K -x ${NODE} -u ${USER} -d "${ETHERPATH}"
        eend $?
}

suivit d’un petit:

chmod 0755 /etc/init.d/etherpad-lite

et son fichier de conf /etc/conf.d/etherpad-lite:

ETHERPATH="/opt/etherpad-lite/"
ARGS="node_modules/ep_etherpad-lite/node/server.js"
ETHERLOG="${ETHERPATH}/etherpad.log"
USER="etherpad"
PIDFILE="/var/run/etherpad-lite.pid"
NODE="/usr/bin/node"

on test le lancement du service:

/etc/init.d/etherpad-lite start

On se rend sur l’adresse habituelle et on devrait voir la même chose.
Si tout fonctionne bien, il nous suffit de configurer le lancement automatique:

rc-update add etherpad-lite default

Et de changer le shell de connexion de l’utilisateur etherpad dans /etc/password en remplaçant /bin/bash par /sbin/nologin

Rotation des logs

On va rajouter la rotation des logs. Pour ce faire, on ajoute un petit script:
/etc/logrotate.d/etherpad-lite

/opt/etherpad-lite/*log {
  missingok
  notifempty
  sharedscripts
  postrotate
  /etc/init.d/etherpad-lite restart > /dev/null 2>&1 || true
  endscript
}

Exports supplémentaires

Afin de donner la possibilité de réaliser des exports sympas comme pdf, odt, doc, etc. On va avoir besoin d’abiword avec son plugin “command-line”.

echo "app-office/abiword plugins" >> /etc/portage/package.use
emerge -D abiword

Puis dans le fichier de configuration d’etherpad-lite (/opt/etherpad-lite/settings.json), on rajoute le chemin vers le binaire abiword que l’on obtiens ainsi:

whereis abiword

Dans ce fichier, en ligne 23, on remplace la valeur “null” en face d’abiword par le chemin précédemment trouvé.

Reste à faire:

Il ne reste plus qu’à binder l’authentification LDAP sur celle de etherpad. (Investigation en cours)
N’hésitez pas à me faire remonter vos remarques si ça ne paraît pas clair voire faux.

http://mclear.co.uk/2010/02/03/etherpad-with-active-directory-ldapad/

Be Sociable, Share!

6 comments to Installation d’etherpad-lite avec ldap / ssl / apache

  • kaizakilla

    Bonjour,
    Super tutoriel. Merci.
    Je m’interesse par contre à la partie sur laquelle t’as pas develloppé.
    Il s’agit d’une authentification (Binder) via un LDAP.
    As tu des pistes ?
    J’aimerais réliser un outil collaboratif sur un serveur web privé pour mes collaborateurs via une
    identification du ldap interne.
    Merci pou ton retour sur le sujet.
    Cordialement.

    • dervishe

      Salut,
      Merci pour le commentaire. Je dois dire que j’ai cherché mais que pour l’instant ça reste lettre morte…
      J’ai vu un plugin qui s’appelle ldapauth mais je ne suis pas arrivé encore à le faire fonctionner correctement.
      Du coups j’avais zappé l’affaire ;)
      Ceci dit, je me remet dessus et te tiens au courant.
      Cordialement

  • Lorenzo

    je suis dans la même position que kaizakilla:

    J’applaudis à deux mains ce tutoriel en attendant avec intérêt la description d’une installation de module LDAP réussie!
    Cordialement

  • Jean-Paul

    Bonjour,
    bravo pour le tuto !
    Je cherche à installer etherpad avec la configuration suivante :
    - HOST 1 : un reverse proxy apache qui reçoit la requête http://etherpad.mondomain.com et qui proxy_pass vers le HOST 2.
    - HOST 2 : machine hébergeant etherpad

    J’ai tendance à dire que le virtalhost du host 1 est le suivant :

    ServerName etherpad.mondomain.com
    ProxyPreserveHost On
    ProxyRequests off
    ProxyPass / http://@IP HOST 2/
    ProxyPassReverse / http://@IP HOST 2/
    RequestHeader set X-Forwarded-Proto “http”

    Puis sur le HOST 2 (il comprend plusieurs virtualhost) :

    LoadModule proxy_module /etc/httpd/modules/mod_proxy.so
    LoadModule proxy_http_module /etc/httpd/modules/mod_proxy_http.so
    LoadModule headers_module /etc/httpd/modules/mod_headers.so
    LoadModule deflate_module /etc/httpd/modules/mod_deflate.so

    ServerName etherpad.mondomain.com

    ProxyVia On
    ProxyRequests Off
    ProxyPass / http://127.0.0.1:9001/
    ProxyPassReverse / http://127.0.0.1:9001/
    ProxyPreserveHost on

    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all

    Ensuite, concernant settings.json, j’ai positionné ainsi :
    “ip”: “127.0.0.1″,
    “port” : 9001,

    Mais cela ne fonctionne pas….
    Sur le HOST 1 (reverse proxy), voici les erreurs :
    [Tue Sep 15 10:53:51 2015] [error] (70007)The timeout specified has expired: proxy: HTTP: attempt to connect to @IP HOST 1:80 failed
    [Tue Sep 15 10:53:51 2015] [error] ap_proxy_connect_backend disabling worker for (@IP HOST 1)

    >> Une idée ?

    Merci de votre aide !

  • Jean-Paul

    Bonjour,
    j’ai réussi à faire fonctionner l’authentification ldap avec un BIND :

    LoadModule proxy_module /etc/httpd/modules/mod_proxy.so
    LoadModule proxy_http_module /etc/httpd/modules/mod_proxy_http.so
    LoadModule headers_module /etc/httpd/modules/mod_headers.so
    LoadModule deflate_module /etc/httpd/modules/mod_deflate.so
    LoadModule ldap_module modules/mod_ldap.so
    LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

    ServerName pad.mondomaine.fr
    ProxyVia On
    ProxyRequests Off
    ProxyPass / http://127.0.0.1:9001/
    ProxyPassReverse / http://127.0.0.1:9001/
    ProxyPreserveHost on

    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all

    AuthType Basic
    AuthName “[ Utilisez vos login et mot de passe habituels ]”
    AuthBasicProvider ldap
    #AuthzLDAPAuthoritative off
    AuthLDAPURL ldaps://URL_DE_MON_SERVEUR_LDAP:NUMERO_PORT/ou=people,dc=xxx,dc=xxxxx?CHAMP_LDAP_SERVANT_DE_LOGIN?sub
    AuthLDAPBindDN “uid=COMPTE_BIND,ou=OU_du_compte_bind,dc=xxxxxxxxxx,dc=xx”
    AuthLDAPBindPassword MOT_DE_PASSE_du_compte_bind
    require valid-user

    Par contre, et je sollicite votre aide : j’aimerais pouvoir ne pas demander l’authentification ldap pour un pad existant.
    Autrement dit : je dois avoir un compte LDAP pour créer un pad et je peux le distribuer à n’importe qui…même des individus externes à mon établissement.

    Je tente sans succès ainsi de sortir les pads existants ….
    (Toutes les urls de pads sont de la forme http://pad.mondomaine.fr/p/nom_du_pad)

    #Allow from 0.0.0.0/32
    Options -Indexes +FollowSymlinks
    AllowOverride All
    Order Allow,Deny
    Allow from All
    #Satisfy any

    Une idée ? Merci de votre aide !

  • Jean-Paul

    les balises ne sont pas reprises…

    Location /
    AuthType Basic
    AuthName “[ Utilisez vos login et mot de passe habituels ]”
    AuthBasicProvider ldap
    #AuthzLDAPAuthoritative off
    AuthLDAPURL ldaps://URL_DE_MON_SERVEUR_LDAP:NUMERO_PORT/ou=people,dc=xxx,dc=xxxxx?CHAMP_LDAP_SERVANT_DE_LOGIN?sub
    AuthLDAPBindDN “uid=COMPTE_BIND,ou=OU_du_compte_bind,dc=xxxxxxxxxx,dc=xx”
    AuthLDAPBindPassword MOT_DE_PASSE_du_compte_bind
    require valid-user
    / Location

    Location /p
    #Allow from 0.0.0.0/32
    Options -Indexes +FollowSymlinks
    AllowOverride All
    Order Allow,Deny
    Allow from All
    #Satisfy any
    /Location

Leave a Reply to Lorenzo

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>