Ir al contenido principal

Entradas

Mostrando entradas de 2026

Conversión de Llaves SSH: de Windows (.ppk) a Linux

Contexto: Si recibes un archivo .ppk (generado usualmente con PuTTY en Windows), no podrás usarlo directamente en la terminal de Linux. Es necesario convertirlo al formato OpenSSH. 1. Preparación del Entorno Primero, instalamos las herramientas necesarias para la conversión en nuestro sistema local (Ubuntu/Debian): sudo apt update && sudo apt install putty-tools -y 2. Conversión del Archivo Usa el siguiente comando para transformar la llave. Si el archivo original tiene una passphrase , la terminal te la solicitará durante este proceso. puttygen /ruta/al/archivo_original.ppk -O private-openssh -o ~/.ssh/id_vps_convertida Seguridad: Al convertir la llave, asegúrate de recordar la frase de acceso (passphrase) si es que el archivo original estaba protegido. 3. Estructura de Archivos Resultante ~/.ssh/ ├── id_vps_convertida # Tu nueva llave privada en formato Linux └── known_hosts # Registro automático de ser...

Guía SSH para Google Cloud (GCP)

Este tutorial explica cómo generar tus llaves, por qué el comentario es útil (pero opcional) y cómo conectarte finalmente a tu VPS. Dato Clave: Google Cloud usa el texto al final de tu llave para crear automáticamente tu usuario dentro del servidor. 1. Generar la Llave SSH Ejecuta este comando en tu terminal de Ubuntu. El parámetro -C define el comentario final. ssh-keygen -t ed25519 -C "tu_usuario@loquesea" Sobre el comentario (-C): Es Opcional: Si lo omites, Ubuntu pondrá tu_usuario@nombre_pc automáticamente. Función en GCP: Lo que esté antes del @ será tu nombre de usuario para entrar a la VPS. 2. Ver y Copiar la Clave Pública Para que el servidor te reconozca, debes copiar el contenido del archivo con extensión .pub . cat ~/.ssh/id_ed25519.pub Importante: Copia la línea completa, desde ssh-ed25519 hasta el final del comentario. No recortes nada. 3. Estructura de Archivos Generados Así es como se v...

Cómo montar un Laboratorio de Pruebas con Terminal Web usando Docker, ttyd y Nginx

Cómo montar un Laboratorio de Pruebas con Terminal Web usando Docker, ttyd y Nginx En este tutorial aprenderemos a crear un entorno seguro y aislado ( Sandbox ) que permite acceder a una terminal de Linux desde el navegador. Es ideal para que terceros (clientes o soporte técnico) realicen pruebas sin comprometer la seguridad del servidor principal. 1. La Arquitectura Para este despliegue utilizamos tres capas de seguridad: Docker : Crea un contenedor (Alpine Linux) donde ocurre todo. Si algo sale mal, el host queda intacto. ttyd : Herramienta ligera que convierte la terminal en una interfaz web. Nginx : Actúa como proxy inverso, aporta HTTPS y una URL amigable. 2. Paso 1: Crear el Contenedor de Sacrificio Creamos un contenedor llamado laboratorio . Usamos un volumen en modo solo lectura para que el usuario externo no pueda modificar archivos. # Crear el contenedor con un volumen de solo lectura docker run -d \ --name laboratorio \ -v /ruta/a/tus...

Estructurando Proyectos en Go: Guía del "Standard Layout" para Aplicaciones Reales

Cuando empiezas en Go, la libertad de su sistema de archivos puede ser abrumadora. A diferencia de frameworks como Laravel o Django, Go no te impone una estructura de carpetas. Sin embargo, la comunidad ha consolidado un patrón conocido como Standard Go Project Layout . En este post analizamos cómo organizar una aplicación profesional (usando como ejemplo un proyecto de integración de APIs) para lograr un código escalable, testeable y fácil de mantener. 🏗️ La Anatomía del Proyecto Una estructura robusta se ve así: . ├── cmd/ # Entry points (Puntos de entrada) │ └── wasabi/ # Nombre de tu aplicación │ └── main.go # Archivo principal ├── internal/ # Lógica privada del negocio │ ├── handlers/ # Capa de transporte (HTTP/gRPC) │ ├── models/ # Estructuras de datos compartidas │ └── wuzapi/ # Clientes o adaptadores de servicios ├── go.mod # Gestión de dependencias └── LICENSE ...

Arquitectura de Middleware de Mensajería

Esta guía detalla la construcción de un sistema en Go diseñado para ser multitenant y desacoplado . La clave de este diseño es que el núcleo del servidor no depende de configuraciones estáticas, permitiendo gestionar múltiples clientes y proveedores de forma dinámica. El servidor no "conoce" a los clientes de antemano. Recibe la identidad (Token) en tiempo de ejecución, procesa el contrato de datos y delega la respuesta. 1. Estructura de Directorios Estándar Siguiendo el Standard Go Project Layout , organizamos el código para separar la infraestructura de la lógica de negocio. project-root/ ├── cmd/api/ # Punto de entrada (main.go) ├── internal/ # Código privado del proyecto │ ├── handlers/ # Controladores HTTP (Webhook Receptor) │ ├── providers/ # Adaptadores de API (Envío de mensajes) │ ├── models/ # Estructuras de datos (Contratos JSON) │ └── services/ # Lógica de procesamiento └── .env ...

Primer API en Go - Hola Mundo

Este tutorial muestra cómo crear y ejecutar una API mínima en Go para verificar que el entorno funciona correctamente. Este será el primer paso antes de avanzar a un webhook real y un bridge con WuzAPI. 1. Instalar Go (Linux) sudo apt update sudo apt install golang -y Verificar instalación: go version 2. Crear el proyecto mkdir hola-go cd hola-go go mod init hola-go Go usa módulos. Este comando inicializa el proyecto correctamente. 3. Crear la API "Hola Mundo" Crear el archivo main.go : package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hola Mundo desde Go") }) fmt.Println("Servidor escuchando en http://localhost:8080") http.ListenAndServe(":8080", nil) } 4. Ejecutar la aplicación go run main.go Probar desde el navegador o con curl: curl http://localhost:8080 Si ves el texto ...

Instalación de WuzAPI con Docker

Este tutorial muestra la instalación mínima y funcional de WuzAPI usando Docker Compose . Requisitos Docker Docker Compose Puerto 8080 libre Crear archivo .env En el directorio del proyecto, crear el archivo .env : WUZAPI_ADMIN_TOKEN=admin_CAMBIAR_ESTE_TOKEN WUZAPI_GLOBAL_ENCRYPTION_KEY=CAMBIAR_ESTA_CLAVE WUZAPI_GLOBAL_HMAC_KEY=CAMBIAR_ESTA_CLAVE TZ=America/Asuncion Nunca publiques estos valores en producción. Cambiá siempre los tokens y claves. 3️⃣ Crear docker-compose.yml services: wuzapi: image: asternic/wuzapi container_name: wuzapi restart: unless-stopped ports: - "8080:8080" env_file: - .env volumes: - ./.env:/app/.env - wuzapi_data:/data volumes: wuzapi_data: El volumen wuzapi_data guarda la sesión de WhatsApp y evita perderla al reiniciar. Levantar el contenedor Desde el mismo directorio: docker compose up -d Verificar que WuzAPI esté activo docker ps ...

WAHA con Docker y Nginx usando subdominios

Este tutorial muestra la forma correcta y estable de levantar WAHA y exponerlo por Internet usando Nginx + HTTPS , soportando múltiples instancias mediante subdominios . Decisión clave: subdominios, no subpaths. WAHA no soporta bien /waha1 , /waha2 . Arquitectura final 1 servidor (VM) 1 Nginx como reverse proxy 1 contenedor WAHA por WhatsApp 1 subdominio por WAHA Ejemplo: wasabi.cloud-ip.cc → web / landing waha1.wasabi.cloud-ip.cc → WAHA #1 waha2.wasabi.cloud-ip.cc → WAHA #2 1️⃣ Requisitos Ubuntu (20.04+ recomendado) Nginx Dominio o subdominio Certbot (Let’s Encrypt) 2️⃣ DNS (subdominios) En tu proveedor DNS agregá un registro A por cada WAHA: Host Tipo IP wasabi.cloud-ip.cc A TU_IP_PUBLICA waha1.wasabi.cloud-ip.cc A TU_IP_PUBLICA waha2.wasabi.cloud-ip.cc A TU_IP_PUBLICA Esperá unos minutos a que el DNS propague y listo. 3️⃣ Nginx – dominio raíz El dominio pr...

WAHA + Nginx usando motor GOWS

WAHA + Nginx usando motor GOWS (Nginx instalado en el host) Este tutorial muestra cómo ejecutar varias instancias de WAHA en Docker usando el motor GOWS , y exponerlas todas a través de un solo Nginx instalado directamente en el servidor. Requisitos VPS Linux (Ubuntu 20.04+ recomendado) Docker y Docker Compose instalados Nginx instalado en el host Puerto 80 abierto en el firewall 1️⃣ Instalar Nginx en el host sudo apt update sudo apt install -y nginx Comprobar que funciona: curl http://localhost Si ves la página por defecto, Nginx está listo. 2️⃣ Ejecutar WAHA con Docker (motor GOWS) Crear un directorio para WAHA: mkdir -p /home/docker/waha cd /home/docker/waha docker-compose.yml services: waha: image: devlikeapro/waha container_name: waha ports: - "3001:3000" environment: WAHA_API_KEY: demo123 WAHA_DASHBOARD_USERNAME: admin WAHA_DASHBOARD_PASSWORD: demo123 WHATSAPP_DEFAULT_ENGINE: GOWS ...

Instalar Docker y Docker Compose v2 en Ubuntu 24.04

Este tutorial instala Docker moderno y Docker Compose v2 (plugin oficial). Es el método correcto para servidores y VPS en producción. 1. Requisitos Ubuntu 24.04 Acceso SSH como usuario con sudo 2. Limpiar instalaciones viejas (opcional pero recomendado) sudo apt remove -y docker docker-engine docker.io docker-compose docker-compose-v2 3. Instalar dependencias básicas sudo apt update sudo apt install -y ca-certificates curl gnupg 4. Agregar la clave GPG oficial de Docker sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg 5. Agregar el repositorio oficial de Docker echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" | sudo tee /etc/apt/sources.list.d/docker.list ...

WAHA en Producción con Docker y GOWS

Este tutorial explica el flujo correcto y seguro para usar WAHA en producción, minimizando consumo de recursos y evitando bloqueos o caídas en la VPS. Importante: El QR de WhatsApp se escanea una sola vez usando WEBJS. En producción se usa GOWS o NOWEB. Requisitos VPS Linux (1 GB RAM mínimo) Docker y Docker Compose instalados Puerto 80 abierto Acceso SSH Paso 1: Crear estructura del proyecto mkdir -p /home/docker/waha cd /home/docker/waha Paso 2: Configurar WAHA para escanear QR (WEBJS) Este paso solo se hace una vez. version: "3.8" services: waha: image: devlikeapro/waha container_name: waha ports: - "80:3000" environment: WAHA_API_KEY: demo123 WAHA_DASHBOARD_USERNAME: admin WAHA_DASHBOARD_PASSWORD: demo123 WHATSAPP_DEFAULT_ENGINE: WEBJS WHATSAPP_DEFAULT_SESSION: default LOG_LEVEL: info volumes: - ./sessions:/app/.sessions Paso 3: Levantar WAHA y escanear el Q...

Conectarse por SSH a una VPS de Google Cloud desde varias PCs

Conectarse por SSH a una VPS de Google Cloud desde varias PCs Conectarse por SSH a una VPS de Google Cloud desde varias PCs Por Hugo Romero – 23 de enero de 2026 Cuando trabajás desde distintas computadoras (oficina, casa, notebook o una PC de respaldo), la forma correcta, segura y profesional de conectarte a una VPS en Google Cloud es usar una clave SSH distinta por cada PC . Este enfoque es el mismo que se usa en equipos profesionales y entornos productivos: es escalable, ordenado y te permite revocar accesos sin afectar a los demás equipos . Concepto básico Cada PC genera su propia clave SSH. La VPS solo almacena las claves públicas. Las claves privadas nunca se copian ni se comparten. Si una PC se pierde o deja de usarse, se elimina solo esa clave. Pensalo como llaves físicas: cada persona (o PC) tiene su propia llave, pero todas abren la misma puerta. Escenario VPS en Google Compute Engine. Acceso desde múltip...

Crear un proyecto base con Spring Boot y Vaadin (Spring Initializr)

Crear un proyecto base con Spring Boot y Vaadin En este tutorial vamos a crear un proyecto demo con Spring Boot y Vaadin usando la forma estándar del ecosistema Spring: Spring Initializr . Requisitos Java 21 Maven 3.9 o superior Un IDE (IntelliJ, Eclipse o VS Code) 1. Crear el proyecto Spring Boot Ingresamos al inicializador oficial de Spring: https://start.spring.io Seleccionamos las siguientes opciones: Project: Maven Language: Java Spring Boot: 4.0.1 Group: com.example Artifact: demo Packaging: Jar Java: 21 Dependencies: ninguna Descargamos el ZIP y lo descomprimimos. Spring Initializr es la forma estándar y recomendada para crear proyectos Spring Boot. 2. Abrir el proyecto Abrimos la carpeta del proyecto en el IDE. Deberíamos ver una estructura mínima con un pom.xml y una clase principal. 3. Reemplazar el pom.xml para usar Vaadin Abrimos el archivo pom.xml generado y reemplazamos ...