viernes, 16 de diciembre de 2011

Instalando Friendica...

¿Qué es friendica?

¿Te imaginas una red social en la que puedas seguir a tus contactos, aunque estén en otras redes? Todas tus conversaciones de Facebook, Diaspora, Identi.ca, correos, RSS, étc. tenerlos en una misma línea de tiempo, pudiendo agrupar contactos, controlar la privacidad de las publicaciones, tener múltiples perfiles...

Una red donde tus publicaciones son tuyas. Tus imágenes son tuyas. Y, tus imágenes privadas, son realmente privadas.

Descentralizada, libre, federada (con StatusNet, GnuSocial, Diaspora... ), extensible y gratuita. Eso es friendica.

Dispone de varios conectores para publicar a la vez en WordPress, Posterous, StatusNet, Twitter y Tumblr.

Para hacernos una idea de las características principares, podemos echar un ojo a esta comparativa.

Podemos usar cualquier servidor de friendica existente, aunque, podemos realizar una instalación y controlar todavía más nuestros contenidos. Éstos estarían en nuestro PC. Aunque apaguemos el equipo, las publicaciones podrían ser comentadas por contactos que no se encuentren en nuestro servidor. Al encender, se actualizarán estos comentarios.

Instalación de friendica

Necesitaremos un dominio. En este tutorial, la instalación está preparada para http, con lo que uno de no-ip, por ejemplo, sería suficiente. Tened en cuenta que, una vez instalado con un dominio concreto, ya no hay marcha atrás. Todavía no es posible realizar un cambio del mismo y, si lo hacemos, nuestros usuarios perderían la conexión con el resto de contactos.

Instalamos el software necesario php, mysql y Apache.

# pacman -S apache php-apache php php-gd php-mcrypt mysq

Envío de correo:

Necesitamos poder enviar correos. Para ello usaremos msmtp, un cliente smpt con una excelente compatibilidad con sendmail.

# pacman -S msmtp

Editamos el archivo /etc/msmtprc y configuramos nuestra cuenta con la que enviar los correos:

# Accounts will inherit settings from this section
defaults
auth             on
tls              on
#tls_trust_file   /usr/share/ca-certificates/mozilla/Thawte_Premium_Server_CA.crt
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt

# A first gmail address
account        gmail
host           smtp.gmail.com
port           587
from           <tucuenta>@gamil.com
user           <tucuenta>@gmail.com
password       <tupass>

#second
account yahoo
host smtp.correo.yahoo.es
port 25
from <tucuenta>@yahoo.es
user <tuusuario>
auth on
auth plain
tls off
password <tupass>
# Set a default account
account default : gmail 

Editamos /etc/mail.rc y añadimos al final:

set sendmail=/usr/bin/msmtp

Probamos si funciona:

Creamos un fichero, test.mail, con el siguiente contenido:

To: <username>@domain.com 
From: username@gmail.com 
Subject: A test Yadda, yadda, yadda.

Ejecutamos:

$ cat test.mail | msmtp -a default <username>@domain.com

Debería llegarnos un correo a <username>@domain.com.

Editamos el arhivo /etc/php/php.ini, buscamos la cadena sendmail_path y ponemos:

sendmail_path ="/usr/bin/msmtp -t "

Configuración de PHP:

Ahora, vamos a configurar las extensiones necesarias para friendica:

extension=curl.so
extension=gd.so
extension=gettext.so
extension=iconv.so
extension=imap.so
extension=json.so
extension=mcrypt.so
extension=mysqli.so
extension=mysql.so
extension=openssl.so

En el bloque [date], buscamos la clave date.timezone y ajustamos los valores, seǵun esta lista. Por ejemplo, para Madrid:

date.timezone = "Europe/Madrid"
date.default_latitude = 40.416126
date.default_longitude = -3.696706

Creación de la Base de Datos:

Después de esto, vamos a lanzar MySql y a crear una base de datos y un usuario para manejarla:

1.- Lanzamos del daemon de mysql:
      # systemctl start mysqld.service

2.- Configuramos la BBDD: 
     # mysql_secure_installation
     # systemctl restart mysqld.service

3.- Nos conectamos como root a mysql:  
     $ mysql -uroot -p

4.- Creamos la BBDD:
     CREATE DATABASE friendica;

5.- Creamos un usuario con privilegios desde localhost para friendica: 
GRANT ALL PRIVILEGES ON friendica.* TO 'adminfriendica'@'localhost' IDENTIFIED BY 'clave' WITH GRANT OPTION;

5.- Actualizamos los permisos:
     FLUSH PRIVILEGES;

6.- Cerramos sesión: 
     exit

Configuración de Apache:

Editamos el archivo /etc/httpd/conf/httpd.conf, y comentamos la línea LoadModule unique_id_module modules/mod_unique_id.so, poniendo una # delante.

# LoadModule unique_id_module modules/mod_unique_id.so

Al final del bloque de módulos, añadimos:

#configuración PHP
LoadModule php5_module modules/libphp5.so
Include conf/extra/php5_module.conf

Descomentamos la línea MIMEMagicFile conf/magic, quitando la #, y nos aseguramos que la línea TypesConfig conf/mime.types, dentro del bloque <IfModule mime_module> está descomentada también.

