Cómo instalar Diaspora

De Wiki Diaspora*
Saltar a: navegación, buscar

Diaspora funciona como una red de servidores conectados, conocidos como «pods». Este documento contiene información técnica para instalar el software necesario para correr tu propio pod, ya sea para colaborar con el desarrollo, o como un nuevo servidor en la red de Diaspora.

Si solamente deseas utilizar Diaspora, no necesitas establecer tu propio pod: puedes unirte a un pod existente que ya ejecute el software de Diaspora. El pod al cual te unas puede ser mantenido por un amigo, tu universidad, o el servidor oficial en joindiaspora.com. Todos los pods de Diaspora se comunican y forman la red de Diaspora.

Si aun así quieres manejar tu propio pod… te felicitamos. Continúa leyendo.

Detalles importantes

  1. La instalación es un poco compleja. Podemos ayudarte, de cualquier forma. Si te encuentras con problemas, por favor visita el canal IRC, en Freenode.
  2. Estamos desarrollando Diaspora para los últimos y mejores exploradores, así que por favor actualiza tu versión de Firefox, Opera, Chrome o Safari, a sus versiones más recientes. Actualmente no soportamos ninguna versión de Internet Explorer, aunque dicho soporte está planeado en un futuro.
  3. En joindiaspora.com, ejecutamos la aplicación usando Thin como nuestro servidor de aplicación, y Nginx como nuestro servidor web. Puedes utilizar alguna otra aplicación de servidor (Passenger, Mongrel), o algún otro servidor web (Apache, Unicorn), pero el equipo central puede no tener la habilidad para ayudarte a instalarlo. Lo mismo aplica para la base de datos; por el momento utilizamos MySQL, pero estamos cerca de soportar PostgreSQL también, incluso podría funcionar actualmente. Existen usuarios en la comunidad que ejecutan Diaspora de esta manera, así que pregunta en el IRC y en la lista de correo electrónico.
  4. Diaspora obliga el uso de HTTPS, ya que utiliza flujos de OAuth2 para conectarse a las aplicaciones. Puedes obtener un certificado gratuito de SSL en StartSSL. Necesitarás hacer referencia al certificado que obtengas por parte de StartSSL en tu archivo de configuración de Nginx/Apache.
Nota: A pesar de que puedes instalar y poner en funcionamiento tu propio pod utilizando un certificado SSL firmado por ti mismo, tu pod podría no ser capaz de comunicarse con todos los demás. Es por tanto recomendable que utilices un certificado expedido por una autoridad de certificados confiable. Desafortunadamente, esto también significa que los certificados de CaCert no funcionarán. No son —aún— parte de la mayoría de los paquetes de certificados.

Señalando lo obvio

Con frecuencia vemos a personas haciendo todo como root. Si crees que es una buena idea: No lo es. ¡Es lo peor que puedes hacer! Todos los programas te solicitarán que los ejecutes como root, o te pedirán tu contraseña.

Advertencia: No inicies nada como root si no está explícitamente solicitado por esta guía. Simplemente utiliza tu usuario normal, o crea un usuario propio para Diaspora.

Preparando tu sistema

Para poder ejecutar Diaspora, deberás instalar las siguientes dependencias (las instrucciones específicas se muestran a continuación):

  • Build tools: paquetes necesarios para compilar los componentes que siguen.
  • Ruby: El lenguaje de programación Ruby. (Estamos desarrollando mayormente en 1.9.2 y el soporte para 1.8.7 se abandonará pronto).
  • RubyGems: Un gestor de paquetes para el código Ruby que utilizamos para descargar las librerías (gems) que usa Diaspora.
  • Bundler: Un herramienta de gestión para los proyectos de Ruby.
  • MySQL: Entorno de almacenamiento en línea.
  • O PostgreSQL: Entorno de almacenamiento en línea.
  • SQLite3: Sistema de administración de bases de datos relacionales.
  • OpenSSL: Una librería de cifrado.
  • libcurl: Una librería para hacer peticiones HTTP (y mucho más).
  • ImageMagick: Una librería de procesamiento de imágenes, la cual utilizamos para redimensionar fotos que se suben.
  • Git: Una sistema de control de versiones, el cual necesitarás para descargar el código fuente de Diaspora, desde GitHub.
  • Redis: Un almacén de valores de llaves que utilizamos vía Resque para procesar tareas que se ejecutan en segundo plano.

