{"id":713,"date":"2021-05-13T19:13:01","date_gmt":"2021-05-13T19:13:01","guid":{"rendered":"https:\/\/asgardius.company\/?p=400"},"modified":"2021-05-13T19:13:01","modified_gmt":"2021-05-13T19:13:01","slug":"como-montar-un-servidor-de-mensajeria-compatible-con-matrix-en-debian","status":"publish","type":"post","link":"https:\/\/asgardius.company\/?p=713","title":{"rendered":"Como montar un servidor de mensajer\u00eda compatible con Matrix en Debian"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/asgardius.company\/wp-content\/uploads\/2021\/06\/Matrix_logo.svg_.png\" alt=\"\" class=\"wp-image-401\"\/><figcaption><a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:Matrix_logo.svg\">Logo del protocolo Matrix<\/a><\/figcaption><\/figure>\n\n\n\n<p>El protocolo Matrix es un sistema descentralizado de mensajer\u00eda instant\u00e1nea con mucho potencial. En este tutorial les mostrar\u00e9 c\u00f3mo montar un servidor de mensajer\u00eda compatible con este protocolo en un servidor basado en Debian utilizando Matrix Synapse, el software de referencia para la implementaci\u00f3n del protocolo.<\/p>\n\n\n\n<p>Requisitos del sistema<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Un servidor dedicado con buena refrigeraci\u00f3n, ya que en caso de que nuestros usuarios entren a salas de chat con muchos usuarios en servidores externos la CPU de nuestro servidor estar\u00e1 trabajando al 100% durante periodos prolongados y nos convertir\u00edamos en un vecino molesto en caso de usar un VPS<\/li><li>CPU de 2 hilos a 1.7 GHz para uso privado con 15 usuarios, CPU de 8 hilos a 2.4 o m\u00e1s en caso de que tener usuarios miembros de salas con muchos usuarios en servidores externos<\/li><li>2GB de RAM para una instancia privada con 15 usuarios, 4GB o m\u00e1s si la base de datos reside en el servidor de mensajer\u00eda<\/li><li>Una instancia de PostgreSQL (En el tutorial se muestra c\u00f3mo montarla)<\/li><li>Un servidor de correo (hice un tutorial sobre c\u00f3mo montar uno)<\/li><\/ul>\n\n\n\n<p>Primero agregaremos los repositorios de Matrix Synapse y lo instalamos<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y lsb-release wget apt-transport-https\nsudo wget -O \/usr\/share\/keyrings\/matrix-org-archive-keyring.gpg https:\/\/packages.matrix.org\/debian\/matrix-org-archive-keyring.gpg\necho \"deb &#91;signed-by=\/usr\/share\/keyrings\/matrix-org-archive-keyring.gpg] https:\/\/packages.matrix.org\/debian\/ $(lsb_release -cs) main\" |\n    sudo tee \/etc\/apt\/sources.list.d\/matrix-org.list\nsudo apt update\nsudo apt install matrix-synapse-py3<\/code><\/pre>\n\n\n\n<p>El instalador preguntar\u00e1 por el nombre de dominio que queremos para nuestro servidor (el dominio debe apuntar a nuestro servidor a trav\u00e9s de un registro A)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/asgardius.company\/wp-content\/uploads\/2021\/06\/Captura-de-pantalla_2021-05-13_10-54-23.png\" alt=\"\" class=\"wp-image-403\"\/><\/figure>\n\n\n\n<p>Ahora montaremos una instancia de PostgreSQL<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install postgresql postgresql-contrib<\/code><\/pre>\n\n\n\n<p>Despues creamos una base de datos<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -u postgres psql\nCREATE USER matrix;\nCREATE DATABASE matrix\n ENCODING 'UTF8'\n LC_COLLATE='C'\n LC_CTYPE='C'\n template=template0\n OWNER matrix;\nGRANT ALL PRIVILEGES ON DATABASE matrix TO matrix;\nALTER USER matrix WITH PASSWORD 'new_password';\n\\q\n<\/code><\/pre>\n\n\n\n<p>Ahora editamos el archivo de configuraci\u00f3n principal de Matrix Synapse<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/matrix-synapse\/homeserver.yaml<\/code><\/pre>\n\n\n\n<p>Buscamos la siguiente secci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>database:\n  name: sqlite3\n  args:\n    database: \/var\/lib\/matrix-synapse\/homeserver.db<\/code><\/pre>\n\n\n\n<p>La reemplazamos por lo siguiente introduciendo las credenciales de nuestra base de datos<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>database:\n  name: psycopg2\n  args:\n    user: &lt;user&gt;\n    password: &lt;pass&gt;\n    database: &lt;db&gt;\n    host: &lt;host&gt;\n    cp_min: 5\n    cp_max: 10<\/code><\/pre>\n\n\n\n<p>Buscamos la siguiente secci\u00f3n e introducimos la direcci\u00f3n de nuestro servidor de mensajer\u00eda<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#public_baseurl: https:\/\/example.com\/<\/code><\/pre>\n\n\n\n<p>Quedar\u00eda algo as\u00ed<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public_baseurl: https:\/\/matrix.asgardius.company<\/code><\/pre>\n\n\n\n<p>Buscamos la siguiente secci\u00f3n e introducimos las credenciales de nuestro servidor de correo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>email:\n  # The hostname of the outgoing SMTP server to use. Defaults to 'localhost'.\n  #\n  #smtp_host: mail.server\n\n  # The port on the mail server for outgoing SMTP. Defaults to 25.\n  #\n  #smtp_port: 587\n<\/code><\/pre>\n\n\n\n<p>Debemos asegurarnos de que en el campo &#8220;notif_from&#8221; aparezca la direcci\u00f3n de correo desde la cual se env\u00edan las notificaciones ya que en caso contrario algunos servidores rechazar\u00e1n nuestros correos de notificaci\u00f3n (entre ellos Gmail)<\/p>\n\n\n\n<p>Buscamos la siguiente l\u00ednea<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>registration_shared_secret: &lt;PRIVATE STRING&gt;<\/code><\/pre>\n\n\n\n<p>La habilitamos y reemplazamos &lt;PRIVATE STRING&gt; por una cadena aletoria<\/p>\n\n\n\n<p>Necesitamos un servidor web que funcione como proxy inverso, en este caso usaremos Apache. Primero necesitamos instalarlo junto a certbot para obtener un certificado SSL<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install apache2 certbot python3-certbot-apache<\/code><\/pre>\n\n\n\n<p>Creamos un archivo de host virtual<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/apache2\/sites-enabled\/matrix.asgardius.company.conf<\/code><\/pre>\n\n\n\n<p>Con el siguiente contenido<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:80&gt;\nDocumentRoot \/var\/www\/html\nServerName matrix.asgardius.company\n&lt;Directory \/var\/www\/html&gt;\nOptions -Indexes +FollowSymLinks\nAllowOverride All\n&lt;\/Directory&gt;\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n\n\n\n<p>Ahora solicitamos el certificado<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo certbot --apache<\/code><\/pre>\n\n\n\n<p>Editamos el archivo de configuraci\u00f3n de Apache encargado de los puertos<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/apache2\/ports.conf<\/code><\/pre>\n\n\n\n<p>Buscamos el siguiente bloque<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;IfModule ssl_module&gt;\n        Listen 443\n&lt;\/IfModule&gt;<\/code><\/pre>\n\n\n\n<p>Agregamos el puerto 8448<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;IfModule ssl_module&gt;\n        Listen 443 8448\n&lt;\/IfModule&gt;<\/code><\/pre>\n\n\n\n<p>Modificamos el archivo del virtualhost que nos gener\u00f3 certbot<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/apache2\/sites-enabled\/matrix.asgardius.company-le-ssl.conf<\/code><\/pre>\n\n\n\n<p>Lo dejamos as\u00ed<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;IfModule mod_ssl.c>\n&lt;VirtualHost *:443>\nDocumentRoot \/var\/www\/html\nServerName matrix.asgardius.company\n&lt;Directory \/var\/www\/html>\nOptions -Indexes +FollowSymLinks\nAllowOverride All\n&lt;\/Directory>\n\n    ProxyPreserveHost on\n    ProxyPass \/_matrix http:\/\/127.0.0.1:8008\/_matrix nocanon\n    ProxyPassReverse \/_matrix http:\/\/127.0.0.1:8008\/_matrix\n    ProxyPass \/_synapse\/client http:\/\/127.0.0.1:8008\/_synapse\/client nocanon\n    ProxyPassReverse \/_synapse\/client http:\/\/127.0.0.1:8008\/_synapse\/client\n    ProxyPass \/_synapse\/admin http:\/\/127.0.0.1:8008\/_synapse\/admin nocanon\n    ProxyPassReverse \/_synapse\/admin http:\/\/127.0.0.1:8008\/_synapse\/admin\n\nServerAlias asgardius.company\nInclude \/etc\/letsencrypt\/options-ssl-apache.conf\nSSLCertificateFile \/etc\/letsencrypt\/live\/matrix.asgardius.company\/fullchain.pem\nSSLCertificateKeyFile \/etc\/letsencrypt\/live\/matrix.asgardius.company\/privkey.pem\n&lt;\/VirtualHost>\n&lt;\/IfModule>\n\n&lt;IfModule mod_ssl.c>\n&lt;VirtualHost *:8448>\nDocumentRoot \/var\/www\/html\nServerName matrix.asgardius.company\n\n    RequestHeader set \"X-Forwarded-Proto\" expr=%{REQUEST_SCHEME}\n    AllowEncodedSlashes NoDecode\n    ProxyPass \/_matrix http:\/\/127.0.0.1:8008\/_matrix nocanon\n    ProxyPassReverse \/_matrix http:\/\/127.0.0.1:8008\/_matrix\n\nServerAlias asgardius.company\nInclude \/etc\/letsencrypt\/options-ssl-apache.conf\nSSLCertificateFile \/etc\/letsencrypt\/live\/matrix.asgardius.company\/fullchain.pem\nSSLCertificateKeyFile \/etc\/letsencrypt\/live\/matrix.asgardius.company\/privkey.pem\n&lt;\/VirtualHost>\n&lt;\/IfModule><\/code><\/pre>\n\n\n\n<p>Habilitamos los m\u00f3dulos necesarios y reiniciamos los servicios<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo a2enmod proxy proxy_http headers\nsudo systemctl restart apache2\nsudo systemctl restart matrix-synapse<\/code><\/pre>\n\n\n\n<p>Creamos la cuenta del administrador del sistema<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo register_new_matrix_user -c \/etc\/matrix-synapse\/homeserver.yaml http:\/\/localhost:8008<\/code><\/pre>\n\n\n\n<p>Ahora podemos utilizar el cliente de nuestra preferencia, <a href=\"https:\/\/element.io\/\">recomiendo utilizar Element<\/a><\/p>\n\n\n\n<p>Referencias<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/matrix-org\/synapse\/blob\/master\/INSTALL.md#debianubuntu\">https:\/\/github.com\/matrix-org\/synapse\/blob\/master\/INSTALL.md#debianubuntu<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/matrix-org\/synapse\/blob\/master\/docs\/postgres.md\">https:\/\/github.com\/matrix-org\/synapse\/blob\/master\/docs\/postgres.md<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/matrix-org\/synapse\/blob\/master\/docs\/reverse_proxy.md\">https:\/\/github.com\/matrix-org\/synapse\/blob\/master\/docs\/reverse_proxy.md<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El protocolo Matrix es un sistema descentralizado de mensajer\u00eda instant\u00e1nea con mucho potencial. En este tutorial les mostrar\u00e9 c\u00f3mo montar un servidor de mensajer\u00eda compatible con este protocolo en un servidor basado en Debian utilizando Matrix Synapse, el software de referencia para la implementaci\u00f3n del protocolo. Requisitos del sistema Un servidor dedicado con buena refrigeraci\u00f3n,&hellip; <a class=\"more-link\" href=\"https:\/\/asgardius.company\/?p=713\">Seguir leyendo <span class=\"screen-reader-text\">Como montar un servidor de mensajer\u00eda compatible con Matrix en Debian<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-713","post","type-post","status-publish","format-standard","hentry","category-sin-categoria","entry"],"_links":{"self":[{"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/posts\/713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/asgardius.company\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=713"}],"version-history":[{"count":0,"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/posts\/713\/revisions"}],"wp:attachment":[{"href":"https:\/\/asgardius.company\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=713"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/asgardius.company\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=713"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/asgardius.company\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}