25 lines
1.1 KiB
TypeScript
25 lines
1.1 KiB
TypeScript
import { docker, streamEvents } from '$lib/api/docker';
|
|
import { promises as fs } from 'fs';
|
|
// `HEALTHCHECK --timeout=10s --start-period=10s --interval=5s CMD curl -I -s -f http://localhost:${configuration.publish.port}${configuration.publish.path} || exit 1`,
|
|
const publishPython = (configuration) => {
|
|
return [
|
|
'FROM python:3-alpine',
|
|
'WORKDIR /usr/src/app',
|
|
'RUN pip install gunicorn',
|
|
`COPY ./${configuration.build.directory}/requirements.txt ./`,
|
|
`RUN pip install --no-cache-dir -r ./${configuration.build.directory}/requirements.txt`,
|
|
`COPY ./${configuration.build.directory}/ .`,
|
|
`EXPOSE ${configuration.publish.port}`,
|
|
`CMD gunicorn -w=4 ${configuration.build.command.python.module}:${configuration.build.command.python.instance}`
|
|
].join('\n');
|
|
};
|
|
|
|
export default async function (configuration) {
|
|
await fs.writeFile(`${configuration.general.workdir}/Dockerfile`, publishPython(configuration));
|
|
const stream = await docker.engine.buildImage(
|
|
{ src: ['.'], context: configuration.general.workdir },
|
|
{ t: `${configuration.build.container.name}:${configuration.build.container.tag}` }
|
|
);
|
|
await streamEvents(stream, configuration);
|
|
}
|