Skip to content

Instantly share code, notes, and snippets.

@sidneyspe
Created January 1, 2026 11:24
Show Gist options
  • Select an option

  • Save sidneyspe/5c0444dbf53ced1ac2d3c27976bc90fb to your computer and use it in GitHub Desktop.

Select an option

Save sidneyspe/5c0444dbf53ced1ac2d3c27976bc90fb to your computer and use it in GitHub Desktop.
SMTP4DEV - Linux WSL2

smtp4dev no WSL (Opção 1) — Docker + systemd (auto-start no boot)

Este guia configura o smtp4dev para subir automaticamente sempre que o WSL iniciar/reiniciar, usando Docker Compose e systemd (o jeito mais “Linux raiz” e confiável).

✅ Resultado: abriu a distro / reiniciou o WSL → smtp4dev sobe sozinho.


Pré-requisitos

  • WSL2 (Ubuntu/Debian etc.)
  • Docker disponível dentro do WSL:
    • Opção A: Docker Desktop com integração WSL (recomendado)
    • Opção B: Docker Engine instalado dentro do WSL

Verifique:

docker --version
docker compose version

1) Criar o Docker Compose do smtp4dev

Crie a pasta:

sudo mkdir -p /opt/smtp4dev

Crie o arquivo:

sudo nano /opt/smtp4dev/docker-compose.yml

Cole:

version: "3"
services:
  smtp4dev:
    image: rnwood/smtp4dev:v3
    restart: always
    ports:
      - "127.0.0.1:5000:80"   # Web UI
      - "127.0.0.1:2525:25"   # SMTP
      - "127.0.0.1:1143:143"  # IMAP (opcional)
      - "127.0.0.1:1110:110"  # POP3 (opcional)
    volumes:
      - smtp4dev-data:/smtp4dev
    environment:
      - ServerOptions__Urls=http://*:80
      - ServerOptions__HostName=smtp4dev

volumes:
  smtp4dev-data:

Teste manual (antes do auto-start)

cd /opt/smtp4dev
docker compose up -d
docker ps

Acesse no host (Windows):

SMTP:

  • Host: localhost
  • Porta: 2525

Por que 127.0.0.1 nas portas?
Pra não expor o smtp4dev pra rede inteira sem querer. Mantém tudo local.


2) Habilitar systemd no WSL

Abra o arquivo:

sudo nano /etc/wsl.conf

Adicione:

[boot]
systemd=true

Agora no PowerShell do Windows:

wsl --shutdown

Abra o WSL de novo e valide:

systemctl --version
systemctl is-system-running

3) Criar um serviço systemd para subir o Compose no boot

Crie o unit file:

sudo nano /etc/systemd/system/smtp4dev.service

Cole:

[Unit]
Description=smtp4dev (Docker Compose)
After=network-online.target docker.service
Wants=network-online.target
Requires=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/smtp4dev
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

Ative e rode agora:

sudo systemctl daemon-reload
sudo systemctl enable --now smtp4dev

Cheque status:

sudo systemctl status smtp4dev --no-pager

Logs (se precisar):

journalctl -u smtp4dev -n 200 --no-pager

Como testar o “auto-start”

  1. No PowerShell:
wsl --shutdown
  1. Abra a distro WSL novamente

  2. Verifique:

sudo systemctl status smtp4dev --no-pager
docker ps | grep smtp4dev

Uso rápido

Acessar Web UI

Configurar sua aplicação para enviar e-mail

  • SMTP Host: localhost
  • SMTP Port: 2525
  • Usuário/Senha: geralmente não precisa (depende da sua app)

Comandos úteis

Parar:

sudo systemctl stop smtp4dev

Iniciar:

sudo systemctl start smtp4dev

Reiniciar:

sudo systemctl restart smtp4dev

Desativar no boot:

sudo systemctl disable --now smtp4dev

Subir/derrubar manualmente via compose:

cd /opt/smtp4dev
docker compose up -d
docker compose down

Troubleshooting (os BOs mais comuns)

1) “docker.service not found” / Docker não sobe

  • Se você usa Docker Desktop, às vezes não existe docker.service dentro do WSL.
    • Solução: instale Docker Engine no WSL ou
    • Ajuste o unit file para não depender do docker.service e apenas tentar subir o compose.

Se quiser o unit mais “tolerante”, troque o [Unit] por:

[Unit]
Description=smtp4dev (Docker Compose)
After=network-online.target
Wants=network-online.target

E mantenha o resto igual.

2) Porta já está em uso (5000/2525)

Cheque quem está usando:

sudo ss -ltnp | grep -E ':(5000|2525|1143|1110)\b'

Troque as portas no docker-compose.yml e suba de novo:

cd /opt/smtp4dev
docker compose down
docker compose up -d

3) “systemd=true” mas systemctl não funciona

  • Confirme se o /etc/wsl.conf está correto
  • Rode wsl --shutdown e reabra o WSL
  • Garanta que você está no WSL2 (não WSL1)

Decisão importante (custo de oportunidade)

Auto-start no WSL é top, mas lembra:

  • O WSL não é um boot contínuo como servidor.
  • Se você quiser smtp4dev “sempre em pé” mesmo sem abrir terminal, pode ser melhor rodar pelo Docker Desktop direto no Windows (e aí o container fica vivo independente do WSL).

Estrutura final

/opt/smtp4dev/
  docker-compose.yml
/etc/wsl.conf
/etc/systemd/system/smtp4dev.service

Pronto. Se você quiser, eu também monto uma variante “ultra-resiliente” do service (com retry, healthcheck e restart do unit via systemd), mas essa aqui já resolve 99% dos casos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment