2024-01-29 08:15:22 -06:00
|
|
|
exports.generateDockerFile = async (flecks) => {
|
2023-12-10 14:23:12 -06:00
|
|
|
const dockerfile = [
|
|
|
|
'FROM node:20',
|
|
|
|
'',
|
|
|
|
'RUN mkdir -p /var/www',
|
|
|
|
'WORKDIR /var/www',
|
|
|
|
'COPY package.json /var/www',
|
|
|
|
'COPY build /var/www/build',
|
|
|
|
'COPY dist /var/www/dist',
|
|
|
|
'',
|
|
|
|
'ENV DEBUG=*',
|
|
|
|
'ENV NODE_ENV=production',
|
|
|
|
'',
|
2024-01-20 05:18:18 -06:00
|
|
|
'CMD ["node", "./dist/server/index.js"]',
|
2023-12-10 14:23:12 -06:00
|
|
|
'',
|
|
|
|
'VOLUME /var/www/node_modules',
|
|
|
|
'',
|
|
|
|
].join('\n');
|
2024-01-29 08:15:22 -06:00
|
|
|
return flecks.invokeComposedAsync('@flecks/docker.Dockerfile', dockerfile);
|
2023-12-10 14:23:12 -06:00
|
|
|
};
|
|
|
|
|
2024-01-20 05:18:18 -06:00
|
|
|
exports.generateComposeConfig = async (flecks) => {
|
2023-12-10 14:23:12 -06:00
|
|
|
const id = flecks.get('@flecks/core.id');
|
|
|
|
const appServiceName = `${id}_app`;
|
|
|
|
const services = {
|
|
|
|
[appServiceName]: {
|
|
|
|
build: {
|
|
|
|
context: '..',
|
2024-01-20 05:18:18 -06:00
|
|
|
dockerfile: 'dist/server/Dockerfile',
|
2023-12-10 14:23:12 -06:00
|
|
|
},
|
|
|
|
environment: {
|
2024-01-04 16:11:48 -06:00
|
|
|
FLECKS_ENV__flecks_docker_server__enabled: 'false',
|
2023-12-10 14:23:12 -06:00
|
|
|
},
|
|
|
|
volumes: [
|
|
|
|
'../node_modules:/var/www/node_modules',
|
|
|
|
],
|
|
|
|
},
|
|
|
|
};
|
2024-01-29 08:15:22 -06:00
|
|
|
const containers = await flecks.invokeAsync('@flecks/docker.containers');
|
2023-12-10 14:23:12 -06:00
|
|
|
(
|
|
|
|
await Promise.all(
|
|
|
|
Object.entries(containers)
|
|
|
|
.map(async ([fleck, config]) => {
|
|
|
|
Object.entries(await config)
|
|
|
|
.forEach(([key, config]) => {
|
|
|
|
services[key] = {image: config.image, environment: {}, ...config.extra};
|
|
|
|
});
|
|
|
|
return [
|
2024-01-04 16:11:48 -06:00
|
|
|
`FLECKS_ENV__${flecks.constructor.environmentalize(fleck)}`,
|
2023-12-10 14:23:12 -06:00
|
|
|
config,
|
|
|
|
];
|
|
|
|
}),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
// Set environment.
|
|
|
|
.forEach(([prefix, config]) => {
|
|
|
|
Object.values(config)
|
|
|
|
.forEach((config) => {
|
|
|
|
Object.entries(config.environment || {})
|
|
|
|
.forEach(([configService, environment]) => {
|
|
|
|
Object.entries(environment || {})
|
|
|
|
.forEach(([key, value]) => {
|
|
|
|
const [realKey, realService] = 'app' === configService
|
2024-01-04 16:11:48 -06:00
|
|
|
? [`${prefix}__${key}`, appServiceName]
|
2023-12-10 14:23:12 -06:00
|
|
|
: [key, configService];
|
|
|
|
services[realService].environment[realKey] = value;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
const config = {version: '3', services};
|
2024-01-29 08:15:22 -06:00
|
|
|
await flecks.invokeSequentialAsync('@flecks/docker.docker-compose.yml', config);
|
2023-12-10 14:23:12 -06:00
|
|
|
return config;
|
|
|
|
};
|