☁️ 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 requerida
Bases de Datos Dedicadas
Límites en plan gratuito
☁️ Botkeep (Founder Free)
❌ No (24/7 Activo)
❌ No requerida
✅ Postgres 17, Redis 7.2, MySQL, MongoDB
5 servidores, 2 GB RAM, 1.5 vCores
Render
⚠️ Sí (a los 15 min de inactividad)
❌ No
⚠️ Postgres expira a los 30 días
Cold 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 complejo
Requiere 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 Postgres
Solo base de datos (no corre apps Node/Python)
📜 2. Bitácora de lo Realizado: Paso a Paso Detallado
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.
Paso 4: Desarrollo de la Aplicación DevLink
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:
Aprovechando la apertura de cupos en el nodo de Nápoles, Italia (node2-it.botkeep.cloud), se crearon y configuraron exitosamente los 3 servicios:
dev-postgres: PostgreSQL 17.11 corriendo en el puerto 30178.
dev-redis: Redis 7.2.16 LTS corriendo en el puerto 30229.
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
Recurso
Total del Plan Founder Free
Asignado / Reservado
🟢 Disponible (Te Sobra)
Consumo Real en Vivo
Slots (Servidores)
5
3 (devlink, postgres, redis)
2 slots libres
3 encendidos 24/7
Memoria RAM
2,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 SSD
2,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
Nombre
ID del Workload
Tipo / Motor
RAM Asignada
CPU
Puerto Externo
Dominio / URL
devlink-shortener
543583fc-cbef-4fcf-8db4-633d5f8d3ebc
Node.js 24
256 MB
25%
30269
https://devlink-juanito.bot-keep.xyz
dev-postgres
6a6ad689-8f01-4f90-a316-5016496758fd
Postgres 17.11
384 MB
25%
30178
node2-it.botkeep.cloud:30178
dev-redis
7037a744-a82e-4502-b80c-3f2f78d08fd0
Redis 7.2.16
128 MB
15%
30229
node2-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:
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:
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.
import Redis from 'ioredis';const redis = new Redis(process.env.REDIS_URL);// Guardar en caché con expiración de 60 segundosawait 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));
C) 🔗 Cómo usar devlink-shortener (Tu Acortador Web y API)
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)
🤖 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.
⚡ 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.
# Ver el estado y recursos de todos tus servidores en vivopython3 /home/alexwce/Documentos/nada3/botkeep.py list# Ver tu plan y recursos disponiblespython3 /home/alexwce/Documentos/nada3/botkeep.py plan# Consultar los logs de consola de un servidorpython3 /home/alexwce/Documentos/nada3/botkeep.py logs 543583fc-cbef-4fcf-8db4-633d5f8d3ebc# Reiniciar un serviciopython3 /home/alexwce/Documentos/nada3/botkeep.py restart 543583fc-cbef-4fcf-8db4-633d5f8d3ebc# Monitorear stock de nodos disponiblespython3 /home/alexwce/Documentos/nada3/botkeep.py watch --interval 120