WIP
This commit is contained in:
		@@ -1,20 +1,15 @@
 | 
			
		||||
import * as db from '$lib/database';
 | 
			
		||||
import { getDomain } from '$lib/common';
 | 
			
		||||
import { getApplicationById, prisma, supportedServiceTypesAndVersions } from '$lib/database';
 | 
			
		||||
import { dockerInstance } from '$lib/docker';
 | 
			
		||||
import {
 | 
			
		||||
	checkContainer,
 | 
			
		||||
	checkProxyConfigurations,
 | 
			
		||||
	configureCoolifyProxyOn,
 | 
			
		||||
	configureProxyForApplication,
 | 
			
		||||
	configureSimpleServiceProxyOn,
 | 
			
		||||
	configureHAProxy,
 | 
			
		||||
	forceSSLOnApplication,
 | 
			
		||||
	reloadHaproxy,
 | 
			
		||||
	setWwwRedirection,
 | 
			
		||||
	startCoolifyProxy,
 | 
			
		||||
	startHttpProxy
 | 
			
		||||
} from '$lib/haproxy';
 | 
			
		||||
import * as db from '$lib/database';
 | 
			
		||||
// import { generateRemoteEngine } from '$lib/components/common';
 | 
			
		||||
 | 
			
		||||
export default async function () {
 | 
			
		||||
	try {
 | 
			
		||||
@@ -23,83 +18,55 @@ export default async function () {
 | 
			
		||||
		console.log(error);
 | 
			
		||||
	}
 | 
			
		||||
	try {
 | 
			
		||||
		// Check destination containers and configure proxy if needed
 | 
			
		||||
		const destinationDockers = await prisma.destinationDocker.findMany({});
 | 
			
		||||
		for (const destination of destinationDockers) {
 | 
			
		||||
			if (destination.isCoolifyProxyUsed) {
 | 
			
		||||
				// if (destination.remoteEngine) {
 | 
			
		||||
				// 	const engine = generateRemoteEngine(destination);
 | 
			
		||||
				// }
 | 
			
		||||
				const docker = dockerInstance({ destinationDocker: destination });
 | 
			
		||||
				const containers = await docker.engine.listContainers();
 | 
			
		||||
				const configurations = containers.filter(
 | 
			
		||||
					(container) => container.Labels['coolify.managed']
 | 
			
		||||
				);
 | 
			
		||||
				for (const configuration of configurations) {
 | 
			
		||||
					if (configuration.Labels['coolify.configuration']) {
 | 
			
		||||
						const parsedConfiguration = JSON.parse(
 | 
			
		||||
							Buffer.from(configuration.Labels['coolify.configuration'], 'base64').toString()
 | 
			
		||||
						);
 | 
			
		||||
						if (
 | 
			
		||||
							parsedConfiguration &&
 | 
			
		||||
							configuration.Labels['coolify.type'] === 'standalone-application'
 | 
			
		||||
						) {
 | 
			
		||||
							const { fqdn, applicationId, port, pullmergeRequestId } = parsedConfiguration;
 | 
			
		||||
							if (fqdn) {
 | 
			
		||||
								const found = await getApplicationById({ id: applicationId });
 | 
			
		||||
								if (found) {
 | 
			
		||||
									const domain = getDomain(fqdn);
 | 
			
		||||
									await configureProxyForApplication({
 | 
			
		||||
										domain,
 | 
			
		||||
										imageId: pullmergeRequestId
 | 
			
		||||
											? `${applicationId}-${pullmergeRequestId}`
 | 
			
		||||
											: applicationId,
 | 
			
		||||
										applicationId,
 | 
			
		||||
										port
 | 
			
		||||
									});
 | 
			
		||||
									const isHttps = fqdn.startsWith('https://');
 | 
			
		||||
									if (isHttps) await forceSSLOnApplication(domain);
 | 
			
		||||
									await setWwwRedirection(fqdn);
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				for (const container of containers) {
 | 
			
		||||
					const image = container.Image.split(':')[0];
 | 
			
		||||
					const found = supportedServiceTypesAndVersions.find((a) => a.baseImage === image);
 | 
			
		||||
					if (found) {
 | 
			
		||||
						const type = found.name;
 | 
			
		||||
						const mainPort = found.ports.main;
 | 
			
		||||
						const id = container.Names[0].replace('/', '');
 | 
			
		||||
						const service = await db.prisma.service.findUnique({
 | 
			
		||||
							where: { id },
 | 
			
		||||
							include: {
 | 
			
		||||
								destinationDocker: true,
 | 
			
		||||
								minio: true,
 | 
			
		||||
								plausibleAnalytics: true,
 | 
			
		||||
								vscodeserver: true,
 | 
			
		||||
								wordpress: true
 | 
			
		||||
							}
 | 
			
		||||
						});
 | 
			
		||||
						const { fqdn } = service;
 | 
			
		||||
						const domain = getDomain(fqdn);
 | 
			
		||||
						await configureSimpleServiceProxyOn({ id, domain, port: mainPort });
 | 
			
		||||
						const publicPort = service[type]?.publicPort;
 | 
			
		||||
						if (publicPort) {
 | 
			
		||||
							const containerFound = await checkContainer(
 | 
			
		||||
								destination.engine,
 | 
			
		||||
								`haproxy-for-${publicPort}`
 | 
			
		||||
							);
 | 
			
		||||
							if (!containerFound) {
 | 
			
		||||
								await startHttpProxy(destination, id, publicPort, 9000);
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
		const applications = await db.prisma.application.findMany({
 | 
			
		||||
			include: { destinationDocker: true }
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		for (const application of applications) {
 | 
			
		||||
			const {
 | 
			
		||||
				fqdn,
 | 
			
		||||
				id,
 | 
			
		||||
				port,
 | 
			
		||||
				destinationDocker: { engine }
 | 
			
		||||
			} = application;
 | 
			
		||||
			const containerRunning = await checkContainer(engine, id);
 | 
			
		||||
			await configureHAProxy(fqdn, id, port, containerRunning, engine);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		const services = await db.prisma.service.findMany({
 | 
			
		||||
			include: {
 | 
			
		||||
				destinationDocker: true,
 | 
			
		||||
				minio: true,
 | 
			
		||||
				plausibleAnalytics: true,
 | 
			
		||||
				vscodeserver: true,
 | 
			
		||||
				wordpress: true
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		for (const service of services) {
 | 
			
		||||
			const {
 | 
			
		||||
				fqdn,
 | 
			
		||||
				id,
 | 
			
		||||
				type,
 | 
			
		||||
				destinationDocker: { engine }
 | 
			
		||||
			} = service;
 | 
			
		||||
			const found = db.supportedServiceTypesAndVersions.find((a) => a.name === type);
 | 
			
		||||
			if (found) {
 | 
			
		||||
				const port = found.ports.main;
 | 
			
		||||
				const publicPort = service[type]?.publicPort;
 | 
			
		||||
				const containerRunning = await checkContainer(engine, id);
 | 
			
		||||
				await configureHAProxy(fqdn, id, port, containerRunning, engine);
 | 
			
		||||
				if (publicPort) {
 | 
			
		||||
					const containerFound = await checkContainer(
 | 
			
		||||
						service.destinationDocker.engine,
 | 
			
		||||
						`haproxy-for-${publicPort}`
 | 
			
		||||
					);
 | 
			
		||||
					if (!containerFound) {
 | 
			
		||||
						await startHttpProxy(service.destinationDocker, id, publicPort, 9000);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		const services = await prisma.service.findMany({});
 | 
			
		||||
		// Check Coolify FQDN and configure proxy if needed
 | 
			
		||||
		const { fqdn } = await db.listSettings();
 | 
			
		||||
		if (fqdn) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user