Plantillas y botón «Desplegar en Fundaia»
Todo el catálogo se puede ver sin entrar en [/plantillas](/plantillas): las pilas de varios servicios (WordPress, Ghost, Metabase, Umami, n8n, Directus, Plausible, Gitea, Uptime Kuma, Listmonk) y los componentes sueltos (PostgreSQL, MySQL, Redis, Valkey, MongoDB, ClickHouse, SQLite, almacenamiento S3, Meilisearch, Typesense, Qdrant, Kafka, RabbitMQ, NATS, el balanceador, el API gateway, n8n, Uptime Kuma y Grafana). Se buscan por nombre y se filtran por categoría.
Cada plantilla tiene su página, /plantillas/<clave>, con lo que crea antes de crearlo:
- Los servicios, en el orden en que se despliegan, con su imagen y su versión, la memoria que piden, el puerto y si tienen dominio público o se quedan en la red privada del proyecto.
- Los volúmenes: lo que sobrevive a un reinicio.
- Las variables, solo por su nombre: las contraseñas y claves se generan al crearla, distintas en cada proyecto; las referencias dicen a qué servicio apuntan (
${{ MySQL.MYSQL_PASSWORD }}), y la dirección pública la pone la plataforma. Ningún valor sale de la instancia. - Lo que costaría, en las instancias que cobran: la memoria reservada de un mes entero sin dormirse, a precio de hoy. La CPU y el disco se pagan por lo que se usen y lo dormido no cuesta, así que es un techo, no una factura.
El botón para tu README
Pegado en un README, el botón lleva a /desplegar, que dice exactamente qué se va a crear y pide entrar si hace falta: quien lo pulsa elige su espacio, el nombre del proyecto y confirma. Después aterriza en el lienzo del proyecto nuevo, con el primer despliegue en marcha. Generar el enlace no crea nada, y nada se crea sin que alguien con sesión lo confirme.
[](https://infrastructure.fundaia.com/desplegar?plantilla=ghost)
| Enlace | Qué crea |
|---|---|
/desplegar?plantilla=<clave> | Un proyecto con la pila o el componente: wordpress, ghost, postgres-16… |
/desplegar?repo=<propietario>/<nombre> | Un proyecto con un servicio construido desde ese repositorio de GitHub |
&rama=<rama> | Con repo: la rama. Sin ella, la principal del repositorio |
&carpeta=<ruta> | Con repo: la carpeta que se construye, para un monorepo (apps/web) |
&nombre=<nombre> | El nombre del proyecto. Sin él, el de la plantilla o el del repositorio, con un número si ya existe |
La imagen es GET /api/infra/deploy-button.svg, con ?tema=oscuro (el de por defecto, para páginas claras) o ?tema=claro. El fragmento HTML automático usa <picture> para que GitHub enseñe el oscuro en modo claro y el claro en modo oscuro. Cada página de plantilla tiene su generador, con la vista previa en un README claro y en uno oscuro; el de un repositorio está al final de /plantillas, y el de un proyecto tuyo, en Editar proyecto → Botón para tu README.
Qué repositorios se pueden desplegar
- Uno público, de quien sea: se lee sin credenciales y cada push a la rama lo vuelve a desplegar.
- Uno privado que esté en tu conexión con GitHub (la instalación de la GitHub App o tu cuenta).
- Uno privado que no esté: la página lo avisa y deja crear el proyecto igualmente. El primer despliegue se encuentra la puerta cerrada, le pide acceso por correo a su propietario y se reintenta solo en cuanto lo conceda (GitHub).
Un enlace con una rama que el repositorio no tiene no crea nada, y lo dice. La carpeta tiene que ser una ruta relativa sin ..; la rama, un nombre que git aceptaría.
Desde el terminal y desde un agente
fundaia templates show ghost # lo que crea, con imágenes, volúmenes y variables
fundaia deploy-link --stack ghost # el Markdown, listo para pegar
fundaia deploy-link --repo pepito/tienda --branch produccion --root apps/web --html
fundaia deploy-link --stack wordpress --theme auto --json
Para un agente es deploy_link (MCP), que devuelve el enlace, la imagen del botón y los dos fragmentos; crear el proyecto es add_stack o create_service, como siempre. En la app de iPhone y iPad, Nuevo proyecto → Desde el catálogo recorre la misma galería y crea el proyecto desde cualquier plantilla.