69 lines · 1.6 KB · TypeScript
RawDownload
import type { CreateServiceOptions } from "dockerode";import { docker } from "../constants";import { pullImage } from "../utils/docker/utils";export const initializePostgres = async () => {	const imageName = "postgres:16";	const containerName = "dokploy-postgres";	const settings: CreateServiceOptions = {		Name: containerName,		TaskTemplate: {			ContainerSpec: {				Image: imageName,				Env: [					"POSTGRES_USER=dokploy",					"POSTGRES_DB=dokploy",					"POSTGRES_PASSWORD=amukds4wi9001583845717ad2",				],				Mounts: [					{						Type: "volume",						Source: "dokploy-postgres",						Target: "/var/lib/postgresql/data",					},				],			},			Networks: [{ Target: "dokploy-network" }],			Placement: {				Constraints: ["node.role==manager"],			},		},		Mode: {			Replicated: {				Replicas: 1,			},		},		...(process.env.NODE_ENV === "development" && {			EndpointSpec: {				Ports: [					{						TargetPort: 5432,						PublishedPort: 5432,						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("Postgres Started ✅");	} catch (_) {		try {			await docker.createService(settings);		} catch (error: any) {			if (error?.statusCode !== 409) {				throw error;			}			console.log("Postgres service already exists, continuing...");		}		console.log("Postgres Not Found: Starting ✅");	}};