De todas las aplicaciones de mensajería, ya sabéis que mi favorita es XMPP.
Voy a explicaros como instalar el docker del servidor ejabberd que creé y habilitar los certificados para podernos conectar fuera de nuestra red local.
En este artículo explico como crearlo para Raspberry, pero este método también sirve para arquitectura AMD64 y utilizando del docker official.
El puerto 5222, es el encargado de mantener la comunicación de los clientes con el servidor. Es necesario tener abierto mínimo ese puerto en tu router.
A mi me gusta más utilizar docker-compose
version: '3'
services:
xmpp:
container_name: xmpp
image: 'ugeek/ejabberd:pi'
ports:
- '5222:5222'
- '5280:5280'
hostname: xmpp
tty: true
Para entrar dentro del contenedor y editar el nombre del servidor, utilizaremos vi, que ya viene instalado por defecto en el propio docker.
En el archivo ejabberd.yml, en las primeras líneas, encontraremos el apartado hosts para editar el nombre del servidor.
Podemos utilizar varios nombres de servidor.
## hosts: Domains served by ejabberd.
## You can define one or several, for example:
## hosts:
## - "example.net"
## - "example.com"
## - "example.org"
hosts:
- "midominio.duckdns.org"
En este ejemplo de configuración, he utilizado el nombre de dominio midominio.duckdns.org
. Esto quiere decir que los usuarios que estarán registrados en el servidor, utilizan de nombre de usuario, por ejemplo:
Ejabberd utiliza en su versión de terminal para admistrar el servidor el comando:
Hay que especificar al final el nombre del servidor. Existe la posibilidad que el servidor tenga dos nombres
Editamos el archivo ejabberd.yml y escribimos el nombre de administrador o administradores. En este caso angel.
## Full path to a script that generates the image.
## captcha_cmd: "/usr/share/ejabberd/captcha.sh"
acl:
admin:
user:
- "angel"
Para acceder a la página web de administración nos conectaremos del siguiente modo a la url:
Para ver los logs, ejecutariamos el siguiente comando
Para poder abrir tu servidor ejabberd a la red de un modo seguro, necesitamos que generar el certificado TLS para que nuestro usuario, contraseña y mensajes viajen cifrados.
Para generarlo voy a utilizar caddy o traefik. Voy a montar un servidor nginx con el dominio midominio.duckdns.org
y como ambos servicios crean el certificado automáticamente, ya tendremos el primer paso hecho, conseguir el certificado SSL para el servidor web.
Ahora vamos combertirlo en ejabberd.pem para utilizarlo con ejabberd con TLS.
Con Caddy, en el directorio de configuración (caddy/data/caddy/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/midominio.duckdns.org), encontraremos dos archivos. El .key y .crt.
El archivo crt es el certificado que contiene la llave pública de la url y key contiene la llave privada.
Para fusionarlos y crear el archivo .pem, utilizaremos el comando cat.
Primero irá el archivo .key y despues el .crt
Para que ejabberd reconozca el certificado, edita el archivo ejabberd.pem y elmina el último bloque desde -----BEGIN CERTIFICATE-----
a -----END CERTIFICATE-----
.
Copiamos el certificado en el servidor con docker
Reiniciamos el servidor
Si utilizas traefik, lo haremos del siguiente modo:
version: '3'
services:
web:
image: nginx:alpine
volumes:
- ./templates:/etc/nginx/templates
ports:
- "8081:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80
networks:
- web
labels:
- traefik.backend=web
- traefik.frontend.rule=Host:midominio.duckdns.org
- traefik.docker.network=web
- traefik.port=8081
- traefik.enable=true
El docker-compose es un servidor nginx basado en un Alpine Linux. Cuando levantemos el contenedor, traefik se encargará de crear los certificados Let's Encrypt para la url: midominio.duckdns.org
Necesitamos las claves públicas y privadas, pero Traefik solo crea un archivo acme.json. Necesitariamos exporta las llaves y para ello utilizaremos un docker:
Para exportar todo los certificados del archivo acme.json de traefik a archivos .pem y ejecuta en la ruta del certificado el comando anterior.
El docker para exportar los certificados, está en: https://github.com/docker-projects/docker-traefik-certificate-extractor
Una vez que tenga el certificado, puede fusionar las claves públicas y privadas en el archivo que espera ejabberd:
Copiamos el certificado en el servidor con docker
Reiniciamos el servidor
Es interesante hacer un reinicio del servidor de tanto en tanto, por si se produce algún cuelgue en algún archivo sin entregar
Publicado por Angel el Sunday 07 November del 2021
También te puede interesar:
Powered by org-bash-blog
Written in OrgMode with Emacs and converted to HTML with Pandoc
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.