☁️ Botkeep Cloud: Guía Maestra, Infraestructura y Bitácora de Desarrollo

RESUMEN EJECUTIVO

En esta sesión construimos y desplegamos tu propio ecosistema cloud privado en Botkeep Cloud bajo el plan vitalicio Founder Free en el nodo de Nápoles, Italia (node2-it.botkeep.cloud).

Actualmente tienes 3 servicios corriendo 24/7 en producción (PostgreSQL 17, Redis 7.2 LTS y el acortador DevLink con HTTPS), 2 slots completamente libres, y te sobra 1.25 GB de RAM (el 62.5% de tu cuota total) para cualquier proyecto futuro.


📖 1. ¿Qué es Botkeep Cloud?

Botkeep Cloud (botkeep.cloud) es una plataforma moderna de alojamiento en la nube (PaaS / CaaS) orientada a desarrolladores, diseñada para ejecutar servidores, APIs, bases de datos, bots de Discord/Telegram y tareas en segundo plano de manera continua (24/7/365).

A) ¿Cómo funciona por dentro?

  • Aislamiento por Contenedores: A diferencia de un hosting compartido tradicional, Botkeep asigna contenedores aislados (basados en nodos dedicados con arquitectura tipo Pterodactyl/Wings) donde cada servidor tiene sus propios límites garantizados de CPU, memoria RAM y almacenamiento SSD.
  • Sin Suspensión por Inactividad (“Always-On”): Los servidores nunca se “duermen” ni sufren apagados automáticos cuando no hay visitas.
  • Red y Proxy Inverso Automático: Cada servicio recibe un puerto dedicado (inyectado internamente mediante la variable de entorno SERVER_PORT) y la plataforma le asigna automáticamente un subdominio público bajo *.bot-keep.xyz con certificado SSL/HTTPS emitido al instante.
  • API REST Developer: Dispone de una API REST v1 (https://api.botkeep.cloud/api/v1/developer) protegida con claves Bearer Token, compatible con OpenAPI 3.1.0, pensada para que scripts, bots o herramientas CLI puedan gestionar todo el ciclo de vida del servidor sin necesidad de tocar la interfaz web.

B) El Plan “Founder Free” (Tu Cuenta)

Obtuviste el plan Founder Free, una promoción especial de lanzamiento con las siguientes características:

  • Perpetuo (expiresAt: null): Sin fecha de expiración, sin cobros recurrentes y sin requerir tarjeta de crédito.
  • 5 Slots de Servidor: Capacidad para crear hasta 5 servicios independientes.
  • 2,048 MB de Memoria RAM (2 GB): Bolsa de RAM compartida que puedes repartir libremente entre tus servidores.
  • 150% CPU (1.5 vCores): Potencia de procesamiento asignable.
  • 2,048 MB de Almacenamiento SSD (2 GB): Espacio en disco sólido ultrarrápido.

C) Comparativa: Botkeep vs. Otras Plataformas

Plataforma¿Se duerme por inactividad?Tarjeta de crédito requeridaBases de Datos DedicadasLímites en plan gratuito
☁️ Botkeep (Founder Free)❌ No (24/7 Activo)❌ No requerida✅ Postgres 17, Redis 7.2, MySQL, MongoDB5 servidores, 2 GB RAM, 1.5 vCores
Render⚠️ Sí (a los 15 min de inactividad)❌ No⚠️ Postgres expira a los 30 díasCold start de 50 segundos al despertar
Railway❌ No⚠️ Sí requerida✅ SíSe agota el crédito mensual de $5
Fly.io⚠️ Sí (auto-stop)⚠️ Sí requerida⚠️ Setup manual complejoRequiere tarjeta para verificar cuenta
Heroku❌ Ya no tiene plan gratis——Eliminó su capa gratuita en 2022
Supabase⚠️ Pausa tras 7 días inactivo❌ No✅ Solo PostgresSolo base de datos (no corre apps Node/Python)

📜 2. Bitácora de lo Realizado: Paso a Paso Detallado

A continuación se detalla todo el trabajo de ingeniería realizado en tu entorno local (/home/alexwce/Documentos/nada3):

flowchart TD
    A["🔐 1. Seguridad & API Key\n(Aislamiento .env chmod 600, .gitignore)"] --> B["🛠️ 2. CLI botkeep.py\n(Inspección OpenAPI 3.1, automatización REST)"]
    B --> C["🐘 3. Investigación DBs LTS\n(PostgreSQL 17.11 & Redis 7.2.16)"]
    C --> D["💻 4. Desarrollo DevLink\n(Node.js 24 + pnpm + Express + SQLite)"]
    D --> E["⚡ 5. Implementación Multi-Stack & Benchmark\n(Rust Axum vs Node pnpm vs Python Stdlib)"]
    E --> F["☁️ 6. Despliegue en Vivo\n(Nodo 2 Italia: Postgres, Redis y DevLink con HTTPS)"]
    F --> G["📓 7. Documentación en Obsidian\n(Bóveda ryukami-labs + Enlace en MOC principal)"]

Paso 1: Seguridad & Gestión de Credenciales

  • Se configuró el almacenamiento seguro de la API Key (bk_live_...) en /home/alexwce/Documentos/nada3/.env con permisos restrictivos chmod 600 (solo lectura/escritura para tu usuario Linux).
  • Se creó un archivo .gitignore para garantizar que ninguna credencial, token o base de datos local sea expuesta en repositorios Git.
  • Se descargó e inspeccionó la especificación OpenAPI oficial de Botkeep en openapi_botkeep.json.

Paso 2: Desarrollo del CLI botkeep.py

Se desarrolló una herramienta de línea de comandos en Python puro (botkeep.py) para administrar toda tu nube de forma programática y segura sin depender del navegador. Funciones integradas:

  • plan: Consulta de cuota de recursos en tiempo real.
  • runtimes: Lista de tecnologías y motores de bases de datos soportados.
  • list y get: Monitoreo en vivo de servidores, estado de ejecución, RAM en uso, puertos e IPs.
  • create-db: Aprovisionamiento automatizado de bases de datos con control de recursos.
  • deploy: Carga empaquetada de código en formato .zip mediante peticiones multipart.
  • start, stop, restart, redeploy: Control de ciclo de vida con cabecera obligatoria Idempotency-Key.
  • logs: Inspección de la consola en tiempo real.
  • watch: Monitor en segundo plano que vigila la disponibilidad de nodos para capturar cupos cuando se abren.

Paso 3: Análisis y Selección de Bases de Datos Estables (LTS)

  • PostgreSQL: Se investigó la versión más reciente. Aunque existían anuncios preliminares de versiones beta (ej. Postgres 19 Beta 4), se seleccionó PostgreSQL 17.11 por ser la versión estable oficial y recomendada para entornos de producción, con soporte para pgvector, optimización avanzada de consultas y particionamiento nativo.
  • Redis: Se seleccionó Redis 7.2.16 LTS (Long-Term Support) por su estabilidad probada, soporte para estructuras de datos complejas, pub/sub y compatibilidad universal con clientes de cualquier lenguaje.

Se creó una solución completa de acortador de enlaces y analíticas web:

  • Backend: Endpoints para crear enlaces cortos (POST /api/links), listar enlaces con métricas (GET /api/links), redirección automática (GET /:code) y healthcheck (GET /api/health).
  • Base de Datos: Almacenamiento embebido con SQLite (node:sqlite) con transacciones seguras para registrar clics, marcas de tiempo y enlaces personalizados.
  • Frontend: Interfaz web moderna con paleta oscura, animaciones CSS, copiado al portapapeles con un clic y visualización de analíticas en tiempo real.

Paso 5: Implementación Multi-Lenguaje & Gran Benchmark

Siguiendo tus requerimientos, implementamos DevLink en 3 lenguajes distintos y desarrollamos una suite de benchmarking concurrente (benchmark.py) con 500 peticiones concurrentes:

  1. 🦀 Versión Rust (Axum + rusqlite):
    • Ubicación: url-shortener-rust/
    • Binario compilado nativo: target/release/url-shortener-rust (4.2 MB).
  2. 🟢 Versión Node.js 24 (pnpm + Express + node:sqlite):
    • Ubicación: url-shortener/
    • Administrado con pnpm para un árbol de dependencias limpio y eficiente.
  3. 🐍 Versión Python 3.14 (http.server + sqlite3):

📊 Resultados del Benchmark Técnico

Métrica / Característica🦀 Rust (Axum)🟢 Node.js 24 (pnpm)🐍 Python 3.14 (Stdlib)
Rendimiento (RPS)🥇 2,375.9 req/s🥈 1,093.8 req/s🥉 752.4 req/s
Consumo de Memoria RAM🥇 6.1 MB (Pico)🥉 60.8 MB (Pico) / ~19 MB reposo🥈 21.2 MB (Pico)
Latencia Promedio🥇 7.86 ms🥈 17.43 ms🥉 25.79 ms
Latencia P95 (Peor 5%)🥇 13.52 ms🥈 31.76 ms🥉 39.88 ms
Tiempo de Arranque (Cold Start)🥇 11.1 ms🥉 104.2 ms🥈 42.1 ms
Despliegue Directo en BotkeepRequiere script lanzador✅ Nativo (nodejs 24)✅ Nativo (python 3.12)

Paso 6: Aprovisionamiento y Despliegue en Vivo

Aprovechando la apertura de cupos en el nodo de Nápoles, Italia (node2-it.botkeep.cloud), se crearon y configuraron exitosamente los 3 servicios:

  1. dev-postgres: PostgreSQL 17.11 corriendo en el puerto 30178.
  2. dev-redis: Redis 7.2.16 LTS corriendo en el puerto 30229.
  3. devlink-shortener: Empaquetado en .zip, desplegado en el puerto interno 30269, y vinculado a los subdominios públicos:
    • Principal: https://devlink-juanito.bot-keep.xyz
    • Alternativo: https://42hzjs.bot-keep.xyz
    • Enlace de prueba activo: https://devlink-juanito.bot-keep.xyz/bk (redirige a botkeep.cloud).

📊 3. Recursos de tu Cuenta: Cuota, Asignación y Lo que te Sobra

RecursoTotal del Plan Founder FreeAsignado / Reservado🟢 Disponible (Te Sobra)Consumo Real en Vivo
Slots (Servidores)53 (devlink, postgres, redis)2 slots libres3 encendidos 24/7
Memoria RAM2,048 MB (2 GB)768 MB (256 + 384 + 128)🟢 1,280 MB (1.25 GB) libres⚡ Solo ~41.6 MB en total
CPU (vCores)150% (1.5 vCores)65% (25% + 25% + 15%)🟢 85% CPU libre< 1% en reposo
Almacenamiento SSD2,048 MB (2 GB)1,024 MB (256 + 512 + 256)🟢 1,024 MB (1 GB) libre~50 MB ocupados

Clave del Ahorro de Recursos

Aunque tus 3 servicios tienen 768 MB reservados en total, su consumo real medido en vivo es de apenas ~41.6 MB. Esto significa que tu infraestructura está sumamente desahogada y te queda el 62.5% de tu cuota de RAM totalmente libre.

Inventario de Servidores Activos

NombreID del WorkloadTipo / MotorRAM AsignadaCPUPuerto ExternoDominio / URL
devlink-shortener543583fc-cbef-4fcf-8db4-633d5f8d3ebcNode.js 24256 MB25%30269https://devlink-juanito.bot-keep.xyz
dev-postgres6a6ad689-8f01-4f90-a316-5016496758fdPostgres 17.11384 MB25%30178node2-it.botkeep.cloud:30178
dev-redis7037a744-a82e-4502-b80c-3f2f78d08fd0Redis 7.2.16128 MB15%30229node2-it.botkeep.cloud:30229

🏗️ 4. Diagrama de Arquitectura de la Nube

flowchart LR
    subgraph Local["💻 Entorno Local / Proyectos Externos (Vercel, Astro, Next.js, Tauri)"]
        CLI["🛠️ botkeep.py CLI\n(nada3/botkeep.py)"]
        Apps["🚀 Tus Proyectos Web\n(Astro, Next.js, Bots, Apps)"]
    end

    subgraph Botkeep["☁️ Botkeep Cloud - Nodo 2 (node2-it.botkeep.cloud)"]
        subgraph Services["Servicios en Producción (3/5)"]
            DevLink["🔗 devlink-shortener\nNode.js 24 + SQLite\nPuerto: 30269\nHTTPS: devlink-juanito.bot-keep.xyz"]
            PG["🐘 dev-postgres\nPostgreSQL 17.11\nPuerto: 30178"]
            RD["⚡ dev-redis\nRedis 7.2.16 LTS\nPuerto: 30229"]
        end
        subgraph Free["Recursos Libres"]
            Slots["🟢 2 Slots Libres\n1,280 MB RAM | 85% CPU | 1 GB SSD"]
        end
    end

    CLI -->|"Gestión REST API"| Botkeep
    Apps -->|"postgresql://...:30178"| PG
    Apps -->|"redis://...:30229"| RD
    Apps -->|"POST /api/links"| DevLink

🚀 5. Guía de Integración para tus Proyectos Futuros

🔑 Paso Previo: ¿Dónde ver tus contraseñas de Postgres y Redis?

Por motivos de seguridad, la API de Botkeep no devuelve secretos en texto plano (secretsReadable: false). Para consultarlos:

  1. Ingresa a botkeep.cloud.
  2. Haz clic en dev-postgres o dev-redis.
  3. Abre la pestaña Environment (o revisa la primera línea de arranque en Console).
  4. Verás las variables con tu usuario y contraseña generados automáticamente.

A) 🐘 Cómo usar dev-postgres (PostgreSQL 17.11)

