instalando mattermost en debian stretch

¡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

(Zulip Requirements)

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.

Sentimos molestarte con lo de las Cookies, pero es por imperativo legal. Puedes ver aquí la Política de Cookies, si continúas navegando te informo que la estás aceptando ;)    Ver
Privacidad