Binary Coffee

Configuremos un servidor de correo con Docker (MAILU)

docker hack

驴Qu茅 es Mailu?

Mailu es un grupo de servicios que en su conjunto conforman un servidor de correo. Dentro de los servicios que se pueden encontrar con Mailu, est谩n:

  • Servicio para entrada de correos (IMAP, POP)
  • Servicio para salida de correos (SMTP)
  • Servicio anti-spams. OPCIONAL
  • Cliente de correo web. Cuenta con opciones de clientes (roundqube, rainloop). OPCIONAL
  • Cliente para la administraci贸n del servidor. OPCIONAL

Es posible configurar todos estos servicios de forma manual en el hosting o computadora que se desee, pero el mayor beneficio con Mailu, es que cuenta con toda la configuraci贸n predefinida y lista para usarse en Docker con solo unos pocos pasos.

Configurar Mailu

Para crear la configuraci贸n de Docker, Mailu cuenta con una herramienta online que prepara la configuraci贸n inicial de forma autom谩tica y donde solo es necesario seleccionar las opciones que se desean para el servidor. La herramienta online se encuentra en este enlace: setup.mailu.io

A continuaci贸n explicaremos los pasos para generar los archivos de configuraci贸n:

  1. Seleccionar el tipo de configuraci贸n (en el presente art铆culo, usaremos Docker, pero puedes utilizar Stack)
  2. mailu storage path: es el lugar o volumen donde se almacenar谩n los datos del servidor, ejemplo /home/guille/mailu-data
  3. main_domain: dominio del servidor de correo. Si tu correo es guille@domain.com, este valor ser铆a domain.com.
  4. security: elegir el tipo de seguridad a utilizarse. en el caso de seleccionarse cert, seguir los pasos de este link para copiar los certificados dentro del servidor.
  5. website name: nombre que se mostrar谩 en los clientes web.
  6. enable administration: habilitar el cliente web de administraci贸n del servidor.
  7. enable webclient: habilitar el cliente web. Se puede elegir entre roundqube y rainloop
  8. public hostnames: definir el hostname o los hostname del servidor. Si su servidor va a estar hosteado en mail.domain.com, pues este dominio debe estar en el listado.

Una vez que se han llenado todos los par谩matros de configuraci贸n, se generar谩n los archivos docker-compose y mailu.env, los cuales se pueden descargar en dos enlaces al final del proceso. Una vez descargados dichos archivos, es bueno chequear manualmente que todo est谩 correctamente.

Iniciar el servidor de correo

Para iniciar el servidor de correo, solamente es necesario ejecutar el siguiente comando en el directorio donde se copiaron los archivos anteriores:

docker-compose up -d

Con esto, los contenedores de todos los servicios del servidor se ejecutar谩n y el servidor estar谩 listo para ser usado. Pero inicialmente, y para poder acceder a la administraci贸n, es necesario crear un usuario con el role de administrador. Para ello deben ejecutar el siguiente comando:

docker-compose exec admin flask mailu admin guille example.net my-password

Esto crear谩 un usuario con privilegios de administraci贸n con el user: guille@example.net y el password: my-password. Ya puedes acceder a la administraci贸n por la url /admin (suponiendo que fue la seleccionada en la configuraci贸n).

Analizando los contenedores del servidor

  • front: Es el servicio principal del servidor y es un nginx que distribuye las peticiones de los usuario entre los diferentes servicios
  • database: Si decidiste dejar que mailu utilizara su propia configuraci贸n de BD, este es el docker que la contiene.
  • redis: La mayor铆a de servicios necesitan comunicarse entre ellos, y este servicio es el que permite esto.
  • imap: Servicio de entrada de correos. Tambi茅n contiene POP
  • smtp: Servicio de salida de correos.
  • antispan: Servicio para el manejo de correos span.
  • webmail: Cliente web del servidor de correo.
  • admin: Cliente web para la administraci贸n del servidor de correo.
  • fetchmail: Servicio que cada cierto tiempo chequea si hay nuevos correos y los almacena en el servidor.

Experiencias con la configuraci贸n

Tu servidor de correo est谩 detras de un nginx en tu hosting y la administraci贸n redirecciona a localhost

  • Si cuando intentas acceder a la administraci贸n, y esta te redirecciona a localhost en cada 301. Esto se resuelve si en la configuraci贸n del nginx agregan las 煤ltimas 2 l铆neas:
    localtion / {
     proxy_pass https://localhost:443;
     proxy_set_header Host $host;
     proxy_redirect ~^/(.*) https://$http_host/$1;
    }
    
    Con estas l铆neas se est谩 definiendo cual es el host a utilizarse en la redirecci贸n.

Al intentar iniciar los contenedores, los puertos est谩n utilizados.

  • Si hosting donde se intenta iniciar el servidor, ya cuenta con un nginx expuesto al puerto 80 y 443, la mejor soluci贸n es cambiar en la configuraci贸n de docker-compose los puertos como en el siguiente ejemplo:
    services:
     ...
     front:
      ...
      ports:
       - "127.0.0.1:8880:80"
       - "127.0.0.1:8443:443"
    
    y redireccionar con el nginx a estos puertos internos:
    server {
     listen 80;
     server_name my.domain.com;
     location / {
       proxy_pass http://localhost:8880;
     }
    }
    server {
     listen 443;
     server_name my.domain.com;
     location / {
       proxy_pass https://localhost:8443;
     }
    }
    

No puedo acceder a los puertos del servidor (25, 465, 110, ...)

  • La configuraci贸n por defecto del docker-compose le agrega a cada puerto el ip 127.0.0.1 al inicio. Esto significa que los puertos solo van a estar disponible desde el localhost. Para solucionar el problema, remover el ip de la configuraci贸n:
    services:
      ...
      front:
       ...
       ports:
       ....
        - "25:25"
        - "465:465"
        - "587:587"
        - "110:110"
        - "995:995"
        - "143:143"
        - "993:993"
    

Esperamos que el este art铆culo te halla sido de ayuda para configurar tu propio servidor de correo y que la experiancia que hemos compartido te eliminase horas de trabajo. Cualquier duda o sugerencia, d茅jala en los comentarios.

happy coding!

Opiniones
noavatar
luego de la configuracion estoy obteniendo un 502 Bad Gateway al acceder al hostname configurado, algun consejo ???