¡Me encanta el olor a software libre por las mañanas! Y más cuando una aplicación privativa que me gusta se vuelve un dolor de muelas por sus restricciones. Entonces es el momento de buscar alternativas de software libre.
mis requerimientos
- open source
- alternativa a slack
- multiplataforma: linux, windows, android…
- sin limitaciones en cuanto a mensajes, ficheros, etc…
- instalable en un servidor que ya esté funcionando con otros servicios
el caso
Slack, la plataforma para facilitar el trabajo en equipo es una herramienta muy útil pero, cuando llevas un tiempo utilizándola en su versión gratuíta empiezan a aparecer los problemas, como no poder recuperar conversaciones porque has excedido el máximo y sólo te muestra las últimas diez mil. Y un día, sin saber cómo, te encuentras abriendo duckduckgo y buscando 'slack open source alternatives'
. Y ahí es cuando descubres Mattermost.
las alternativas
Mattermost es una alternativa a slack pero de software libre, su misión es la misma, su interfaz es terriblemente similar y no tiene las limitaciones de aquella pero no es la única alternativa. Durante un tiempo barajé la opción de zulip
pero tiene un requerimiento que choca frontalmente con los míos:
Requirements
To run a Zulip server, you will need:
* A dedicated machine or VM
Mis servidores son limitados y por eso trato de aglutinar en ellos servicios similares y, en este caso, ni quería ni podía utilizar una máquina para la mensajería.
La única desventaja que le vi a Mattermost es que utiliza nginx
como proxy inverso y yo utilizo apache
pero se puede cambiar fácilmente, como veremos.
instalación de mattermost
Todo el proceso descrito en esta entrada se ha obtenido de la documentación oficial de Mattermost.
creación de la base de datos
El servidor de bases de datos también está instalado y configurado por lo que únicamente tendremos que crear una base de datos y un usuario nuevos.
sudo mysql -u root -p -e "CREATE DATABASE mattermost; GRANT ALL ON mattermost.* TO 'matter'@'localhost' IDENTIFIED BY 'SuperSecurePassW0rd!';"
Estos datos de conexión se utilizarán más adelante al configurar el Driver de Mattermost.
Mattermos, al fin
Instalaremos Mattermost en /opt
y apuntaremos el virtual host de apache2
a ese directorio.
wget -c https://releases.mattermost.com/5.10.0/mattermost-5.10.0-linux-amd64.tar.gz
tar xvfz mattermost-5.10.0-linux-amd64.tar.gz
sudo mv mattermost /opt/mattermost
rm -f mattermost-5.10.0-linux-amd64.tar.gz
sudo mkdir /opt/mattermost/opt
cd /opt/mattermost
sudo useradd --system --user-group mattermost
sudo chown -R mattermost:mattermost /opt/mattermost
sudo chmod -R g+w /opt/mattermost
if [ `grep -c '"DriverName": "mysql"' /opt/mattermost/config/config.json` != '1' ] ; then
echo "el DriverName no es MySQL"
exit 1
fi
sudo sed -i 's|mmuser:mostest@tcp(dockerhost:3306)/mattermost_test|matter:SuperSecurePassW0rd!@tcp(127.0.0.1:3306)/mattermost|' /opt/mattermost/config/config.json
sudo -u mattermost /opt/mattermost/bin/mattermost ### si falla, leer más abajo
echo "[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service
[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target" | sudo tee -a /lib/systemd/system/mattermost.service
sudo systemctl daemon-reload
sudo systemctl status mattermost.service
sudo systemctl start mattermost.service
sudo systemctl enable mattermost.service
wget http://localhost:8065 -O - ### tiene que mostrar una web
la columna de una tabla es demasiado grande
Si falla y da este error, {"level":"error","ts":1557928148.6244338,"caller":"sqlstore/supplier.go:811","msg":"Failed to create index Error 1709: Index column size too large. The maximum column size is 767 bytes."}
, cambiar configuración en mariadb
:
sudo sed -i '/# this is only for embedded server/i \\# added for mattermost\ninnodb_default_row_format=dynamic\ninnodb_file_format=barracuda\ninnodb_file_per_table=true\ninnodb_large_prefix=true\n' /etc/mysql/mariadb.conf.d/50-server.cnf
sudo /etc/init.d/mysql restart
apache2
Crear el subdominio matter.example.com
apuntando al servidor donde lo vas a instalar. En mi caso, en dicho servidor ya hay un apache
funcionando y no necesito instalar software adicional. En caso de utilizar, como recomienda Mattermost, nginx
tendría dos servicios operando sobre el mismo puerto y eso no termina bien nunca.
A partir de esta modificación, apache
no sólo funcionará como servidor web sino que también hará de proxy inverso para redirigir el tráfico al puerto que escucha Mattermos, el 8065.
Creamos el VirtualHost
para Mattermost, en principio vacío y luego, tras solicitar el certificado a letsencrypt
, con la configuración de proxy.
echo "#<ifmodule mod_ssl.c="">
# <virtualhost _default_:443="">
# ServerName matter.example.com
# ServerAdmin [email protected]
# ErrorLog /matter.example.com_error.log
# TransferLog /matter.example.com_access.log
#
# SSLEngine on
# SSLCertificateFile /etc/letsencrypt/live/matter.example.com/fullchain.pem
# SSLCertificateKeyFile /etc/letsencrypt/live/matter.example.com/privkey.pem
# SSLProtocol TLSv1 TLSv1.1 TLSv1.2 -SSLv2 -SSLv3
# SSLHonorCipherOrder On
# SSLCipherSuite AES256+EECDH:AES256+EDH
#
# ProxyPreserveHost On
# ProxyRequests Off
# ProxyPass / http://127.0.0.1:8065/
# ProxyPassReverse / http://127.0.0.1:8065/
#
# RewriteEngine on
# RewriteCond %{REQUEST_URI} ^/api/v4/websocket [NC,OR]
# RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
# RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
# RewriteRule .* ws://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]
# RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} fg
# RewriteRule .* http://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]
#
# <location api="" v4="" websocket="">
# Require all granted
# ProxyPassReverse http://127.0.0.1:8065
# ProxyPassReverseCookieDomain 127.0.0.1 matter.example.com
# </location>
# <location>
# Require all granted
# ProxyPassReverse http://127.0.0.1:8065
# ProxyPassReverseCookieDomain 127.0.0.1 matter.example.com
# </location>
# </virtualhost>
#</ifmodule>
<virtualhost *:80="">
ServerName matter.example.com
DocumentRoot /var/www/matter.example.com
# Redirect permanent / https://matter.example.com/
</virtualhost>" | sudo tee --append /etc/apache2/sites-available/matter.example.com.conf
sudo /etc/init.d/apache2 restart
sudo certbot certonly --apache --agree-tos -m [email protected] -d matter.example.com.conf
sudo sed -i 's/^#//' /etc/apache2/sites-available/matter.example.com.conf
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel
sudo a2ensite matter.example.com.conf
sudo /etc/init.d/apache2 restart
Tras ejecutar estos comandos tendremos un nuevo virtual host redirigiendo el tráfico al puerto de Mattermost, adornado con un bonito certificado de Let’s Encrypt.
Configuración de mattermost
Ahora sólo nos queda abrir el navegador en https://matter.example.com
y configurar el usuario administrador. También es necesario configurar el servidor de correo según el apartado Configuring Mattermost Server.