mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
import { serve } from "@hono/node-server";
|
|
import { Hono } from "hono";
|
|
import "dotenv/config";
|
|
import { zValidator } from "@hono/zod-validator";
|
|
import { Queue } from "@nerimity/mimiqueue";
|
|
import { createClient } from "redis";
|
|
import { logger } from "./logger";
|
|
import { type DeployJob, deployJobSchema } from "./schema";
|
|
import { deploy } from "./utils";
|
|
|
|
const app = new Hono();
|
|
const redisClient = createClient({
|
|
url: process.env.REDIS_URL,
|
|
});
|
|
|
|
app.post("/deploy", zValidator("json", deployJobSchema), (c) => {
|
|
const data = c.req.valid("json");
|
|
const res = queue.add(data, { groupName: data.serverId });
|
|
return c.json(
|
|
{
|
|
message: "Deployment Added",
|
|
},
|
|
200,
|
|
);
|
|
});
|
|
|
|
app.get("/health", async (c) => {
|
|
return c.json({ status: "ok" });
|
|
});
|
|
|
|
const queue = new Queue({
|
|
name: "deployments",
|
|
process: async (job: DeployJob) => {
|
|
logger.info("Deploying job", job);
|
|
return await deploy(job);
|
|
},
|
|
redisClient,
|
|
});
|
|
|
|
(async () => {
|
|
await redisClient.connect();
|
|
await redisClient.flushAll();
|
|
logger.info("Redis Cleaned");
|
|
})();
|
|
|
|
const port = Number.parseInt(process.env.PORT || "3000");
|
|
logger.info("Starting Deployments Server ✅", port);
|
|
serve({ fetch: app.fetch, port });
|