Diferencia entre revisiones de «Etherpad»
m (Correcciones) |
mSin resumen de edición |
||
(No se muestran 9 ediciones intermedias del mismo usuario) | |||
Línea 2: | Línea 2: | ||
Se va a instalar etherpad 1.8.7 cuyos requisitos mínimos son: | Se va a instalar etherpad 1.8.7 cuyos requisitos mínimos son: | ||
* nodejs >= 10.13.0 | * nodejs >= 10.13.0 | ||
* Nginx (opcional): servidor web para usar como frontal (reverse proxy). | |||
* MariaDB (opcional): base de datos para almacenar la información (mariadb-server). | |||
== Usuario root == | |||
Todos los comandos se ejecutarán como root, a menos que se especifique lo contrario. | Todos los comandos se ejecutarán como root, a menos que se especifique lo contrario. | ||
<syntaxhighlight lang="Bash">sudo -i</syntaxhighlight> | <syntaxhighlight lang="Bash">sudo -i</syntaxhighlight> | ||
== Ubuntu Server == | |||
Se va a instalar en un servidor: Ubuntu Server 20.04 TLS. | |||
=== Instalación de requisitos === | === Instalación de requisitos === | ||
Línea 43: | Línea 45: | ||
<syntaxhighlight lang="Bash">sudo -i -u etherpad /opt/etherpad-lite-1.8.7/bin/installDeps.sh</syntaxhighlight> | <syntaxhighlight lang="Bash">sudo -i -u etherpad /opt/etherpad-lite-1.8.7/bin/installDeps.sh</syntaxhighlight> | ||
=== Añadir extensiones para Etherpad === | === Añadir extensiones para Etherpad === | ||
Línea 81: | Línea 82: | ||
<syntaxhighlight lang="Bash">systemctl start etherpad.service</syntaxhighlight> | <syntaxhighlight lang="Bash">systemctl start etherpad.service</syntaxhighlight> | ||
* Habilitar Etherpad durante el arranque | * Habilitar Etherpad durante el arranque | ||
Línea 159: | Línea 159: | ||
#try_files $uri $uri/ =404; | #try_files $uri $uri/ =404; | ||
proxy_pass http://127.0.0.1:9001; | proxy_pass http://127.0.0.1:9001; | ||
proxy_buffering off; # be careful, this line doesn't override any proxy_buffering on set in a conf.d/file.conf | |||
proxy_set_header Host $host; | |||
proxy_pass_header Server; | |||
# Note you might want to pass these headers etc too. | |||
proxy_set_header X-Real-IP $remote_addr; # https://nginx.org/en/docs/http/ngx_http_proxy_module.html | |||
proxy_set_header X-Forwarded-For $remote_addr; # EP logs to show the actual remote IP | |||
proxy_set_header X-Forwarded-Proto $scheme; # for EP to set secure cookie flag when https is used | |||
proxy_http_version 1.1; # recommended with keepalive connections | |||
# WebSocket proxying - from https://nginx.org/en/docs/http/websocket.html | |||
proxy_set_header Upgrade $http_upgrade; | |||
proxy_set_header Connection $connection_upgrade; | |||
} | } | ||
Línea 180: | Línea 191: | ||
#} | #} | ||
} | } | ||
map $http_upgrade $connection_upgrade { | |||
default upgrade; | |||
'' close; | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Línea 189: | Línea 206: | ||
<syntaxhighlight lang="Bash">systemctl reload nginx</syntaxhighlight> | <syntaxhighlight lang="Bash">systemctl reload nginx</syntaxhighlight> | ||
== Configuración y personalización de Etherpad == | |||
Todos estos cambios se realizan editando el fichero ''"/opt/etherpad-lite-1.8.7/settings.json"''. | |||
Recomendamos realizar primero un backup del fichero original: | |||
<syntaxhighlight lang="Bash">cp -a /opt/etherpad-lite-1.8.7/settings.json /opt/etherpad-lite-1.8.7/settings.json.orig</syntaxhighlight> | |||
=== Cambiar título de la Wiki === | |||
Remplazar el tag "title": | |||
<syntaxhighlight lang="JSON">"title": "Castanedo Etherpad",</syntaxhighlight> | |||
=== Personalizar el favicon === | |||
Subir al servidor el nuevo icono y actualizar la ruta en el tag "favicon": | |||
<syntaxhighlight lang="JSON">"favicon": "favicon.ico",</syntaxhighlight> | |||
=== Personalizar skin === | |||
Existen dos temas por defecto en Etherpad: "no-skin" y "colibris" (por defecto). | |||
<syntaxhighlight lang="JSON">"skinName": "colibris",</syntaxhighlight> | |||
=== Personalizar colores (skinVariants) === | |||
La opción "skinVariants" permite cambiar los posibles colores base del skin (por defecto colores claros). | |||
Para establecer un color oscuro: | |||
<syntaxhighlight lang="JSON">"skinVariants": "super-dark-toolbar super-dark-background dark-editor",</syntaxhighlight> | |||
Para ver todas las posibilidades introduzca la siguiente URL "http://wwww.ejemplo.com/p/test#skinvariantsbuilder" y cambie la variable con los valores que escoja en la página. | |||
=== Configuración IP y puerto TCP (IP Binding) === | |||
Se puede configurar el puerto TCP que usa Etherpad (por defecto: 9001) y las direcciones IP autorizadas (por defecto todas: 0.0.0.0). | |||
* '''IP Binding:''' como es este ejemplo estamos accediendo a Etherpad a través del servidor web nginx como frontal, vamos a limitar la conexiones a la dirección del servidor web (al estar en la misma máquina: 127.0.0.1). | |||
<syntaxhighlight lang="JSON"> | |||
// Sockets TCP/IP (Con IP Binding) | |||
"ip": "127.0.0.1", | |||
"port": 9001, | |||
</syntaxhighlight> | |||
* '''Sockets UNIX''' al estar en la misma máquina podríamos usar también Sockets UNIX (en vez de sockets TCP/IP). | |||
<syntaxhighlight lang="JSON"> | |||
// Sockets UNIX | |||
"ip": "", | |||
"port": "/opt/etherpad-lite-1.8.7/etherpad.socket", | |||
</syntaxhighlight> | |||
En este caso además habría modificar el "reverse proxy" de nginx para que usase el Socket UNIX de Etherpad. | |||
=== Idioma === | |||
Se puede modificar el idioma por defecto de Etherpad. | |||
Para español de España: | |||
<syntaxhighlight lang="JSON">"lang": "es-es"</syntaxhighlight> | |||
=== Base de datos MariaDB === | |||
Etherpad soporta las bases de datos: PostgreSQL, SQLite, MySQL/MariaDB y DirtyDB (esta última es por defecto). | |||
'''Importante:''' DirtyDB no se recomienda en entornos productivos. | |||
Por eso se va a cambiar a MariaDB. | |||
* Conectar a la base de datos (usuario root) | |||
<syntaxhighlight lang="Bash">mariadb</syntaxhighlight> | |||
* Crear base de datos: "etherpad_db" | |||
<syntaxhighlight lang="SQL">CREATE DATABASE 'etherpad_db';</syntaxhighlight> | |||
* Crear usuario: "etherpad" (cambiar contraseña) | |||
<syntaxhighlight lang="SQL">CREATE USER 'etherpad'@'localhost' identified by 'CONTRASEÑA';</syntaxhighlight> | |||
* Establecer permisos | |||
<syntaxhighlight lang="SQL">GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE ON `etherpad_db`.* TO 'etherpad'@'localhost';</syntaxhighlight> | |||
* Aplicar y salir de MariaDB | |||
<syntaxhighlight lang="SQL"> | |||
FLUSH PRIVILEGES; | |||
quit; | |||
</syntaxhighlight> | |||
* Editar la cadena de conexión (en Etherpad: settings.json) | |||
<syntaxhighlight lang="JSON"> | |||
"dbType" : "mysql", | |||
"dbSettings" : { | |||
"user": "etherpad", | |||
"host": "localhost", | |||
"port": 3306, | |||
"password": "CONTRASEÑA", | |||
"database": "etherpad_db", | |||
"charset": "utf8mb4" | |||
}, | |||
</syntaxhighlight> | |||
=== Autentificación de usuarios === | |||
Es posible activar la autentificación de usuarios y configurar sus permisos. | |||
* Cambiar tag "requireAuthentication" a true | |||
<syntaxhighlight lang="JSON">"requireAuthentication": true,</syntaxhighlight> | |||
* Cambiar tag "trustProxy" a true | |||
<syntaxhighlight lang="JSON">"trustProxy": true,</syntaxhighlight> | |||
'''Importante:''' esto almacenará los usuarios en texto plano ('''INSEGURO'''). | |||
Si se quiere continuar así descomentar la sessión de usuarios. | |||
* Instalar plugin: "pe_hash_auth" | |||
Este plugin permite almacenar el hash de la contraseña (en SHA512 o en Bcrypt). | |||
<syntaxhighlight lang="Bash">npm install ep_hash_auth</syntaxhighlight> | |||
* Instalación de python-bcrypt | |||
<syntaxhighlight lang="Bash">apt-get install python-bcrypt</syntaxhighlight> | |||
* Generación de hashes de usuario (guzman) | |||
<syntaxhighlight lang="Bash"> | |||
python2 -c 'import bcrypt; print(bcrypt.hashpw(b"CONTRASEÑA", bcrypt.gensalt(rounds=10, prefix=b"2a")))' | |||
</syntaxhighlight> | |||
* Copiar el hash y usar en el siguiente apartado | |||
* Editar el fichero de configuración | |||
<syntaxhighlight lang="JSON"> | |||
"users": { | |||
"admin": { | |||
// 1) "password" can be replaced with "hash" if you install ep_hash_auth | |||
// 2) please note that if password is null, the user will not be created | |||
"password": "changeme1", | |||
"is_admin": true | |||
}, | |||
"guzman": { | |||
// 1) "password" can be replaced with "hash" if you install ep_hash_auth | |||
// 2) please note that if password is null, the user will not be created | |||
//"password": "changeme1", | |||
"hash": "$2aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", | |||
"displayname": "Guzman Castanedo", | |||
"is_admin": false | |||
} | |||
}, | |||
</syntaxhighlight> | |||
'''Nota:''' también puede ponerse la configuración de los usuarios fuera del fichero de configuración. | |||
'''Error:''' el plugin ep_hash_auth no me funciona porque le faltan las dependencias de bcrypt (npm install bcrypt). Sin embargo, etá librería no está dispoible para NodeJS 10.19.0. | |||
=== Aplicar cambios === | |||
Para que los cambios sean efectivos hay que reiniciar Etherpad. | |||
<syntaxhighlight lang="Bash">systemctl restart etherpad</syntaxhighlight> | |||
== Referencias == | == Referencias == | ||
Línea 195: | Línea 365: | ||
* [https://github.com/ether/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service https://github.com/ether/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service] | * [https://github.com/ether/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service https://github.com/ether/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service] | ||
* [https://www.npmjs.com/package/ep_hash_auth https://www.npmjs.com/package/ep_hash_auth] | |||
[[Categoría:Notas]] | [[Categoría:Notas]] |
Revisión actual - 13:50 8 ene 2021
Requisitos
Se va a instalar etherpad 1.8.7 cuyos requisitos mínimos son:
- nodejs >= 10.13.0
- Nginx (opcional): servidor web para usar como frontal (reverse proxy).
- MariaDB (opcional): base de datos para almacenar la información (mariadb-server).
Usuario root
Todos los comandos se ejecutarán como root, a menos que se especifique lo contrario.
sudo -i
Ubuntu Server
Se va a instalar en un servidor: Ubuntu Server 20.04 TLS.
Instalación de requisitos
- Instalación NodeJS
apt-get install nodejs npm
Requisitos en el OS
Se va a crear el usuario y el grupo "etherpad" para ejecutar etherpad.
groupadd -r etherpad
useradd -r -d /home/etherpad -m -g etherpad -s /bin/bash etherpad
Instalación de Etherpad 1.8.7
- Descarga de Etherpad 1.8.7
cd /opt
curl -OL "https://github.com/ether/etherpad-lite/archive/1.8.7.tar.gz"
- Compresión de Etherpad
tar -xzvf 1.8.7.tar.gz -C /opt
- Establecimiento de permisos
chown -R etherpad:etherpad /opt/etherpad-lite-1.8.7
- Instalación de dependencias de Etherpad
sudo -i -u etherpad /opt/etherpad-lite-1.8.7/bin/installDeps.sh
Añadir extensiones para Etherpad
Se añaden las siguientes extensiones:
npm install ep_headings2 ep_markdown ep_comments_page ep_align ep_font_color ep_webrtc ep_embedded_hyperlinks2
Etherpad con servicio (SystemD)
Se va a configurar Etherpad para que arranque con es OS.
- Crear el fichero "/etc/systemd/system/etherpad.service"
[Unit]
Description=Etherpad-lite, the collaborative editor.
After=syslog.target network.target
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad-lite-1.8.7
Environment=NODE_ENV=production
ExecStart=/usr/bin/nodejs --experimental-worker /opt/etherpad-lite-1.8.7/src/node/server.js
# use mysql plus a complete settings.json to avoid Service hold-off time over, scheduling restart.
Restart=always
[Install]
WantedBy=multi-user.target
- Recargar demonios
systemctl daemon-reload
- Arrancar Etherpad
systemctl start etherpad.service
- Habilitar Etherpad durante el arranque
systemctl enable etherpad.service
- Comprobar que Etherpad ha arrancado
systemctl status etherpad.service
Usar nginx como frontal
Etherpad tiene su propio servidor web que, por defecto, escucha en el puerto 9001/tcp. Se va a configurar nginx para que funcione como frontal y redireccione al servidor web de Etherpad (reverse proxy).
- Crear y editar el fichero: "/etc/nginx/sites-available/etherpad"
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
ssl_certificate /etc/nginx/ssl/etherpad.crt;
ssl_certificate_key /etc/nginx/ssl/etherpad.key;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.php;
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:9001;
proxy_buffering off; # be careful, this line doesn't override any proxy_buffering on set in a conf.d/file.conf
proxy_set_header Host $host;
proxy_pass_header Server;
# Note you might want to pass these headers etc too.
proxy_set_header X-Real-IP $remote_addr; # https://nginx.org/en/docs/http/ngx_http_proxy_module.html
proxy_set_header X-Forwarded-For $remote_addr; # EP logs to show the actual remote IP
proxy_set_header X-Forwarded-Proto $scheme; # for EP to set secure cookie flag when https is used
proxy_http_version 1.1; # recommended with keepalive connections
# WebSocket proxying - from https://nginx.org/en/docs/http/websocket.html
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# #fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# fastcgi_pass unix:/run/php/php7.3-fpm.sock;
# # With php-cgi (or other tcp sockets):
# #fastcgi_pass 127.0.0.1:9000;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
- Habilitar configuración
ln -s /etc/nginx/sites-available/etherpad /etc/nginx/sites-enabled/etherpad
- Recargar configuración de nginx
systemctl reload nginx
Configuración y personalización de Etherpad
Todos estos cambios se realizan editando el fichero "/opt/etherpad-lite-1.8.7/settings.json".
Recomendamos realizar primero un backup del fichero original:
cp -a /opt/etherpad-lite-1.8.7/settings.json /opt/etherpad-lite-1.8.7/settings.json.orig
Cambiar título de la Wiki
Remplazar el tag "title":
"title": "Castanedo Etherpad",
Personalizar el favicon
Subir al servidor el nuevo icono y actualizar la ruta en el tag "favicon":
"favicon": "favicon.ico",
Personalizar skin
Existen dos temas por defecto en Etherpad: "no-skin" y "colibris" (por defecto).
"skinName": "colibris",
Personalizar colores (skinVariants)
La opción "skinVariants" permite cambiar los posibles colores base del skin (por defecto colores claros). Para establecer un color oscuro:
"skinVariants": "super-dark-toolbar super-dark-background dark-editor",
Para ver todas las posibilidades introduzca la siguiente URL "http://wwww.ejemplo.com/p/test#skinvariantsbuilder" y cambie la variable con los valores que escoja en la página.
Configuración IP y puerto TCP (IP Binding)
Se puede configurar el puerto TCP que usa Etherpad (por defecto: 9001) y las direcciones IP autorizadas (por defecto todas: 0.0.0.0).
- IP Binding: como es este ejemplo estamos accediendo a Etherpad a través del servidor web nginx como frontal, vamos a limitar la conexiones a la dirección del servidor web (al estar en la misma máquina: 127.0.0.1).
// Sockets TCP/IP (Con IP Binding)
"ip": "127.0.0.1",
"port": 9001,
- Sockets UNIX al estar en la misma máquina podríamos usar también Sockets UNIX (en vez de sockets TCP/IP).
// Sockets UNIX
"ip": "",
"port": "/opt/etherpad-lite-1.8.7/etherpad.socket",
En este caso además habría modificar el "reverse proxy" de nginx para que usase el Socket UNIX de Etherpad.
Idioma
Se puede modificar el idioma por defecto de Etherpad. Para español de España:
"lang": "es-es"
Base de datos MariaDB
Etherpad soporta las bases de datos: PostgreSQL, SQLite, MySQL/MariaDB y DirtyDB (esta última es por defecto). Importante: DirtyDB no se recomienda en entornos productivos. Por eso se va a cambiar a MariaDB.
- Conectar a la base de datos (usuario root)
mariadb
- Crear base de datos: "etherpad_db"
CREATE DATABASE 'etherpad_db';
- Crear usuario: "etherpad" (cambiar contraseña)
CREATE USER 'etherpad'@'localhost' identified by 'CONTRASEÑA';
- Establecer permisos
GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE ON `etherpad_db`.* TO 'etherpad'@'localhost';
- Aplicar y salir de MariaDB
FLUSH PRIVILEGES;
quit;
- Editar la cadena de conexión (en Etherpad: settings.json)
"dbType" : "mysql",
"dbSettings" : {
"user": "etherpad",
"host": "localhost",
"port": 3306,
"password": "CONTRASEÑA",
"database": "etherpad_db",
"charset": "utf8mb4"
},
Autentificación de usuarios
Es posible activar la autentificación de usuarios y configurar sus permisos.
- Cambiar tag "requireAuthentication" a true
"requireAuthentication": true,
- Cambiar tag "trustProxy" a true
"trustProxy": true,
Importante: esto almacenará los usuarios en texto plano (INSEGURO). Si se quiere continuar así descomentar la sessión de usuarios.
- Instalar plugin: "pe_hash_auth"
Este plugin permite almacenar el hash de la contraseña (en SHA512 o en Bcrypt).
npm install ep_hash_auth
- Instalación de python-bcrypt
apt-get install python-bcrypt
- Generación de hashes de usuario (guzman)
python2 -c 'import bcrypt; print(bcrypt.hashpw(b"CONTRASEÑA", bcrypt.gensalt(rounds=10, prefix=b"2a")))'
- Copiar el hash y usar en el siguiente apartado
- Editar el fichero de configuración
"users": {
"admin": {
// 1) "password" can be replaced with "hash" if you install ep_hash_auth
// 2) please note that if password is null, the user will not be created
"password": "changeme1",
"is_admin": true
},
"guzman": {
// 1) "password" can be replaced with "hash" if you install ep_hash_auth
// 2) please note that if password is null, the user will not be created
//"password": "changeme1",
"hash": "$2aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"displayname": "Guzman Castanedo",
"is_admin": false
}
},
Nota: también puede ponerse la configuración de los usuarios fuera del fichero de configuración.
Error: el plugin ep_hash_auth no me funciona porque le faltan las dependencias de bcrypt (npm install bcrypt). Sin embargo, etá librería no está dispoible para NodeJS 10.19.0.
Aplicar cambios
Para que los cambios sean efectivos hay que reiniciar Etherpad.
systemctl restart etherpad