Bases de datos y componentes
Un componente es un servicio del catálogo que se crea listo para usarse: la contraseña generada, las variables que su imagen necesita, las que leerán sus vecinos y un volumen para sus datos, todo de una vez. Esta guía es la referencia del catálogo y explica cómo mirar y cambiar los datos de cualquier base de datos: PostgreSQL, MySQL, SQLite, MongoDB o ClickHouse.
fundaia templates # lo que esta cuenta puede añadir
fundaia new tienda Postgres --template postgres-16
fundaia new tienda Notas --template sqlite-3 # o mysql-8, mongodb-7…
fundaia connect tienda api Postgres
Qué trae cada uno
Conectar un servicio a un componente escribe exactamente las claves de la columna Exporta, como referencias.
| Componente | Clave | Exporta | Volumen en | Memoria |
|---|---|---|---|---|
| PostgreSQL 16 | postgres-16 | DATABASE_URL, PGHOST | /var/lib/postgresql/data | 512 MB |
| MySQL 8.4 | mysql-8 | DATABASE_URL, MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE | /var/lib/mysql | 1024 MB |
| SQLite (libSQL) | sqlite-3 | LIBSQL_URL, LIBSQL_AUTH_TOKEN | /var/lib/sqld | 256 MB |
| MongoDB 7 | mongodb-7 | MONGODB_URI, MONGO_URL | /data/db | 1024 MB |
| ClickHouse 24 | clickhouse-24 | CLICKHOUSE_URL, CLICKHOUSE_HOST, CLICKHOUSE_USER, CLICKHOUSE_PASSWORD | /var/lib/clickhouse | 2048 MB |
| Redis 7 | redis-7 | REDIS_URL | /data | 256 MB |
| Valkey 8 | valkey-8 | REDIS_URL, VALKEY_URL | /data | 256 MB |
| Almacenamiento S3 (MinIO) | bucket | S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_REGION, S3_FORCE_PATH_STYLE | /data | 512 MB |
| Meilisearch | meilisearch-1 | MEILI_URL, MEILI_MASTER_KEY | /meili_data | 1024 MB |
| Typesense | typesense-27 | TYPESENSE_URL, TYPESENSE_API_KEY | /data | 512 MB |
| Qdrant | qdrant-1 | QDRANT_URL, QDRANT_API_KEY | /qdrant/storage | 512 MB |
| Kafka | kafka-4 | KAFKA_BOOTSTRAP_SERVERS, KAFKA_BROKERS, SPRING_KAFKA_BOOTSTRAP_SERVERS | /var/lib/kafka/data | 1536 MB |
| RabbitMQ 4 | rabbitmq-4 | AMQP_URL, RABBITMQ_URL | /var/lib/rabbitmq | 512 MB |
| NATS | nats-2 | NATS_URL | /data | 128 MB |
| Balanceador de carga (Traefik) | traefik-3 | LOAD_BALANCER_URL | — | 256 MB |
| API gateway (KrakenD) | krakend-2 | API_GATEWAY_URL | — | 256 MB |
| n8n | n8n-1 | N8N_URL | /home/node/.n8n | 512 MB |
| Uptime Kuma | uptime-kuma-1 | UPTIME_KUMA_URL | /app/data | 256 MB |
| Grafana | grafana-11 | GRAFANA_URL | /var/lib/grafana | 256 MB |
| Claude Code | claude-code | CLAUDE_CODE_URL, CLAUDE_CODE_TOKEN, CLAUDE_CODE_MODEL | /work | 1024 MB |
El balanceador y el gateway tienen su propia guía, Balanceador y API gateway, y el agente la suya, Claude Code.
Todos se crean sin dormir, y los que tienen volumen se copian a diario; ver Volúmenes y copias. La memoria de la tabla es la de partida y se cambia en Ajustes → Recursos.
El host de cualquiera de ellos es su nombre en la red del proyecto: un mongodb://…@datos:27017/datos resuelve porque datos es el nombre del servicio.
n8n, Uptime Kuma y Grafana son aplicaciones que se usan desde el navegador: nacen privadas como todo lo demás, así que para abrirlas publícalas (fundaia expose tienda grafana, o Dominios). Lo que exportan es su dirección interna, para que otro servicio llame a su API o a sus webhooks.
Consultar y cambiar datos
Un componente PostgreSQL, MySQL, SQLite, MongoDB o ClickHouse tiene una pestaña Datos con sus tablas (o colecciones), una caja de consulta y una de cambios. Lo mismo está en la terminal y en el MCP (list_tables, query_database, execute_sql):
fundaia data tables tienda Datos
fundaia data query tienda Datos "SELECT id, role FROM users WHERE email = 'ana@ejemplo.com'"
fundaia data run tienda Datos "UPDATE users SET role = 'ADMIN' WHERE id = 'ae10…'" --preview
fundaia data run tienda Datos "UPDATE users SET role = 'ADMIN' WHERE id = 'ae10…'" --confirm Datos
- Una consulta es de solo lectura, y quien lo garantiza es la propia base de datos, nunca una lista de palabras prohibidas. Devuelve como mucho 200 filas y se corta a los 5 segundos.
- Un cambio es una sola sentencia, confirmada repitiendo el nombre del servicio, y queda en la actividad del proyecto con el texto que se ejecutó.
- Pruébalo antes. Probar en la pestaña,
--previewen la terminal opreview: trueenexecute_sqlejecutan la sentencia y la deshacen, y el recuento es exactamente el que tocaría de verdad. Si el motor no puede deshacerla, el ensayo no ejecuta nada y lo dice (rehearsal: "unavailable"). No hay deshacer después.
| Motor | Lenguaje | Por qué una consulta no puede escribir | Qué se puede ensayar |
|---|---|---|---|
| PostgreSQL | SQL | Transacción READ ONLY | Todo, cambios de esquema incluidos |
| MySQL | SQL | Sesión en modo READ ONLY | Filas sí; un cambio de esquema (ALTER, CREATE) no, porque MySQL lo confirma por su cuenta |
| SQLite | SQL | Un token que libSQL solo deja leer | Todo, cambios de esquema incluidos |
| MongoDB | Comando JSON | Solo se ejecutan find, aggregate sin $out ni $merge, count y distinct | Nada: un servidor sin réplicas no tiene transacciones |
| ClickHouse | SQL | Modo readonly del propio servidor, que tampoco deja desactivarlo | Nada: MergeTree no tiene transacciones |
En MongoDB la sentencia es un comando en JSON, tal como lo recibe db.runCommand, con los identificadores y las fechas en Extended JSON:
fundaia data query tienda Mongo '{"find": "users", "filter": {"age": {"$gt": 30}}, "sort": {"_id": -1}}'
fundaia data query tienda Mongo '{"aggregate": "orders", "pipeline": [{"$group": {"_id": "$status", "n": {"$sum": 1}}}]}'
fundaia data run tienda Mongo '{"update": "users", "updates": [{"q": {"_id": {"$oid": "6ad0…"}}, "u": {"$set": {"role": "admin"}}}]}' --confirm Mongo
Como en MongoDB no hay ensayo, compruébalo antes con un find o un count con el mismo filtro: es exactamente lo que el update o el delete tocarán. Si un insert falla a medias (una clave duplicada), el error dice cuántos documentos sí se escribieron.
En ClickHouse, un ALTER TABLE … UPDATE o DELETE espera a que su mutación termine antes de contestar, así que cuando la pestaña dice que se ejecutó, ya está aplicado. Solo un INSERT dice cuántas filas escribió: una mutación no lo cuenta.
Una base de datos dormida no se despierta por abrir la pestaña; arráncala desde Despliegues.