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/
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.
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
je suis dans la même position que kaizakilla:
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 !
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 !
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