Binary Coffee

Configuremos un servidor de correo con Docker (MAILU)

docker hack
## ¿Qué es Mailu? [**Mailu**](mailu.io) 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](https://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](https://mailu.io/1.7/faq.html#tls-certificate-issues) 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 ???