Skip to content

Latest commit

 

History

History
458 lines (346 loc) · 9.86 KB

File metadata and controls

458 lines (346 loc) · 9.86 KB

💡 EJEMPLOS PRÁCTICOS DE USO

🚀 Escenario 1: Nuevo VPS de Hetzner

# 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.com

🔄 Escenario 2: Múltiples VPS - Script de Provisioning

Crea 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

🏢 Escenario 3: Terraform + DigitalOcean

# 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

🤖 Escenario 4: GitHub Actions - Deploy Automático

.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.sh

📊 Escenario 5: Monitoring con Healthchecks

Crea 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ó"
fi

Cron job:

# Ejecutar cada hora
0 * * * * /root/check_email_health.sh

🔐 Escenario 6: Múltiples Dominios / Remitentes

#!/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"

🧪 Escenario 7: Testing en Docker

Ú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

📝 Escenario 8: WordPress Multi-Site

# 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"

🔄 Escenario 9: Migración de VPS Antiguo

#!/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"

🎓 Escenario 10: Setup para Estudiantes/Aprendizaje

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"

💼 Escenario 11: Empresa con Múltiples Clientes

#!/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"

🎯 Tips Generales

Verificar antes de aplicar en producción

# Probar en un VPS de prueba
terraform apply -target=digitalocean_droplet.test

Mantener logs de todas las instalaciones

curl ... | bash 2>&1 | tee /var/log/email-install-$(date +%Y%m%d).log

Automatizar verificación post-instalación

#!/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!