UNPKG

vyndra-js

Version:

Micro Node.js framework with routing, ORM, decorators, and automatic DI

65 lines (64 loc) 2.72 kB
import { Docker } from "node-docker-api"; import { FrameworkConfig } from "../config/framework.config.js"; export async function startQueueContainer(os = "windows") { if (!FrameworkConfig.queue.docker) return; const docker = new Docker(os === "windows" ? { host: "http://localhost", port: 2375 } : { socketPath: "/var/run/docker.sock" }); const { image, ports } = FrameworkConfig.queue; const containers = (await docker.container.list({ all: true })); const existingContainer = containers.find((c) => c.data.Names?.includes("/vyndra-js_rabbit")); if (existingContainer) { console.log("Contenedor RabbitMQ ya existe"); const container = docker.container.get(existingContainer.id); if (existingContainer.data.State !== "running") { console.log("Iniciando contenedor detenido..."); await container.start(); } else { console.log("Contenedor ya está corriendo"); } return; } const exists = containers.some((c) => c.data.Image.includes(image)); if (exists) return console.log("RabbitMQ ya está corriendo"); const images = (await docker.image.list()); const imageExists = images.some((i) => i.data.RepoTags?.includes(image)); if (!imageExists) { console.log(`Descargando imagen ${image}... espere hasta que este completamente descargada`); const stream = (await docker.image.create({}, { fromImage: image })); await new Promise((resolve, reject) => { stream.on("data", (chunk) => process.stdout.write(chunk.toString())); stream.on("end", resolve); stream.on("error", reject); }); console.log(`Imagen ${image} descargada`); } const container = (await docker.container.create({ Image: image, name: "vyndra-js_rabbit", HostConfig: { PortBindings: { "5672/tcp": [{ HostPort: ports.amqp.toString() }], "15672/tcp": [{ HostPort: ports.management.toString() }], }, }, })); await container.start(); console.log(`RabbitMQ iniciado en http://localhost:${ports.management}`); } export async function isExist(os = "windows") { if (!FrameworkConfig.queue.docker) return false; const docker = new Docker(os === "windows" ? { host: "http://localhost", port: 2375 } : { socketPath: "/var/run/docker.sock" }); const containers = (await docker.container.list({ all: true })); const existingContainer = containers.find((c) => c.data.Names?.includes("/vyndra-js_rabbit")); if (!existingContainer) { return false; } return true; }