Hosting de apps y bots: Git, variables y bases de datos
Guía del hosting de apps y bots: lenguajes, deploy desde Git o SFTP, variables de entorno, bases PostgreSQL, Redis y MongoDB, logs y deploys sin caída.
El hosting de apps y bots de SolumeCore ejecuta tu propio código, como un bot de Discord o Telegram, una API, un worker o un sitio pequeño, en un proceso que se mantiene encendido las 24 horas. No hay arranque en frío: tu proceso no se duerme cuando no hay tráfico. Traes el código desde un repositorio de Git o lo subes por SFTP, añades tus secretos como variables de entorno, pulsas Desplegar y lo ves arrancar en la consola en vivo.
Cada plan está pensado para un lenguaje, con la memoria, la CPU y el disco que indica el plan. Todo se gestiona desde el panel de cliente (dashboard.solumecore.com): deploys, variables, dependencias, logs y chequeos de salud, bases de datos, dominios, tareas programadas y backups. Esta guía explica cada pieza y qué depende de tu plan.
Importante: este producto sirve para ejecutar tu código. Si quieres una web PHP con WordPress, casillas de correo y SSL automático, usa el hosting web con cPanel. Si necesitas acceso root y tu propio stack, elige un VPS o VDS.
Lenguajes admitidos
Eliges el lenguaje al comprar. Otro lenguaje es otro plan, porque es otra imagen base distinta. Estos son los lenguajes del catálogo:
| Lenguaje | Uso típico | Archivo principal por defecto |
|---|---|---|
| Python | Bots, APIs, scripts; instala requirements.txt al arrancar |
app.py |
| Node.js | Bots, APIs, workers; ejecuta npm install si hay un package.json; TypeScript con ts-node |
index.js |
| Bun | Entorno de JavaScript y TypeScript, compatible con la mayoría del código de Node | index.ts |
| Deno | TypeScript con permisos explícitos por defecto | main.ts |
| Go | Compila y ejecuta un programa en Go | main.go |
| Java | Cualquier .jar, con la versión de Java que elijas (no es un servidor de Minecraft) |
app.jar |
| Rust | Compila con cargo y ejecuta el binario (el lenguaje, no el juego) | src/main.rs |
Cada lenguaje ofrece varias versiones. Puedes elegir la versión en Código → Paquetes → Versión del lenguaje; se aplica en el siguiente reinicio.
Poner tu código en línea
La primera pantalla de una app nueva, «Pon tu app en línea en 3 pasos», ofrece tres formas de traer el código.
Deploy desde Git
En Código → Deploy, elige Conectar un repositorio de Git. El asistente tiene tres pasos cortos:
- Tu código. Pega la URL del repositorio y la rama (normalmente
main).- Un repositorio público usa el enlace HTTPS, por ejemplo
https://github.com/tu-usuario/mi-bot. No hace falta nada más. - Un repositorio privado se conecta por SSH con el enlace
git@host:tu-usuario/repo.gity una deploy key de solo lectura que genera el panel. Esa llave se añade a las deploy keys del repositorio (GitHub: Settings → Deploy keys, sin marcar el permiso de escritura; GitLab: Settings → Repository → Deploy keys). Las URL que incluyen usuario o token se rechazan a propósito.
- Un repositorio público usa el enlace HTTPS, por ejemplo
- Acceso. Añade la deploy key si el repositorio es privado.
- Comandos. Define el comando de build (se ejecuta después de cada deploy, antes de arrancar la app, por ejemplo
npm install) y el comando de inicio (una sola línea, por ejemplonpm start,node index.jsopython main.py). Si lo dejas vacío se usa el valor por defecto de tu lenguaje.

