# Conectarte a tu VPS
ssh root@tu-servidor.hetzner.cloud
# Instalar sistema de email (interactivo)
curl -sSL https://raw.githubusercontent.com/TU_USUARIO/vps-email-setup/main/install.sh | bash
# Probar
bash /root/test_email.sh tu-email@gmail.comCrea provision-all.sh:
#!/bin/bash
# Lista de tus servidores
SERVERS=(
"server1.example.com"
"server2.example.com"
"server3.example.com"
)
# Credenciales (mejor obtenerlas de secrets manager)
RESEND_API_KEY="re_xxxxxxxxxxxxx"
FROM_EMAIL="noreply@tudominio.com"
for SERVER in "${SERVERS[@]}"; do
echo "📦 Configurando $SERVER..."
ssh root@$SERVER "curl -sSL https://raw.githubusercontent.com/TU_USUARIO/vps-email-setup/main/install.sh | \
RESEND_API_KEY='$RESEND_API_KEY' \
FROM_EMAIL='$FROM_EMAIL' \
bash"
echo "✅ $SERVER configurado"
echo ""
done
echo "🎉 Todos los servidores configurados!"Uso:
chmod +x provision-all.sh
./provision-all.sh# main.tf
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
variable "do_token" {}
variable "resend_api_key" {}
variable "from_email" {}
provider "digitalocean" {
token = var.do_token
}
resource "digitalocean_droplet" "web" {
count = 3
image = "ubuntu-24-04-x64"
name = "web-${count.index + 1}"
region = "fra1"
size = "s-1vcpu-1gb"
ssh_keys = [
digitalocean_ssh_key.default.id
]
connection {
type = "ssh"
user = "root"
private_key = file("~/.ssh/id_rsa")
host = self.ipv4_address
}
# Instalar CloudPanel
provisioner "remote-exec" {
inline = [
"curl -sSL https://installer.cloudpanel.io/ce/v2/install.sh | bash"
]
}
# Instalar sistema de email
provisioner "remote-exec" {
inline = [
"curl -sSL https://raw.githubusercontent.com/TU_USUARIO/vps-email-setup/main/install.sh | RESEND_API_KEY='${var.resend_api_key}' FROM_EMAIL='${var.from_email}' bash"
]
}
}
resource "digitalocean_ssh_key" "default" {
name = "Terraform"
public_key = file("~/.ssh/id_rsa.pub")
}
output "server_ips" {
value = digitalocean_droplet.web[*].ipv4_address
}Crear terraform.tfvars:
do_token = "tu_token_digitalocean"
resend_api_key = "re_xxxxx"
from_email = "noreply@tudominio.com"Uso:
terraform init
terraform plan
terraform apply.github/workflows/deploy.yml:
name: Deploy to VPS
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
strategy:
matrix:
server:
- production-1
- production-2
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup email system
uses: appleboy/ssh-action@master
with:
host: ${{ secrets[format('{0}_HOST', matrix.server)] }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
curl -sSL https://raw.githubusercontent.com/TU_USUARIO/vps-email-setup/main/install.sh | \
RESEND_API_KEY="${{ secrets.RESEND_API_KEY }}" \
FROM_EMAIL="${{ secrets.FROM_EMAIL }}" \
bash
- name: Deploy application
uses: appleboy/ssh-action@master
with:
host: ${{ secrets[format('{0}_HOST', matrix.server)] }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/myapp
git pull
# Deploy tu aplicación...
- name: Verify email system
uses: appleboy/ssh-action@master
with:
host: ${{ secrets[format('{0}_HOST', matrix.server)] }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
bash /root/verify_email.shCrea un script de monitoreo:
#!/bin/bash
# /root/check_email_health.sh
HEALTHCHECK_URL="https://hc-ping.com/tu-uuid"
# Verificar Postfix
if ! systemctl is-active --quiet postfix; then
curl -X POST "$HEALTHCHECK_URL/fail" -d "Postfix no está activo"
exit 1
fi
# Enviar email de prueba
TEST_RESULT=$(echo "Health check" | mail -s "Test" monitor@tudominio.com 2>&1)
# Verificar logs
if grep -q "status=sent" /var/log/mail.log; then
curl "$HEALTHCHECK_URL"
else
curl -X POST "$HEALTHCHECK_URL/fail" -d "Email no se envió"
fiCron job:
# Ejecutar cada hora
0 * * * * /root/check_email_health.sh#!/bin/bash
# setup-multi-domain.sh
# Instalar base
curl -sSL https://raw.githubusercontent.com/TU_USUARIO/vps-email-setup/main/install.sh | \
RESEND_API_KEY="re_xxxxx" \
FROM_EMAIL="noreply@dominio1.com" \
bash
# Añadir mappings adicionales para otros dominios
cat >> /etc/postfix/generic << EOF
@dominio2.com noreply@dominio2.com
@dominio3.com noreply@dominio3.com
EOF
postmap /etc/postfix/generic
systemctl restart postfix
echo "✅ Configuración multi-dominio completada"Útil para probar antes de aplicar en producción:
# Crear contenedor de prueba
docker run -it --name email-test ubuntu:24.04 bash
# Dentro del contenedor
apt update
apt install -y curl
curl -sSL https://raw.githubusercontent.com/TU_USUARIO/vps-email-setup/main/install.sh | \
RESEND_API_KEY="re_xxxxx" \
FROM_EMAIL="test@tudominio.com" \
bash
# Probar
bash /root/test_email.sh tu-email@gmail.com
# Si funciona, aplicar en producción# Después de instalar el sistema de email
# Configurar WordPress Network
cat >> /var/www/wordpress/wp-config.php << 'EOF'
// Email configuration
define('SMTP_HOST', 'localhost');
define('SMTP_PORT', 25);
define('SMTP_SECURE', '');
define('SMTP_AUTH', false);
// Network email
define('DOMAIN_CURRENT_SITE', 'tudominio.com');
EOF
# Reiniciar PHP-FPM
systemctl restart php*-fpm
echo "✅ WordPress configurado para usar sistema de email local"#!/bin/bash
# migrate-to-new-vps.sh
OLD_VPS="old-server.com"
NEW_VPS="new-server.com"
echo "📦 Configurando nuevo servidor..."
# Instalar email en nuevo VPS
ssh root@$NEW_VPS "curl -sSL https://raw.githubusercontent.com/TU_USUARIO/vps-email-setup/main/install.sh | \
RESEND_API_KEY='re_xxxxx' \
FROM_EMAIL='noreply@tudominio.com' \
bash"
# Migrar sitios web
echo "🔄 Migrando sitios..."
ssh root@$OLD_VPS "tar czf /tmp/sites.tar.gz /var/www"
scp root@$OLD_VPS:/tmp/sites.tar.gz /tmp/
scp /tmp/sites.tar.gz root@$NEW_VPS:/tmp/
ssh root@$NEW_VPS "cd / && tar xzf /tmp/sites.tar.gz"
# Verificar email en nuevo servidor
ssh root@$NEW_VPS "bash /root/test_email.sh admin@tudominio.com"
echo "✅ Migración completada"Script educativo que explica cada paso:
#!/bin/bash
# educational-setup.sh
echo "🎓 CONFIGURACIÓN EDUCATIVA DE EMAIL"
echo "===================================="
echo ""
echo "📚 Paso 1: Actualizando sistema..."
apt update
echo " ✓ Sistema actualizado"
echo ""
echo "📚 Paso 2: Instalando Postfix (MTA)..."
echo " ℹ️ Postfix es el Mail Transfer Agent que enviará los emails"
export DEBIAN_FRONTEND=noninteractive
apt install -y postfix libsasl2-modules
echo " ✓ Postfix instalado"
echo ""
echo "📚 Paso 3: Configurando Resend como relay..."
echo " ℹ️ Resend es el servicio que entrega los emails"
# ... continuar con configuración explicada paso a paso
echo ""
echo "🎉 ¡Configuración completada!"
echo "📖 Ahora puedes:"
echo " 1. Ver configuración: cat /etc/postfix/main.cf"
echo " 2. Ver logs: tail -f /var/log/mail.log"
echo " 3. Probar envío: bash /root/test_email.sh tu@email.com"#!/bin/bash
# setup-client-server.sh
CLIENT_NAME=$1
CLIENT_DOMAIN=$2
if [ -z "$CLIENT_NAME" ] || [ -z "$CLIENT_DOMAIN" ]; then
echo "Uso: $0 <nombre_cliente> <dominio_cliente>"
exit 1
fi
echo "🏢 Configurando servidor para: $CLIENT_NAME"
# Instalar sistema
curl -sSL https://raw.githubusercontent.com/TU_USUARIO/vps-email-setup/main/install.sh | \
RESEND_API_KEY="$RESEND_API_KEY" \
FROM_EMAIL="noreply@$CLIENT_DOMAIN" \
HOSTNAME="$CLIENT_NAME.servidores.tuempresa.com" \
bash
# Crear documentación para el cliente
cat > /root/client_info_$CLIENT_NAME.txt << EOF
===========================================
INFORMACIÓN DEL SERVIDOR
Cliente: $CLIENT_NAME
Dominio: $CLIENT_DOMAIN
===========================================
Sistema de Email: ✅ Configurado
Remitente: noreply@$CLIENT_DOMAIN
Para probar:
bash /root/test_email.sh admin@$CLIENT_DOMAIN
Logs: /var/log/mail.log
Dashboard Resend: https://resend.com/emails
Configurado: $(date)
===========================================
EOF
echo "✅ Servidor configurado para $CLIENT_NAME"
echo "📄 Info guardada en: /root/client_info_$CLIENT_NAME.txt"# Probar en un VPS de prueba
terraform apply -target=digitalocean_droplet.testcurl ... | bash 2>&1 | tee /var/log/email-install-$(date +%Y%m%d).log#!/bin/bash
# verify-all-servers.sh
for SERVER in server1.com server2.com server3.com; do
echo "Verificando $SERVER..."
ssh root@$SERVER "bash /root/verify_email.sh"
done¿Necesitas un ejemplo específico para tu caso de uso? ¡Pregunta!