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.