Pulsa Desplegar ahora. Un deploy pasa por En cola, Obteniendo el código, Construyendo y Desplegado (o Fallido con su log). El Historial de deploys lista cada versión con su log, cuánto tardó y qué la disparó (manual, push, rollback, plantilla), y permite volver a una que funcionaba. Reinstalar desde cero borra todos los archivos del servidor y clona el repositorio de nuevo, así que haz un backup antes si algo importa.
Deploy en cada push. Activa «Desplegar automáticamente con cada push», genera un secreto de webhook y añade la URL del webhook a tu repositorio (GitHub: Settings → Webhooks, tipo de contenido application/json, solo eventos push; GitLab: Settings → Webhooks, eventos push). Desde entonces cada push a la rama elegida publica tu app.
Empezar con una plantilla
Empieza rápido instala un proyecto que ya funciona con un clic, y después lo haces tuyo desde tu propio repositorio. Las plantillas se filtran por tu lenguaje e incluyen bots de Discord (discord.js, discord.py), bots de Telegram (Node.js, Python), APIs con Express, Fastify y FastAPI, un sitio con Flask, un sitio estático y Next.js standalone. Usar una plantilla reemplaza los archivos del servidor. El asistente de bot de Discord te guía para crear el bot en el portal de desarrolladores de Discord, valida tu token, lo guarda cifrado y te da el enlace de invitación con un preajuste de permisos (básico, moderación, música o administrador).
Subir archivos o usar SFTP
Si no usas Git, arrastra tu proyecto a la pestaña Archivos o conéctate por SFTP con tu propia cuenta de SolumeCore; consulta la referencia de conexión SFTP.
Variables de entorno
Código → Variables es el lugar para tokens, claves de API y ajustes, en lugar de tu código. Los valores se guardan cifrados y quedan ocultos hasta que pulsas el ojo.

- Puedes importar o exportar un archivo
.env(admite comentarios, comillas y valores de varias líneas). No subas el archivo exportado a Git. - Una app puede tener hasta 100 variables, con nombres de hasta 100 caracteres y valores de hasta 8192 caracteres.
PORTyPUBLIC_URLlos pone el panel.PORTes el puerto en el que tu app debe escuchar, en0.0.0.0;PUBLIC_URLes tu dirección pública HTTPS cuando conectas un dominio. Nombres comoHOME,PATH,TZy cualquiera que empiece porSERVER_oSTARTUPestán reservados.- Las variables se leen cuando arranca la app, así que los cambios piden Reiniciar para aplicar. Con los deploys sin caída activados, usa Aplicar sin caída.
- También puedes pedir que el panel escriba un archivo
.envjunto a tu código. Cualquiera con permiso para ver o descargar archivos puede leerlo, así que déjalo desactivado si compartes el acceso.
Dependencias y versión del lenguaje
Código → Paquetes muestra tu archivo de dependencias (package.json o requirements.txt), lista lo que está desactualizado, añade, actualiza y elimina paquetes sin editar archivos, y ofrece las actualizaciones seguras con un clic. Las actualizaciones mayores avisan antes. No está disponible para todos los lenguajes; en esos casos gestiona las dependencias desde tu repositorio o desde la pestaña Archivos. Si la app se despliega desde Git, el siguiente deploy sobrescribe los cambios hechos aquí, así que cambia también el archivo en tu repositorio.
Deploys sin caída
Por defecto, un deploy reemplaza el código y reinicia la app, lo que provoca un corte breve. En Deploy → Deploys sin caída puedes pasar una app a Sin caída: cada deploy se convierte en un release separado que se construye y se chequea mientras la versión actual sigue atendiendo. El tráfico solo pasa cuando la versión nueva responde, la vieja termina lo que tenía abierto y, si la nueva falla, no cambia nada. Volver a un release reciente es instantáneo; los más antiguos se traen y se construyen de nuevo.
Requiere:
- Un repositorio de Git conectado.
- Tu propio comando de inicio, relativo a la carpeta de la app (por ejemplo
npm start). - Una app que responda HTTP. Los bots quedan fuera: Discord no admite dos conexiones al gateway con el mismo token, así que los bots mantienen el deploy normal.
- Opcionalmente una ruta de chequeo de salud; sin ella, cualquier respuesta HTTP en
/cuenta. - Un servidor que lo admita. La opción solo se ofrece donde está disponible.
Conviene saber: el primer deploy sin caída reinicia la app una vez; guarda los archivos que deben sobrevivir a los deploys en /home/container/data (la carpeta DATA_DIR), porque cada release es una carpeta nueva; y quitar una variable sigue necesitando un reinicio.
Bases de datos administradas
Si tu plan las incluye, la sección Bases de datos crea bases PostgreSQL, Redis y MongoDB junto a tu app, en el mismo servidor y en una red privada a la que solo accede tu app. Las credenciales se generan por ti y la creación suele tardar menos de un minuto.

