Guía no definitiva para instalar ethercalc en debian 8

Goobye lenin, botella, my friend :). Lo nuevo no siempre es mejor. Por suerte ethercalc no es algo nuevo.

Con no definitiva me refiero a que no es algo acabado, algo bueno. Es solo una forma más de como montarlo. Existen mejores formas y esta solo pretende ayudar en el proceso.

Ethercalc nos permite manejar una hoja de calculo de forma colaborativa como un pad.

 

Formas de instalar algo existen muchas. Yo voy a relatar una en una maquina de pruebas y que espero sirva de ejemplo (bueno o malo) para una instalación mejor si es posible.

Lo primero es instalar nodejs.  Esto siempre genera miedos. Por suerte existe nvm (node version manager) y por tanto existe la herramienta para poder pasar de una versión a otra de forma flexible.

Instalación de nvm en debian 8:

# apt-get update
# apt-get install build-essential libssl-dev git

Comprobamos la versión: https://github.com/creationix/nvm
Actualmente la 0.33

# curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh -o install_nvm.sh
 # bash install_nvm.sh
 # source ~/.profile

 

Instalar nodejs con nvm ahora:

# nvm ls-remote

 

Instalaremos la  v6.9.2   (Latest LTS: Boron)

 

# nvm install 6.9.2
# nvm use 6.9.2
# node -v
# nvm alias default 6.9.2

Ahora a por la mandanga.

Instalar ethercalc:

 

El repo en github: https://github.com/audreyt/ethercalc (la ministra de Taiwan)

 

# npm i -g ethercalc

 

Ya podríamos ejecutar ethercalc y que se vea en el puerto 8000.

 

 

Instalar redis:

 

Si no instalas redis cuando ejecutes ethercalc generará un archivo llamado dump.json que guardará los cambios realizados. No obstante es mejor instalar redis leñes.

 

# apt-get install software-properties-common

en el sources.list

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

 

Y luego

# apt-get update
# apt-get install redis-server

 

Ahora si ejecutamos ethercalc usará redis .

Para copia de seguridad copiaremos en debian 8 el contenido de: /var/lib/redis/dump.rdb

 

Mejor poner por delante un nginx

Configuración de ejemplo para nginx

upstream backend {
 server 127.0.0.1:8000 max_fails=3;
 server localhost:8000 max_fails=3;
}

map $http_upgrade $connection_upgrade {
 default upgrade;
 '' close;
}

server {
 listen 80;
 server_name calc.dominio.es localhost;
 location / {
 include /etc/nginx/cors.conf;
 return 301 https://$server_name$request_uri;
 }
}

proxy_cache_path /var/www/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
proxy_temp_path /var/www/cache/tmp;

server {
 listen 443 ssl spdy;
 server_name calc.dominio.es localhost;

large_client_header_buffers 32 64k;
 root /usr/share/nginx/html;

index index.html index.htm;

ssl on;
 ssl_certificate /etc/letsencrypt/live/calc.dominio.es/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/calc.dominio.es/privkey.pem;

access_log /var/log/nginx/calc.dominio.es-access.log;
 error_log /var/log/nginx/calc.dominio.es-error.log;


 location ~* (\.(css|png|gif|svg|ico|txt)|static/.*\.js(on)?|manifest\.(appcache|webapp|json)|browserconfig\.xml)$ {
 root /var/www/calc/;
 expires 24h;
 add_header Cache-Control public;
 }

location ~* "(?:[.]|/_/[^/]+/)(?:html|csv|csv\.json)$" {
 proxy_pass http://backend;
 proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_read_timeout 31536000;
 proxy_buffers 32 64k;
 proxy_buffer_size 128k;
 add_header Strict-Transport-Security max-age=31536000;
 include /etc/nginx/cors.conf;
 }
 
 location / {
 gzip on;
 gzip_min_length 1000;
 gzip_proxied any;
 proxy_pass http://backend;
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_read_timeout 31536000;
 proxy_set_header Connection $connection_upgrade;
 # prevents 502 bad gateway error
 proxy_buffers 32 64k;
 proxy_buffer_size 128k;
 add_header Strict-Transport-Security max-age=31536000;
 include /etc/nginx/cors.conf;
 }
}

 

 

Necesitaremos crear los directorios oportunos si seguimos ese ejemplo. Por ejemplo crear /var/www/cache y /var/www/cache/tmp

También crear el archivo cors.cof si lo necesitamos. Con este contenido:

 

if ($request_method = OPTIONS) {
 add_header Access-Control-Allow-Origin "*";
 add_header Access-Control-Allow-Methods "GET,POST,PUT";
 add_header Access-Control-Allow-Headers "X-Requested-With,Content-Type,If-Modified-Since";
 return 204;
}

 

Demonizar rápidamente

 

# cd /etc/init.d/
# nano ethercalc

Metemos esto por ejemplo:

 

#!/bin/sh

if [ "$1" = null ]; then
        echo "usa como argumento: start o stop"
fi

if [ "$1" = 'start' ]; then
        echo "Iniciando ethercalc"
                start-stop-daemon --start --chuid "root:root" --background --make-pidfile --pidfile /var/run/ethercalc.pid --exec /root/.nvm/versions/node/v6.9.2/bin/ethercalc || true
fi

if [ "$1" = 'stop' ]; then
        echo "parando ethercalc"
                killall node
fi

No es el mejor ejemplo, es solo un ejemplo malo. Eso no servirá si se reinicia la maquina. No obstante si nos servirá para levantar y parar el servicio.

 

# update-rc.d ethercalc defaults

 

Eso dará error ya que no hemos metido la cabecera típica. puedes copiarla de otros script en /etc/init.d/ y hacerlo en condiciones si quieres.

 

Sobre el ssl

Eso con letsencrypt lo solucionas (gracias a que existe en la actualidad leñes).

 

¿Le ha gustado el contenido?

Si le ha gustado y le ha sido de utilidad puede donar aquí https://paypal.me/mierdatv .  
También puede escribir un comentario si lo considera oportuno.  
 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *