Crea una red social online con Elgg en Debian 9

En este tutorial, te mostraré cómo instalar y configurar la última versión de Elgg en Debian 9 para crear una red social online gratuita.

Elgg es un software de motor social de código abierto escrito en lenguaje de programación PHP. El marco Elgg puede ayudar a personas u organizaciones a crear potentes entornos sociales en Linux bajo servidores web Apache/Nginx, PHP y el sistema de gestión de bases de datos MySQL/MariaDB, también conocido como pila LAMP o LEMP. También tiene funciones integradas que pueden impulsar el intercambio de archivos, los blogs, los grupos sociales o las plataformas educativas en redes públicas o privadas.

Para desplegar con éxito la plataforma Elgg en tus instalaciones, necesitarás cumplir los siguientes requisitos.

  • Una máquina virtual o un servidor privado virtual con Debian 9, preferiblemente de instalación mínima
  • Acceso directo a la cuenta de root o a un usuario local con poderes de root a través de la consola del servidor o de la gestión remota vía SSH
  • El servidor necesita una dirección IP estática configurada para la interfaz de red externa para poder acceder a través de su dirección IP pública a los visitantes
  • También puedes necesitar un nombre de dominio público o privado configurado para tu servidor para que los visitantes puedan acceder a la plataforma a través de un nombre de dominio, como por ejemplo www.yourdomain.com, aunque todavía puedes acceder a la plataforma a través de la dirección IP de tu servidor.
  • Para utilizar el registro del sitio web de Elgg a través de la dirección de correo electrónico, o para utilizar otras funciones de la plataforma, necesitas desplegar un servidor de correo en tus instalaciones o utilizar un servidor de correo público.

Requisitos previos

Como primer paso, inicia sesión en el servidor de Debian 9 con privilegios de root o con un usuario que tenga poderes de root y emite el siguiente comando para actualizar tu sistema con los últimos parches de seguridad, software y actualizaciones del núcleo.

apt update
apt upgrade

A continuación, asegúrate de configurar el nombre de tu máquina ejecutando los siguientes comandos. Debes sustituir la variable del nombre de la máquina utilizada en este ejemplo para que coincida con tu propio dominio.

hostnamectl set-hostname www.socialnet.org

Una vez que hayas configurado el nombre de host de la máquina, verifica si el host se ha configurado correctamente comprobando el archivo de hosts con los siguientes comandos.

hostnamectl
cat /etc/hostname
hostname –s
hostname –f

Por último, para aplicar las actualizaciones del nombre de host de la máquina y del núcleo, reinicia el sistema emitiendo el siguiente comando.

systemctl reboot

Después de que el sistema se reinicie, vuelve a entrar en la consola y ejecuta el siguiente comando para instalar algunas utilidades del sistema que nos ayudarán a descargar software a través de Internet y a extraer algunos tipos de archivos comprimidos

apt install wget zip unzip curl

Instalar la pila LAMP

Para desplegar el framework de la red social Elgg en nuestro servidor, necesitamos instalar los componentes de la pila LAMP. El primer componente que instalaremos es la base de datos – MariaDB – un fork de la popular base de datos MySQL, como backend de la base de datos. La base de datos MariaDB será utilizada por la aplicación para almacenar usuarios, sesiones, contactos, publicaciones, comentarios y otra información. Para instalar el servidor de bases de datos MariaDB y el software cliente en Debian 9 a través de los repositorios oficiales, ejecuta el siguiente comando en el terminal.

apt install mariadb-server mariadb-client

Una vez finalizada la instalación de la base de datos, accede a la consola de MySQL y emite los siguientes comandos para asegurar la cuenta raíz de la base de datos, a la que se puede acceder por defecto sin necesidad de proporcionar una contraseña.

mysql -h localhost
Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 2

Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

 

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(ninguno)]> use mysql;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

MariaDB [mysql]> update user set plugin=» where user=’root’;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [mysql]> vaciar privilegios;

Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> salir

Bye

Una vez completado el paso anterior, ejecuta el scriptmysql_secure_installation proporcionado por los repositorios stretch de Debian, para asegurar aún más el servidor MariaDB y establecer una contraseña segura para la cuenta raíz de la base de datos. Principalmente, responde «sí» a todas las preguntas que te haga el script, como: cambiar la contraseña de root de MySQL, eliminar los usuarios anónimos, desactivar los inicios de sesión de root remoto y eliminar la base de datos de prueba, como se ilustra en el siguiente extracto del script.

mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

 

In order to log into MariaDB to secure it, we'll need the current

password for the root user.  If you've just installed MariaDB, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

 

Enter current password for root (enter for none):

OK, successfully used password, moving on...

 

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

 

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

 

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.

 

Remove anonymous users? [Y/n] y

 ... Success!

 

Normally, root should only be allowed to connect from 'localhost'.  This

ensures that someone cannot guess at the root password from the network.

 

Disallow root login remotely? [Y/n] y

 ... Success!

 

By default, MariaDB comes with a database named 'test' that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.

 

Remove test database and access to it? [Y/n] y

 - Dropping test database...

 ... Success!

 - Removing privileges on test database...

 ... Success!

 

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

 

Reload privilege tables now? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

Para probar la seguridad de MariaDB, intenta acceder a la base de datos desde la consola sin contraseña de root. El acceso a la base de datos debería ser denegado si no se proporciona una contraseña para la cuenta de root, como se ilustra en el siguiente extracto del comando:

mysql -h localhost -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Si se proporciona la contraseña, se debería conceder el proceso de acceso a la consola de MySQL, como se muestra en el ejemplo de comando:

mysql -h localhost -u root -p
Enter password:

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 15

Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit

Bye

Después de haber instalado y asegurado la base de datos MariaDB, es el momento de instalar los siguientes componentes necesarios para desplegar la aplicación Elgg: El servidor HTTP Apache y la pasarela de procesamiento del lenguaje de programación PHP. Para instalar el servidor web Apache y el intérprete de PHP junto con todos los módulos PHP necesarios a través de los cuales el servidor ejecutará los scripts de la aplicación, ejecuta el siguiente comando en la consola de tu servidor.

apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-gd php7.0-opcache php7.0-mbstring php7.0-xml php7.0-mysql

A continuación, abre y modifica el archivo de configuración por defecto de PHP alterando las siguientes variables de PHP. Abre el archivo /etc/php/7.0/apache2/php.ini para editarlo y cambia las siguientes líneas. inicialmente, haz una copia de seguridad del archivo de configuración de PHP.

cp /etc/php/7.0/apache2/php.ini{,.backup}
nano /etc/php/7.0/apache2/php.ini

Busca, edita y cambia las siguientes variables en el archivo de configuración php.ini:

file_uploads = On
default_charset = UTF-8
memory_limit = 128M
upload_max_filesize = 100M
date.timezone = Europe/London

Aumenta la variable upload_max_file_size según convenga para soportar archivos adjuntos de gran tamaño para tu aplicación. Además, cambia la configuración de la zona horaria de PHP a la ubicación geográfica de tu sistema consultando la lista de zonas horarias proporcionada por los documentos de PHP en el siguiente enlace http://php.net/manual/en/timezones.php

Activa el plugin OPCache disponible para PHP7 con el fin de aumentar la velocidad de carga del sitio web, añadiendo los siguientes ajustes de OPCache en la parte inferior del archivo de configuración del intérprete de PHP, debajo de la declaración [opcache] como se detalla a continuación:

opcache.enable=1 
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Una vez que hayas realizado todos los cambios anteriores, guarda y cierra el php.ini archivo de configuración, reinicia el servidor web Apache para aplicar los cambios del intérprete de PHP emitiendo el siguiente comando.

systemctl restart apache2

Configurar el cortafuegos

Para añadir las reglas de aplicación del cortafuegos UFW necesarias para permitir que el tráfico HTTP pase a través del cortafuegos del sistema, emite los siguientes comandos en la consola del servidor.

ufw allow WWW

o

ufw allow 80/tcp

En caso de que te conectes remotamente a tu servidor a través de SSH, añade la siguiente regla para abrir el puerto 22 de SSH en tu cortafuegos.

ufw allow 22/tcp

Si gestionas las reglas del cortafuegos de tu servidor Debian mediante las reglas raw de iptables, añade las siguientes reglas para permitir que el tráfico entrante de los puertos 80 y 22 pase el cortafuegos, de modo que los clientes externos puedan acceder a la aplicación. Abre el puerto 22/TCP sólo si te conectas remotamente al servidor mediante SSH.

apt-get install -y iptables-persistent
iptables -I INPUT -p tcp --destination-port 80 -j ACCEPT
iptables -I INPUT -p tcp --destination-port 22 -j ACCEPT
netfilter-persistent save
systemctl restart netfilter-persistent
systemctl status netfilter-persistent
systemctl enable netfilter-persistent.service

Configurar el servidor web Apache

En el siguiente paso, habilita el módulo de reescritura de Apache, necesario para alterar las configuraciones del servidor web sobre la marcha a través del archivo .htacccess, y el módulo TLS, necesario para asegurar las transacciones HTTP, emitiendo el siguiente comando

a2enmod rewrite ssl
a2ensite default-ssl.conf

A continuación, abre el archivo de configuración del sitio SSL por defecto de Apache para editarlo con tu editor de texto favorito, y añade las siguientes reglas de reescritura de URL después de DocumentRoot de la directiva:

nano /etc/apache2/sites-enabled/default-ssl.conf

Extracto del archivo de configuración del sitio SSL:

<Directory /var/www/html>
  Options +FollowSymlinks
  AllowOverride All
  Require all granted
</Directory>

Además, haz el cambio que se muestra a continuación en la línea VirtualHost para que se parezca a lo que se muestra en el extracto que sigue:

<VirtualHost *:443>

Añade los mismos cambios al archivo de configuración por defecto de Apache abriendo el archivo /etc/apache2/sites-enabled/000-default. conf para editarlo. Inserta las siguientes líneas de código después de la declaración DocumentRoot como se muestra en el ejemplo siguiente.

<Directory /var/www/html>
  Options +FollowSymlinks
  AllowOverride All
  Require all granted
</Directory

Por último, reinicia el demonio Apache para aplicar todas las reglas configuradas hasta ahora y visita tu dominio o dirección IP del servidor a través del protocolo HTTP.

systemctl restart apache2

Como estás utilizando los pares de certificados autofirmados automáticamente emitidos por Apache en la instalación, si el navegador no confía en un certificado, debería aparecer una advertencia de error en el navegador. Acepta la advertencia para aceptar el certificado no fiable y seguir siendo redirigido a la página web por defecto de Apache, como se muestra en la siguiente imagen.

https://yourdomain.tld

Advertencia SSL

Página por defecto de Apache

Para permitir que el tráfico HTTPS pase a través del cortafuegos UFW, debes añadir la siguiente regla para permitir el tráfico 443/TCP entrante, ejecutando el siguiente comando

ufw allow 'WWW Full'

o

ufw allow 443/tcp

Si iptables es la aplicación de cortafuegos instalada por defecto para proteger tu sistema Debian a nivel de red, añade la siguiente regla para permitir el tráfico entrante del puerto 443 en el cortafuegos para que los visitantes puedan navegar por tu dominio.

iptables -I INPUT -p tcp --destination-port 443 -j ACCEPT
netfilter-persistent save
systemctl restart netfilter-persistent
systemctl status netfilter-persistent

Por último, crea el archivo de información de PHP en la ruta raíz del documento de tu servidor web ejecutando el siguiente comando.

echo '<?php phpinfo(); ?>'| tee /var/www/html/info.php

Visita el archivo PHP info script abriendo un navegador en la siguiente URL:

https://yourdomain.tld/info.php

Verifica la configuración de PHP y desplázate hasta la configuración de la fecha para comprobar la configuración de la zona horaria de PHP.

Configuración de la fecha en PHP

Instalar el software Elgg

Para instalar la plataforma de la red social Elgg en tu sistema, primero visita la página oficial de descargas de Elgg en https://elgg.org/about/download y coge el último archivo comprimido del paquete zip ejecutando el siguiente comando.

wget -O elgg-2.3.5.zip https://elgg.org/getelgg.php?forward=elgg-2.3.5.zip
ls

A continuación, extrae el archivo zip de Elgg a tu directorio de trabajo actual y haz una lista de los archivos extraídos ejecutando los siguientes comandos.

unzip elgg-2.3.5.zip
ls -al elgg-2.3.5

En el siguiente paso, elimina el archivo index.html instalado por defecto por el servidor web Apache en la ruta webroot y el archivo info.php creado anteriormente ejecutando los siguientes comandos.

rm /var/www/html/index.html
rm /var/www/html/info.php

A continuación, copia todo el contenido del directorio de Elgg extraído, incluido el archivo .htaccess oculto, en la ruta raíz del documento de tu servidor web, emitiendo el siguiente comando.

cp -rf elgg-2.3.5/* /var/www/html/
cp elgg-2.3.5/.htaccess /var/www/html/

Una vez que hayas copiado los archivos de instalación de Elgg en la ruta raíz de tu dominio, crea un directorio llamado datos para la aplicación Elgg, un nivel por encima de la raíz web de tu dominio, emitiendo el siguiente comando. El directorio data será utilizado por la aplicación Elgg para almacenar diversos archivos relacionados con el usuario. Este directorio de datos puede ser creado en cualquier lugar de la jerarquía del sistema de archivos de tu servidor, con la observación de que debes conceder al usuario de ejecución de Apache los permisos de escritura en este directorio.

mkdir  /var/www/data
chown www-data:www-data /var/www/data

A continuación, ejecuta los siguientes comandos para conceder al usuario en tiempo de ejecución de Apache permisos completos de escritura en la ruta raíz de la web. Utiliza el comandols para listar los permisos de los archivos instalados de la aplicación situados en el directorio/var/www/html/.

chown -R www-data:www-data /var/www/html/
ls –al /var/www/html/

Antes de comenzar con el proceso de instalación a través de un navegador web, entra en la consola de la base de datos MariaDB y crea la base de datos Elgg y un usuario con contraseña que se utilizará para gestionar esta base de datos, emitiendo los siguientes comandos. Asegúrate de sustituir el nombre de la base de datos, el usuario y la contraseña utilizados en este tutorial.

mysql –u root -p
Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 2

Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

 

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(ninguno)]> crear base de datos elgg_db;

Query OK, 1 row affected (0.00 sec) 

MariaDB [(none)]> concede todos los privilegios en elgg_db.* a ‘elgg_user’@’localhost’ identificado por ‘password1234’;

Query OK, 0 rows affected (0.00 sec) 

MariaDB [(none)]> borra los privilegios;

Query OK, 0 rows affected (0.00 sec) 

MariaDB [(ninguno)]> exit

Bye 

Ahora, vamos a proceder a la instalación de Elgg. Primero abre un navegador y navega hasta la dirección IP de tu servidor o el nombre de dominio o FQDN del servidor a través del protocolo HTTPS.

https://yourdomain.tld

En la pantalla de bienvenida, el instalador mostrará un mensaje de introducción que te informa de que el software de la plataforma Elgg requerirá seis pasos a seguir para instalar la aplicación. Sólo tienes que pulsar el botón Siguiente para que comience el proceso de instalación, como se muestra en la siguiente captura de pantalla.

Bienvenido a Elgg

A continuación, el instalador de Elgg analizará tu sistema y comprobará si se cumplen los requisitos de PHP y del servidor web para instalar la aplicación. Pulsa el botón Siguiente, para continuar el proceso de instalación, como se muestra en la siguiente captura de pantalla.

Requisitos de Elgg

En la siguiente pantalla de instalación, configura los ajustes de la base de datos MySQL proporcionando el nombre de la base de datos MySQL, el host del servidor (utiliza localhost si la base de datos se instala en el mismo nodo), el nombre de usuario de la base de datos y la contraseña creada anteriormente para instalar Elgg. Utiliza el prefijo de la tabla de la base de datos por defecto o cámbialo si quieres añadir una capa extra de seguridad para tu aplicación. Por último, selecciona tu configuración de zona horaria por defecto para la aplicación y pulsa el botón Siguiente para pasar a la siguiente pantalla de instalación. Utiliza la siguiente captura de pantalla como guía para configurar este paso.

Configuración de la base de datos

En el siguiente paso, configura el sitio web de Elgg añadiendo un nombre para el sitio y una dirección de correo electrónico para la comunicación con el usuario. Además, cambia la dirección URL del sitio si no se ha detectado correctamente y añade la ruta completa al sitio web datos y añade la ruta completa al directorio del sitio web. Por último, configura el nivel de acceso al sitio web por defecto para los novatos y pulsa el botón Siguiente para continuar el proceso de instalación.

Configurar el sitio en Elgg

A continuación, crea la primera cuenta de administrador para tu sitio web, rellenando el campo Nombre para mostrar con el nombre de tu cuenta de administrador. Además, añade la dirección de correo electrónico de la cuenta de administrador, el nombre de usuario y la contraseña, tal y como se muestra en la siguiente imagen. Cuando completes este paso, pulsa el botón Siguiente para continuar y terminar el proceso de instalación.

Crear una cuenta de administrador

Una vez completado el proceso de instalación, pulsa el botón «Ir al sitio» para ser redirigido al panel de administración de Elgg.

La instalación de Elgg está terminada

Una vez que hayas entrado en el panel de control de Elgg, navega al menú Configurar -> Plugins del panel derecho y empieza a activar los plugins de Elgg que necesites pulsando el botón Activar del plugin seleccionado.

Panel de administración de Elgg

También puedes visitar la aplicación Elgg navegando a la dirección IP de tu servidor o al nombre de dominio a través del protocolo HTTPS. Utiliza las credenciales configuradas para la cuenta de administrador durante el proceso de instalación para iniciar sesión en la aplicación del motor social Elgg, como se muestra en la siguiente captura de pantalla.

https://yourdomain.tld

Red social Elgg

Como paso final, si quieres forzar a los visitantes a navegar de forma segura por el sitio web de Elgg a través del protocolo HTTPS que encripta el tráfico entre el servidor y los navegadores de los clientes, vuelve a la consola del servidor de Debian y edita el archivo .htaccess situado en la ruta raíz del documento de tu sitio web, ejecutando el siguiente comando

nano /var/www/html/.htaccess

En el archivo .htaccess, busca la línea<ModuloInf_rewrite.c> y añade las siguientes reglas después de RewriteEngine On para redirigir automáticamente todo el tráfico de tu dominio a HTTPS.

RewriteEngine On
# Redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]

Aquí, también puedes cambiar algunas variables PHP para tu sitio web. Busca la directiva <IfModule mod_php7.c> y bajo esta línea añade tus propias configuraciones de PHP, como por ejemplo: aumentar el tamaño de subida de archivos para el dominio o desactivar algunas configuraciones de PHP por defecto del servidor, como se muestra en el siguiente extracto:

# Alter web server PHP settings
php_value session.use_trans_sid 0
php_value register_globals 1
php_value upload_max_filesize 100M
php_value post_max_size 100M

Para que la aplicación Elgg envíe notificaciones en cola, rote los registros del sistema en la base de datos y recoja la basura en la base de datos (compactando la base de datos mediante la eliminación de las entradas que ya no son necesarias), crea un archivo crontab para con las siguientes configuraciones. Además, este trabajo crontab debe ser propiedad del usuario de ejecución de Apache y ser ejecutado por él.

crontab -u www-data –e

Extracto del archivo Crontab. La salida de la tarea cron de cada trabajo se descartará a Linux /dev/null archivo blackhole. Sustituye la variable de nombre de dominio($ELGG) utilizada en este script en consecuencia.

GET="curl -k"
ELGG="https://www.socialnet.org/"

OUT=" > /dev/null 2>&1"

* * * * * $GET ${ELGG}cron/minute/${OUT}
*/5 * * * * $GET ${ELGG}cron/fiveminute/${OUT}
15,30,45,59 * * * * $GET ${ELGG}cron/fifteenmin/${OUT}
30,59 * * * * $GET ${ELGG}cron/halfhour/${OUT}
@hourly $GET ${ELGG}cron/hourly/${OUT}
@daily $GET ${ELGG}cron/daily/${OUT}
@weekly $GET ${ELGG}cron/weekly/${OUT}
@monthly $GET ${ELGG}cron/monthly/${OUT}
@yearly $GET ${ELGG}cron/yearly/${OUT}
@reboot $GET ${ELGG}cron/reboot/${OUT}

¡Enhorabuena! La plataforma de medios sociales Elgg ha sido instalada y configurada con éxito en tus instalaciones en un servidor Debian 9. En caso de que utilices un nombre de dominio público registrado para exponer la aplicación Elgg a los visitantes de cara al público, deberías considerar la compra de un certificado SSL emitido por una Autoridad de Certificación de confianza u obtener un par de certificados gratuitos de Let’s Encrypt CA.

Para seguir administrando la aplicación Elgg, visita las páginas de documentación en la siguiente dirección:http://learn.elgg.org/en/stable/index.html

También te podría gustar...