¿Para qué sirve? Base de datos relacional para guardar datos persistentes y estructurados:

  • Usuarios, autenticación y sesiones de tus aplicaciones web (Next.js, Astro, Svelte, Express).
  • Catálogos, transacciones, órdenes de compra, reservas.
  • Almacenamiento de JSON estructurado y vectores de IA (pgvector).

Conexión estándar (.env):

DATABASE_URL="postgresql://TU_USUARIO:TU_PASSWORD@node2-it.botkeep.cloud:30178/postgres"

Ejemplo en Node.js (con pg o compatible con Prisma / Drizzle):

import pg from 'pg';
const { Pool } = pg;
 
const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
});
 
const res = await pool.query('SELECT version()');
console.log('Conectado exitosamente:', res.rows[0]);

Estrategia Multi-Proyecto en 1 solo Postgres

No necesitas crear un servidor de base de datos por cada proyecto. Dentro de dev-postgres puedes crear múltiples bases de datos aisladas:

CREATE DATABASE proyecto_ecommerce;
CREATE DATABASE bot_asistente;
CREATE DATABASE blog_personal;

De esta forma, este único slot de 384 MB alimenta decenas de proyectos personales simultáneos.


B) ⚡ Cómo usar dev-redis (Redis 7.2.16 LTS)

¿Para qué sirve? Almacén clave-valor en memoria con latencias de respuesta menores a 1 ms:

  • Caché de APIs: Almacenar temporalmente respuestas de endpoints o consultas pesadas de base de datos (SETEX key 300 valor).
  • Rate Limiting: Proteger tus APIs contra ataques de fuerza bruta o spam limitando peticiones por IP.
  • Colas de Tareas en Segundo Plano: Manejo de colas con BullMQ (Node.js) o Celery (Python) para enviar correos o procesar archivos sin bloquear al usuario.

Conexión estándar (.env):

REDIS_URL="redis://:TU_PASSWORD@node2-it.botkeep.cloud:30229"

Ejemplo en Node.js (ioredis):

import Redis from 'ioredis';
 
const redis = new Redis(process.env.REDIS_URL);
 
// Guardar en caché con expiración de 60 segundos
await redis.set('perfil:juanito', JSON.stringify({ rol: 'admin', nivel: 99 }), 'EX', 60);
 
// Recuperar en tiempo récord (< 1ms)
const cached = await redis.get('perfil:juanito');
console.log(JSON.parse(cached));

Tu servicio está disponible públicamente en:

1. Uso desde el Navegador:

Ingresa desde cualquier PC o teléfono, pega un enlace largo y asígnale un alias personalizado (ej. /cv, /github, /portafolio). El sistema registrará los clics con fecha y hora.

2. Uso como Microservicio API desde tus Proyectos o Bots:

Puedes acortar enlaces programáticamente enviando una petición HTTP desde cualquier lenguaje:

curl -X POST "https://devlink-juanito.bot-keep.xyz/api/links" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://github.com/alexwce",
    "code": "gh",
    "title": "Perfil de GitHub"
  }'

💡 6. Ideas para tus 2 Slots Libres (1,280 MB de RAM restantes)

  1. 🤖 Slot #4: Bot 24/7 de Telegram / Discord con IA (256 MB RAM):
    • Un bot en Python o Node.js que escuche mensajes, registre recordatorios en tu dev-postgres, utilice dev-redis para recordar el historial de conversación, o se sincronice con tus notas de Obsidian.
  2. ⚡ Slot #5: API Backend Centralizada o Microservicios (512 MB - 1,024 MB RAM):
    • Un backend en FastAPI, Hono o Axum (Rust) que sirva como API para todas tus páginas estáticas alojadas en Vercel o GitHub Pages. Al estar en el mismo nodo de Italia (node2-it), su conexión a Postgres y Redis tendrá una latencia interna de red menor a 0.5 ms.

🛠️ 7. Comandos de Gestión con botkeep.py

Puedes administrar toda tu nube desde la terminal local en /home/alexwce/Documentos/nada3:

# Ver el estado y recursos de todos tus servidores en vivo
python3 /home/alexwce/Documentos/nada3/botkeep.py list
 
# Ver tu plan y recursos disponibles
python3 /home/alexwce/Documentos/nada3/botkeep.py plan
 
# Consultar los logs de consola de un servidor
python3 /home/alexwce/Documentos/nada3/botkeep.py logs 543583fc-cbef-4fcf-8db4-633d5f8d3ebc
 
# Reiniciar un servicio
python3 /home/alexwce/Documentos/nada3/botkeep.py restart 543583fc-cbef-4fcf-8db4-633d5f8d3ebc
 
# Monitorear stock de nodos disponibles
python3 /home/alexwce/Documentos/nada3/botkeep.py watch --interval 120