- Límites del plan. Cuántas bases y de qué motores puedes añadir depende de tu plan. Si no las incluye, el panel lo indica.
- Conexión. Cada base tiene un nombre de host que solo se resuelve dentro de la red privada. Pulsa Conectar a mi app para añadir la URL de conexión como una variable, por ejemplo
DATABASE_URL,REDIS_URLoMONGODB_URI, y luego reinicia o aplica sin caída. - Backups. Prográmalos (nunca, cada 6 horas, todos los días o todas las semanas), conserva hasta el número que permita la plataforma, haz uno cuando quieras y restaura cualquiera. Se generan con la herramienta propia de cada motor y se guardan en el disco de la propia base. Al restaurar se conserva antes una copia del estado actual.
- Métricas. CPU, memoria, disco, tamaño de los datos y conexiones, más tablas, claves o colecciones.
- Acceso desde fuera. La base es privada por defecto. Puedes permitir conexiones desde direcciones IP concretas para usar un cliente de escritorio; no se permite abrirla a todo internet.
Logs y chequeos de salud
Logs y salud guarda todo lo que imprime tu app durante unos días (7 por defecto) y te deja buscar, filtrar por nivel, elegir un rango de tiempo, seguir en vivo y descargar. El health check pide una página (HTTP) o prueba un puerto (TCP) con el intervalo que elijas y, tras varios fallos seguidos, puede reiniciar la app y avisarte. Probar ahora comprueba si tu app acepta conexiones desde internet; si no, asegúrate de que escucha en 0.0.0.0 y en el PORT indicado.
Dominios con HTTPS
En Red y dominio → Puertos y dominio puedes dar a una app una dirección HTTPS con un subdominio gratuito o con tu propio dominio. Para tu dominio creas dos registros en tu proveedor de DNS (uno que dirige a los visitantes a la app y un TXT que demuestra que el dominio es tuyo), y los certificados se emiten y renuevan por ti. Puedes forzar HTTPS, añadir cabeceras de seguridad, redirigir www, activar la compresión, fijar un límite de subida o exigir una contraseña. Cuántos dominios puede tener una app lo define la plataforma, y la función solo está disponible en los servidores con proxy HTTPS. Más detalles en dominios y DNS.
Automatización, backups y accesos
- Automatización → Tareas programadas ejecuta reinicios, backups o un comando con horario, en tu zona horaria.
- Backups son copias manuales o programadas de los archivos de la app; los archivos borrados van a una papelera de la que se pueden recuperar durante una semana.
- Compartir. Las apps usan el mismo sistema de permisos que los servidores de juego, así que puedes dar la consola a un compañero sin darle los archivos. Consulta permisos de servidores de juego.
- Mejorar el plan. En el panel elige Mejorar plan, paga solo la diferencia por los días que le quedan al ciclo y tu proceso recibe la memoria nueva sin reinstalar.
Documentos relacionados
- Hosting web con cPanel
- Referencia de conexión SFTP
- Dominios y DNS
- Permisos de servidores de juego
- Límites y cuotas por producto
FAQ
¿Qué lenguajes puedo usar para un bot o una app?
Python, Node.js, Bun, Deno, Go, Java y Rust, cada uno con varias versiones. Eliges el lenguaje al comprar; otro lenguaje significa otro plan.
¿Cómo despliego un repositorio privado de GitHub?
Usa el enlace SSH del repositorio ([email protected]:tu-usuario/repo.git) y añade a las Deploy keys del repositorio la deploy key de solo lectura que muestra el panel. No se aceptan tokens dentro de la URL.
¿Mi app se duerme si nadie la visita?
No. El proceso sigue en ejecución, así que no hay arranque en frío ni una primera petición lenta. Si activas el health check con reinicio automático, el panel puede volver a levantarla después de una caída.
¿Puedo desplegar sin caída?
Sí, en apps que respondan HTTP, con un repositorio de Git conectado y tu propio comando de inicio. Los bots de Discord y similares no pueden solapar dos versiones, así que mantienen el deploy normal con un reinicio breve.
¿Qué bases de datos puedo usar?
PostgreSQL, Redis y MongoDB administradas, si tu plan las incluye. Corren junto a tu app en una red privada, con backups y métricas.
¿Cómo mantengo los secretos fuera de mi código?
Ponlos en Código → Variables. Se guardan cifrados y se pasan a tu app como variables de entorno cuando arranca.