add trilium-notes-service

This commit is contained in:
David Mydlarz
2022-09-08 17:32:11 +09:00
parent ab07adb14f
commit 1f40c2ccf8
8 changed files with 97 additions and 4 deletions

View File

@@ -20,7 +20,7 @@ export const includeServices: any = {
glitchTip: true,
searxng: true,
weblate: true,
taiga: true
taiga: true,
};
export async function configureServiceType({
id,
@@ -350,6 +350,13 @@ export async function configureServiceType({
}
}
});
} else if (type === 'trilium') {
await prisma.service.update({
where: { id },
data: {
type
}
});
} else {
await prisma.service.update({
where: { id },

View File

@@ -69,6 +69,10 @@ export async function startService(request: FastifyRequest<ServiceStartStop>) {
if (type === 'taiga') {
return await startTaigaService(request)
}
if (type === 'trilium') {
return await startTriliumService(request)
}
throw `Service type ${type} not supported.`
} catch (error) {
throw { status: 500, message: error?.message || error }
@@ -900,8 +904,8 @@ async function startMeilisearchService(request: FastifyRequest<ServiceStartStop>
const {
meiliSearch: { masterKey }
} = service;
const { type, version, destinationDockerId, destinationDocker, serviceSecret, exposePort, persistentStorage } =
service;
const { type, version, destinationDockerId, destinationDocker,
serviceSecret, exposePort, persistentStorage } = service;
const network = destinationDockerId && destinationDocker.network;
const port = getServiceMainPort('meilisearch');
@@ -2590,3 +2594,58 @@ async function startTaigaService(request: FastifyRequest<ServiceStartStop>) {
}
}
async function startTriliumService(request: FastifyRequest<ServiceStartStop>) {
try {
const { id } = request.params;
const teamId = request.user.teamId;
const service = await getServiceFromDB({ id, teamId });
const { type, version, destinationDockerId, destinationDocker, serviceSecret, exposePort, persistentStorage } =
service;
const network = destinationDockerId && destinationDocker.network;
const port = getServiceMainPort('trilium');
const { workdir } = await createDirectories({ repository: type, buildId: id });
const image = getServiceImage(type);
const config = {
trilium: {
image: `${image}:${version}`,
volumes: [`${id}-trilium:/home/node/trilium-data`],
environmentVariables: {}
}
};
if (serviceSecret.length > 0) {
serviceSecret.forEach((secret) => {
config.trilium.environmentVariables[secret.name] = secret.value;
});
}
const { volumeMounts } = persistentVolumes(id, persistentStorage, config)
const composeFile: ComposeFile = {
version: '3.8',
services: {
[id]: {
container_name: id,
image: config.trilium.image,
volumes: config.trilium.volumes,
environment: config.trilium.environmentVariables,
...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}),
labels: makeLabelForServices('trilium'),
...defaultComposeConfiguration(network),
}
},
networks: {
[network]: {
external: true
}
},
volumes: volumeMounts
};
const composeFileDestination = `${workdir}/docker-compose.yaml`;
await fs.writeFile(composeFileDestination, yaml.dump(composeFile));
await startServiceContainers(destinationDocker.id, composeFileDestination)
return {}
} catch ({ status, message }) {
return errorHandler({ status, message })
}
}

View File

@@ -212,4 +212,15 @@ export const supportedServiceTypesAndVersions = [
// main: 80
// }
// },
{
name: 'trilium',
fancyName: 'Trilium Notes',
baseImage: 'zadam/trilium',
images: [],
versions: ['latest'],
recommendedVersion: 'latest',
ports: {
main: 8080
}
},
];