Ir al contenido principal

Entradas

Mostrando entradas de enero, 2026

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