🔓 Como instalar o Webmail no Portainer (Stack Free e Contas)

Tutorial de Configuração

Passo 1: Preparação e Pré-requisitos

Primeiramente, disponibilizo abaixo as ferramentas e recursos necessários para esta instalação. Estamos utilizando uma VPS da Hostinger, que oferece descontos de até 20%:

Contratar VPS Hostinger

Para este procedimento, é necessário ter o Docker na versão Swarm. Caso ainda não tenha, assista à aula gratuita abaixo para aprender a configurar:

Capa-Instalação-Portainer-Docker-Swaerm-Linux
 

Passo 2: Instalação do ACME (Opcional)

O acme.sh (criado pelo desenvolvedor Neil Pang) é um cliente desenvolvido inteiramente em linguagem shell (Bash/sh) que implementa o protocolo ACME. Ele é utilizado para automatizar a emissão, a renovação e a instalação de certificados SSL/TLS gratuitos, como os fornecidos pela Let’s Encrypt.

				
					version: "3.8"

services:
  acme:
    image: neilpang/acme.sh:latest
    command: daemon
    environment:
      - CF_Token=SUA_CHAVE_TOKEN
      - TZ=America/Sao_Paulo
    volumes:
      - acme_certs:/acme.sh
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    networks:
      - traefik_public

volumes:
  acme_certs:
    external: true

networks:
  traefik_public:
    external: true
				
			

Observação: Veja como gerar o token passo a passo nos slides abaixo: 

Passo 3: Configuração do DNS

Crie um subdomínio no Cloudflare do tipo A, apontando para o endereço IP do seu servidor.

DNS _ Registros _ digitalinterativo.com.br _ Digitalinterativo4.0@gmail.com's Account _ Cloudflare
				
					version: '3.8'

services:
  mailserver:
    image: analogic/poste.io:latest
    hostname: mail.SEU_DOMINIO.com.br  # <--- ALTERE PARA SEU SUBDOMÍNIO DE E-MAIL
    environment:
      - TZ=America/Sao_Paulo
      - HTTPS=OFF  # Importante: Desliga o SSL interno do Poste.io para que o Traefik gerencie
      - DISABLE_CLAMAV=TRUE # Opcional: Defina como FALSE se tiver mais de 4GB de RAM disponíveis. O ClamAV consome muita memória.
    volumes:
      - mail_data:/data
    networks:
      - traefik_public
      - digital_network
    ports:
      # Portas de e-mail (acesso direto; não passam pelo roteador HTTP do Traefik)
      # Usamos mode: host para garantir que o servidor identifique o IP real do remetente (importante para antispam)
      - target: 25
        published: 25
        protocol: tcp
        mode: host
      - target: 587
        published: 587
        protocol: tcp
        mode: host
      - target: 993
        published: 993
        protocol: tcp
        mode: host
      - target: 465
        published: 465
        protocol: tcp
        mode: host
    deploy:
      mode: replicated
      replicas: 1
      # O servidor de e-mail deve permanecer fixo em um nó (node) para manter a consistência do IP de saída
      placement:
        constraints:
          - node.role == manager
      labels:
        - "traefik.enable=true"
        - "traefik.docker.network=traefik_public"
        
        # Roteamento para Webmail e Painel Admin (Porta 80 do container)
        - "traefik.http.routers.mail-web.rule=Host(`email.SEU_DOMINIO.com.br`)" # <--- ALTERE O DOMÍNIO
        - "traefik.http.routers.mail-web.entrypoints=websecure"
        - "traefik.http.routers.mail-web.tls.certresolver=le"
        - "traefik.http.services.mail-web.loadbalancer.server.port=80"

volumes:
  mail_data:
    external: true
    name: mail_data # Crie este volume antes ou permita que o Portainer o crie automaticamente

networks:
  traefik_public:
    external: true
  digital_network:
    external: true
				
			
COMPARTILHAR