66 lines · 1.4 KB · TypeScript
RawDownload
import type { CreateServiceOptions } from "dockerode";import { docker } from "../constants";import { pullImage } from "../utils/docker/utils"; export const initializeRedis = async () => {	const imageName = "redis:8";	const containerName = "dokploy-redis"; 	const settings: CreateServiceOptions = {		Name: containerName,		TaskTemplate: {			ContainerSpec: {				Image: imageName,				Mounts: [					{						Type: "volume",						Source: "dokploy-redis",						Target: "/data",					},				],			},			Networks: [{ Target: "dokploy-network" }],			Placement: {				Constraints: ["node.role==manager"],			},		},		Mode: {			Replicated: {				Replicas: 1,			},		},		...(process.env.NODE_ENV === "development" && {			EndpointSpec: {				Ports: [					{						TargetPort: 6379,						PublishedPort: 6379,						Protocol: "tcp",						PublishMode: "host",					},				],			},		}),	};	try {		await pullImage(imageName); 		const service = docker.getService(containerName);		const inspect = await service.inspect();		await service.update({			version: Number.parseInt(inspect.Version.Index),			...settings,		});		console.log("Redis Started ✅");	} catch (_) {		try {			await docker.createService(settings);		} catch (error: any) {			if (error?.statusCode !== 409) {				throw error;			}			console.log("Redis service already exists, continuing...");		}		console.log("Redis Not Found: Starting ✅");	}};