Etherpad-lite: edición de documentos online y colaborativa

Hace unos días os hablabamos del nuevo pad de elbinario. Hoy os traemos cómo instalarlo, si no lo conoceis, etherpad es el servicio que seguramente conoceréis por plataformas cómo titanpad o piratepad. Hoy os traemos cómo instalarlo en nuestro propio servidor.

Instalar dependencias

apt-get install gzip git-core curl python libssl-dev pkg-config build-essential

Instalar node.js

Instalamos node.js desde el código fuente. Bajamos el código desde la web oficial. En nuestro caso sería así:

wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz
tar -xvf node-v0.10.26.tar.gz

Nos dará cómo resultado el directorio node-v0.10.26. Accedemos a él e instalamos con los siguientes comandos, cómo root:

cd node-v0.10.26
./configure
make
make install

Actualizar node.js (Opcional)

Si queremos actualizar node.js sin tener que volverlo a compilar, podremos usar los siguientes comandos.

npm install -g n
n update

Crear usuario etherpad

Por una cuestión de seguridad, crearemos un usuario llamado etherpad, que será el encargado de ejecutar etherpad-lite.

adduser etherpad

Y accedemos cómo ese usuario, los siguientes comandos los ejecutaremos cómo etherpad:

su etherpad

Instalar etherpad-lite

Para instalar etherpad-lite empezaremos clonando el repositorio disponible en github y accederemos al directorio:

git clone https://github.com/ether/etherpad-lite
cd etherpad-lite

Una vez dentro del directorio, lo ejecutamos y si habéis instalado las dependencias deberíais poder acceder a él.

./bin/run.sh

Si todo a ido bien podréis entrar en la dirección que os devuelve, probablemente localhost:9001.

Actualizar etherpad-lite (Opcional)

Si en un futuro queremos actualizar etherpad-lite, desde el directorio que hemos creado, que debería estar en /home/etherpad/etherpad-lite/ ejecutaremos:

git pull origin

Pero siempre deberíamos hacer una copia de seguridad del directorio etherpad-lite:

cp etherpad-lite{,.backup}

Configuración

Redirección con subdominio y Nginx (Opcional)

Instalaremos Nginx:

apt-get install nginx

Si queremos acceder a etherpad-lite, ya deberíamos poder hacerlo desde la ip del servidor por el puerto 9001, si tiene los puertos abiertos. Para hacerlo más cómodo vamos a configurar Nginx para que nos haga de proxy hacía etherpad-lite. Aquí podéis ver cómo queda la configuración. Contiene redirección de http a https con la ruta a los certificados que generaremos a continuación. Si habéis seguido todos los pasos, con que cambiéis el nombre del servidor (pad.elbinario.net) por el vuestro, debería funcionaros.

El virtual host se crea en /etc/nginx/sites-available/ y luego se hace un enlace simbólico hacía /etc/nginx/sites-enabled. Lo haríamos así:

nano /etc/nginx/sites-available/etherpad-lite
ln -s /etc/nginx/sites-available/etherpad-lite /etc/nginx/sites-enabled/etherpad-lite

Recordad a rellenar el archivo con el ejemplo.

Y reiniciar nginx:

service nginx restat

Configuración SSL (Recomendado)

Para la configuración de SSL empezaremos generando claves necesarias, para eso habilitaremos un directorio en la carpeta home del usuario etherpad.

mkdir ssl
cd ssl

Generaremos las claves y el certificado:

openssl genrsa -out pad.key 4096
openssl req -new -key pad.key -out pad.csr
openssl x509 -req -days 365 -in pad.csr -signkey pad.key -out pad.crt

Ahora podemos hacer tres cosas:

  • Usar SSL en etherpad-lite. Seguro si accedemos directamente al puerto.
  • Usar SSL en Nginx. Seguro si bloqueamos el acceso a través del puerto.
  • Usar SSL en ambos. Seguro en ambos casos pero consume más recursos.

Nosotros nos quedaremos con SSL en Nginx y bloquearemos los puertos que no queramos con iptables.

Usar SSL en Nginx (Recomendado)

Para usar SSL en Nginx simplemente debéis añadir las siguientes líneas al fichero de configuración. Aquí podéis ver cómo quedaría entero.

#ssl
ssl on;
ssl_certificate /home/etherpad/ssl/pad.crt;
ssl_certificate_key /home/etherpad/ssl/pad.key;

Usar MySQL (Opcional)

Instalaremos el servidor MySQL y accederemos a MySQL a través de la terminal:

apt-get install mysql-server-5.5
mysql -u root -p

Ejecutarmeos los dos siguientes comandos y cerraremos la sesión:

create database `etherpad-lite`;
grant all privileges on `etherpad-lite`.* to 'etherpad'@'localhost' identified by 'PASSWORD';
exit

Ahora habilitaremos MySQL en el archivo de configuración.

cd #volver a la home de etherpad
nano etherpad-lite/settings.json

“dbType” : “mysql”,
“dbSettings” : {
“user” : “etherpad”,
“host” : “localhost”,
“password”: “password”,
“database”: “etherpad-lite”
},

Aquí podéis ver cómo quedaría.

Y reiniciamos el servicio.

service etherpad restart

Luego volveremos a entrar a la base de datos para dejar bien la configuración del texto.

mysql -u root -p

Y ejecutaremos esto en la DB:

ALTER DATABASE `etherpad-lite` CHARACTER SET utf8 COLLATE utf8_bin;
USE `etherpad-lite`;
ALTER TABLE `store` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

Protegiendo el acceso al puerto 9001 con IPTABLES

Para proteger el acceso al puerto 9001 con iptables lo mejor que podemos hacer es bloquear todos los puertos excepto los que queramos tener abiertos. En este caso nos interesa tener abiertos los puertos:

  • 80 (http)
  • 443 (https)
  • 20 (ssh)

Crearemos un archivo en /etc/iptables/ con el contenido de este archivo:

nano /etc/iptables/iptables.up.rules

Para que iptables se inicie con el sistema:

echo "iptables-restore < /etc/iptables/iptables.up.rules

etherpad-lite cómo servicio (Opcional)

Para añadir etherpad-lite deberemos usar este script en bash. Lo añadimos, en Debian, en /etc/init.d/. Y le damos permisos de ejecución, todo esto cómo root:

nano /etc/init.d/etherpad-lite
chmod +x /etc/init.d/etherpad-lite

Y ahora deberías ser capaz de usar el comando con uno de los siguientes parámetros, después de reiniciar el sistema:

etherpad-lite start|stop|restart|status

Arrancar el servicio con el sistema (Opcional)

Para arrancar el servicio en el sistema añadiremos la siguiente línea a /etc/rc.local.

 echo "service etherpad-lite start" >> /etc/rc.local

Enlaces

5 Comments

    1. sudo solo es necesario si tu sistema esta configurado para usar sudoers, en ese caso la contraseña es la misma que la de tu usuario.

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax