Nextcloud con SpreedME WebRTC

   Nextcloud es una plataforma de comunicación y uso compartido de archivos de código abierto y autohospedado, basta con unos pocos ajustes para mantener nuestra nube de forma gratuita. En su versión 13 han publicado la nueva App "talk" con la que reemplazan SpreedME, pero vamos que esto no es tan simple como se ve, aún necesitamos configurar varias cosas y en lo personal prefiero ir por el modo antiguo.

   Primero lo primero, debemos entender que WebRTC es el proyecto para comunicación en tiempo real utilizando un navegador, mientras que Nextcloud SpreedME (Nextcloud App) y Spreed WebRTC son cosas diferentes, digamos que uno es el cliente y otro el servidor, sabiendo esto debemos tener claro que:

  • Haremos la instalación en Debian 9 (instalación limpia y fresca)
  • Nuestro servidor web sera Apache2 con PHP 7+
  • Utilizaremos MariaDB como motor de base de datos
  • Necesitaremos Go, NodeJS, autoconf y automake para compilar el servidor Spreed WebRTC
  • Debemos tener un certificado SSL (https) para poder utilizar de forma adecuada todo

   Sabiendo esto comencemos, lo primero es actualizar nuestro sistema
apt-get update && apt-get upgrade
  Una vez hecho esto vamos a instalar las dependencias que necesitamos
apt-get install apache2 mariadb-server build-essential nodejs git sudo -y
apt-get install autoconf automake curl php-xml php php-dev php-cgi php-cli php-gd php-curl php-zip php-mysql php-ldap php-mbstring php-imagick imagemagick wget unzip libapache2-mod-php -y
   Como extra vamos a instalar imagick, pues Nextcloud lo utiliza para autogenerar el icono a partir del logo que utilicemos en la configuración del tema
pecl install imagick
   Ahora vamos con MariaDB y creamos la base de datos
mysql_secure_installation
CREATE DATABASE nextclouddb;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY '$ebitas231271.';
GRANT ALL PRIVILEGES ON nextclouddb.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
\q

   Una vez creada la base de datos vamos a instalar nuestra nube, para ello hacemos lo siguiente:
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.0.zip
unzip nextcloud-13.0.0.zip
mv nextcloud /var/www/html/
chown -R www-data:www-data /var/www/html/nextcloud
   Preparamos el vhost para nuestro servidor (soy partidario de editar cosas simples con nano):
nano /etc/apache2/sites-available/nextcloud.conf

    ServerAdmin ayuda@midominio.com
    DocumentRoot "/var/www/html/nextcloud"

    ServerName nextcloud.midominio.com
    ServerAlias www.nexcloud.midominio.com

    
        Options MultiViews FollowSymlinks

        AllowOverride All
        Order allow,deny
        Allow from all
    

    TransferLog /var/log/apache2/nextcloud_access.log
    ErrorLog /var/log/apache2/nextcloud_error.log

   Solo nos resta preparar el sitio configurado
a2dissite 000-default
a2ensite nextcloud
systemctl restart apache2
   Ahora vamos a la url "nextcloud.midominio.com" o a la IP y configuramos guiados por el asistente. Una vez hecho esto descargamos en las Apps de Nextcloud SpreedME
cd /var/www/html/nextcloud/apps
wget https://github.com/strukturag/nextcloud-spreedme/archive/master.zip
unzip master.zip
mv nextcloud-spreedme-master spreedme
rm master.zip
   Bien, ya vamos adelantados, solo nos resta instalar el servidor y configurar unas pocas cosas. Debido a que esta bien documentado y no es parte de la instalación no entraré en detalles de como instalar las dependencias para compilar, sin embargo al inicio de la entrada están los enlaces. Continuamos con la instalación del servidor
cd /opt/
wget https://github.com/strukturag/spreed-webrtc/archive/master.zip
unzip master.zip
rm master.zip
cd /opt/spreed-webrtc-master/
./autogen.sh
./configure
make
make get
make assets
make binary
   Si, hay varios "make", pero por alguna razón las veces que compile salian errores aleatorios si no se hacia de esta manera, asi que mejor compilar una a una como esta explicado. Ahora nos dirigimos a la instalación de nextcloud desde el navegador y vamos a Ajustes > Conf. Adicional, dentro nos vamos hasta la sección de SpreedME WebRTC y pulsamos sobre "Generar", esto mostrará una configuración la cual copiamos y pegamos en /opt/spreed-webrtc-master/server.conf. Hecho esto editamos una vez mas Apache2 con lo siguiente:
nano /etc/apache2/conf-available/spreed.conf
SSLProxyEngine On

ProxyVia On
ProxyPreserveHost On

RequestHeader set X-Forwarded-Proto 'https' env=HTTPS
RequestHeader set X-Forwarded-Port "443"


    ProxyPass http://127.0.0.1:8080/webrtc connectiontimeout=5 timeout=300
    ProxyPassReverse /webrtc



    ProxyPass ws://127.0.0.1:8080/webrtc/ws connectiontimeout=5 timeout=300

   Activamos la configuración y continuamos haciendo ajustes adicionales
a2enconf spreed
a2enmod proxy proxy_http proxy_wstunnel headers rewrite env ssl
systemctl restart apache2
adduser --quiet --system --ingroup "www-data" --home "/opt/spreed-webrtc-master" --no-create-home --disabled-login "spreed" 2>/dev/null || true
touch /var/log/spreed.log
chown spreed:www-data /var/log/spreed.log
chmod -R 755 /opt/spreed-webrtc-master
   Para poder realizar video-llamadas en tiempo real desde cualquier lugar (internet) es necesario configurar un servidor TURN/STUN, para ello podemos utilizar coTURN o buscar uno en línea
nano /opt/spreed-webrtc-master/server.conf 
[http]
...
root = /opt/spreed-webrtc-master
...
[app]
stunURIs = stun:stun.spreed.me:443 #oficial de spreed
turnURIs = servidor_turn
turnSecret = secret_turn

   Creamos un servicio para facilitarnos las cosas y controlar todo de forma simple
nano /etc/systemd/system/spreed.service
[Unit]
Description=Spreed WebRTC server
After=network.target

[Service]
Type=simple
Environment=GOMAXPROCS=1
LimitNOFILE=1024
User=spreed
Group=www-data
PermissionsStartOnly=true
ExecStart=/opt/spreed-webrtc-master/bin/spreed-webrtc-server -c /opt/spreed-webrtc-master/server.conf -l /var/log/spreed.log
Restart=on-failure

[Install]
WantedBy=multi-user.target

   Inicializamos
systemctl enable spreed.service
service spreed start
   Ahora solo nos resta instalar los certificados SSL
nano /etc/apache2/sites-available/nextcloud.conf

    ServerName nextcloud.midominio.com
    ServerAlias www.nextcloud.midominio.com
    Redirect permanent / https://nextcloud.midominio.com/



    ...
    SSLEngine On
    SSLCertificateFile /etc/apache2/cert/cert.pem
    SSLCertificateKeyFile /etc/apache2/cert/privkey.pem
    SSLCertificateChainFile /etc/apache2/cert/chain.pem
    ...

   Reiniciamos Apache2 para aplicar los cambios
systemctl restart apache2
   Listo, con esto ya deberiamos tener nuestra nube 100% funcional y con video-llamadas en tiempo real desde cualquier parte del mundo, otro detalle a tener en cuenta es que si queremos utilizar el escritorio compartido sin complicarnos la vida, debemos levantar dicho servidor en cada instalación de nextcloud, si aún así decidimos compartir el servidor (lo mas lógico si vamos a manejar múltiple instancias) debemos seguir estos pasos: Spreed WebRTC y Nextcloud en diferentes origenes.
Ultimo

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión