Instalación de un nodo de GNU Social en Debian 9

GNU Social (unificado con el proyecto StatusNet,​ anteriormente Laconica) es un servidor de microblogueo de software libre escrito en PHP que implementa el estándar Ostatus para interoperar entre distintas instalaciones. A la par que ofrece una funcionalidad similar a Twitter, GNU Social busca proporcionar el potencial para una comunicación abierta, inter-servicios y distribuida entre comunidades de microblogueo. Empresas e individuos pueden instalar y controlar sus propios servicios y datos.

Bueno, esto es lo que nos dice la madre Wikipedia. Pero para resumir utilizando otro lenguaje podríamos decir que GNU Social es una red social parecida a Twitter, -«el Twitter bueno» que dirían algunos- y bueno, tenía este post en el tintero a medias -porque me fallaba una cosa, pero ya está resuelta- así que vamos a pasar a la acción y vamos a explicar todo el proceso.

Preparando el ecosistema

Antes de ponernos directamente con la instalación tenemos que tener en cuenta que hay que tener un servidor web preparado para que GNU Social funcione correctamente. Así que tendremos un servidor web que puede ser Apache, LigHTTPS o Nginx, en este tutorial utilizaremos Apache. También es necesario tener un servidor de Bases de Datos que puede ser MariaDB -las versiones 5.x como las 10.x funcionan correctamente- o MySQL 5.5+. Y finalmente, tendremos que tener PHP instalado, en esta ocasión, usaremos PHP 7.0 que es la versión que trae Debian 9 por defecto. Aún así, tendremos que tener en cuenta que hay que instalar estos módulos de PHP:

php7.0-curl : Para coger archivos por HTTP.

: Para coger archivos por HTTP. php7.0-gd : Para manipulación de imágenes (escalado).

: Para manipulación de imágenes (escalado). php7.0-gmp : Para firmas Salmon (parte de OStatus).

: Para firmas Salmon (parte de OStatus). php7.0-intl: Soporte de internacionalización.

Soporte de internacionalización. php7.0-json : Para búsquedas de WebFinger (hola@ejemplo.com) y más.

: Para búsquedas de WebFinger (hola@ejemplo.com) y más. php7.0-mysqlnd o php7.0-mysql o php7.0-mysqli: El driver nativo de PHP 7.0 para conexiones MariaDB. Si se usa MySQL, deberían valer php7.0-mysql o php7.0-mysqli.

Instalación Apache + MariaDB + PHP

Si queréis más información sobre como instalar un servidor web podéis visitar otro artículo del blog que explica más detalladamente todo, en este apartado lo vamos por encima y vamos a ir por faena.

Primero de todo, lo de siempre en Debian:

apt update && apt upgrade -y

Instalamos todos los paquetes necesarios, empezamos por el servidor web:

apt install apache2

Seguimos con MariaDB:

apt install mariadb-server

Y PHP 7.0 y todos los módulos necesarios:

apt install php7.0 php7.0-curl php7.0-gd php7.0-gmp php7.0-intl php7.0-json php7.0-mysqlnd php7.0-xmlwriter php7.0-mbstring

Una vez instalado todo, reiniciamos Apache y lo habilitamos al arranque:

systemctl enable apache2

systemctl restart apache2

Preparación de la instalación de GNU Social

Hay que hacer varias cosas antes, primero crear un VirtualHost para acceder a GNU Social por dominio y para utilizar un DocumentRoot diferente al predeterminado -vamos hacer las cosas bien :P- luego, será descargar los ficheros necesarios y poner los permisos pertinentes, pero también vamos a tener que crear la base de datos y el certificado SSL con Let’s Encrypt.

Configuración VirtualHost

Creamos el siguiente fichero /etc/apache2/sites-available/gnusocial.conf con el siguiente contenido, recordad de cambiar el dominio por el vuestro:

<VirtualHost *:80>

ServerName dominio.es

ServerAlias www.dominio.es ServerAdmin supersysadmin@voidnull.es

DocumentRoot /var/www/html/vhost/dominio.es/www <Directory /var/www/html/vhost/dominio.es/www>

Options FollowSymLinks MultiViews

AllowOverride FileInfo

Order allow,deny

allow from all

</Directory> ErrorLog /var/www/html/vhost/dominio.es/logs/error.log

LogLevel warn

CustomLog /var/www/html/vhost/dominio.es/logs/access.log combined

</VirtualHost>

Creamos los directorios necesarios:

mkdir -p /var/www/html/vhost/dominio.es/{logs,www}

Y activamos la configuración de nuestra web y recargamos Apache2:

a2ensite gnusocial.conf

systemctl reload apache2

Descargar ficheros y configurar permisos

Ahora vamos por la segunda parte, nos descargamos los ficheros de GNU Social desde el mismo Git -y lo haremos directamente en /var/www/html/vhost/dominio.es/www :

git clone https://git.gnu.io/gnu/gnu-social.git

Movemos el contenido de la carpeta gnu-social a la ruta que toca:

mv gnu-social/* .

mv gnu-social/.* .

Y ponemos los permisos y usuarios correctos:

chown www-data.www-data -R *

Añadimos permisos de escritura:

chmod a+w /var/www/html/vhost/dominio.es/www

Una vez configurado todo esto, ya podremos acceder con nuestro navegador a midominio/install.php, pero antes, tenemos que configurar la base de datos.

Creación de la base de datos

Creamos una base de datos accediendo al Shell propio de MySQL:

mysql -u root -p

La base de datos la llamaremos gnusocial:

CREATE DATABASE gnusocial;

Comprobamos que se ha creado correctamente:

SHOW DATABASES;

Creamos un usuario con una contraseña:

CREATE USER ‘gnusersocial’@’localhost’ IDENTIFIED BY ‘supermegapass’;

Le damos permisos al usuario que hemos creado sobre la base de datos:

GRANT ALL ON gnusocial.* TO ‘gnusersocial’@’localhost’;

Configuración del certificado SSL

Para SSL usaremos Let’s Encrypt, así que instalaremos los paquetes necesarios:

apt install letsencrypt certbot python-certbot-apache

Y creamos el certificado de la siguiente forma:

letsencrypt –authenticator webroot –installer apache

Ahora seguiremos el instalador, simplemente escogeremos el dominio, escribiremos la ruta completa donde tenemos GNU Social para instalar y marcaremos la opción de Secure para redireccionar el trafico HTTP a HTTPS:

Please choose whether HTTPS access is required or optional.

——————————————————————————-

1: Easy – Allow both HTTP and HTTPS access to these sites

2: Secure – Make all requests redirect to secure HTTPS access

——————————————————————————-

Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):

Instalación de nodo GNU Social

Accedemos a nuestra instalación desde el navegador a dominio.es/install.php y rellenamos los campos que nos piden:

Una vez hemos procedido con la instalación, cambiamos los permisos a estos directorios -y los creamos si no se han generado-:

chmod a+w /var/www/html/vhost/dominio.es/www/avatar

chmod a+w /var/www/html/vhost/dominio.es/www/file

Y finalmente, eliminamos el fichero de la instalación:

rm -rf /var/www/html/vhost/dominio.es/www/install.php

Configuraciones adicionales

Con todo esto, ya tenemos GNU Social instalado y funcionando correctamente, aún así, se pueden configurar cosas adicionales que permiten que GNU Social funcione aún mejor. Se recomienda configurar una cache para PHP, URL Bonitas (Fancy URLs) o bien instalar un tema estilo «Twitter».

URL Bonitas (Fancy URLs)

En GNU Social por defecto las URLs se mostrará el .php de la página que está mostrando. Por ejemplo, la página del perfil de usuario puede ser así:

https://midominio.es/index.php/voidnull

Este tipo de URLs son un poco estéticas y dificiles de recordar, es por ello que se puede eliminar el .php y configurar URLs bonitas:

https://midominio.es/voidnull

Para configurar esto, simplemente tenemos que editar el fichero de configuración /var/www/html/vhost/dominios.es/www/config.php y añadimos lo siguiente:

$config[‘site’][‘fancy’] = true;

Luego iremos al back-office de GNU Social e iremos a Paths > Site y activaremos la opción Fancy URLs.

Finalmente, moveremos el fichero htaccess-sample :

mv htaccess-sample .htaccess

Activar OPcache para GNU Social

Con OPcache mejoraremos mucho el rendimiento. Está incluido en PHP, debe ser activado manualmente en /etc/php/7.0/apache2/php.ini para la mayoría de distribuciones. Hay que buscar y activar al menos lo siguiente:

opcache.enable=1

Interfaz Qvitter para GNU Social

Para instalar la interfaz de Qvitter tendremos que hacer lo siguiente. Primero, vamos a la ruta que toca:

cd /var/www/html/vhost/midominio.es/www

Aquí creamos dos directorios:

mkdir -p local/plugins

Entramos dentro:

cd local/plugins

Y nos descargamos Qvitter desde Git:

git clone https://git.gnu.io/h2p/Qvitter

Y cambiamos permisos:

chown -R www-data:www-data ../../local

Luego, para acabar añadimos esta configuración dentro del fichero /var/www/html/vhost/dominios.es/www/config.php :

// Qvitter

addPlugin(‘Qvitter’);

$config[‘site’][‘qvitter’][‘enabledbydefault’] = true;

$config[‘site’][‘qvitter’][‘defaultbackgroundcolor’] = ‘#f4f4f4’;

$config[‘site’][‘qvitter’][‘defaultlinkcolor’] = ‘#0084B4’;

$config[‘site’][‘qvitter’][‘timebetweenpolling’] = 5000;

$config[‘site’][‘qvitter’][‘urlshortenerapiurl’] = ‘http://qttr.at/yourls-api.php’;

$config[‘site’][‘qvitter’][‘urlshortenersignature’] = ‘b6afeec983’;

//$config[‘site’][‘qvitter’][‘sitebackground’] = ‘img/fondo.jpg’;

$config[‘site’][‘qvitter’][‘favicon_path’] = Plugin::staticPath(‘Qvitter’, »).’img/gnusocial-favicons/’;

$config[‘site’][‘qvitter’][‘sprite’] = Plugin::staticPath(‘Qvitter’, »).’img/sprite.png?v=40′;

$config[‘site’][‘qvitter’][‘enablewelcometext’] = false;

$config[‘site’][‘qvitter’][‘blocked_ips’] = array();

$config[‘thumbnail’][‘maxsize’] = 3000;

$config[‘profile’][‘delete’] = true;

$config[‘profile’][‘changenick’] = true;

$config[‘public’][‘localonly’] = true;

addPlugin(‘StoreRemoteMedia’);

Y al actualizar la pagina del navegador, nos aparecerá la opción para cambiar a Qvitter.

Fuente: Thomask.sdf.org y Git.Gnu