Auto-hospedado
Começando
Nossa solução de e-mail auto-hospedada, como todos os nossos produtos, é 100% open-source — tanto frontend quanto backend. Isso significa:
- Transparência completa:Cada linha de código que processa seus e-mails está disponível para análise pública
- Contribuições da Comunidade: Qualquer pessoa pode contribuir com melhorias ou corrigir problemas
- Segurança através da abertura:Vulnerabilidades podem ser identificadas e corrigidas por uma comunidade global
- Sem bloqueio de fornecedor:Você nunca depende da existência da nossa empresa
A base de código completa está disponível no GitHub em https://github.com/forwardemail/forwardemail.net, licenciado sob a Licença MIT.
A arquitetura inclui contêineres para:
- Servidor SMTP para e-mail de saída
- Servidores IMAP/POP3 para recuperação de e-mail
- Interface web para administração
- Banco de dados para armazenamento de configuração
- Redis para cache e desempenho
- SQLite para armazenamento seguro e criptografado de caixas de correio
Requisitos
Antes de executar o script de instalação, certifique-se de ter o seguinte:
- Sistema operacional: Um servidor baseado em Linux (atualmente com suporte ao Ubuntu 22.04+).
- Recursos: 1 vCPU e 2 GB de RAM
- Acesso root: Privilégios administrativos para executar comandos.
- Nome do domínio: Um domínio personalizado pronto para configuração de DNS.
- IP limpo: Garanta que seu servidor tenha um endereço IP limpo, sem reputação de spam anterior, verificando listas negras. Mais informações aqui.
- Endereço IP público com suporte à porta 25
- Capacidade de definir PTR reverso
- Suporte a IPv4 e IPv6
[!DICA] Veja nossa lista de provedores de servidores de e-mail incríveis
Cloud-init / Dados do usuário
A maioria dos fornecedores de nuvem oferece suporte a uma configuração cloud-init para quando o servidor virtual privado (VPS) é provisionado. Essa é uma ótima maneira de definir alguns arquivos e variáveis de ambiente com antecedência para uso pela lógica de configuração inicial dos scripts, o que evitará a necessidade de solicitar informações adicionais enquanto o script estiver em execução.
Opções
EMAIL
- e-mail usado para lembretes de expiração do certbotDOMAIN
- domínio personalizado (por exemploexample.com
) usado para configuração de auto-hospedagemAUTH_BASIC_USERNAME
- nome de usuário usado na primeira configuração para proteger o siteAUTH_BASIC_PASSWORD
- senha usada na primeira configuração para proteger o site/root/.cloudflare.ini
- (Somente usuários do Cloudflare) arquivo de configuração do cloudflare usado pelo certbot para configuração de DNS. Ele requer que você defina seu token de API viadns_cloudflare_api_token
. Leia mais aqui.
Exemplo:
#cloud-config
write_files:
- path: /root/.cloudflare.ini
content: |
dns_cloudflare_api_token = "xxx"
owner: root:root
permissions: '0600'
- path: /etc/profile.d/env.sh
content: |
export EMAIL="test@myemail.com"
export DOMAIN="mydomain.com"
runcmd:
- chmod +x /etc/profile.d/env.sh
Instalar
Execute o seguinte comando no seu servidor para baixar e executar o script de instalação:
bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Script de instalação de depuração
Adicionar DEBUG=true
na frente do script de instalação para saída detalhada:
DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Avisos
1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
- Configuração inicial: Baixe o código de e-mail de encaminhamento mais recente, configure o ambiente, solicite seu domínio personalizado e configure todos os certificados, chaves e segredos necessários.
- Configurar backup: Configurará um cron para fazer backup do mongoDB e do redis usando um armazenamento compatível com S3 para armazenamento remoto seguro. Separadamente, o sqlite será feito backup no login se houver alterações para backups seguros e criptografados.
- Atualização de configuração: Configure um cron para procurar atualizações noturnas que reconstruirão e reiniciarão com segurança os componentes da infraestrutura.
- Renovar certificados: Certbot / lets encrypt é usado para certificados SSL e as chaves expirarão a cada 3 meses. Isso renovará os certificados para seu domínio e os colocará na pasta necessária para que os componentes relacionados consumam. Veja caminhos de arquivo importantes
- Restaurar do backup: Irá acionar o mongodb e o redis para restaurar os dados de backup.
Configuração inicial (opção 1)
Escolha a opção 1. Initial setup
para começar.
Uma vez concluído, você verá uma mensagem de sucesso. Você pode até mesmo executar docker ps
ver o componentes girados. Mais informações sobre componentes abaixo.
Serviços
Nome do serviço | Porta Padrão | Descrição |
---|---|---|
Rede | 443 | Interface da Web para todas as interações do administrador |
API | 4000 | Camada de API para abstrair bancos de dados |
Brisa | Nenhum | Trabalho em segundo plano e executor de tarefas |
SMTP | 465/587 | Servidor SMTP para e-mail de saída |
SMTP Bree | Nenhum | Trabalho em segundo plano SMTP |
MX | 2525 | Troca de e-mail para e-mail de entrada e encaminhamento de e-mail |
IMAP | 993/2993 | Servidor IMAP para e-mail de entrada e gerenciamento de caixa de correio |
POP3 | 995/2995 | Servidor POP3 para e-mail de entrada e gerenciamento de caixa de correio |
SQLite | 3456 | Servidor SQLite para interações com bancos de dados sqlite |
SQLite Bree | Nenhum | Trabalho em segundo plano do SQLite |
CalDAV | 5000 | Servidor CalDAV para gerenciamento de calendário |
MongoDB | 27017 | Banco de dados MongoDB para a maioria dos gerenciamentos de dados |
Redis | 6379 | Redis para cache e gerenciamento de estado |
SQLite | Nenhum | Banco(s) de dados SQLite para caixas de correio criptografadas |
Caminhos de arquivo importantes
Observação: Caminho do host abaixo é relativo a /root/forwardemail.net/self-hosting/
.
Componente | Caminho do host | Caminho do contêiner |
---|---|---|
MongoDB | ./mongo-backups | /backups |
Redis | ./redis-data | /data |
Sqlite | ./sqlite-data | /mnt/{SQLITE_STORAGE_PATH} |
Arquivo env | ./.env | /app/.env |
Certificados/chaves SSL | ./ssl | /app/ssl/ |
Chave privada | ./ssl/privkey.pem | /app/ssl/privkey.pem |
Certificado de cadeia completa | ./ssl/fullchain.pem | /app/ssl/fullchain.pem |
CAs certificados | ./ssl/cert.pem | /app/ssl/cert.pem |
Chave privada DKIM | ./ssl/dkim.key | /app/ssl/dkim.key |
[!IMPORTANTE] Salve o
.env
arquivar com segurança. É crítico para recuperação em caso de falha. Você pode encontrar isso em/root/forwardemail.net/self-hosting/.env
.
Configuração
Configuração inicial de DNS
No seu provedor DNS de escolha, configure os registros DNS apropriados. Anote qualquer coisa entre colchetes (<>
) é dinâmico e precisa ser atualizado com seu valor.
Tipo | Nome | Contente | TTL |
---|---|---|---|
A | "@", "." ou em branco | <endereço_ip> | auto |
CNAME | APIs | <nome_do_domínio> | auto |
CNAME | Caldav | <nome_do_domínio> | auto |
CNAME | fe-rebate | <nome_do_domínio> | auto |
CNAME | imap | <nome_do_domínio> | auto |
CNAME | MX-México | <nome_do_domínio> | auto |
CNAME | pop3 | <nome_do_domínio> | auto |
CNAME | SMTP | <nome_do_domínio> | auto |
MX | "@", "." ou em branco | mx.<nome_do_domínio> (prioridade 0) | auto |
TXT | "@", "." ou em branco | "v=spf1 a -tudo" | auto |
Registro DNS/PTR reverso
DNS reverso (rDNS) ou registros de ponteiro reverso (registros PTR) são essenciais para servidores de e-mail porque ajudam a verificar a legitimidade do servidor que envia o e-mail. Cada provedor de nuvem faz isso de forma diferente, então você precisará pesquisar como adicionar "DNS reverso" para mapear o host e o IP para seu nome de host correspondente. Provavelmente na seção de rede do provedor.
Porta 25 bloqueada
Alguns ISPs e provedores de nuvem bloqueiam 25 para evitar atores mal-intencionados. Talvez seja necessário registrar um tíquete de suporte para abrir a porta 25 para SMTP/e-mail de saída.
Integração
-
Abra a Landing Page Navegue até https://<domain_name>, substituindo <domain_name> pelo domínio configurado nas suas configurações de DNS. Você deverá ver a landing page Forward Email.
-
Faça login e integre seu domínio
- Entre com um e-mail e senha válidos.
- Digite o nome de domínio que você deseja configurar (ele deve corresponder à configuração de DNS).
- Siga as instruções para adicionar o necessário MX e TXT registros para verificação.
- Configuração completa
- Após a verificação, acesse a página Aliases para criar seu primeiro alias.
- Opcionalmente, configure SMTP para e-mail de saída no Configurações de domínio. Isso requer registros DNS adicionais.
[!NOTA] Nenhuma informação é enviada para fora do seu servidor. A opção de auto-hospedagem e a conta inicial são apenas para login de administrador e visualização da web para gerenciar domínios, aliases e configurações de e-mail relacionadas.
Testando
Criando seu primeiro alias
- Navegue até a página Aliases Abra a página de gerenciamento de alias:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- Adicionar um novo alias
- Clique Adicionar alias (canto superior direito).
- Insira o nome do alias e ajuste as configurações de e-mail conforme necessário.
- (Opcional) Habilitar IMAP/POP3/CalDAV suporte marcando a caixa de seleção.
- Clique Criar Alias.
- Definir uma senha
- Clique Gerar senha para criar uma senha segura.
- Esta senha será necessária para efetuar login no seu cliente de e-mail.
- Configure seu cliente de e-mail
- Use um cliente de e-mail como o Thunderbird.
- Digite o nome do alias e a senha gerada.
- Configurar o IMAP e SMTP configurações de acordo.
Configurações do servidor de e-mail
Nome de usuário: <alias name>
Tipo | nome de anfitrião | Porta | Segurança de conexão | Autenticação |
---|---|---|---|---|
SMTP | smtp.<nome_do_domínio> | 465 | SSL / TLS | Senha normal |
IMAP | imap.<nome_do_domínio> | 993 | SSL / TLS | Senha normal |
Enviando / Recebendo seu primeiro e-mail
Depois de configurado, você poderá enviar e receber e-mails no seu endereço de e-mail recém-criado e auto-hospedado!
Solução de problemas
Por que isso não funciona fora do Ubuntu
Atualmente, estamos procurando oferecer suporte ao Debian, MacOS e buscaremos outros. Por favor, abra um discussão ou contribua se quiser ver outros apoiados.
Por que o desafio certbot acme está falhando
A armadilha mais comum é que o certbot / letsencrypt às vezes solicitará 2 desafios. Você precisa ter certeza de adicionar BOTH registros txt.
Exemplo: Você pode ver dois desafios como este: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"
Também é possível que a propagação do DNS não tenha sido concluída. Você pode usar ferramentas como: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>
. Isso lhe dará uma ideia se as alterações do seu registro TXT devem ser refletidas. Também é possível que o cache DNS local no seu host ainda esteja usando um valor antigo e obsoleto ou não tenha captado as alterações recentes.
Outra opção é usar as alterações automatizadas de DNS do cerbot, definindo o /root/.cloudflare.ini
arquivo com o token api em seu cloud-init / user-data na configuração inicial do VPS ou crie este arquivo e execute o script novamente. Isso gerenciará as alterações de DNS e as atualizações de desafio automaticamente.
Qual é o nome de usuário e a senha de autenticação básicos?
Para auto-hospedagem, adicionamos um pop-up de autenticação nativa do navegador pela primeira vez com um nome de usuário simples (admin
) e senha (gerada aleatoriamente na configuração inicial). Nós apenas adicionamos isso como uma proteção caso a automação/raspadores de alguma forma o vençam para se inscrever pela primeira vez na experiência da web. Você pode encontrar essa senha após a configuração inicial em seu .env
arquivar em AUTH_BASIC_USERNAME
e AUTH_BASIC_PASSWORD
.
Como sei o que está em execução
Você pode correr docker ps
para ver todos os contêineres em execução que estão sendo gerados a partir do docker-compose-self-hosting.yml
arquivo. Você também pode executar docker ps -a
para ver tudo (incluindo contêineres que não estão em execução).
Como posso saber se algo que deveria estar funcionando não está funcionando?
Você pode correr docker ps -a
para ver tudo (incluindo contêineres que não estão em execução). Você pode ver um log de saída ou nota.
Como encontro os logs
Você pode obter mais logs via docker logs -f <container_name>
. Se algo saiu, provavelmente está relacionado ao .env
arquivo está configurado incorretamente.
Na interface da web, você pode visualizar /admin/emails
e /admin/logs
para logs de e-mail de saída e logs de erro, respectivamente.
Por que meus e-mails enviados estão com o tempo limite esgotado?
Se você vir uma mensagem como Connection timed out ao conectar ao servidor MX... então você pode precisar verificar se a porta 25 está bloqueada. É comum que ISPs ou provedores de nuvem bloqueiem isso por padrão, onde você pode precisar entrar em contato com o suporte/registrar um ticket para abrir isso.
Quais ferramentas devo usar para testar as práticas recomendadas de configuração de e-mail e reputação de IP
Dê uma olhada em nosso Perguntas frequentes aqui.