Ir al contenido principal

Entradas

Mostrando entradas de 2025

Configurar TomEE como servicio systemd en Ubuntu

Configurar TomEE como servicio systemd en Ubuntu Con esta guía, podrás tener TomEE corriendo como servicio, iniciando automáticamente y manejable con systemd. Preparar la instalación TomEE en /srv/tomee Java 21 instalado en /usr/lib/jvm/java-21-openjdk-amd64 Verificar que arranca manualmente: cd /srv/tomee/bin ./startup.sh Tip: Si responde Tomcat started , todo funciona correctamente. Crear el archivo del servicio sudo nano /etc/systemd/system/tomee.service Pegar: [Unit] Description=Apache TomEE After=network.target [Service] Type=forking User=ubuntu Group=ubuntu Environment=JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 Environment=CATALINA_HOME=/srv/tomee ExecStart=/srv/tomee/bin/catalina.sh start ExecStop=/srv/tomee/bin/catalina.sh stop Restart=on-failure StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target Nota: No pongas PIDFile , TomEE no lo crea y genera timeout. Dar p...

Ejecutar cualquier clase Main con Gradle y Quarkus en Windows

Ejecutar cualquier clase Main con Gradle y Quarkus en Windows Objetivo Cuando trabajas en un laboratorio de Java con muchas clases, muchas veces quieres probar rápidamente cualquier clase con un main sin depender del IDE ni marcar una clase por defecto. En este flujo: Usamos Gradle para manejar compilación, classpath y dependencias. Creamos tareas personalizadas ( runMain y runTest ) para ejecutar cualquier clase main . Evitar definir mainClass por defecto en build.gradle . Todo funciona desde la consola en Windows, sin depender del IDE. 1️⃣ Configurar build.gradle plugins { id 'java' id 'io.quarkus' id 'application' // permite usar gradlew run si quieres } repositories { mavenCentral() } dependencies { implementation 'io.quarkus:quarkus-rest' implementation 'com.google.code.gson:gson:2.10.1' implementation 'org.json:json:20...

Documentación Openapi en Quarkus (Swagger y Rapidoc)

1️⃣ Agregar la extensión OpenAPI Quarkus usa SmallRye OpenAPI para generar documentación OpenAPI 3 automáticamente desde tus endpoints REST. # Windows .\gradlew.bat addExtension --extensions="smallrye-openapi" # Linux/macOS ./gradlew addExtension --extensions="smallrye-openapi" Qué hace este comando: Descarga la dependencia smallrye-openapi . Configura Quarkus para generar /q/openapi . Permite usar Swagger UI y otros visualizadores sin tocar el backend. 2️⃣ Crear un endpoint de ejemplo con etiquetas para OpenAPI Archivo: src/main/java/py/com/jsifen/HelloResource.java package py.com.jsifen; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.tags.Tag; @Path("/hello") @Tag(name = "Hello", des...

Primero proyecto: Quarkus con Gradle

Tutorial Completo: Quarkus con Gradle y JAR ejecutable 1️⃣ Crear el proyecto Desde tu carpeta de trabajo: quarkus create app py.com:jsifen --extension=resteasy-reactive --gradle cd jsifen py.com → GroupId jsifen → ArtifactId (nombre del proyecto) --extension=resteasy-reactive → agrega soporte REST --gradle → usa Gradle como build tool Esto genera la estructura básica del proyecto. 2️⃣ Estructura del proyecto jsifen/ build.gradle # configuración principal de Gradle gradlew # wrapper de Gradle (Linux/Mac) gradlew.bat # wrapper de Gradle (Windows) gradle/ # archivos del wrapper .gradle/ # caché de Gradle gradle.properties # configuración de Gradle settings.gradle # nombre del proyecto src/ # código fuente build/ # salida de compilación 💡 No borrar nada salvo build/ o .gradle/ para limpiar caché. 3️⃣ Configuración de Java y dependencias En ...

JBang - Java como Script

JBang Java como scripting, sin configuración ¿Qué es JBang? JBang es una herramienta revolucionaria que permite ejecutar código Java como scripts , eliminando la complejidad tradicional de configuración de proyectos. Con JBang puedes escribir y ejecutar código Java instantáneamente, similar a como lo harías con Python o JavaScript. El problema que resuelve: Elimina la necesidad de configurar proyectos complejos Permite ejecutar Java con una sola línea de comando Gestiona dependencias automáticamente Soporta múltiples lenguajes JVM (Java, Kotlin, Groovy) Instalación Rápida Opción recomendada (Linux/macOS/WSL): # Instalar JBang fácilmente curl -Ls https://sh.jbang.dev | bash -s - app setup Windows PowerShell: iex ...

Helidon MP Standalone Tutorial

Helidon MP - Proyecto Standalone 1. Estructura del proyecto para distribución La estructura recomendada para que tu proyecto sea standalone es: helidon_prueba/ ├── app/ │ └── quickstart-mp.jar ├── bin/ │ └── start ├── web/ │ ├── index.html │ ├── segunda.html │ └── simple.css ├── run.bat ├── run.sh └── META-INF/ └── microprofile-config.properties Explicación rápida: app/ : Contiene el JAR empaquetado de tu aplicación Helidon MP. bin/ : Scripts de arranque generados por Helidon (JRI). web/ : Archivos estáticos (HTML, CSS, JS). run.bat y run.sh : Scripts para ejecutar la app en Windows y Linux/Mac. META-INF/microprofile-config.properties : Configuración del servidor y rutas de contenido estático. 2. Crear runtime image standalone con jlink Ejecuta el siguiente comando para generar un runtime image: mvn package -Pjlink-image Esto genera el runtime en target/quickstart-mp-jri/ , que incluye: Tu JAR quickstart-mp.jar Depe...

Tutorial: Instalación Java Helidon

Tutorial: Instalación y uso seguro del Helidon CLI Helidon es un framework Java liviano y moderno, desarrollado por Oracle , para construir microservicios eficientes y fáciles de mantener. Está disponible en dos estilos: SE : versión ligera y funcional, con servidor web embebido y API minimalista. MP : implementación de Eclipse MicroProfile , con soporte para JAX-RS, CDI, JSON-B, JWT, métricas y más. Más información y documentación oficial en https://helidon.io/ . En este tutorial aprenderás a instalar el Helidon CLI , generar un proyecto con Helidon MP y ejecutar un servicio de ejemplo Hola Mundo . El objetivo es que tengas un flujo de trabajo seguro y autónomo: compilar y ejecutar desde consola con Maven , mientras usas tu IDE (por ejemplo IntelliJ IDEA) solo para editar y navegar el código, sin depender de plugins adicionales. Al final del tutorial sabrás cómo: Instalar y mantener el CLI de forma local y segura. Generar proyectos Helidon MP listos para...

Tutorial Quarkus con Gradle en Windows

Tutorial Completo de Quarkus con Gradle en Windows 1️⃣ Requisitos previos Java 17 o superior (ya tienes OpenJDK 21) PowerShell o CMD Quarkus CLI (opcional, recomendado) 2️⃣ Instalar Quarkus CLI (opcional) Descarga desde https://quarkus.io/get-started/ → Command Line Tools Verifica la instalación: quarkus --version Si no quieres instalar la CLI, puedes usar Maven directamente: mvn io.quarkus:quarkus-maven-plugin:create ... 3️⃣ Crear el proyecto con Gradle En PowerShell: quarkus create app org.acme:inicio --extension=resteasy-reactive --gradle cd inicio org.acme → nombre del grupo (groupId) inicio → nombre del proyecto / paquete base (artifactId) --extension=resteasy-reactive → agrega soporte para REST Se generan los archivos: build.gradle y settings.gradle Carpeta src/main/java/org...

Configuración de DataSources en TomEE

Configuración de DataSources en TomEE usando system.properties Cuando desplegamos aplicaciones en TomEE (Tomcat con extensiones Java EE), es habitual usar DataSources gestionados por el contenedor . Esto permite: Manejar pools de conexiones automáticamente. Evitar hardcodear credenciales en el código. Reusar conexiones entre diferentes aplicaciones. En este post nos centraremos en configuración en TomEE/Tomcat . 1. Descargar el driver JDBC Antes de que TomEE pueda conectarse a la base de datos, necesitamos el driver correspondiente. Por ejemplo, para PostgreSQL: cd /tmp wget https://jdbc.postgresql.org/download/postgresql-42.5.4.jar sudo cp /tmp/postgresql-42.5.4.jar /srv/tomee/lib/ Qué hacemos: `wget` descarga el driver JDBC. Se copia al directorio `lib` de TomEE para que todas las aplicaciones puedan usarlo. 2. Configurar DataSources en system.properties TomEE permite definir múltiples DataSources en un único archivo `system.prope...

Cómo poner HTTPS en Tomcat usando Docker en Windows

HTTPS en Tomcat 8070 usando Traefik como proxy reverso Si quieres asegurar tu Tomcat que corre en el puerto 8070 en Windows con HTTPS, la forma más sencilla y estable es usar Traefik en Docker como proxy reverso con certificados gratuitos de Let's Encrypt . 💡 Una opción gratuita para tu dominio es DuckDNS . Por ejemplo, puedes usar midominio.duckdns.org en lugar de un dominio pago. Asegúrate de que tu subdominio apunte a tu IP pública. Paso 1: Instalar Docker Desktop Descarga Docker Desktop para Windows desde docker.com y activa WSL2 si Windows lo requiere. Paso 2: Crear la carpeta del proyecto Ejemplo: C:\docker\traefik-proxy Dentro, crea: Archivo docker-compose.yml Carpeta letsencrypt para certificados Paso 3: Configurar docker-compose Copia esto en docker-compose.yml : version: "3" services: traefik: image: traefik:v2.14 command: - "--api.insecure=true" - "--providers.docker=true" ...

Guía rápida: instalar y usar Portainer (Docker)

Guía rápida: instalar y usar Portainer (Docker) Portainer es una interfaz web para administrar contenedores Docker sin usar la terminal. Ideal para gestionar servicios como n8n y Evolution API desde un navegador. Resumen: Creás una carpeta, un docker-compose.yml , levantás el servicio y accedés por HTTPS al puerto que elijas (ej: 9444 ). 1) Crear carpeta para Portainer Copiar mkdir -p /home/docker/portainer cd /home/docker/portainer 2) Crear docker-compose.yml Usa este contenido (puerto externo 9444 → interno 9443 ): Copiar version: "3.8" services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always ports: - "9444:9443" volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data volumes: portainer_data: 3) Levantar Portainer Copiar docker compose up -d 4) Acceder desde el navegad...

Automatizando WhatsApp con WAHA en Docker y Python

Automatizando WhatsApp con WAHA en Docker y Python Este tutorial explica cómo levantar WAHA en Docker, conectar WhatsApp y crear un bot en Python que responda automáticamente a mensajes usando eventos . 1️⃣ Preparar el entorno Docker Crea un directorio para el proyecto y agrega los archivos necesarios: mkdir -p /home/docker/waha cd /home/docker/waha Archivo docker-compose.yml : services: waha: image: devlikeapro/waha:noweb container_name: waha ports: - "3001:3000" environment: WHATSAPP_DEFAULT_ENGINE: noweb WHATSAPP_DEFAULT_SESSION: default LOG_LEVEL: info volumes: - ./waha-data:/app/data Archivo .env (opcional): # Tu API key en texto plano (opcional) WAHA_API_KEY=tu_clave_segura # O, mejor, el hash SHA512 que recomienda WAHA # WAHA_API_KEY=sha512:{SHA512_HASH_DE_TU_API_KEY} Levanta el contenedor: docker-compose up -d WAHA estará disponible en http://localhost:3001/dashboard/ y usará la sesi...

Instalar Evolution API en Docker con Redis y PostgreSQL Local

Instalar Evolution API en Docker con Redis y PostgreSQL Local En este tutorial vamos a levantar Evolution API usando Docker , con soporte de Redis para sesiones y PostgreSQL local para almacenar datos de manera persistente y compartida entre varios usuarios. 1. Estructura del proyecto Crea una carpeta para tu proyecto y colócate en ella: mkdir -p ~/docker/evolution-api cd ~/docker/evolution-api 2. Archivo docker-compose.yml Este compose levanta Redis y Evolution API : version: "3.9" services: # ✅ SERVICIO REDIS redis: container_name: evolution_redis image: redis:7-alpine restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --save 60 1 --loglevel warning # ✅ SERVICIO EVOLUTION API evolution-api: container_name: evolution_api image: atendai/evolution-api restart: unless-stopped ports: - "8085:8080" env_file: - .env ...

Solución Definitiva para Inputs de Fecha en Django

El Problema Los campos de fecha en Django pueden comportarse inconsistentemente: a veces devuelven objetos datetime, a veces strings en formato localizado, y cuando hay errores de validación, no siempre se muestran correctamente en el template. Solución Completa 1. Configuración Global (settings.py) Copiar # settings.py DATE_INPUT_FORMATS = ['%Y-%m-%d'] # Formato para parsear inputs USE_L10N = False # Desactiva localización DATE_FORMAT = 'Y-m-d' # Formato de visualización 2. Filtro Personalizado (templatetags/filters.py) Copiar from django import template import datetime register = template.Library() @register.filter def to_date_input(value): """ Convierte cualquier valor a formato YYYY-MM-DD para inputs type="date" """ if not value: return '' # Si ya está en formato YYYY-MM-DD if isinstance(value, str) and len(value) == 10 and value[4] =...

Llama.cpp en Linux con modelo local y servicio systemd

Servidor Llama.cpp en Linux con modelo local 1. Estructura de directorios Organiza todo bajo /opt/llama-app : /opt/llama-app/ ├── bin/ # Ejecutables compilados de llama.cpp │ └── llama-server └── models/ # Modelos de lenguaje └── Meta-Llama-3-8B-Instruct.Q4_K_M.gguf 2. Levantar el servidor manualmente cd /opt/llama-app/bin ./llama-server \ -m /opt/llama-app/models/Meta-Llama-3-8B-Instruct.Q4_K_M.gguf \ --host 0.0.0.0 \ --port 9000 \ --ctx-size 4096 \ --n-gpu-layers 0 3. Probar la API Desde la misma máquina: curl http://127.0.0.1:9000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "Meta-Llama-3-8B-Instruct.Q4_K_M", "messages": [ {"role": "system", "content": "Eres un asistente útil en español."}, {"role": "user", "content": "Explícame qué es la inteligencia ...

Docker y Llama.cpp: imagen con modelo y servidor compilados

Guía Completa: Crear un Servidor de Llama.cpp con Docker Incluyendo el Modelo En este tutorial te mostraré cómo configurar un servidor de Llama.cpp utilizando Docker, con la particularidad de que el modelo de lenguaje se incluirá dentro de la imagen Docker. Requisitos Previos Docker instalado en tu sistema Al menos 8 GB de espacio libre en disco 4 GB de RAM como mínimo Conexión a Internet estable (para descargar el modelo) Nota: La construcción de la imagen puede tardar entre 30-60 minutos debido al tamaño del modelo (4.58 GB). Paso 1: Crear el Directorio de Trabajo Copiar mkdir -p /home/docker/llama-server cd /home/docker/llama-server Paso 2: Crear el Archivo Dockerfile Crea un archivo llamado Dockerfile con el siguiente contenido: Copiar FROM ubuntu:22.04 # Instalar dependencias necesarias para compilar ...

Instala y ejecuta Meta-LLaMA-3-8B-Instruct en Docker de manera manual o automática

Guía completa: Levantar Meta-LLaMA-3-8B-Instruct Server en Docker paso a paso Este post explica cómo instalar y correr Meta-LLaMA-3-8B-Instruct usando Docker siguiendo la documentación oficial. Se presentan dos formas de manejar la descarga del modelo. 1️⃣ Prerrequisitos Docker instalado y corriendo en tu sistema. Al menos 16–32 GB de RAM según modelo. Crear carpeta para modelos: mkdir -p /home/docker/llama3-server/models cd /home/docker/llama3-server 2️⃣ Opciones para descargar y usar el modelo Opción A – Descargar el modelo fuera del contenedor (recomendado) 1. Descargar el modelo directamente en la carpeta models : cd /home/docker/llama3-server/models wget https://huggingface.co/QuantFactory/Meta-Llama-3-8B-Instruct-GGUF/resolve/main/Meta-Llama-3-8B-Instruct.Q4_K_M.gguf 2. Crear docker-compose.yml : services: llama-server: image: ghcr.io/ggm...

Instalar n8n con Docker servidor local Linux

Cómo Instalar n8n con Docker Compose en Linux (Red Local) Este tutorial paso a paso te mostrará cómo instalar y ejecutar n8n usando Docker Compose en Linux, asegurando que los datos persistan incluso si apagas el servidor, y que sea accesible desde cualquier dispositivo de tu red local. 1. Actualizar el sistema sudo apt update sudo apt upgrade -y 2. Instalar dependencias necesarias para Docker sudo apt install -y ca-certificates curl gnupg lsb-release 3. Agregar el repositorio oficial de Docker sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update 4. Instalar Docker y Docker Compose sudo apt install -y docker-ce docker-ce-cli...

Instalar llama.cpp, Ubuntu 24.4

Guía Completa: Ejecutar Modelos LLM Locales con llama.cpp Esta guía te muestra cómo ejecutar modelos de lenguaje grandes (LLM) localmente usando binarios precompilados de llama.cpp, sin necesidad de GPU. Requisitos Previos Sistema Linux (Ubuntu/Debian recomendado) Al menos 8GB de RAM (16GB recomendado para modelos grandes) Conexión a Internet para descargar binarios y modelos Conocimientos básicos de terminal 📂 Paso 1: Preparar el entorno Descargar binarios precompilados Crea un directorio y descarga los binarios precompilados de llama.cpp: Copiar # Crear directorio principal mkdir ~/llama-app cd ~/llama-app # Descargar binarios precompilados wget https://github.com/ggml-org/llama.cpp/releases/download/b6111/llama-b6111-bin-ubuntu-x64.zip # Descomprimir y organizar unzip llama-b6111-bin-ubuntu-x64.zip mv build llama.cpp # Renombrar carpeta cd llama.cpp/bin # Acceder a los e...