v1.0.14 (#48)
# Features - Basic Python support # Fixes - Fix default start command
This commit is contained in:
@@ -29,9 +29,12 @@ export function setDefaultConfiguration(configuration) {
|
||||
configuration.build.pack === 'vuejs' ||
|
||||
configuration.build.pack === 'nuxtjs' ||
|
||||
configuration.build.pack === 'rust' ||
|
||||
configuration.build.pack === 'nextjs'
|
||||
configuration.build.pack === 'nextjs' ||
|
||||
configuration.build.pack === 'nestjs'
|
||||
) {
|
||||
configuration.publish.port = 3000;
|
||||
} else if (configuration.build.pack === 'python') {
|
||||
configuration.publish.port = 4000;
|
||||
} else {
|
||||
configuration.publish.port = 80;
|
||||
}
|
||||
@@ -48,6 +51,19 @@ export function setDefaultConfiguration(configuration) {
|
||||
if (!configuration.build.command.installation)
|
||||
configuration.build.command.installation = 'yarn install';
|
||||
}
|
||||
if (
|
||||
configuration.build.pack === 'nodejs' ||
|
||||
configuration.build.pack === 'vuejs' ||
|
||||
configuration.build.pack === 'nuxtjs' ||
|
||||
configuration.build.pack === 'nextjs' ||
|
||||
configuration.build.pack === 'nestjs'
|
||||
) {
|
||||
if (!configuration.build.command.start) configuration.build.command.start = 'yarn start'
|
||||
}
|
||||
if (configuration.build.pack === 'python') {
|
||||
if (!configuration.build.command.python.module) configuration.build.command.python.module = 'main'
|
||||
if (!configuration.build.command.python.instance) configuration.build.command.python.instance = 'app'
|
||||
}
|
||||
|
||||
configuration.build.container.baseSHA = crypto
|
||||
.createHash('sha256')
|
||||
@@ -103,9 +119,9 @@ export async function precheckDeployment({ services, configuration }) {
|
||||
// If only the configuration changed
|
||||
if (
|
||||
JSON.stringify(runningWithoutContainer.build) !==
|
||||
JSON.stringify(configurationWithoutContainer.build) ||
|
||||
JSON.stringify(configurationWithoutContainer.build) ||
|
||||
JSON.stringify(runningWithoutContainer.publish) !==
|
||||
JSON.stringify(configurationWithoutContainer.publish)
|
||||
JSON.stringify(configurationWithoutContainer.publish)
|
||||
)
|
||||
configChanged = true;
|
||||
// If only the image changed
|
||||
@@ -148,8 +164,7 @@ export async function updateServiceLabels(configuration) {
|
||||
await execShellAsync(
|
||||
`docker service update --label-add configuration='${JSON.stringify(
|
||||
Labels
|
||||
)}' --label-add com.docker.stack.image='${configuration.build.container.name}:${
|
||||
configuration.build.container.tag
|
||||
)}' --label-add com.docker.stack.image='${configuration.build.container.name}:${configuration.build.container.tag
|
||||
}' ${ID}`
|
||||
);
|
||||
}
|
||||
|
@@ -10,6 +10,7 @@ import nextjs from './nextjs';
|
||||
import nestjs from './nestjs';
|
||||
import gatsby from './gatsby';
|
||||
import docker from './docker';
|
||||
import python from './python';
|
||||
|
||||
export {
|
||||
vuejs,
|
||||
@@ -23,5 +24,6 @@ export {
|
||||
nextjs,
|
||||
nestjs,
|
||||
gatsby,
|
||||
docker
|
||||
docker,
|
||||
python
|
||||
};
|
||||
|
@@ -8,7 +8,7 @@ const publishPHPDocker = (configuration) => {
|
||||
'WORKDIR /usr/src/app',
|
||||
`COPY ./${configuration.build.directory} /var/www/html`,
|
||||
'EXPOSE 80',
|
||||
' CMD ["apache2-foreground"]'
|
||||
'CMD ["apache2-foreground"]'
|
||||
].join('\n');
|
||||
};
|
||||
|
||||
|
27
src/lib/api/applications/packs/python/index.ts
Normal file
27
src/lib/api/applications/packs/python/index.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
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);
|
||||
}
|
Reference in New Issue
Block a user