Saltar al contenido principal

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

TipoImagenCaso de uso
PostgreSQLpostgres:16Base de datos relacional
MySQLmysql:8Base de datos relacional
Redisredis:7Cache y almacen clave-valor
RabbitMQrabbitmq:3Cola de mensajes

Declarar dependencias

Agrega un array needs a cualquier servicio de aplicacion:

{
"api": {
"type": "app",
"needs": ["postgres", "redis"]
}
}

Al desplegar, Swisblade va a:

  1. Crear una base de datos/usuario/vhost dedicado para tu proyecto
  2. Aplicar limites de recursos segun tu plan
  3. 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:
important

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:

RecursoAislamiento
PostgreSQLBase de datos y usuario dedicados
MySQLBase de datos y usuario dedicados
RedisUsuario ACL dedicado con restriccion de prefijo de clave
RabbitMQVirtual 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 needs esta declarado.
  • Agregar needs: Si agregas una nueva dependencia a stack.json, se aprovisiona en el siguiente despliegue.
  • Eliminar needs: Eliminar una dependencia de stack.json no borra los datos. Contacta a soporte para descomisionar.
  • Eliminar proyecto: Todas las bases de datos, usuarios, vhosts y datos asociados se eliminan permanentemente.