Descomentamos la línea Include conf/extra/httpd-vhosts.conf .

Una vez hecho esto, editamos el archivo /etc/httpd/conf/extra/httpd-vhosts.conf y añadimos nuestro servidor virtual para friendica:

<VirtualHost *:80>
    ServerAdmin email@ejemplo.com
    DocumentRoot "/srv/friendica"
    ServerName ejemplo.com
 
    ErrorLog "/var/log/httpd/error_log"
    CustomLog "/var/log/httpd/access_log" common
    <Directory "/srv/friendica">
        DirectoryIndex index.php
        AllowOverride All
        Options All
        Order allow,deny
        Allow from all
        php_admin_value open_basedir "/srv/:/tmp/:/srv/friendica/:./"
    </Directory>
</VirtualHost>



Ya tenemos el acceso por el puerto 80. Ahora necesitamos habiliar el puerto 443 para tener acceso por HTTPS:

En el archivo /etc/httpd/conf/httpd.conf, descomentar la línea:

Include conf/extra/httpd-ssl.conf

Editamos el archivo conf/extra/httpd-ssl.conf y modificamos los valores según nuestra instalación:

DocumentRoot "/srv/friendica"
ServerName www.example.com:443
ServerAdmin you@example.com


.....

 <Directory "/srv/friendica">
    DirectoryIndex index.php
    AllowOverride All
    Options All
    Order allow,deny
    Allow from all
    php_admin_value open_basedir "/srv/:/tmp/:/srv/friendica/:./"
</Directory>

</VirtualHost>

Sustituyendo email@ejemplo.com y ejemplo.com por los valores correctos.

Creamos el certificado (si es autofirmado):


# cd /etc/httpd/conf 
# openssl genrsa -des3 -out server.key 1024 
# openssl req -new -key server.key -out server.csr 
# cp server.key server.key.org 
# openssl rsa -in server.key.org -out server.key 
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt


Instalación de la aplicación
 
Ejecutamos:

sudo git clone https://github.com/friendica/friendica.git /srv/friendica
cd /srv/friendica
sudo git clone https://github.com/friendica/friendica-addons.git addon
sudo touch .htconfig.php
sudo chmod 777 .htconfig.php

Iniciamos apache  

# systemctl restart mysqld.service
# systemctl start httpd.service

Visitamos nuestro sitio web con nuestro navegador preferido, si vamos a usar un certificado autofirmado: http://ejemplo.com. En caso de que el cerficado esté firmado por alguna agencia, accederemos con https://ejemplo.com.

Se lanzará el proceso de instalación, pidiéndonos el email del usuario administrador, y los parámetros para conectar con la base de datos creada:

Una vez finalizada la instalación, se nos pedirá que registremos un usuario, para lo cual, usaremos el email del administrador. Nos dirigiremos a la sección Admin->módulos y marcaremos el Poor Man Cron, además de todos aquellos que queramos tener en nuestro sitio web.

Toda la configuración de Friendica se hace desde la sección "Admin", de una forma muy intuitiva.
Cuando hayamos terminado la configuración, no olvidar proteger el archivo de configuración:

sudo chmod 755 /srv/friendica/.htconfig.php

Para realizar actualizaciones, bastará con ejecutar:

cd /srv/friendica
sudo git pull
cd addon
sudo git pull

Añadimos los servicios al /etc/rc.conf para que se lancen automáticamente en el inicio:

# systemctl enable mysqld.service
# systemctl enable httpd.service



NOTA: Antes de añadir contactos, revisad, con una simple prueba que todo está correcto:

Publicad el perfil de vuestro usuario recién creado en el directorio global. Si, al visitar el directorio global, éste no se ha publicado, la comunicación con vuestro servidor está fallando. Es posible que tengáis el puerto 80 filtrado. Os recomiendo echar un ojo a este artículo. Una vez que podáis publicar vuestro usuario en el directorio global, podréis ir añadiendo vuestros contactos de las demás redes.

Enlaces de Interés:




3 comentarios:

  1. Disculpa, quisiera consultarte, ya que trate de seguir esta guia pero a la hora de poner mi direccion de host en el navegador no pasa nada, solo busca la pagina y no encuentra nada!

    ResponderEliminar
  2. El problema de no "aparecer nada", suele ser, bien porque no puede crear el .htconfig, bien porque algo está mal y va a /srv/http, que, en archlinux está vacío. Prueba a crear un test.php en /srv/http con:

    Accede a http://localhost/test.php para ver si funciona el php. Si todo va bien, mueve el test.php a /srv/friendica y accede a http://tudominio/test.php , y prueba a ver si va bien. Si todo va bien, cambia el usuario de /srv/friendica a http:
    sudo chown http:http /srv/friendica
    No es necesario cambiar el contenido.

    Una cosilla, ¿Estás usando no-ip con redirección de puertos? Si es así, ese es el problema, no se puede usar la redirección, debes abrir el 80 y el 443 (el último es necesario sólo para diaspora)

    ResponderEliminar
  3. en "con:" falta incluir el texto, pero lo toma mal, sería meter entre algo en php en el archivo para comprobar que funciona bien, sigue este ejemplo: https://wiki.archlinux.org/index.php/LAMP#PHP

    ResponderEliminar