mirror of
https://github.com/andwati/dokploy.git
synced 2026-10-19 19:44:29 +00:00
131 lines
3.7 KiB
TypeScript
131 lines
3.7 KiB
TypeScript
import { findServerById } from "@dokploy/server/services/server";
|
|
import type { ContainerCreateOptions } from "dockerode";
|
|
import { findAdminById } from "../services/admin";
|
|
import { pullImage, pullRemoteImage } from "../utils/docker/utils";
|
|
import { execAsync, execAsyncRemote } from "../utils/process/execAsync";
|
|
import { getRemoteDocker } from "../utils/servers/remote-docker";
|
|
|
|
export const setupMonitoring = async (serverId: string) => {
|
|
const server = await findServerById(serverId);
|
|
|
|
const containerName = "mauricio-monitoring";
|
|
const imageName = "dokploy/monitoring:canary";
|
|
|
|
const settings: ContainerCreateOptions = {
|
|
name: containerName,
|
|
Env: [`METRICS_CONFIG=${JSON.stringify(server?.metricsConfig)}`],
|
|
Image: imageName,
|
|
HostConfig: {
|
|
// Memory: 100 * 1024 * 1024, // 100MB en bytes
|
|
// PidMode: "host",
|
|
// CapAdd: ["NET_ADMIN", "SYS_ADMIN"],
|
|
// Privileged: true,
|
|
PortBindings: {
|
|
[`${server.metricsConfig.server.port}/tcp`]: [
|
|
{
|
|
HostPort: server.metricsConfig.server.port.toString(),
|
|
},
|
|
],
|
|
},
|
|
Binds: [
|
|
"/var/run/docker.sock:/var/run/docker.sock:ro",
|
|
"/sys:/host/sys:ro",
|
|
"/etc/os-release:/etc/os-release:ro",
|
|
"/proc:/host/proc:ro",
|
|
"/etc/dokploy/monitoring/monitoring.db:/app/monitoring.db",
|
|
],
|
|
NetworkMode: "host",
|
|
},
|
|
ExposedPorts: {
|
|
[`${server.metricsConfig.server.port}/tcp`]: {},
|
|
},
|
|
};
|
|
const docker = await getRemoteDocker(serverId);
|
|
try {
|
|
await execAsyncRemote(
|
|
serverId,
|
|
"mkdir -p /etc/dokploy/monitoring && touch /etc/dokploy/monitoring/monitoring.db",
|
|
);
|
|
if (serverId) {
|
|
await pullRemoteImage(imageName, serverId);
|
|
}
|
|
|
|
// Check if container exists
|
|
const container = docker.getContainer(containerName);
|
|
try {
|
|
await container.inspect();
|
|
await container.remove({ force: true });
|
|
console.log("Removed existing container");
|
|
} catch (error) {
|
|
// Container doesn't exist, continue
|
|
}
|
|
|
|
await docker.createContainer(settings);
|
|
const newContainer = docker.getContainer(containerName);
|
|
await newContainer.start();
|
|
|
|
console.log("Monitoring Started ");
|
|
} catch (error) {
|
|
console.log("Monitoring Not Found: Starting ", error);
|
|
}
|
|
};
|
|
|
|
export const setupWebMonitoring = async (adminId: string) => {
|
|
const admin = await findAdminById(adminId);
|
|
|
|
const containerName = "mauricio-monitoring";
|
|
const imageName = "dokploy/monitoring:canary";
|
|
|
|
const settings: ContainerCreateOptions = {
|
|
name: containerName,
|
|
Env: [`METRICS_CONFIG=${JSON.stringify(admin?.metricsConfig)}`],
|
|
Image: imageName,
|
|
HostConfig: {
|
|
// Memory: 100 * 1024 * 1024, // 100MB en bytes
|
|
// PidMode: "host",
|
|
// CapAdd: ["NET_ADMIN", "SYS_ADMIN"],
|
|
// Privileged: true,
|
|
PortBindings: {
|
|
[`${admin.metricsConfig.server.port}/tcp`]: [
|
|
{
|
|
HostPort: admin.metricsConfig.server.port.toString(),
|
|
},
|
|
],
|
|
},
|
|
Binds: [
|
|
"/var/run/docker.sock:/var/run/docker.sock:ro",
|
|
"/sys:/host/sys:ro",
|
|
"/etc/os-release:/etc/os-release:ro",
|
|
"/proc:/host/proc:ro",
|
|
"/etc/dokploy/monitoring/monitoring.db:/app/monitoring.db",
|
|
],
|
|
// NetworkMode: "host",
|
|
},
|
|
ExposedPorts: {
|
|
[`${admin.metricsConfig.server.port}/tcp`]: {},
|
|
},
|
|
};
|
|
const docker = await getRemoteDocker();
|
|
try {
|
|
await execAsync(
|
|
"mkdir -p /etc/dokploy/monitoring && touch /etc/dokploy/monitoring/monitoring.db",
|
|
);
|
|
await pullImage(imageName);
|
|
|
|
const container = docker.getContainer(containerName);
|
|
try {
|
|
await container.inspect();
|
|
await container.remove({ force: true });
|
|
console.log("Removed existing container");
|
|
} catch (error) {}
|
|
|
|
await docker.createContainer(settings);
|
|
const newContainer = docker.getContainer(containerName);
|
|
await newContainer.start();
|
|
|
|
console.log("Monitoring Started ");
|
|
} catch (error) {
|
|
console.log("Monitoring Not Found: Starting ", error);
|
|
}
|
|
};
|