b4a418dded
- Truncate errors. - Better error tags, release version etc.
51 lines
2.4 KiB
TypeScript
51 lines
2.4 KiB
TypeScript
import { dev } from '$app/env';
|
|
import { forceSSLOffApplication, forceSSLOnApplication, getNextTransactionId } from '$lib/haproxy';
|
|
import { asyncExecShell, getEngine } from './common';
|
|
import * as db from '$lib/database';
|
|
import cuid from 'cuid';
|
|
|
|
export async function letsEncrypt({ domain, isCoolify = false, id = null }) {
|
|
try {
|
|
const randomCuid = cuid();
|
|
if (dev) {
|
|
return await forceSSLOnApplication({ domain });
|
|
} else {
|
|
if (isCoolify) {
|
|
await asyncExecShell(
|
|
`docker run --rm --name certbot-${randomCuid} -p 9080:9080 -v "coolify-letsencrypt:/etc/letsencrypt" certbot/certbot --logs-dir /etc/letsencrypt/logs certonly --standalone --preferred-challenges http --http-01-address 0.0.0.0 --http-01-port 9080 -d ${domain} --agree-tos --non-interactive --register-unsafely-without-email`
|
|
);
|
|
|
|
const { stderr } = await asyncExecShell(
|
|
`docker run --rm -v "coolify-letsencrypt:/etc/letsencrypt" -v "coolify-ssl-certs:/app/ssl" alpine:latest cat /etc/letsencrypt/live/${domain}/fullchain.pem /etc/letsencrypt/live/${domain}/privkey.pem > /app/ssl/${domain}.pem`
|
|
);
|
|
if (stderr) throw new Error(stderr);
|
|
return;
|
|
}
|
|
let data: any = await db.prisma.application.findUnique({
|
|
where: { id },
|
|
include: { destinationDocker: true }
|
|
});
|
|
if (!data) {
|
|
data = await db.prisma.service.findUnique({
|
|
where: { id },
|
|
include: { destinationDocker: true }
|
|
});
|
|
}
|
|
// Set SSL with Let's encrypt
|
|
if (data.destinationDockerId && data.destinationDocker) {
|
|
const host = getEngine(data.destinationDocker.engine);
|
|
await asyncExecShell(
|
|
`DOCKER_HOST=${host} docker run --rm --name certbot-${randomCuid} -p 9080:9080 -v "coolify-letsencrypt:/etc/letsencrypt" certbot/certbot --logs-dir /etc/letsencrypt/logs certonly --standalone --preferred-challenges http --http-01-address 0.0.0.0 --http-01-port 9080 -d ${domain} --agree-tos --non-interactive --register-unsafely-without-email`
|
|
);
|
|
const { stderr } = await asyncExecShell(
|
|
`DOCKER_HOST=${host} docker run --rm --name bash-${randomCuid} -v "coolify-letsencrypt:/etc/letsencrypt" -v "coolify-ssl-certs:/app/ssl" alpine:latest cat /etc/letsencrypt/live/${domain}/fullchain.pem /etc/letsencrypt/live/${domain}/privkey.pem > /app/ssl/${domain}.pem`
|
|
);
|
|
if (stderr) throw new Error(stderr);
|
|
await forceSSLOnApplication({ domain });
|
|
}
|
|
}
|
|
} catch (error) {
|
|
throw error;
|
|
}
|
|
}
|