Bases de Datos
Swisblade aprovisiona bases de datos gestionadas y servicios de infraestructura bajo demanda. Declara lo que necesitas en stack.json y la plataforma se encarga del aprovisionamiento, credenciales y strings de conexion.
Infraestructura soportada
| Tipo | Imagen | Caso de uso |
|---|---|---|
| PostgreSQL | postgres:16 | Base de datos relacional |
| MySQL | mysql:8 | Base de datos relacional |
| Redis | redis:7 | Cache y almacen clave-valor |
| RabbitMQ | rabbitmq:3 | Cola de mensajes |
Declarar dependencias
Agrega un array needs a cualquier servicio de aplicacion:
{
"api": {
"type": "app",
"needs": ["postgres", "redis"]
}
}
Al desplegar, Swisblade va a:
- Crear una base de datos/usuario/vhost dedicado para tu proyecto
- Aplicar limites de recursos segun tu plan
- Inyectar strings de conexion como variables de entorno
Strings de conexion
Despues del despliegue, cada servicio que declare needs recibe la variable de entorno correspondiente:
PostgreSQL
DATABASE_URL=postgresql://proj_xxx:password@platform-postgres:5432/proj_xxx
Tu aplicacion puede usar DATABASE_URL directamente con cualquier cliente PostgreSQL:
// Node.js with pg
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
// Python with psycopg2
conn = psycopg2.connect(os.environ['DATABASE_URL'])
MySQL
DATABASE_URL=mysql://proj_xxx:password@platform-mysql:3306/proj_xxx
Redis
REDIS_URL=redis://proj_xxx:password@platform-redis:6379/0
REDIS_KEY_PREFIX=proj_xxx:
Siempre usa el prefijo REDIS_KEY_PREFIX en tus claves de Redis. Esto asegura el aislamiento entre proyectos que comparten la misma instancia de Redis.
const prefix = process.env.REDIS_KEY_PREFIX;
await redis.set(`${prefix}my-key`, value);
RabbitMQ
MQ_URL=amqp://proj_xxx:password@platform-rabbitmq:5672/proj_xxx
Cada proyecto obtiene su propio virtual host de RabbitMQ. Las colas y exchanges estan aislados por defecto.
Acceso externo
PostgreSQL y MySQL
Puedes conectarte a tus bases de datos desde fuera de la plataforma usando clientes estandar:
# PostgreSQL
psql "postgresql://proj_xxx:password@swisblade.com:5432/proj_xxx"
# MySQL
mysql -h swisblade.com -P 3306 -u proj_xxx -p proj_xxx
Las credenciales de conexion estan disponibles en el dashboard en Proyecto -> Resumen.
Redis y RabbitMQ
Estos servicios son solo internos y no se puede acceder a ellos desde fuera de la plataforma. Solo son accesibles por servicios dentro de tu proyecto.
Aislamiento
Cada proyecto obtiene:
| Recurso | Aislamiento |
|---|---|
| PostgreSQL | Base de datos y usuario dedicados |
| MySQL | Base de datos y usuario dedicados |
| Redis | Usuario ACL dedicado con restriccion de prefijo de clave |
| RabbitMQ | Virtual host y usuario dedicados |
Los proyectos no pueden acceder a los datos de otros proyectos.
Aprovisionamiento y desaprovisionamiento
- Crear proyecto: La infraestructura se aprovisiona automaticamente en el primer despliegue si
needsesta declarado. - Agregar
needs: Si agregas una nueva dependencia astack.json, se aprovisiona en el siguiente despliegue. - Eliminar
needs: Eliminar una dependencia destack.jsonno borra los datos. Contacta a soporte para descomisionar. - Eliminar proyecto: Todas las bases de datos, usuarios, vhosts y datos asociados se eliminan permanentemente.