@scandipwa/magento-scripts 2.0.0-alpha.9 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commands/cli.js +18 -1
- package/lib/commands/logs.js +28 -2
- package/lib/commands/start.js +24 -3
- package/lib/commands/status.js +9 -1
- package/lib/config/config.js +20 -2
- package/lib/config/dependencies-for-platforms.js +1 -1
- package/lib/config/docker.js +94 -54
- package/lib/config/get-project-configuration.js +5 -0
- package/lib/config/index.js +10 -3
- package/lib/config/php/versions/php-7.2.js +1 -0
- package/lib/config/php/versions/php-7.3.js +1 -0
- package/lib/config/php/versions/php-7.4.js +1 -0
- package/lib/config/php/versions/php-8.1.js +1 -0
- package/lib/config/php-config.js +4 -3
- package/lib/config/port-config.js +3 -1
- package/lib/config/services/composer/versions/composer-1.js +13 -0
- package/lib/config/services/composer/versions/composer-2.js +8 -0
- package/lib/config/services/composer/versions/index.js +4 -0
- package/lib/config/services/maildev/index.js +7 -0
- package/lib/config/services/nginx/versions/index.js +3 -0
- package/lib/config/services/nginx/versions/nginx-1.18.js +11 -0
- package/lib/config/{ssl-terminator → services/ssl-terminator}/index.js +3 -0
- package/lib/config/templates/magentorc.template +12 -5
- package/lib/config/templates/nginx.fastcgi_params.template +29 -0
- package/lib/config/templates/php-debug.template.ini +31 -0
- package/lib/config/templates/php-fpm.template.conf +1 -2
- package/lib/config/templates/php.template.ini +5 -201
- package/lib/config/templates/ssl-terminator.template.conf +2 -0
- package/lib/config/templates/varnish.template.vcl +20 -13
- package/lib/config/varnish/varnish-6-0.js +4 -0
- package/lib/config/varnish/varnish-6-6.js +4 -0
- package/lib/config/varnish/varnish-7-0.js +4 -0
- package/lib/config/versions/magento-2.2.10.js +41 -0
- package/lib/config/versions/magento-2.3.0.js +8 -10
- package/lib/config/versions/magento-2.3.1.js +8 -10
- package/lib/config/versions/magento-2.3.2-p1.js +8 -10
- package/lib/config/versions/magento-2.3.2-p2.js +8 -10
- package/lib/config/versions/magento-2.3.2.js +8 -10
- package/lib/config/versions/magento-2.3.3-p1.js +8 -10
- package/lib/config/versions/magento-2.3.3.js +8 -10
- package/lib/config/versions/magento-2.3.4-p1.js +8 -10
- package/lib/config/versions/magento-2.3.4-p2.js +8 -10
- package/lib/config/versions/magento-2.3.4.js +8 -10
- package/lib/config/versions/magento-2.3.5-p1.js +8 -10
- package/lib/config/versions/magento-2.3.5-p2.js +8 -10
- package/lib/config/versions/magento-2.3.5.js +8 -10
- package/lib/config/versions/magento-2.3.6-p1.js +8 -10
- package/lib/config/versions/magento-2.3.6.js +8 -10
- package/lib/config/versions/magento-2.3.7-p1.js +8 -10
- package/lib/config/versions/magento-2.3.7-p2.js +8 -10
- package/lib/config/versions/magento-2.3.7-p3.js +8 -10
- package/lib/config/versions/magento-2.3.7-p4.js +8 -10
- package/lib/config/versions/magento-2.3.7.js +8 -10
- package/lib/config/versions/magento-2.4.0-p1.js +8 -10
- package/lib/config/versions/magento-2.4.0.js +8 -10
- package/lib/config/versions/magento-2.4.1-p1.js +8 -10
- package/lib/config/versions/magento-2.4.1.js +8 -10
- package/lib/config/versions/magento-2.4.2-p1.js +8 -10
- package/lib/config/versions/magento-2.4.2-p2.js +8 -10
- package/lib/config/versions/magento-2.4.2.js +8 -10
- package/lib/config/versions/magento-2.4.3-p1.js +8 -10
- package/lib/config/versions/magento-2.4.3-p2.js +8 -10
- package/lib/config/versions/magento-2.4.3-p3.js +8 -10
- package/lib/config/versions/magento-2.4.3.js +8 -10
- package/lib/config/versions/magento-2.4.4-p1.js +8 -10
- package/lib/config/versions/magento-2.4.4.js +8 -10
- package/lib/config/versions/magento-2.4.5.js +8 -10
- package/lib/tasks/cli/create-bashrc-config.js +4 -2
- package/lib/tasks/composer/local-auth-json.js +1 -1
- package/lib/tasks/database/connect-to-database.js +6 -3
- package/lib/tasks/database/create-magento-database.js +5 -2
- package/lib/tasks/database/create-magento-user.js +50 -0
- package/lib/tasks/database/default-magento-database.js +3 -0
- package/lib/tasks/database/default-magento-user.js +7 -0
- package/lib/tasks/database/import-dump-to-database.js +3 -2
- package/lib/tasks/docker/api.d.ts +25 -1
- package/lib/tasks/docker/api.js +31 -1
- package/lib/tasks/docker/containers/container-api.d.ts +17 -0
- package/lib/tasks/docker/containers/container-api.js +64 -9
- package/lib/tasks/docker/containers/tasks.js +44 -13
- package/lib/tasks/docker/convert-composer-home-to-composer-cache-volume.js +52 -0
- package/lib/tasks/docker/convert-mysql-to-mariadb.js +2 -2
- package/lib/tasks/docker/image/image-api.d.ts +44 -0
- package/lib/tasks/docker/image/image-api.js +30 -2
- package/lib/tasks/docker/index.js +6 -1
- package/lib/tasks/docker/project-image-builder.js +37 -14
- package/lib/tasks/docker/system/index.js +5 -0
- package/lib/tasks/docker/system/system-api.d.ts +71 -0
- package/lib/tasks/docker/system/system-api.js +29 -0
- package/lib/tasks/docker/volume/index.js +2 -1
- package/lib/tasks/docker/volume/tasks.js +67 -9
- package/lib/tasks/docker/volume/volume-api.d.ts +40 -0
- package/lib/tasks/docker/volume/volume-api.js +54 -1
- package/lib/tasks/execute.js +5 -2
- package/lib/tasks/file-system/create-nginx-config.js +3 -5
- package/lib/tasks/file-system/create-php-config.js +2 -23
- package/lib/tasks/file-system/create-php-debug-config.js +45 -0
- package/lib/tasks/file-system/create-php-fpm-config.js +2 -4
- package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +13 -3
- package/lib/tasks/file-system/create-phpstorm-config/index.js +2 -1
- package/lib/tasks/file-system/create-ssl-terminator-config.js +23 -8
- package/lib/tasks/file-system/create-varnish-config.js +4 -7
- package/lib/tasks/file-system/create-vscode-config.js +2 -1
- package/lib/tasks/file-system/index.js +3 -2
- package/lib/tasks/magento/setup-magento/configure-elasticsearch.js +2 -4
- package/lib/tasks/magento/setup-magento/flush-redis-config.js +3 -6
- package/lib/tasks/magento/setup-magento/index.js +2 -0
- package/lib/tasks/magento/setup-magento/install-magento.js +8 -13
- package/lib/tasks/magento/setup-magento/set-base-url.js +2 -1
- package/lib/tasks/magento/setup-magento/set-mail-config.js +22 -0
- package/lib/tasks/magento/setup-magento/varnish-config.js +4 -9
- package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +15 -16
- package/lib/tasks/php/php-container.js +1 -1
- package/lib/tasks/php/update-env-php.js +3 -5
- package/lib/tasks/{prefix → project-config}/index.js +6 -6
- package/lib/tasks/requirements/composer-credentials.js +7 -3
- package/lib/tasks/requirements/docker/context.js +88 -0
- package/lib/tasks/requirements/docker/index.js +111 -19
- package/lib/tasks/requirements/docker/install.js +21 -7
- package/lib/tasks/requirements/docker/permissions.js +2 -11
- package/lib/tasks/requirements/docker/running-status.js +94 -24
- package/lib/tasks/requirements/docker/version.js +1 -0
- package/lib/tasks/requirements/index.js +0 -2
- package/lib/tasks/requirements/php-version.js +4 -2
- package/lib/tasks/start.js +27 -8
- package/lib/tasks/status/index.js +60 -21
- package/lib/tasks/stop.js +2 -0
- package/lib/tasks/theme/retrieve-theme-data.js +12 -2
- package/lib/util/config-file-validator.js +17 -3
- package/lib/util/execute-in-container.js +7 -8
- package/lib/util/instance-metadata.js +14 -2
- package/lib/util/systemctl.js +62 -13
- package/package.json +2 -2
- package/typings/context.d.ts +11 -0
- package/typings/index.d.ts +46 -1
- package/lib/tasks/requirements/dependency/arch.js +0 -50
- package/lib/tasks/requirements/dependency/centos.js +0 -36
- package/lib/tasks/requirements/dependency/fedora.js +0 -36
- package/lib/tasks/requirements/dependency/index.js +0 -33
- package/lib/tasks/requirements/dependency/mac.js +0 -124
- package/lib/tasks/requirements/dependency/ubuntu.js +0 -83
package/lib/commands/cli.js
CHANGED
|
@@ -5,9 +5,9 @@ const getMagentoVersionConfig = require('../config/get-magento-version-config');
|
|
|
5
5
|
const logger = require('@scandipwa/scandipwa-dev-utils/logger');
|
|
6
6
|
const getProjectConfiguration = require('../config/get-project-configuration');
|
|
7
7
|
const checkConfigurationFile = require('../config/check-configuration-file');
|
|
8
|
-
// const { installComposer, installPrestissimo } = require('../tasks/composer');
|
|
9
8
|
const ConsoleBlock = require('../util/console-block');
|
|
10
9
|
const { checkComposerCredentials } = require('../tasks/requirements/composer-credentials');
|
|
10
|
+
const pkg = require('../../package.json');
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* @param {import('yargs')} yargs
|
|
@@ -42,10 +42,18 @@ module.exports = (yargs) => {
|
|
|
42
42
|
block
|
|
43
43
|
.addHeader('Create Magento App CLI')
|
|
44
44
|
.addEmptyLine()
|
|
45
|
+
.addLine(`Magento version: ${logger.style.link(ctx.magentoVersion)}`)
|
|
46
|
+
.addLine(`${logger.style.file('magento-scripts')} version: ${logger.style.link(pkg.version)}`)
|
|
47
|
+
.addEmptyLine()
|
|
45
48
|
.addLine(`Available aliases: ${logger.style.command('php')}, ${logger.style.command('magento')}, ${logger.style.command('composer')}`)
|
|
46
49
|
.addLine(`Available shortcuts: magento -> ${logger.style.command('m')}, composer -> ${logger.style.command('c')}`)
|
|
47
50
|
.addEmptyLine();
|
|
48
51
|
|
|
52
|
+
block
|
|
53
|
+
.addLine(`Execute into any service: ${logger.style.command('exec <service name>')}`)
|
|
54
|
+
.addLine(`Execute into PHP container: ${logger.style.command('exec php')}`)
|
|
55
|
+
.addEmptyLine();
|
|
56
|
+
|
|
49
57
|
if (ctx.config.overridenConfiguration.configuration.varnish.enabled) {
|
|
50
58
|
block.addLine(`Clear Varnish cache: ${logger.style.command('cvc')}`);
|
|
51
59
|
}
|
|
@@ -65,6 +73,15 @@ module.exports = (yargs) => {
|
|
|
65
73
|
.addLine(`Connect to MariaDB server as root: ${logger.style.command('mariadbroot')}`)
|
|
66
74
|
.addEmptyLine();
|
|
67
75
|
|
|
76
|
+
if (ctx.debug) {
|
|
77
|
+
block
|
|
78
|
+
.addLine('Debug PHP in CLI:')
|
|
79
|
+
.addLine('1. Start debugger in VSCode or PHPStorm')
|
|
80
|
+
.addLine(`2. Go to PHP container: ${ logger.style.command('exec php') }`)
|
|
81
|
+
.addLine(`3. Run CLI command with ${ logger.style.code('XDEBUG_SESSION=phpstorm') } environmental variable: ${ logger.style.command('XDEBUG_SESSION=phpstorm magento <command>') }`)
|
|
82
|
+
.addLine('4. Enjoy');
|
|
83
|
+
}
|
|
84
|
+
|
|
68
85
|
block.log();
|
|
69
86
|
|
|
70
87
|
return cli();
|
package/lib/commands/logs.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
const logger = require('@scandipwa/scandipwa-dev-utils/logger');
|
|
2
|
-
const {
|
|
2
|
+
const { Listr } = require('listr2');
|
|
3
|
+
const { checkRequirements } = require('../tasks/requirements');
|
|
4
|
+
const getMagentoVersionConfig = require('../config/get-magento-version-config');
|
|
3
5
|
const { execAsyncSpawn } = require('../util/exec-async-command');
|
|
6
|
+
const checkConfigurationFile = require('../config/check-configuration-file');
|
|
7
|
+
const getProjectConfiguration = require('../config/get-project-configuration');
|
|
8
|
+
const { getCachedPorts } = require('../config/get-port-config');
|
|
9
|
+
const dockerNetwork = require('../tasks/docker/network');
|
|
4
10
|
|
|
5
11
|
/**
|
|
6
12
|
* @param {import('yargs')} yargs
|
|
@@ -77,7 +83,27 @@ npm run logs re (will match redis)`);
|
|
|
77
83
|
);
|
|
78
84
|
},
|
|
79
85
|
async (argv) => {
|
|
80
|
-
const
|
|
86
|
+
const tasks = new Listr([
|
|
87
|
+
checkRequirements(),
|
|
88
|
+
getMagentoVersionConfig(),
|
|
89
|
+
checkConfigurationFile(),
|
|
90
|
+
getProjectConfiguration(),
|
|
91
|
+
getCachedPorts(),
|
|
92
|
+
dockerNetwork.tasks.createNetwork()
|
|
93
|
+
], {
|
|
94
|
+
concurrent: false,
|
|
95
|
+
exitOnError: true,
|
|
96
|
+
ctx: { throwMagentoVersionMissing: true },
|
|
97
|
+
rendererOptions: { collapse: false, clearOutput: true }
|
|
98
|
+
});
|
|
99
|
+
let ctx;
|
|
100
|
+
try {
|
|
101
|
+
ctx = await tasks.run();
|
|
102
|
+
} catch (e) {
|
|
103
|
+
logger.error(e.message || e);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
const containers = ctx.config.docker.getContainers();
|
|
81
107
|
const services = Object.keys(containers);
|
|
82
108
|
|
|
83
109
|
if (services.includes(argv.scope) || services.some((service) => service.includes(argv.scope))) {
|
package/lib/commands/start.js
CHANGED
|
@@ -22,6 +22,7 @@ const reportErrors = async (errors) => {
|
|
|
22
22
|
const path = (error.path && ` Error path: ${error.path} `) || '';
|
|
23
23
|
if (error instanceof UnknownError || error instanceof KnownError) {
|
|
24
24
|
logger.error(error.message);
|
|
25
|
+
logger.error(error.stack);
|
|
25
26
|
if (error instanceof UnknownError) {
|
|
26
27
|
await googleAnalytics.trackError(`Unknown Error:${path}${error.stack}`);
|
|
27
28
|
} else {
|
|
@@ -29,9 +30,11 @@ const reportErrors = async (errors) => {
|
|
|
29
30
|
}
|
|
30
31
|
} else if (error instanceof Error) {
|
|
31
32
|
logger.error(error.message);
|
|
33
|
+
logger.error(error.stack);
|
|
32
34
|
await googleAnalytics.trackError(`Regular Error:${path}${error.message}`);
|
|
33
35
|
} else {
|
|
34
36
|
logger.error(error);
|
|
37
|
+
logger.error(error.stack);
|
|
35
38
|
await googleAnalytics.trackError(`Non Error:${path}${error}`); // track non-errors throws
|
|
36
39
|
}
|
|
37
40
|
}
|
|
@@ -83,6 +86,16 @@ module.exports = (yargs) => {
|
|
|
83
86
|
describe: 'Enable verbose logging',
|
|
84
87
|
type: 'boolean',
|
|
85
88
|
default: false
|
|
89
|
+
})
|
|
90
|
+
.option('pull-images', {
|
|
91
|
+
describe: 'Pull Docker images',
|
|
92
|
+
type: 'boolean',
|
|
93
|
+
default: false
|
|
94
|
+
})
|
|
95
|
+
.option('reset-global-config', {
|
|
96
|
+
describe: 'Reset global magento-scripts configuration',
|
|
97
|
+
type: 'boolean',
|
|
98
|
+
default: false
|
|
86
99
|
}),
|
|
87
100
|
async (args = {}) => {
|
|
88
101
|
/**
|
|
@@ -137,6 +150,13 @@ module.exports = (yargs) => {
|
|
|
137
150
|
block.addLine(` ${title}: ${text}`);
|
|
138
151
|
});
|
|
139
152
|
|
|
153
|
+
block.addEmptyLine();
|
|
154
|
+
|
|
155
|
+
block.addLine(logger.style.misc('MailDev'));
|
|
156
|
+
instanceMetadata.maildev.forEach(({ title, text }) => {
|
|
157
|
+
block.addLine(` ${title}: ${text}`);
|
|
158
|
+
});
|
|
159
|
+
|
|
140
160
|
const themes = await getCSAThemes();
|
|
141
161
|
if (themes.length > 0) {
|
|
142
162
|
const theme = themes[0];
|
|
@@ -170,10 +190,11 @@ module.exports = (yargs) => {
|
|
|
170
190
|
);
|
|
171
191
|
logger.log('');
|
|
172
192
|
|
|
173
|
-
if (
|
|
174
|
-
logger.warn('
|
|
193
|
+
if (tasks.err && tasks.err.length > 0) {
|
|
194
|
+
logger.warn('During the start, we encountered some errors that have not impacted the start-up process!');
|
|
195
|
+
logger.log('');
|
|
175
196
|
for (const err of tasks.err) {
|
|
176
|
-
logger.error(
|
|
197
|
+
logger.error(`Error path: ${err.path}\nError message: ${err.message}\n\nError stack: ${err.stack}`);
|
|
177
198
|
}
|
|
178
199
|
}
|
|
179
200
|
|
package/lib/commands/status.js
CHANGED
|
@@ -9,6 +9,7 @@ const { statusContainers } = require('../tasks/docker/containers');
|
|
|
9
9
|
const getProjectConfiguration = require('../config/get-project-configuration');
|
|
10
10
|
const checkConfigurationFile = require('../config/check-configuration-file');
|
|
11
11
|
const checkPHPVersion = require('../tasks/requirements/php-version');
|
|
12
|
+
const { getComposerVersionTask } = require('../tasks/composer');
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* @param {import('yargs')} yargs
|
|
@@ -21,7 +22,14 @@ module.exports = (yargs) => {
|
|
|
21
22
|
checkConfigurationFile(),
|
|
22
23
|
getProjectConfiguration(),
|
|
23
24
|
getCachedPorts(),
|
|
24
|
-
|
|
25
|
+
{
|
|
26
|
+
task: (ctx, task) => task.newListr([
|
|
27
|
+
checkPHPVersion(),
|
|
28
|
+
getComposerVersionTask()
|
|
29
|
+
], {
|
|
30
|
+
concurrent: true
|
|
31
|
+
})
|
|
32
|
+
},
|
|
25
33
|
statusContainers()
|
|
26
34
|
], {
|
|
27
35
|
concurrent: false,
|
package/lib/config/config.js
CHANGED
|
@@ -2,6 +2,16 @@ const Conf = require('conf');
|
|
|
2
2
|
|
|
3
3
|
const pkg = require('../../package.json');
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @typedef ProjectConfig
|
|
7
|
+
* @prop {String} [createdAt]
|
|
8
|
+
* @prop {String} [prefix]
|
|
9
|
+
* @prop {Boolean} debug
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @type {import('conf').default<Record<string, ProjectConfig>>}
|
|
14
|
+
*/
|
|
5
15
|
const projectsConfig = new Conf({
|
|
6
16
|
configName: 'projects',
|
|
7
17
|
projectName: 'create-magento-app',
|
|
@@ -10,6 +20,12 @@ const projectsConfig = new Conf({
|
|
|
10
20
|
});
|
|
11
21
|
const projectKey = process.cwd();
|
|
12
22
|
|
|
23
|
+
const setProjectConfig = (key, value) => {
|
|
24
|
+
projectsConfig.set(`${projectKey}.${key}`, value);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const getProjectConfig = () => projectsConfig.get(projectKey);
|
|
28
|
+
|
|
13
29
|
const getProjectsFromProjectKeys = (path, project) => {
|
|
14
30
|
if (project.createdAt) {
|
|
15
31
|
return { [path]: project };
|
|
@@ -21,7 +37,7 @@ const getProjectsFromProjectKeys = (path, project) => {
|
|
|
21
37
|
};
|
|
22
38
|
/**
|
|
23
39
|
*
|
|
24
|
-
* @returns {Record<string,
|
|
40
|
+
* @returns {Record<string, ProjectConfig>}
|
|
25
41
|
*/
|
|
26
42
|
const getProjects = () => {
|
|
27
43
|
const projects = {};
|
|
@@ -45,5 +61,7 @@ const getProjects = () => {
|
|
|
45
61
|
module.exports = {
|
|
46
62
|
projectsConfig,
|
|
47
63
|
projectKey,
|
|
48
|
-
getProjects
|
|
64
|
+
getProjects,
|
|
65
|
+
setProjectConfig,
|
|
66
|
+
getProjectConfig
|
|
49
67
|
};
|
package/lib/config/docker.js
CHANGED
|
@@ -6,6 +6,8 @@ const { isIpAddress } = require('../util/ip');
|
|
|
6
6
|
const systeminformation = require('systeminformation');
|
|
7
7
|
const { deepmerge } = require('../util/deepmerge');
|
|
8
8
|
const defaultEsEnv = require('./services/elasticsearch/default-es-env');
|
|
9
|
+
const logger = require('@scandipwa/scandipwa-dev-utils/logger');
|
|
10
|
+
const defaultMagentoUser = require('../tasks/database/default-magento-user');
|
|
9
11
|
|
|
10
12
|
/**
|
|
11
13
|
*
|
|
@@ -21,10 +23,11 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
21
23
|
redis,
|
|
22
24
|
elasticsearch,
|
|
23
25
|
mariadb,
|
|
24
|
-
varnish
|
|
26
|
+
varnish,
|
|
27
|
+
maildev
|
|
25
28
|
} = configuration;
|
|
26
29
|
|
|
27
|
-
const php = getPhpConfig(
|
|
30
|
+
const php = getPhpConfig(overridenConfiguration, baseConfig);
|
|
28
31
|
const {
|
|
29
32
|
prefix,
|
|
30
33
|
magentoDir,
|
|
@@ -48,56 +51,65 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
48
51
|
elasticsearch: {
|
|
49
52
|
name: `${ prefix }_elasticsearch-data`
|
|
50
53
|
},
|
|
51
|
-
|
|
52
|
-
name: '
|
|
54
|
+
composer_cache: {
|
|
55
|
+
name: 'composer_cache-data',
|
|
56
|
+
opts: {
|
|
57
|
+
mode: 'z'
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
maildev: {
|
|
61
|
+
name: `${ prefix }_maildev-data`
|
|
53
62
|
}
|
|
54
63
|
};
|
|
55
64
|
|
|
56
|
-
const
|
|
57
|
-
const { isWsl } = ctx;
|
|
58
|
-
const isNotNativeLinux = (!isLinux || isWsl);
|
|
65
|
+
const { isDockerDesktop } = ctx;
|
|
59
66
|
|
|
60
|
-
if (
|
|
67
|
+
if (isDockerDesktop) {
|
|
61
68
|
/**
|
|
62
|
-
* When CMA is running
|
|
63
|
-
* we need
|
|
69
|
+
* When CMA is running with Docker Desktop,
|
|
70
|
+
* we need create named volumes to avoid performance penalty
|
|
64
71
|
*/
|
|
65
72
|
volumes.php = {
|
|
66
73
|
name: `${ prefix }_project-data`,
|
|
74
|
+
driver: 'local',
|
|
67
75
|
opt: {
|
|
68
|
-
type: '
|
|
76
|
+
type: 'none',
|
|
69
77
|
device: path.join(magentoDir),
|
|
70
78
|
o: 'bind'
|
|
71
79
|
}
|
|
72
80
|
};
|
|
73
81
|
volumes.nginx = {
|
|
74
82
|
name: `${ prefix }_nginx-data`,
|
|
83
|
+
driver: 'local',
|
|
75
84
|
opt: {
|
|
76
|
-
type: '
|
|
85
|
+
type: 'none',
|
|
77
86
|
device: path.join(cacheDir, 'nginx', 'conf.d'),
|
|
78
87
|
o: 'bind'
|
|
79
88
|
}
|
|
80
89
|
};
|
|
81
90
|
volumes.appPub = {
|
|
82
91
|
name: `${ prefix }_pub-data`,
|
|
92
|
+
driver: 'local',
|
|
83
93
|
opt: {
|
|
84
|
-
type: '
|
|
94
|
+
type: 'none',
|
|
85
95
|
device: path.join(magentoDir, 'pub'),
|
|
86
96
|
o: 'bind'
|
|
87
97
|
}
|
|
88
98
|
};
|
|
89
99
|
volumes.appSetup = {
|
|
90
100
|
name: `${ prefix }_setup-data`,
|
|
101
|
+
driver: 'local',
|
|
91
102
|
opt: {
|
|
92
|
-
type: '
|
|
103
|
+
type: 'none',
|
|
93
104
|
device: path.join(magentoDir, 'setup'),
|
|
94
105
|
o: 'bind'
|
|
95
106
|
}
|
|
96
107
|
};
|
|
97
108
|
volumes.sslTerminator = {
|
|
98
109
|
name: `${ prefix }_ssl-terminator-data`,
|
|
110
|
+
driver: 'local',
|
|
99
111
|
opt: {
|
|
100
|
-
type: '
|
|
112
|
+
type: 'none',
|
|
101
113
|
device: path.join(cacheDir, 'ssl-terminator', 'conf.d'),
|
|
102
114
|
o: 'bind'
|
|
103
115
|
}
|
|
@@ -106,8 +118,9 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
106
118
|
if (varnish.enabled) {
|
|
107
119
|
volumes.varnish = {
|
|
108
120
|
name: `${ prefix }_varnish-data`,
|
|
121
|
+
driver: 'local',
|
|
109
122
|
opt: {
|
|
110
|
-
type: '
|
|
123
|
+
type: 'none',
|
|
111
124
|
device: path.join(cacheDir, 'varnish'),
|
|
112
125
|
o: 'bind'
|
|
113
126
|
}
|
|
@@ -122,24 +135,23 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
122
135
|
const dockerConfig = {
|
|
123
136
|
php: {
|
|
124
137
|
_: 'PHP',
|
|
125
|
-
ports:
|
|
138
|
+
ports: isDockerDesktop ? [
|
|
126
139
|
`${ isIpAddress(host) ? host : '127.0.0.1' }:${ ports.fpm }:9000`
|
|
127
140
|
] : [],
|
|
128
141
|
forwardedPorts: [
|
|
129
|
-
|
|
142
|
+
isDockerDesktop
|
|
130
143
|
? `127.0.0.1:${ ports.fpm }:9000`
|
|
131
144
|
: `127.0.0.1:${ ports.fpm }`
|
|
132
145
|
],
|
|
133
|
-
network:
|
|
146
|
+
network: isDockerDesktop ? network.name : 'host',
|
|
134
147
|
mountVolumes: [
|
|
135
|
-
`${
|
|
136
|
-
`${ volumes.
|
|
148
|
+
`${ !isDockerDesktop ? magentoDir : volumes.php.name }:${containerMagentoDir}`,
|
|
149
|
+
`${ volumes.composer_cache.name }:/composer/home/cache`,
|
|
137
150
|
`${ php.iniPath }:/usr/local/etc/php/php.ini`,
|
|
138
151
|
`${ php.fpmConfPath }:/usr/local/etc/php-fpm.d/zz-docker.conf`
|
|
139
|
-
],
|
|
152
|
+
].concat(ctx.debug ? [`${ php.debugIniPath }:/usr/local/etc/php/conf.d/00-xdebug.ini`] : []),
|
|
140
153
|
env: {
|
|
141
|
-
COMPOSER_AUTH: JSON.stringify(JSON.parse(process.env.COMPOSER_AUTH), null, 0) || ''
|
|
142
|
-
COMPOSER_HOME: '/composer/home'
|
|
154
|
+
COMPOSER_AUTH: JSON.stringify(JSON.parse(process.env.COMPOSER_AUTH), null, 0) || ''
|
|
143
155
|
},
|
|
144
156
|
restart: 'on-failure:5',
|
|
145
157
|
image: `local-cma-project:${ prefix }`,
|
|
@@ -150,15 +162,15 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
150
162
|
],
|
|
151
163
|
name: `${ prefix }_php`,
|
|
152
164
|
connectCommand: ['/bin/sh'],
|
|
153
|
-
user:
|
|
165
|
+
user: ((ctx.platform === 'linux' && isDockerDesktop) || !isDockerDesktop) ? `${os.userInfo().uid}:${os.userInfo().gid}` : ''
|
|
154
166
|
},
|
|
155
167
|
sslTerminator: {
|
|
156
168
|
_: 'SSL Terminator (Nginx)',
|
|
157
|
-
ports:
|
|
169
|
+
ports: isDockerDesktop ? [
|
|
158
170
|
`${ isIpAddress(host) ? host : '127.0.0.1' }:${ ports.sslTerminator }:80`
|
|
159
171
|
] : [],
|
|
160
172
|
forwardedPorts: [
|
|
161
|
-
|
|
173
|
+
isDockerDesktop
|
|
162
174
|
? `127.0.0.1:${ ports.sslTerminator }:80`
|
|
163
175
|
: `127.0.0.1:${ ports.sslTerminator }`
|
|
164
176
|
],
|
|
@@ -169,21 +181,22 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
169
181
|
* Mount volumes directly on linux
|
|
170
182
|
*/
|
|
171
183
|
mountVolumes: [
|
|
172
|
-
`${
|
|
184
|
+
`${ !isDockerDesktop ? path.join(cacheDir, 'ssl-terminator', 'conf.d') : volumes.sslTerminator.name }:/etc/nginx/conf.d`,
|
|
185
|
+
`${ path.join(cacheDir, 'ssl-terminator', 'fastcgi_params') }:/etc/nginx/fastcgi_params`
|
|
173
186
|
],
|
|
174
187
|
restart: 'on-failure:5',
|
|
175
|
-
network:
|
|
188
|
+
network: isDockerDesktop ? network.name : 'host',
|
|
176
189
|
image: `${ nginx.version ? `nginx:${ nginx.version }` : nginx.image }`,
|
|
177
190
|
name: `${ prefix }_ssl-terminator`,
|
|
178
191
|
command: "nginx -g 'daemon off;'"
|
|
179
192
|
},
|
|
180
193
|
nginx: {
|
|
181
194
|
_: 'Nginx',
|
|
182
|
-
ports:
|
|
195
|
+
ports: isDockerDesktop ? [
|
|
183
196
|
`${ isIpAddress(host) ? host : '127.0.0.1' }:${ ports.app }:80`
|
|
184
197
|
] : [],
|
|
185
198
|
forwardedPorts: [
|
|
186
|
-
|
|
199
|
+
isDockerDesktop
|
|
187
200
|
? `127.0.0.1:${ ports.app }:80`
|
|
188
201
|
: `127.0.0.1:${ ports.app }`
|
|
189
202
|
],
|
|
@@ -193,18 +206,19 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
193
206
|
/**
|
|
194
207
|
* Mount volumes directly on linux
|
|
195
208
|
*/
|
|
196
|
-
mountVolumes:
|
|
209
|
+
mountVolumes: !isDockerDesktop ? [
|
|
197
210
|
`${ cacheDir }/nginx/conf.d:/etc/nginx/conf.d`,
|
|
198
211
|
`${ path.join(magentoDir, 'pub') }:${path.join(containerMagentoDir, 'pub')}`,
|
|
199
|
-
`${ path.join(magentoDir, 'setup') }:${path.join(containerMagentoDir, 'setup')}
|
|
212
|
+
`${ path.join(magentoDir, 'setup') }:${path.join(containerMagentoDir, 'setup')}`,
|
|
213
|
+
`${ path.join(cacheDir, 'ssl-terminator', 'fastcgi_params') }:/etc/nginx/fastcgi_params`
|
|
200
214
|
] : [
|
|
201
215
|
`${ volumes.nginx.name }:/etc/nginx/conf.d`,
|
|
202
216
|
`${ volumes.appPub.name }:${path.join(containerMagentoDir, 'pub')}`,
|
|
203
|
-
`${ volumes.appSetup.name }:${path.join(containerMagentoDir, 'setup')}
|
|
217
|
+
`${ volumes.appSetup.name }:${path.join(containerMagentoDir, 'setup')}`,
|
|
218
|
+
`${ path.join(cacheDir, 'ssl-terminator', 'fastcgi_params') }:/etc/nginx/fastcgi_params`
|
|
204
219
|
],
|
|
205
220
|
restart: 'on-failure:5',
|
|
206
|
-
|
|
207
|
-
network: isNotNativeLinux ? network.name : 'host',
|
|
221
|
+
network: isDockerDesktop ? network.name : 'host',
|
|
208
222
|
image: `${ nginx.version ? `nginx:${ nginx.version }` : nginx.image }`,
|
|
209
223
|
name: `${ prefix }_nginx`,
|
|
210
224
|
command: "nginx -g 'daemon off;'"
|
|
@@ -217,7 +231,6 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
217
231
|
ports: [`127.0.0.1:${ ports.redis }:6379`],
|
|
218
232
|
forwardedPorts: [`127.0.0.1:${ ports.redis }:6379`],
|
|
219
233
|
mounts: [`source=${ volumes.redis.name },target=/data`],
|
|
220
|
-
// TODO: use connect instead
|
|
221
234
|
network: network.name,
|
|
222
235
|
image: `${ redis.version ? `redis:${ redis.version }` : redis.image }`,
|
|
223
236
|
name: `${ prefix }_redis`,
|
|
@@ -235,22 +248,18 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
235
248
|
`${ path.join(baseConfig.cacheDir, 'mariadb.cnf') }:/etc/mysql/my.cnf`
|
|
236
249
|
],
|
|
237
250
|
env: {
|
|
238
|
-
|
|
239
|
-
MARIADB_ROOT_PASSWORD: 'scandipwa',
|
|
240
|
-
MARIADB_USER: 'magento',
|
|
241
|
-
MARIADB_PASSWORD: 'magento',
|
|
242
|
-
MARIADB_DATABASE: 'magento'
|
|
251
|
+
MARIADB_ROOT_PASSWORD: 'scandipwa'
|
|
243
252
|
},
|
|
244
|
-
command:
|
|
245
|
-
'--log_bin_trust_function_creators=1'
|
|
246
|
-
]
|
|
247
|
-
.join(' '),
|
|
253
|
+
command: '--log_bin_trust_function_creators=1',
|
|
248
254
|
securityOptions: [
|
|
249
255
|
'seccomp=unconfined'
|
|
250
256
|
],
|
|
251
257
|
network: network.name,
|
|
252
258
|
image: `${ mariadb.version ? `mariadb:${ mariadb.version }` : mariadb.image }`,
|
|
253
|
-
name: `${ prefix }_mariadb
|
|
259
|
+
name: `${ prefix }_mariadb`,
|
|
260
|
+
description: `To connect to MariaDB you can use the following users:
|
|
261
|
+
- User ${ logger.style.command('root') } with password ${ logger.style.command('scandipwa') }
|
|
262
|
+
- User ${ logger.style.command(defaultMagentoUser.user) } with password ${ logger.style.command(defaultMagentoUser.password) }`
|
|
254
263
|
},
|
|
255
264
|
elasticsearch: {
|
|
256
265
|
_: 'ElasticSearch',
|
|
@@ -269,10 +278,40 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
269
278
|
network: network.name,
|
|
270
279
|
image: `${ elasticsearch.version ? `elasticsearch:${ elasticsearch.version }` : elasticsearch.image }`,
|
|
271
280
|
name: `${ prefix }_elasticsearch`
|
|
281
|
+
},
|
|
282
|
+
maildev: {
|
|
283
|
+
_: 'MailDev',
|
|
284
|
+
ports: isDockerDesktop ? [
|
|
285
|
+
`127.0.0.1:${ ports.maildevWeb }:1080`,
|
|
286
|
+
`127.0.0.1:${ ports.maildevSMTP }:1025`
|
|
287
|
+
] : [],
|
|
288
|
+
forwardedPorts: isDockerDesktop ? [
|
|
289
|
+
`127.0.0.1:${ ports.maildevWeb }:1080`,
|
|
290
|
+
`127.0.0.1:${ ports.maildevSMTP }:1025`
|
|
291
|
+
] : [
|
|
292
|
+
`127.0.0.1:${ ports.maildevWeb }`,
|
|
293
|
+
`127.0.0.1:${ ports.maildevSMTP }`
|
|
294
|
+
],
|
|
295
|
+
mountVolumes: [
|
|
296
|
+
`${ volumes.maildev.name }:/tmp/maildev`
|
|
297
|
+
],
|
|
298
|
+
env: {
|
|
299
|
+
MAILDEV_SMTP_PORT: isDockerDesktop ? '1025' : ports.maildevSMTP,
|
|
300
|
+
MAILDEV_WEB_PORT: isDockerDesktop ? '1080' : ports.maildevWeb,
|
|
301
|
+
MAILDEV_MAIL_DIRECTORY: '/tmp/maildev'
|
|
302
|
+
},
|
|
303
|
+
name: `${ prefix }_maildev`,
|
|
304
|
+
network: isDockerDesktop ? network.name : 'host',
|
|
305
|
+
image: maildev.image,
|
|
306
|
+
user: !isDockerDesktop ? 'root:root' : '',
|
|
307
|
+
connectCommand: ['/bin/sh'],
|
|
308
|
+
healthCheck: {
|
|
309
|
+
cmd: `wget -O - http://127.0.0.1:${ isDockerDesktop ? '1080' : ports.maildevWeb }/healthz || exit 1`
|
|
310
|
+
}
|
|
272
311
|
}
|
|
273
312
|
};
|
|
274
313
|
|
|
275
|
-
if (ssl.enabled) {
|
|
314
|
+
if (ssl.enabled && isDockerDesktop) {
|
|
276
315
|
dockerConfig.sslTerminator.ports.push(
|
|
277
316
|
`${isIpAddress(host) ? host : '127.0.0.1'}:443:443`
|
|
278
317
|
);
|
|
@@ -284,13 +323,13 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
284
323
|
image: `${ varnish.version ? `varnish:${ varnish.version }` : varnish.image }`,
|
|
285
324
|
name: `${ prefix }_varnish`,
|
|
286
325
|
mountVolumes: [
|
|
287
|
-
`${
|
|
326
|
+
`${ !isDockerDesktop ? path.join(cacheDir, 'varnish') : volumes.varnish.name }:/etc/varnish`
|
|
288
327
|
],
|
|
289
|
-
ports:
|
|
328
|
+
ports: isDockerDesktop ? [
|
|
290
329
|
`${ isIpAddress(host) ? host : '127.0.0.1' }:${ ports.varnish }:80`
|
|
291
330
|
] : [],
|
|
292
331
|
forwardedPorts: [
|
|
293
|
-
|
|
332
|
+
isDockerDesktop
|
|
294
333
|
? `127.0.0.1:${ ports.varnish }:80`
|
|
295
334
|
: `127.0.0.1:${ ports.varnish }`
|
|
296
335
|
],
|
|
@@ -298,12 +337,13 @@ module.exports = async (ctx, overridenConfiguration, baseConfig) => {
|
|
|
298
337
|
VARNISH_SIZE: '2G'
|
|
299
338
|
},
|
|
300
339
|
restart: 'on-failure:30',
|
|
301
|
-
network:
|
|
340
|
+
network: isDockerDesktop ? network.name : 'host',
|
|
302
341
|
// eslint-disable-next-line max-len
|
|
303
|
-
command: `/bin/bash -c "varnishd -a :${
|
|
342
|
+
command: `/bin/bash -c "varnishd -a :${ isDockerDesktop ? 80 : ports.varnish } -t 600 -f /etc/varnish/default.vcl -s Cache=malloc,2048m -s Transient=malloc,512m -p http_resp_hdr_len=70000 -p http_resp_size=100000 && varnishlog"`,
|
|
304
343
|
tmpfs: [
|
|
305
344
|
'/var/lib/varnish:exec'
|
|
306
|
-
]
|
|
345
|
+
],
|
|
346
|
+
description: `Varnish HealthCheck status: ${ logger.style.command(varnish.healthCheck ? 'enabled' : 'disabled') }`
|
|
307
347
|
};
|
|
308
348
|
}
|
|
309
349
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const { getProjectConfig } = require('./config');
|
|
1
2
|
const { getConfigFromMagentoVersion } = require('./index');
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -8,6 +9,10 @@ const getProjectConfiguration = () => ({
|
|
|
8
9
|
task: async (ctx) => {
|
|
9
10
|
const { magentoVersion } = ctx;
|
|
10
11
|
|
|
12
|
+
if (typeof ctx.debug !== 'boolean') {
|
|
13
|
+
ctx.debug = getProjectConfig().debug;
|
|
14
|
+
}
|
|
15
|
+
|
|
11
16
|
ctx.config = await getConfigFromMagentoVersion(ctx, {
|
|
12
17
|
magentoVersion
|
|
13
18
|
});
|
package/lib/config/index.js
CHANGED
|
@@ -9,6 +9,7 @@ const { getMagentoConfig } = require('./magento-config');
|
|
|
9
9
|
const resolveConfigurationWithOverrides = require('../util/resolve-configuration-with-overrides');
|
|
10
10
|
const { getPrefix, folderName } = require('../util/prefix');
|
|
11
11
|
const UnknownError = require('../errors/unknown-error');
|
|
12
|
+
const { getProjectConfig } = require('./config');
|
|
12
13
|
|
|
13
14
|
const platforms = ['linux', 'darwin'];
|
|
14
15
|
const darwinMinimalVersion = '10.5';
|
|
@@ -33,7 +34,11 @@ const magento = {
|
|
|
33
34
|
|
|
34
35
|
module.exports = {
|
|
35
36
|
/**
|
|
36
|
-
* @param {
|
|
37
|
+
* @param {import('../../typings/context')} ctx
|
|
38
|
+
* @param {Object} param1
|
|
39
|
+
* @param {String} [param1.magentoVersion]
|
|
40
|
+
* @param {String} [param1.projectPath]
|
|
41
|
+
* @param {String} [param1.prefix]
|
|
37
42
|
*/
|
|
38
43
|
async getConfigFromMagentoVersion(ctx, {
|
|
39
44
|
magentoVersion,
|
|
@@ -45,6 +50,7 @@ module.exports = {
|
|
|
45
50
|
if (!configurations[magentoVersion]) {
|
|
46
51
|
throw new UnknownError(`No config found for magento version ${magentoVersion}`);
|
|
47
52
|
}
|
|
53
|
+
const projectConfig = getProjectConfig();
|
|
48
54
|
|
|
49
55
|
const {
|
|
50
56
|
overridenConfiguration,
|
|
@@ -56,13 +62,14 @@ module.exports = {
|
|
|
56
62
|
);
|
|
57
63
|
|
|
58
64
|
return {
|
|
59
|
-
php: getPhpConfig(overridenConfiguration
|
|
65
|
+
php: getPhpConfig(overridenConfiguration, newBaseConfig),
|
|
60
66
|
docker: await getDockerConfig(ctx, overridenConfiguration, newBaseConfig),
|
|
61
67
|
magentoConfiguration: getMagentoConfig(overridenConfiguration.magento),
|
|
62
68
|
baseConfig: newBaseConfig,
|
|
63
69
|
overridenConfiguration,
|
|
64
70
|
userConfiguration,
|
|
65
|
-
nonOverridenConfiguration: configurations[magentoVersion]
|
|
71
|
+
nonOverridenConfiguration: configurations[magentoVersion],
|
|
72
|
+
projectConfig
|
|
66
73
|
};
|
|
67
74
|
},
|
|
68
75
|
baseConfig,
|
|
@@ -14,6 +14,7 @@ const php72 = ({
|
|
|
14
14
|
debugImage: `${ baseImage }-debug`,
|
|
15
15
|
configTemplate: path.join(templateDir || '', 'php.template.ini'),
|
|
16
16
|
fpmConfigTemplate: path.join(templateDir || '', 'php-fpm.template.conf'),
|
|
17
|
+
debugTemplate: path.join(templateDir || '', 'php-debug.template.ini'),
|
|
17
18
|
extensions: {
|
|
18
19
|
xdebug,
|
|
19
20
|
...extensions
|
|
@@ -14,6 +14,7 @@ const php73 = ({
|
|
|
14
14
|
debugImage: `${ baseImage }-debug`,
|
|
15
15
|
configTemplate: path.join(templateDir || '', 'php.template.ini'),
|
|
16
16
|
fpmConfigTemplate: path.join(templateDir || '', 'php-fpm.template.conf'),
|
|
17
|
+
debugTemplate: path.join(templateDir || '', 'php-debug.template.ini'),
|
|
17
18
|
extensions: {
|
|
18
19
|
xdebug,
|
|
19
20
|
...extensions
|
|
@@ -14,6 +14,7 @@ const php74 = ({
|
|
|
14
14
|
debugImage: `${ baseImage }-debug`,
|
|
15
15
|
configTemplate: path.join(templateDir || '', 'php.template.ini'),
|
|
16
16
|
fpmConfigTemplate: path.join(templateDir || '', 'php-fpm.template.conf'),
|
|
17
|
+
debugTemplate: path.join(templateDir || '', 'php-debug.template.ini'),
|
|
17
18
|
extensions: {
|
|
18
19
|
xdebug,
|
|
19
20
|
...extensions
|
|
@@ -14,6 +14,7 @@ const php81 = ({
|
|
|
14
14
|
debugImage: `${ baseImage }-debug`,
|
|
15
15
|
configTemplate: path.join(templateDir || '', 'php.template.ini'),
|
|
16
16
|
fpmConfigTemplate: path.join(templateDir || '', 'php-fpm.template.conf'),
|
|
17
|
+
debugTemplate: path.join(templateDir || '', 'php-debug.template.ini'),
|
|
17
18
|
extensions: {
|
|
18
19
|
xdebug,
|
|
19
20
|
...extensions
|