No description
- Go 54.2%
- CSS 19.7%
- HTML 16%
- JavaScript 10.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| cmd/server | ||
| internal | ||
| web | ||
| .env.example | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
Mail Forward - Gerenciador de Aliases @roraima.dev.br
Plataforma em Golang para cadastro de usuários e gerenciamento de aliases de e-mail personalizados @roraima.dev.br, com replicação direta na base do Postfix (aliases_db).
🎯 Recursos
- Limite por Usuário: Permite a criação de até 3 aliases gratuitos por conta.
- Replicação Direta no Postfix: Sincroniza em tempo real com a tabela
aliasesdo MariaDB consumida pelo Postfix. - Painel em Tela Única: Dashboard minimalista e intuitivo com grid de aliases, cópia com um clique, pausa/reativação e exclusão.
- Modal de Criação: Interface com prefixo
@roraima.dev.brfixo e preview ao vivo. - Binário Único (Zero Dependências de Runtime): Templates HTML, CSS e JavaScript são embutidos diretamente no executável via
embed.FS. - Segurança: Senhas criptografadas com
bcrypte sessões seguras via cookies HTTP-only.
🗄️ Estrutura do Banco de Dados
1. Base do Postfix (aliases_db)
O Postfix consome a tabela aliases:
CREATE TABLE aliases (
id BIGINT(20) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
alias_address VARCHAR(255) NOT NULL UNIQUE,
destination_address VARCHAR(255) NOT NULL,
active TINYINT(1) DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
A aplicação atualiza o campo active (1 = ativo, 0 = pausado) quando o usuário pausa o alias no painel.
2. Base da Aplicação (mail_app_db)
Criada e migrada automaticamente pela aplicação ao inicializar:
users: Armazena cadastro (nome, e-mail principal, hash bcrypt).user_aliases: Associa cada alias criado à conta do usuário.user_sessions: Sessões ativas de login.
⚙️ Variáveis de Ambiente (.env)
Copie o .env.example para .env e configure conforme seu ambiente:
PORT=8080
DOMAIN=roraima.dev.br
MAX_ALIASES_PER_USER=3
SESSION_COOKIE_NAME=roraima_session
# Banco de dados da aplicação
APP_DB_DSN=usuario:senha@tcp(127.0.0.1:3306)/mail_app_db?parseTime=true&charset=utf8mb4
# Banco de dados do Postfix
POSTFIX_DB_DSN=usuario:senha@tcp(127.0.0.1:3306)/aliases_db?parseTime=true&charset=utf8mb4
# Tabela e colunas do Postfix
POSTFIX_TABLE=aliases
POSTFIX_SOURCE_COL=alias_address
POSTFIX_DEST_COL=destination_address
POSTFIX_ACTIVE_COL=active
APP_ENV=production
🚀 Como Executar
1. Desenvolvimento Local
go run cmd/server/main.go
Acesse em: http://localhost:8080
2. Executar os Testes
go test ./...
3. Compilar para a VPS (Linux x86_64)
Para gerar o binário estático e enviar para o seu servidor VPS onde roda o Postfix:
# No Windows (PowerShell):
$env:GOOS="linux"; $env:GOARCH="amd64"; go build -ldflags="-s -w" -o mail-forward cmd/server/main.go
# No Linux / macOS:
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o mail-forward cmd/server/main.go
O arquivo binário gerado mail-forward é autossuficiente e contém todo o frontend embutido.
🛠️ Exemplo de Systemd Service no VPS
/etc/systemd/system/mail-forward.service:
[Unit]
Description=Plataforma de Aliases roraima.dev.br
After=network.target mariadb.service postfix.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/mail-forward
ExecStart=/var/www/mail-forward/mail-forward
Restart=always
RestartSec=5
EnvironmentFile=/var/www/mail-forward/.env
[Install]
WantedBy=multi-user.target