Siéntete libre de mirar las distribuciones y servicios listados, para obtener información sobre sistemas operativos/servicios específicos, para preparar tu sistema.

Cuando hayas terminado de seguir estas instrucciones, regresa y continúa.

Obtener el código de Diaspora

Nuestro código está alojado en GitHub. Nuestra test suite es ejecutada en Travis CI, debes revisar el build status, y verificar que tu combo de Ruby/DB sea verde y pase todos las pruebas antes de tomar el código.

Para obtener una copia de la fuente de Diaspora, utiliza el siguiente comando:

git clone git://github.com/diaspora/diaspora.git && cd diaspora

Si nunca has utilizado GitHub, su página de ayuda tiene una fantástica guía para que comiences.

Si ya has clonado el repositorio, asegúrate de hacer checkout a la rama master:

git checkout master

Instalar Diaspora

Preparación

Dependiendo de la base de datos quieras usar, agrega ya sea DB="mysql" para MySQL, o DB="postgres" para PostgreSQL, antes de cada comando que comience con bundle…, o exportar la variable del entorno: export DB="mysql" para MySQL o export DB="postgres".[1]

Instalar las gems requeridas

Para inicializar el servidor app por primera vez, debes utilizar Bundler para instalar las dependencias gem de Diaspora. Ejecuta (desde el directorio raíz de Diaspora):

bundle install --without development test heroku

Bundler también te advertirá si existe una nueva dependencia y necesitas instalar bundle de nuevo

Nota:
  • Si no obtienes una línea verde de éxito al final, revisa de nuevo que hayas instalado todas las dependencias. Si no puedes resolverlo, siéntete libre de pedir ayuda en la lista de correo o en el canal IRC.
  • Si planeas hacer cualquier desarrollo, simplemente ejecuta bundle install.
  • Si estás en Ruby 1.9.2 y obtienes un error, tal como: «secuencia inválida de bytes en US-ASCII (Error de argumento)», entonces requieres configurar el locale de tu sistema a UFT-8. Este reporte de errores de GitHub acerca de la gem que causa el problema tiene pasos para hacerlo, en Ubuntu.
  • Si recibes el mensaje «No se puedo obtener el Gemfile», asegúrate de que estás en el directorio de Diaspora (cd diaspora) que acabas de clonar.
  • Si haces cualquier otro desarrollo de rails en tu computadora, probablemente querrás ejecutar bundle install --path vendor para instalar las gems en el directorio local de Diaspora, para evitar así conflictos con tu entorno existente, o utlilzar un gemset RVM.

Configurar Diaspora

Diaspora necesita saber en qué servidor está corriendo. Copia config/diaspora.yml.example a config/diaspora.yml, coloca tu URL externa en el campo pod_url, y realiza cualquier otro cambio de configuración necesario.

Antecedentes

Diaspora es una aplicación Rails-app, y como tal, tiene diferentes modos de ejecución. La modalidad predeterminada es «modo de desarrollo», en el cual algunas características de rendimiento, tales como la obtención del código fuente, están deshabilitadas. La otra modalidad es «modo de producción», que es mejor para realmente correr el pod. Si quieres solo una instalación de prueba para desarrollar para Diaspora, mantén los valores por defecto. De cualquier modo, si planeas de hecho alojar un pod, elije el modo de producción.

Si deseas ejecutar el modo de producción:

  • Edita rails_env en la sección script_server, en config/script_server.yml.
  • Cambia el ajuste de «environment.assets.serve» a «true», en el archivo config/diaspora.yml. Con esta configuración habilitada, Diaspora puede tomar ventaja de la habilidad de Rails para servir contenido estático, como imágenes y archivos .css, desde el directorio /public de la aplicación. No obstante, Rails no es un servidor web, así que una mejor opción sería dejar «environment.assets.serve» establecido a «false»; y en cambio, instalar un verdadero servidor web, tal como Apache o Nginx, junto a Diaspora, y modificar la configuración del servidor web para que se ocupe del contenido estático él mismo.

Apache 2

<VirtualHost *:80>
  ServerName diaspora.midominio.com
  DocumentRoot /diaspora_root/public
  <Directory /diaspora_root/public>
      Allow from all
      Options -MultiViews
  </Directory>
</VirtualHost>

Para una configuración más avanzada, revisa este Gist: https://gist.github.com/719014.

Nota: Sobre el servidor OSX: Si deseas utilizar Apache en un servidor OSX, utiliza Server Admin para crear un sitio en el puerto 433. Un archivo debería ser creado en el directorio /etc/apache2/sites/ con un nombre como «000X_any_443_domain.com.conf». Los ajustes del proxy anteriores te permitirán continuar utilizando tus servicios web existentes junto a la instalación de Diaspora.

Nginx

Inspírate con nuestra configuración de Nginx.

lighttpd

Mira este artículo para obtener un ejemplo de configuración.

Configurar el SSL

Como se ha mencionado antes, necesitarás configurar Nginx para que apunte a tu certificado SSL (adquirido ya sea en StartSSL o en otro lugar).

Nota:
  • Los certificados expedidos por StartSSL probablemente requerirán también que el certificado intermedio de StartSSL sea concatenado, para que algunos pods puedan comunicarse adecuadamente. EL siguiente enlace te ayudará a crear un certificado propiamente concatenado para que sea utilizado por Nginx: StartSSl y Nginx.
  • Si estás sirviendo a través de un proxy invertido, necesitarás establecer el encabezado X_FORWARDED_PROTO a https en el servidor de tu proxy invertido. Los ejemplos de configuración de Nginx y Apache te muestran cómo hacer esto. Un fallo al establecer este encabezado llevará a un bucle de redirección.
  • Actualizamos todos las peticiones del puerto 80 al puerto 433. Recomendamos hacer lo mismo.
  • Sobre el servidor OSX: Si usas StartSSL para obtener tanto una llave privada como un certificado, no olvides desencriptar la llave privada utilizando el siguiente comando openssl rsa -in ssl.key -out ssl.key. Importa la llave desencriptada (ssl.key) y un archivo de certificado (ssl.crt) en el Server Admin, arrastrando los archivos hacia el administrador de certificados, encontrado aquí: Server Admin>Web>Site>example.com>Security>Manage Certificates>Import Certificate Identity. Si el certificado y la llave son válidos, el certificado debería ser «azul». Una vez importados, el certificado puede ser seleccionado como la seguridad para el sitio.
  • Distintos certificados: Asegúrate de que tu dominio de nivel superior (ejemplo.com si tu pod es pod.ejemplo.com) distribuye el mismo certificado que la URL real de tu pod. La comunicación con otros pods (o aplicaciones, como cubbi.es) podría no funcionar de otra manera.

Balance de carga con un clúster de Thin y Nginx

Para mejorar el desempeño en pods de gran escala, tiene sentido correr muchos servidores thin, y agruparlos para balancear la carga. Añade los parámetros --servers n -R config.ru a la lista de default_thin_args en config/script_server.yml, donde n es el número de servidores thin que quisieras agrupar:

default_thin_args: "--servers 5 -R config.ru -p $THIN_PORT -e $RAILS_ENV"

Esto dará instrucciones al script de ejecutar instancias thin en $THIN_PORT, y los siguientes puertos n-1. Asegúrate de que la configuración de Nginx sepa acerca de estos servidores, añadiéndolos a la lista de servidores de upstream. Ejemplo: si el puerto thin es 3000, y quieres agrupar cinco servidores, la sección upstream de la configuración Nginx debería verse así:

upstream diaspora_thin_cluster {
    server localhost:3000;
    server localhost:3001;
    server localhost:3002;
    server localhost:3003;
    server localhost:3004;
}

Configurar la base de datos

Nota: Para usuarios de Postgre SQL: Si están ejecutando Diaspora con PostgreSQL, tomen en cuenta que tener la configuración de ssl encendida en el config de PostgreSQL ha estado causando problemas para muchas personas. Recomendamos apagarla a menos que sepan lo que están haciendo.

Debes configurar los ajustes de la base de datos. Copia config/database.yml.example a config/database.yml y edítalo propiamente.

Después, ejecuta bundle exec rake db:create para el modo de desarrollo, o RAILS_ENV=production bundle exec rake db:create para el modo de producción, para crear la base de datos necesaria (o podrías crear la base de datos manualmente). Si deseas crearla manualmente, asegúrate de elegir utf8 como charset y utf8_bin como collation.

Ahora necesitas crear las tablas necesarias. Para hacerlo, ejecuta:

  • Para el modo de desarrollo:
bundle exec rake db:schema:load
  • Para el modo de producción:
RAILS_ENV=production bundle exec rake db:schema:load
Advertencia: Cuidado: Esto vaciará la base de datos, para una actualización, utiliza db:migrate, en vez de db:schema:load.

Instalar servicios

Si quieres conectar tu pod a otros servicios como Twitter, Tumblr o Facebook, lee las instrucciones para instalar servicios.

Ejecutando Diaspora

Para iniciar el servidor utiliza el comando ./script/server. Esto iniciará Thin y un worker de Resque. La aplicación estará entonces disponible en http://tu_pod:3000. Puedes cambiar el puerto, ya sea editando thin_port en config/diaspora.yml, o instalando un proxy invertido (ver arriba) si deseas ejecutar Diaspora en un subdominio, o utilizar HTTPS más fácilmente.

Nota: Asegúrate de que tus servidores de base de datos (Redis y MySQL o PostgreSQL) están en funcionamiento antes de intentar inicializar el servidor.

Si quieres ejecutar un app server que no sea Thin, o tener más control sobre este, debes ejecutar el app server, un Resque worker, y el servidor Websocket, separadamente.

Aquí hay instrucciones para ejecutar los componentes de Diaspora.

Una vez que Diaspora esté corriendo, solo ábrela en un navegador, y regístrate para obtener una cuenta.

Nota: Si estás usando una instalación de producción, y las peticiones al directorio /assets devuelven un error HTTP 404 a tu cliente, ejecuta después de cada git pull:

Para MySQL:

RAILS_ENV=production DB="mysql" bundle exec rake assets:precompile

Para PostgreSQL:

RAILS_ENV=production DB="postgres" bundle exec rake assets:precompile
Si obtienes una página de error 500, intenta reiniciar Diaspora.
Nota: Si estás usando una instalación de «producción» y no ves ninguna imagen alojada, pero el contenido carga adecuadamente, asegúrate de haber establecido a «true» la variable «environment.assets.serve» en todo el archivo diaspora.yml.

Actualizar Diaspora

Primero, lee el registro de cambios (changelog).

Entra a la directorio root de Diaspora, y ejecuta:

git pull origin master

Si la actualización cambia el Gemfile o los archivos Gemfile.lock, para MySQL ejecuta:

DB="mysql" bundle install --without development test heroku

O para PostgreSQL:

DB="postgres" bundle install --without development test heroku

Ahora termina el proceso actual de Diaspora.

Para aplicar cualquier nuevo esquema, siempre ejecuta:

DB="mysql" bundle exec rake db:migrate

para MySQL, o:

DB="postgres" bundle exec rake db:migrate

para PostgreSQL.

O, si corres tu pod en modo de producción

RAILS_ENV="production" DB="mysql" bundle exec rake db:migrate

para MySQL o:

RAILS_ENV="production" DB="postgres" bundle exec rake db:migrate

para PostgreSQL.

Ahora inicia Diaspora de nuevo.

Luego de cada actualización, ejecuta:

DB="mysql" bundle exec rake assets:precompile / DB="postgresql" bundle exec rake assets:precompile

Apéndice

Realizar pruebas

Normalmente no necesitas hacer esto si no estás desarrollando para Diaspora, simplemente ignóralo.

La suite de pruebas de Diaspora utiliza Rspec, un entorno de pruebas guiado por comportamiento. Para ejecutar todas las pruebas, ejecuta: rake. Cabe notar que algunos de nuestros tests requieren que un display esté conectado; si solo quieres ejecutar pruebas en la línea de comandos, ejecuta: rake spec.

Instalación solo de lectura

Los directorios tmp, public/uploads y log deben tener permisos de escritura para el usuario que ejecuta Diaspora, incluso en modo de solo lectura.

Parte del contenido web de Diaspora en la carpeta public/ se genera mientras Diaspora se está ejecutando. En cambio, para crear una instalación solo de lectura, este contenido debe generarse durante la instalación.

Ejecuta:

bundle exec thin -d --pid log/thin.pid start
wget http://localhost:3000; rm index.html 
bundle exec thin --pid log/thin.pid stop

Y después:

bundle exec rake assets:precompile

Luego de utilizar estos comandos, también la carpeta public/ pude ser solo de lectura (aunque public/uploads debe tener permisos de escritura. Ver arriba).

Notas

  1. Si deseas tener ambos tipos de bases de datos disponibles para alternar fácilmente, puedes omitir este paso o utilizar DB="all".