@nitwel/sandbox 1.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/dist/cli.d.ts +1 -0
- package/dist/cli.js +46 -0
- package/dist/config.d.ts +276 -0
- package/dist/config.js +171 -0
- package/dist/docker/cockroachdb.yml +14 -0
- package/dist/docker/maildev.yml +12 -0
- package/dist/docker/maria.yml +16 -0
- package/dist/docker/minio.yml +24 -0
- package/dist/docker/mssql.yml +28 -0
- package/dist/docker/mysql.yml +15 -0
- package/dist/docker/oracle.yml +16 -0
- package/dist/docker/postgres.yml +15 -0
- package/dist/docker/redis.yml +5 -0
- package/dist/docker/saml.yml +10 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/logger.d.ts +18 -0
- package/dist/logger.js +49 -0
- package/dist/relation.d.ts +5 -0
- package/dist/relation.js +8 -0
- package/dist/sandbox.d.ts +81 -0
- package/dist/sandbox.js +144 -0
- package/dist/steps/api.d.ts +6 -0
- package/dist/steps/api.js +170 -0
- package/dist/steps/docker.d.ts +5 -0
- package/dist/steps/docker.js +63 -0
- package/dist/steps/index.d.ts +3 -0
- package/dist/steps/index.js +3 -0
- package/dist/steps/schema.d.ts +4 -0
- package/dist/steps/schema.js +78 -0
- package/package.json +59 -0
- package/readme.md +70 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Argument, program } from 'commander';
|
|
2
|
+
import { databases, sandbox } from './sandbox.js';
|
|
3
|
+
program
|
|
4
|
+
.addArgument(new Argument('<database>', 'What database to start the api with').choices(databases))
|
|
5
|
+
.option('-b, --build', 'Rebuild directus from source')
|
|
6
|
+
.option('-d, --dev', 'Start directus in developer mode. Not compatible with build')
|
|
7
|
+
.option('-w, --watch', 'Restart the api when changes are made')
|
|
8
|
+
.option('--inspect', 'Start the api with debugger', true)
|
|
9
|
+
.option('-p, --port <port>', 'Port to start the api on')
|
|
10
|
+
.option('-v, --version <version>', 'Which version of the database to use')
|
|
11
|
+
.option('-x, --export', 'Export the schema to a file every 2 seconds')
|
|
12
|
+
.option('-s, --schema [schema]', 'Load an additional schema snapshot on startup')
|
|
13
|
+
.option('--docker.basePort <dockerBasePort>', 'Minimum port number to use for docker containers')
|
|
14
|
+
.option('--docker.keep', 'Keep containers running when stopping the sandbox')
|
|
15
|
+
.option('--docker.name <name>', 'Overwrite the name of the docker project')
|
|
16
|
+
.option('--docker.suffix <suffix>', 'Adds a suffix to the docker project. Can be used to ensure uniqueness')
|
|
17
|
+
.option('-e, --extras <extras>', 'Enable redis,maildev,saml or other extras')
|
|
18
|
+
.option('--silent', 'Silence all logs except for errors')
|
|
19
|
+
.option('-i, --instances <instances>', 'Horizontally scale directus to a given number of instances', '1')
|
|
20
|
+
.option('--killPorts', 'Forcefully kills all processes that occupy ports that the api would use');
|
|
21
|
+
program.parse();
|
|
22
|
+
const options = program.opts();
|
|
23
|
+
const sb = await sandbox(program.args[0], {
|
|
24
|
+
...options,
|
|
25
|
+
docker: {
|
|
26
|
+
basePort: options['docker.basePort'],
|
|
27
|
+
keep: options['docker.keep'],
|
|
28
|
+
name: options['docker.name'],
|
|
29
|
+
suffix: options['docker.suffix'],
|
|
30
|
+
},
|
|
31
|
+
extras: options['extras']
|
|
32
|
+
? Object.fromEntries(String(options['extras'])
|
|
33
|
+
.split(',')
|
|
34
|
+
.map((extra) => [extra, true]))
|
|
35
|
+
: {},
|
|
36
|
+
});
|
|
37
|
+
await new Promise(() => {
|
|
38
|
+
process.on('SIGINT', async () => {
|
|
39
|
+
await sb.stop();
|
|
40
|
+
process.exit();
|
|
41
|
+
});
|
|
42
|
+
process.on('SIGTERM', async () => {
|
|
43
|
+
await sb.stop();
|
|
44
|
+
process.exit();
|
|
45
|
+
});
|
|
46
|
+
});
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import type { Database, Options } from './sandbox.js';
|
|
2
|
+
declare const saml: {
|
|
3
|
+
readonly SAML_PORT: "$PORT_SAML";
|
|
4
|
+
readonly AUTH_PROVIDERS: "saml";
|
|
5
|
+
readonly AUTH_SAML_DRIVER: "saml";
|
|
6
|
+
readonly AUTH_SAML_ALLOW_PUBLIC_REGISTRATION: "true";
|
|
7
|
+
readonly AUTH_SAML_SP_metadata: "<md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" entityID=\"saml-test\"><md:SPSSODescriptor WantAssertionsSigned=\"true\" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"><md:KeyDescriptor use=\"signing\"><ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509Data><ds:X509Certificate>MIIDDTCCAfWgAwIBAgIJQC7RaeKX30qDMA0GCSqGSIb3DQEBCwUAMCQxIjAgBgNVBAMTGWRldi1md3h5bWRvMC51cy5hdXRoMC5jb20wHhcNMjIwODE5MjA1OTEwWhcNMzYwNDI3MjA1OTEwWjAkMSIwIAYDVQQDExlkZXYtZnd4eW1kbzAudXMuYXV0aDAuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0TN0Doc8qop69i0bgGuynPQpJRat17xlsbphSWCnACc6DYbFBQ3n+cft8AiTzI7VISLazwlWOp30zhTMwZlrXMo1flG9qJl/2T+BLohRMw0ScCQk8Aq1cWRzZLb4Oku6PdefHrpsg6Wjn87m6R2Yrhmz33Vq2QYRwNsKhWRhhB2ajpMj8GsvFKG0FGPD/AJ1bGXcdsMOaQZxIiZ3Xcy9Ng8jAHvE12sIH8w14pmIidO15XFjlvtpNTxSl0qV0lmzKM0nN4EqlK0vTy4NwFk3xR/UmgQo5tYzqvRBqfzRO7vpOwbp1SWQ/c8JlI1ulLzt1uJzfvWsp8MSD/QRhxg93QIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBT60jtXFsHPoyL42prgUG7wQTaWcTAOBgNVHQ8BAf8EBAMCAoQwDQYJKoZIhvcNAQELBQADggEBAKFLvyUbywoLYLOtsgHv9S2qingx2Q2jmYChqj4CQxPaWRpS/qBaZXnjVETZrMFDjf8HyMf2qn9uwKvtJehfPXpG8D+VuZWfsriTn94pXuELbiekHZ0Qlo1acbjUwyIeKoMNMk7wjGe8qb4gar6noT6PvAbyv1uzzkdyIUmQDzSS/ZOdRW0cwHG6oD/PdzKOPZxUZtQcq23Y/hbK/JpDiKtt1oO/svpd6tMmi6VezVB47gvUqEKMB3B5PI2Rdn+lA9tFPY2tfZtzOPaT5YQJkpp7tAWdMaUir+M8BhY8EjgtK1ZhJ7h2pW+UuOwkNsikgbf9EoUvDDZak65rXNqCCpQ=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:AssertionConsumerService isDefault=\"true\" index=\"0\" Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"http://host.docker.internal:8055/auth/login/saml/acs\" /></md:SPSSODescriptor></md:EntityDescriptor>";
|
|
8
|
+
readonly AUTH_SAML_IDP_metadata: "<md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" entityID=\"http://127.0.0.1:$PORT_SAML/simplesaml/saml2/idp/metadata.php\"><md:IDPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"><md:KeyDescriptor use=\"signing\"><ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509Data><ds:X509Certificate>MIIDXTCCAkWgAwIBAgIJALmVVuDWu4NYMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTYxMjMxMTQzNDQ3WhcNNDgwNjI1MTQzNDQ3WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzUCFozgNb1h1M0jzNRSCjhOBnR+uVbVpaWfXYIR+AhWDdEe5ryY+CgavOg8bfLybyzFdehlYdDRgkedEB/GjG8aJw06l0qF4jDOAw0kEygWCu2mcH7XOxRt+YAH3TVHa/Hu1W3WjzkobqqqLQ8gkKWWM27fOgAZ6GieaJBN6VBSMMcPey3HWLBmc+TYJmv1dbaO2jHhKh8pfKw0W12VM8P1PIO8gv4Phu/uuJYieBWKixBEyy0lHjyixYFCR12xdh4CA47q958ZRGnnDUGFVE1QhgRacJCOZ9bd5t9mr8KLaVBYTCJo5ERE8jymab5dPqe5qKfJsCZiqWglbjUo9twIDAQABo1AwTjAdBgNVHQ4EFgQUxpuwcs/CYQOyui+r1G+3KxBNhxkwHwYDVR0jBBgwFoAUxpuwcs/CYQOyui+r1G+3KxBNhxkwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAAiWUKs/2x/viNCKi3Y6blEuCtAGhzOOZ9EjrvJ8+COH3Rag3tVBWrcBZ3/uhhPq5gy9lqw4OkvEws99/5jFsX1FJ6MKBgqfuy7yh5s1YfM0ANHYczMmYpZeAcQf2CGAaVfwTTfSlzNLsF2lW/ly7yapFzlYSJLGoVE+OHEu8g5SlNACUEfkXw+5Eghh+KzlIN7R6Q7r2ixWNFBC/jWf7NKUfJyX8qIG5md1YUeT6GBW9Bm2/1/RiO24JTaYlfLdKK9TYb8sG5B+OLab2DImG99CJ25RkAcSobWNF5zD0O6lgOo3cEdB/ksCq3hmtlC/DlLZ/D8CJ+7VuZnS1rR2naQ==</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"http://127.0.0.1:$PORT_SAML/simplesaml/saml2/idp/SingleLogoutService.php\" /><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat><md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"http://127.0.0.1:$PORT_SAML/simplesaml/saml2/idp/SSOService.php\" /></md:IDPSSODescriptor></md:EntityDescriptor>";
|
|
9
|
+
readonly AUTH_SAML_DEFAULT_ROLE_ID: "d70c0943-5b55-4c5d-a613-f539a27a57f5";
|
|
10
|
+
readonly AUTH_SAML_IDENTIFIER_KEY: "uid";
|
|
11
|
+
readonly AUTH_SAML_EMAIL_KEY: "email";
|
|
12
|
+
};
|
|
13
|
+
declare const minio: {
|
|
14
|
+
readonly MINIO_PORT: "$PORT_MINIO";
|
|
15
|
+
readonly STORAGE_LOCATIONS: "minio,local";
|
|
16
|
+
readonly STORAGE_MINIO_DRIVER: "s3";
|
|
17
|
+
readonly STORAGE_MINIO_KEY: "directus";
|
|
18
|
+
readonly STORAGE_MINIO_SECRET: "miniosecret";
|
|
19
|
+
readonly STORAGE_MINIO_BUCKET: "directus-blackbox-test";
|
|
20
|
+
readonly STORAGE_MINIO_REGION: "us-east-1";
|
|
21
|
+
readonly STORAGE_MINIO_ENDPOINT: "http://127.0.0.1:$PORT_MINIO";
|
|
22
|
+
readonly STORAGE_MINIO_FORCE_PATH_STYLE: "true";
|
|
23
|
+
};
|
|
24
|
+
declare const maildev: {
|
|
25
|
+
EMAIL_TRANSPORT: string;
|
|
26
|
+
EMAIL_SMTP_HOST: string;
|
|
27
|
+
EMAIL_SMTP_PORT: string;
|
|
28
|
+
EMAIL_SMTP_USER: string;
|
|
29
|
+
EMAIL_SMTP_PASSWORD: string;
|
|
30
|
+
MAILDEV_WEBUI: string;
|
|
31
|
+
};
|
|
32
|
+
declare const baseConfig: {
|
|
33
|
+
readonly maria: {
|
|
34
|
+
readonly TZ: "0" | "UTC";
|
|
35
|
+
readonly ADMIN_EMAIL: "admin@example.com";
|
|
36
|
+
readonly ADMIN_PASSWORD: "pw";
|
|
37
|
+
readonly ADMIN_TOKEN: "admin";
|
|
38
|
+
readonly SECRET: "directus-test";
|
|
39
|
+
readonly TELEMETRY: "false";
|
|
40
|
+
readonly CACHE_SCHEMA: "true";
|
|
41
|
+
readonly CACHE_SCHEMA_MAX_ITERATIONS: "100";
|
|
42
|
+
readonly CONFIG_PATH: string;
|
|
43
|
+
readonly RATE_LIMITER_ENABLED: "false";
|
|
44
|
+
readonly PRESSURE_LIMITER_ENABLED: "false";
|
|
45
|
+
readonly LOG_LEVEL: "info";
|
|
46
|
+
readonly SERVE_APP: "true";
|
|
47
|
+
readonly DB_EXCLUDE_TABLES: "knex_migrations,knex_migrations_lock,spatial_ref_sys,sysdiagrams";
|
|
48
|
+
readonly MAX_RELATIONAL_DEPTH: "5";
|
|
49
|
+
readonly MAX_PAYLOAD_SIZE: "10mb";
|
|
50
|
+
readonly EXTENSIONS_PATH: "./extensions";
|
|
51
|
+
readonly ASSETS_TRANSFORM_MAX_CONCURRENT: "2";
|
|
52
|
+
readonly MAX_BATCH_MUTATION: "100";
|
|
53
|
+
readonly QUERY_LIMIT_DEFAULT: "90";
|
|
54
|
+
readonly ACCESS_TOKEN_TTL: "25d";
|
|
55
|
+
readonly WEBSOCKETS_ENABLED: "true";
|
|
56
|
+
readonly HOST: "127.0.0.1";
|
|
57
|
+
readonly REDIS_HOST: "127.0.0.1";
|
|
58
|
+
readonly REDIS_PORT: "$PORT";
|
|
59
|
+
readonly DB_CLIENT: "mysql";
|
|
60
|
+
readonly DB_HOST: "127.0.0.1";
|
|
61
|
+
readonly DB_USER: "root";
|
|
62
|
+
readonly DB_PASSWORD: "password";
|
|
63
|
+
readonly DB_PORT: "$PORT";
|
|
64
|
+
readonly DB_DATABASE: "directus";
|
|
65
|
+
readonly DB_VERSION: "11";
|
|
66
|
+
};
|
|
67
|
+
readonly postgres: {
|
|
68
|
+
readonly TZ: "0" | "UTC";
|
|
69
|
+
readonly ADMIN_EMAIL: "admin@example.com";
|
|
70
|
+
readonly ADMIN_PASSWORD: "pw";
|
|
71
|
+
readonly ADMIN_TOKEN: "admin";
|
|
72
|
+
readonly SECRET: "directus-test";
|
|
73
|
+
readonly TELEMETRY: "false";
|
|
74
|
+
readonly CACHE_SCHEMA: "true";
|
|
75
|
+
readonly CACHE_SCHEMA_MAX_ITERATIONS: "100";
|
|
76
|
+
readonly CONFIG_PATH: string;
|
|
77
|
+
readonly RATE_LIMITER_ENABLED: "false";
|
|
78
|
+
readonly PRESSURE_LIMITER_ENABLED: "false";
|
|
79
|
+
readonly LOG_LEVEL: "info";
|
|
80
|
+
readonly SERVE_APP: "true";
|
|
81
|
+
readonly DB_EXCLUDE_TABLES: "knex_migrations,knex_migrations_lock,spatial_ref_sys,sysdiagrams";
|
|
82
|
+
readonly MAX_RELATIONAL_DEPTH: "5";
|
|
83
|
+
readonly MAX_PAYLOAD_SIZE: "10mb";
|
|
84
|
+
readonly EXTENSIONS_PATH: "./extensions";
|
|
85
|
+
readonly ASSETS_TRANSFORM_MAX_CONCURRENT: "2";
|
|
86
|
+
readonly MAX_BATCH_MUTATION: "100";
|
|
87
|
+
readonly QUERY_LIMIT_DEFAULT: "90";
|
|
88
|
+
readonly ACCESS_TOKEN_TTL: "25d";
|
|
89
|
+
readonly WEBSOCKETS_ENABLED: "true";
|
|
90
|
+
readonly HOST: "127.0.0.1";
|
|
91
|
+
readonly REDIS_HOST: "127.0.0.1";
|
|
92
|
+
readonly REDIS_PORT: "$PORT";
|
|
93
|
+
readonly DB_CLIENT: "pg";
|
|
94
|
+
readonly DB_HOST: "127.0.0.1";
|
|
95
|
+
readonly DB_USER: "postgres";
|
|
96
|
+
readonly DB_PASSWORD: "secret";
|
|
97
|
+
readonly DB_PORT: "$PORT";
|
|
98
|
+
readonly DB_DATABASE: "directus";
|
|
99
|
+
readonly DB_VERSION: "18-alpine";
|
|
100
|
+
};
|
|
101
|
+
readonly sqlite: {
|
|
102
|
+
readonly TZ: "0" | "UTC";
|
|
103
|
+
readonly ADMIN_EMAIL: "admin@example.com";
|
|
104
|
+
readonly ADMIN_PASSWORD: "pw";
|
|
105
|
+
readonly ADMIN_TOKEN: "admin";
|
|
106
|
+
readonly SECRET: "directus-test";
|
|
107
|
+
readonly TELEMETRY: "false";
|
|
108
|
+
readonly CACHE_SCHEMA: "true";
|
|
109
|
+
readonly CACHE_SCHEMA_MAX_ITERATIONS: "100";
|
|
110
|
+
readonly CONFIG_PATH: string;
|
|
111
|
+
readonly RATE_LIMITER_ENABLED: "false";
|
|
112
|
+
readonly PRESSURE_LIMITER_ENABLED: "false";
|
|
113
|
+
readonly LOG_LEVEL: "info";
|
|
114
|
+
readonly SERVE_APP: "true";
|
|
115
|
+
readonly DB_EXCLUDE_TABLES: "knex_migrations,knex_migrations_lock,spatial_ref_sys,sysdiagrams";
|
|
116
|
+
readonly MAX_RELATIONAL_DEPTH: "5";
|
|
117
|
+
readonly MAX_PAYLOAD_SIZE: "10mb";
|
|
118
|
+
readonly EXTENSIONS_PATH: "./extensions";
|
|
119
|
+
readonly ASSETS_TRANSFORM_MAX_CONCURRENT: "2";
|
|
120
|
+
readonly MAX_BATCH_MUTATION: "100";
|
|
121
|
+
readonly QUERY_LIMIT_DEFAULT: "90";
|
|
122
|
+
readonly ACCESS_TOKEN_TTL: "25d";
|
|
123
|
+
readonly WEBSOCKETS_ENABLED: "true";
|
|
124
|
+
readonly HOST: "127.0.0.1";
|
|
125
|
+
readonly REDIS_HOST: "127.0.0.1";
|
|
126
|
+
readonly REDIS_PORT: "$PORT";
|
|
127
|
+
readonly DB_CLIENT: "sqlite3";
|
|
128
|
+
readonly DB_FILENAME: "./test.db";
|
|
129
|
+
};
|
|
130
|
+
readonly cockroachdb: {
|
|
131
|
+
readonly TZ: "0" | "UTC";
|
|
132
|
+
readonly ADMIN_EMAIL: "admin@example.com";
|
|
133
|
+
readonly ADMIN_PASSWORD: "pw";
|
|
134
|
+
readonly ADMIN_TOKEN: "admin";
|
|
135
|
+
readonly SECRET: "directus-test";
|
|
136
|
+
readonly TELEMETRY: "false";
|
|
137
|
+
readonly CACHE_SCHEMA: "true";
|
|
138
|
+
readonly CACHE_SCHEMA_MAX_ITERATIONS: "100";
|
|
139
|
+
readonly CONFIG_PATH: string;
|
|
140
|
+
readonly RATE_LIMITER_ENABLED: "false";
|
|
141
|
+
readonly PRESSURE_LIMITER_ENABLED: "false";
|
|
142
|
+
readonly LOG_LEVEL: "info";
|
|
143
|
+
readonly SERVE_APP: "true";
|
|
144
|
+
readonly DB_EXCLUDE_TABLES: "knex_migrations,knex_migrations_lock,spatial_ref_sys,sysdiagrams";
|
|
145
|
+
readonly MAX_RELATIONAL_DEPTH: "5";
|
|
146
|
+
readonly MAX_PAYLOAD_SIZE: "10mb";
|
|
147
|
+
readonly EXTENSIONS_PATH: "./extensions";
|
|
148
|
+
readonly ASSETS_TRANSFORM_MAX_CONCURRENT: "2";
|
|
149
|
+
readonly MAX_BATCH_MUTATION: "100";
|
|
150
|
+
readonly QUERY_LIMIT_DEFAULT: "90";
|
|
151
|
+
readonly ACCESS_TOKEN_TTL: "25d";
|
|
152
|
+
readonly WEBSOCKETS_ENABLED: "true";
|
|
153
|
+
readonly HOST: "127.0.0.1";
|
|
154
|
+
readonly REDIS_HOST: "127.0.0.1";
|
|
155
|
+
readonly REDIS_PORT: "$PORT";
|
|
156
|
+
readonly DB_CLIENT: "cockroachdb";
|
|
157
|
+
readonly DB_HOST: "127.0.0.1";
|
|
158
|
+
readonly DB_USER: "root";
|
|
159
|
+
readonly DB_PASSWORD: "";
|
|
160
|
+
readonly DB_PORT: "$PORT";
|
|
161
|
+
readonly DB_DATABASE: "defaultdb";
|
|
162
|
+
readonly DB_VERSION: "latest-v25.3";
|
|
163
|
+
readonly COCKROACH_UI: "$PORT";
|
|
164
|
+
};
|
|
165
|
+
readonly mssql: {
|
|
166
|
+
readonly TZ: "0" | "UTC";
|
|
167
|
+
readonly ADMIN_EMAIL: "admin@example.com";
|
|
168
|
+
readonly ADMIN_PASSWORD: "pw";
|
|
169
|
+
readonly ADMIN_TOKEN: "admin";
|
|
170
|
+
readonly SECRET: "directus-test";
|
|
171
|
+
readonly TELEMETRY: "false";
|
|
172
|
+
readonly CACHE_SCHEMA: "true";
|
|
173
|
+
readonly CACHE_SCHEMA_MAX_ITERATIONS: "100";
|
|
174
|
+
readonly CONFIG_PATH: string;
|
|
175
|
+
readonly RATE_LIMITER_ENABLED: "false";
|
|
176
|
+
readonly PRESSURE_LIMITER_ENABLED: "false";
|
|
177
|
+
readonly LOG_LEVEL: "info";
|
|
178
|
+
readonly SERVE_APP: "true";
|
|
179
|
+
readonly DB_EXCLUDE_TABLES: "knex_migrations,knex_migrations_lock,spatial_ref_sys,sysdiagrams";
|
|
180
|
+
readonly MAX_RELATIONAL_DEPTH: "5";
|
|
181
|
+
readonly MAX_PAYLOAD_SIZE: "10mb";
|
|
182
|
+
readonly EXTENSIONS_PATH: "./extensions";
|
|
183
|
+
readonly ASSETS_TRANSFORM_MAX_CONCURRENT: "2";
|
|
184
|
+
readonly MAX_BATCH_MUTATION: "100";
|
|
185
|
+
readonly QUERY_LIMIT_DEFAULT: "90";
|
|
186
|
+
readonly ACCESS_TOKEN_TTL: "25d";
|
|
187
|
+
readonly WEBSOCKETS_ENABLED: "true";
|
|
188
|
+
readonly HOST: "127.0.0.1";
|
|
189
|
+
readonly REDIS_HOST: "127.0.0.1";
|
|
190
|
+
readonly REDIS_PORT: "$PORT";
|
|
191
|
+
readonly DB_CLIENT: "mssql";
|
|
192
|
+
readonly DB_HOST: "127.0.0.1";
|
|
193
|
+
readonly DB_PORT: "$PORT";
|
|
194
|
+
readonly DB_USER: "sa";
|
|
195
|
+
readonly DB_PASSWORD: "Test@123";
|
|
196
|
+
readonly DB_DATABASE: "model";
|
|
197
|
+
readonly DB_VERSION: "2022-latest";
|
|
198
|
+
};
|
|
199
|
+
readonly mysql: {
|
|
200
|
+
readonly TZ: "0" | "UTC";
|
|
201
|
+
readonly ADMIN_EMAIL: "admin@example.com";
|
|
202
|
+
readonly ADMIN_PASSWORD: "pw";
|
|
203
|
+
readonly ADMIN_TOKEN: "admin";
|
|
204
|
+
readonly SECRET: "directus-test";
|
|
205
|
+
readonly TELEMETRY: "false";
|
|
206
|
+
readonly CACHE_SCHEMA: "true";
|
|
207
|
+
readonly CACHE_SCHEMA_MAX_ITERATIONS: "100";
|
|
208
|
+
readonly CONFIG_PATH: string;
|
|
209
|
+
readonly RATE_LIMITER_ENABLED: "false";
|
|
210
|
+
readonly PRESSURE_LIMITER_ENABLED: "false";
|
|
211
|
+
readonly LOG_LEVEL: "info";
|
|
212
|
+
readonly SERVE_APP: "true";
|
|
213
|
+
readonly DB_EXCLUDE_TABLES: "knex_migrations,knex_migrations_lock,spatial_ref_sys,sysdiagrams";
|
|
214
|
+
readonly MAX_RELATIONAL_DEPTH: "5";
|
|
215
|
+
readonly MAX_PAYLOAD_SIZE: "10mb";
|
|
216
|
+
readonly EXTENSIONS_PATH: "./extensions";
|
|
217
|
+
readonly ASSETS_TRANSFORM_MAX_CONCURRENT: "2";
|
|
218
|
+
readonly MAX_BATCH_MUTATION: "100";
|
|
219
|
+
readonly QUERY_LIMIT_DEFAULT: "90";
|
|
220
|
+
readonly ACCESS_TOKEN_TTL: "25d";
|
|
221
|
+
readonly WEBSOCKETS_ENABLED: "true";
|
|
222
|
+
readonly HOST: "127.0.0.1";
|
|
223
|
+
readonly REDIS_HOST: "127.0.0.1";
|
|
224
|
+
readonly REDIS_PORT: "$PORT";
|
|
225
|
+
readonly DB_CLIENT: "mysql";
|
|
226
|
+
readonly DB_HOST: "127.0.0.1";
|
|
227
|
+
readonly DB_PORT: "$PORT";
|
|
228
|
+
readonly DB_USER: "root";
|
|
229
|
+
readonly DB_PASSWORD: "secret";
|
|
230
|
+
readonly DB_DATABASE: "directus";
|
|
231
|
+
readonly DB_VERSION: "8.4";
|
|
232
|
+
};
|
|
233
|
+
readonly oracle: {
|
|
234
|
+
readonly TZ: "0" | "UTC";
|
|
235
|
+
readonly ADMIN_EMAIL: "admin@example.com";
|
|
236
|
+
readonly ADMIN_PASSWORD: "pw";
|
|
237
|
+
readonly ADMIN_TOKEN: "admin";
|
|
238
|
+
readonly SECRET: "directus-test";
|
|
239
|
+
readonly TELEMETRY: "false";
|
|
240
|
+
readonly CACHE_SCHEMA: "true";
|
|
241
|
+
readonly CACHE_SCHEMA_MAX_ITERATIONS: "100";
|
|
242
|
+
readonly CONFIG_PATH: string;
|
|
243
|
+
readonly RATE_LIMITER_ENABLED: "false";
|
|
244
|
+
readonly PRESSURE_LIMITER_ENABLED: "false";
|
|
245
|
+
readonly LOG_LEVEL: "info";
|
|
246
|
+
readonly SERVE_APP: "true";
|
|
247
|
+
readonly DB_EXCLUDE_TABLES: "knex_migrations,knex_migrations_lock,spatial_ref_sys,sysdiagrams";
|
|
248
|
+
readonly MAX_RELATIONAL_DEPTH: "5";
|
|
249
|
+
readonly MAX_PAYLOAD_SIZE: "10mb";
|
|
250
|
+
readonly EXTENSIONS_PATH: "./extensions";
|
|
251
|
+
readonly ASSETS_TRANSFORM_MAX_CONCURRENT: "2";
|
|
252
|
+
readonly MAX_BATCH_MUTATION: "100";
|
|
253
|
+
readonly QUERY_LIMIT_DEFAULT: "90";
|
|
254
|
+
readonly ACCESS_TOKEN_TTL: "25d";
|
|
255
|
+
readonly WEBSOCKETS_ENABLED: "true";
|
|
256
|
+
readonly HOST: "127.0.0.1";
|
|
257
|
+
readonly REDIS_HOST: "127.0.0.1";
|
|
258
|
+
readonly REDIS_PORT: "$PORT";
|
|
259
|
+
readonly DB_CLIENT: "oracledb";
|
|
260
|
+
readonly DB_HOST: "127.0.0.1";
|
|
261
|
+
readonly DB_PORT: "$PORT";
|
|
262
|
+
readonly DB_USER: "secretsysuser";
|
|
263
|
+
readonly DB_PASSWORD: "secretpassword";
|
|
264
|
+
readonly DB_DATABASE: "XEPDB1";
|
|
265
|
+
readonly DB_VERSION: string;
|
|
266
|
+
};
|
|
267
|
+
};
|
|
268
|
+
export declare function getEnv(database: Database, opts: Options): Promise<Env>;
|
|
269
|
+
export type Env = (typeof baseConfig)[Database] & {
|
|
270
|
+
PORT: string;
|
|
271
|
+
REDIS_ENABLED: string;
|
|
272
|
+
CACHE_ENABLED: string;
|
|
273
|
+
PUBLIC_URL: string;
|
|
274
|
+
NODE_ENV: string;
|
|
275
|
+
} & Partial<typeof minio> & Partial<typeof saml> & Partial<typeof maildev>;
|
|
276
|
+
export {};
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
const isWindows = ['win32', 'win64'].includes(process.platform);
|
|
3
|
+
const directusConfig = {
|
|
4
|
+
TZ: isWindows ? '0' : 'UTC',
|
|
5
|
+
ADMIN_EMAIL: 'admin@example.com',
|
|
6
|
+
ADMIN_PASSWORD: 'pw',
|
|
7
|
+
ADMIN_TOKEN: 'admin',
|
|
8
|
+
SECRET: 'directus-test',
|
|
9
|
+
TELEMETRY: 'false',
|
|
10
|
+
CACHE_SCHEMA: 'true',
|
|
11
|
+
CACHE_SCHEMA_MAX_ITERATIONS: '100',
|
|
12
|
+
CONFIG_PATH: join(import.meta.dirname, '..', '.env'), // Override to non existent file so process envs aren't overwritten by file envs
|
|
13
|
+
RATE_LIMITER_ENABLED: 'false',
|
|
14
|
+
PRESSURE_LIMITER_ENABLED: 'false',
|
|
15
|
+
LOG_LEVEL: 'info',
|
|
16
|
+
SERVE_APP: 'true',
|
|
17
|
+
DB_EXCLUDE_TABLES: 'knex_migrations,knex_migrations_lock,spatial_ref_sys,sysdiagrams',
|
|
18
|
+
MAX_RELATIONAL_DEPTH: '5',
|
|
19
|
+
MAX_PAYLOAD_SIZE: '10mb',
|
|
20
|
+
EXTENSIONS_PATH: './extensions',
|
|
21
|
+
ASSETS_TRANSFORM_MAX_CONCURRENT: '2',
|
|
22
|
+
MAX_BATCH_MUTATION: '100', // Must be in multiples of 10 for tests
|
|
23
|
+
QUERY_LIMIT_DEFAULT: '90', // Must be less than MAX_BATCH_MUTATION by at least 3
|
|
24
|
+
ACCESS_TOKEN_TTL: '25d', // should be larger than 24.86 days to test Expires value larger than 32-bit signed integer
|
|
25
|
+
WEBSOCKETS_ENABLED: 'true',
|
|
26
|
+
HOST: '127.0.0.1',
|
|
27
|
+
REDIS_HOST: '127.0.0.1',
|
|
28
|
+
REDIS_PORT: '$PORT',
|
|
29
|
+
};
|
|
30
|
+
const maria = {
|
|
31
|
+
DB_CLIENT: 'mysql',
|
|
32
|
+
DB_HOST: `127.0.0.1`,
|
|
33
|
+
DB_USER: 'root',
|
|
34
|
+
DB_PASSWORD: 'password',
|
|
35
|
+
DB_PORT: '$PORT',
|
|
36
|
+
DB_DATABASE: 'directus',
|
|
37
|
+
DB_VERSION: '11',
|
|
38
|
+
...directusConfig,
|
|
39
|
+
};
|
|
40
|
+
const mssql = {
|
|
41
|
+
DB_CLIENT: 'mssql',
|
|
42
|
+
DB_HOST: `127.0.0.1`,
|
|
43
|
+
DB_PORT: '$PORT',
|
|
44
|
+
DB_USER: 'sa',
|
|
45
|
+
DB_PASSWORD: 'Test@123',
|
|
46
|
+
DB_DATABASE: 'model',
|
|
47
|
+
DB_VERSION: '2022-latest',
|
|
48
|
+
...directusConfig,
|
|
49
|
+
};
|
|
50
|
+
const cockroachdb = {
|
|
51
|
+
DB_CLIENT: 'cockroachdb',
|
|
52
|
+
DB_HOST: `127.0.0.1`,
|
|
53
|
+
DB_USER: 'root',
|
|
54
|
+
DB_PASSWORD: '',
|
|
55
|
+
DB_PORT: '$PORT',
|
|
56
|
+
DB_DATABASE: 'defaultdb',
|
|
57
|
+
DB_VERSION: 'latest-v25.3',
|
|
58
|
+
COCKROACH_UI: '$PORT',
|
|
59
|
+
...directusConfig,
|
|
60
|
+
};
|
|
61
|
+
const mysql = {
|
|
62
|
+
DB_CLIENT: 'mysql',
|
|
63
|
+
DB_HOST: `127.0.0.1`,
|
|
64
|
+
DB_PORT: '$PORT',
|
|
65
|
+
DB_USER: 'root',
|
|
66
|
+
DB_PASSWORD: 'secret',
|
|
67
|
+
DB_DATABASE: 'directus',
|
|
68
|
+
DB_VERSION: '8.4',
|
|
69
|
+
...directusConfig,
|
|
70
|
+
};
|
|
71
|
+
const postgres = {
|
|
72
|
+
DB_CLIENT: 'pg',
|
|
73
|
+
DB_HOST: `127.0.0.1`,
|
|
74
|
+
DB_USER: 'postgres',
|
|
75
|
+
DB_PASSWORD: 'secret',
|
|
76
|
+
DB_PORT: '$PORT',
|
|
77
|
+
DB_DATABASE: 'directus',
|
|
78
|
+
DB_VERSION: '18-alpine',
|
|
79
|
+
...directusConfig,
|
|
80
|
+
};
|
|
81
|
+
const sqlite = {
|
|
82
|
+
DB_CLIENT: 'sqlite3',
|
|
83
|
+
DB_FILENAME: './test.db',
|
|
84
|
+
...directusConfig,
|
|
85
|
+
};
|
|
86
|
+
const oracle = {
|
|
87
|
+
DB_CLIENT: 'oracledb',
|
|
88
|
+
DB_HOST: '127.0.0.1',
|
|
89
|
+
DB_PORT: '$PORT',
|
|
90
|
+
DB_USER: 'secretsysuser',
|
|
91
|
+
DB_PASSWORD: 'secretpassword',
|
|
92
|
+
DB_DATABASE: 'XEPDB1',
|
|
93
|
+
DB_VERSION: '21-slim-faststart',
|
|
94
|
+
...directusConfig,
|
|
95
|
+
};
|
|
96
|
+
const saml = {
|
|
97
|
+
SAML_PORT: '$PORT_SAML',
|
|
98
|
+
AUTH_PROVIDERS: 'saml',
|
|
99
|
+
AUTH_SAML_DRIVER: 'saml',
|
|
100
|
+
AUTH_SAML_ALLOW_PUBLIC_REGISTRATION: 'true',
|
|
101
|
+
AUTH_SAML_SP_metadata: '<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="saml-test"><md:SPSSODescriptor WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"><md:KeyDescriptor use="signing"><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:X509Data><ds:X509Certificate>MIIDDTCCAfWgAwIBAgIJQC7RaeKX30qDMA0GCSqGSIb3DQEBCwUAMCQxIjAgBgNVBAMTGWRldi1md3h5bWRvMC51cy5hdXRoMC5jb20wHhcNMjIwODE5MjA1OTEwWhcNMzYwNDI3MjA1OTEwWjAkMSIwIAYDVQQDExlkZXYtZnd4eW1kbzAudXMuYXV0aDAuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0TN0Doc8qop69i0bgGuynPQpJRat17xlsbphSWCnACc6DYbFBQ3n+cft8AiTzI7VISLazwlWOp30zhTMwZlrXMo1flG9qJl/2T+BLohRMw0ScCQk8Aq1cWRzZLb4Oku6PdefHrpsg6Wjn87m6R2Yrhmz33Vq2QYRwNsKhWRhhB2ajpMj8GsvFKG0FGPD/AJ1bGXcdsMOaQZxIiZ3Xcy9Ng8jAHvE12sIH8w14pmIidO15XFjlvtpNTxSl0qV0lmzKM0nN4EqlK0vTy4NwFk3xR/UmgQo5tYzqvRBqfzRO7vpOwbp1SWQ/c8JlI1ulLzt1uJzfvWsp8MSD/QRhxg93QIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBT60jtXFsHPoyL42prgUG7wQTaWcTAOBgNVHQ8BAf8EBAMCAoQwDQYJKoZIhvcNAQELBQADggEBAKFLvyUbywoLYLOtsgHv9S2qingx2Q2jmYChqj4CQxPaWRpS/qBaZXnjVETZrMFDjf8HyMf2qn9uwKvtJehfPXpG8D+VuZWfsriTn94pXuELbiekHZ0Qlo1acbjUwyIeKoMNMk7wjGe8qb4gar6noT6PvAbyv1uzzkdyIUmQDzSS/ZOdRW0cwHG6oD/PdzKOPZxUZtQcq23Y/hbK/JpDiKtt1oO/svpd6tMmi6VezVB47gvUqEKMB3B5PI2Rdn+lA9tFPY2tfZtzOPaT5YQJkpp7tAWdMaUir+M8BhY8EjgtK1ZhJ7h2pW+UuOwkNsikgbf9EoUvDDZak65rXNqCCpQ=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat><md:AssertionConsumerService isDefault="true" index="0" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://host.docker.internal:8055/auth/login/saml/acs" /></md:SPSSODescriptor></md:EntityDescriptor>',
|
|
102
|
+
AUTH_SAML_IDP_metadata: '<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="http://127.0.0.1:$PORT_SAML/simplesaml/saml2/idp/metadata.php"><md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"><md:KeyDescriptor use="signing"><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:X509Data><ds:X509Certificate>MIIDXTCCAkWgAwIBAgIJALmVVuDWu4NYMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTYxMjMxMTQzNDQ3WhcNNDgwNjI1MTQzNDQ3WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzUCFozgNb1h1M0jzNRSCjhOBnR+uVbVpaWfXYIR+AhWDdEe5ryY+CgavOg8bfLybyzFdehlYdDRgkedEB/GjG8aJw06l0qF4jDOAw0kEygWCu2mcH7XOxRt+YAH3TVHa/Hu1W3WjzkobqqqLQ8gkKWWM27fOgAZ6GieaJBN6VBSMMcPey3HWLBmc+TYJmv1dbaO2jHhKh8pfKw0W12VM8P1PIO8gv4Phu/uuJYieBWKixBEyy0lHjyixYFCR12xdh4CA47q958ZRGnnDUGFVE1QhgRacJCOZ9bd5t9mr8KLaVBYTCJo5ERE8jymab5dPqe5qKfJsCZiqWglbjUo9twIDAQABo1AwTjAdBgNVHQ4EFgQUxpuwcs/CYQOyui+r1G+3KxBNhxkwHwYDVR0jBBgwFoAUxpuwcs/CYQOyui+r1G+3KxBNhxkwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAAiWUKs/2x/viNCKi3Y6blEuCtAGhzOOZ9EjrvJ8+COH3Rag3tVBWrcBZ3/uhhPq5gy9lqw4OkvEws99/5jFsX1FJ6MKBgqfuy7yh5s1YfM0ANHYczMmYpZeAcQf2CGAaVfwTTfSlzNLsF2lW/ly7yapFzlYSJLGoVE+OHEu8g5SlNACUEfkXw+5Eghh+KzlIN7R6Q7r2ixWNFBC/jWf7NKUfJyX8qIG5md1YUeT6GBW9Bm2/1/RiO24JTaYlfLdKK9TYb8sG5B+OLab2DImG99CJ25RkAcSobWNF5zD0O6lgOo3cEdB/ksCq3hmtlC/DlLZ/D8CJ+7VuZnS1rR2naQ==</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://127.0.0.1:$PORT_SAML/simplesaml/saml2/idp/SingleLogoutService.php" /><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat><md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://127.0.0.1:$PORT_SAML/simplesaml/saml2/idp/SSOService.php" /></md:IDPSSODescriptor></md:EntityDescriptor>',
|
|
103
|
+
AUTH_SAML_DEFAULT_ROLE_ID: 'd70c0943-5b55-4c5d-a613-f539a27a57f5',
|
|
104
|
+
AUTH_SAML_IDENTIFIER_KEY: 'uid',
|
|
105
|
+
AUTH_SAML_EMAIL_KEY: 'email',
|
|
106
|
+
};
|
|
107
|
+
const minio = {
|
|
108
|
+
MINIO_PORT: '$PORT_MINIO',
|
|
109
|
+
STORAGE_LOCATIONS: 'minio,local',
|
|
110
|
+
STORAGE_MINIO_DRIVER: 's3',
|
|
111
|
+
STORAGE_MINIO_KEY: 'directus',
|
|
112
|
+
STORAGE_MINIO_SECRET: 'miniosecret',
|
|
113
|
+
STORAGE_MINIO_BUCKET: 'directus-blackbox-test',
|
|
114
|
+
STORAGE_MINIO_REGION: 'us-east-1',
|
|
115
|
+
STORAGE_MINIO_ENDPOINT: 'http://127.0.0.1:$PORT_MINIO',
|
|
116
|
+
STORAGE_MINIO_FORCE_PATH_STYLE: 'true',
|
|
117
|
+
};
|
|
118
|
+
const maildev = {
|
|
119
|
+
EMAIL_TRANSPORT: 'smtp',
|
|
120
|
+
EMAIL_SMTP_HOST: '127.0.0.1',
|
|
121
|
+
EMAIL_SMTP_PORT: '$PORT',
|
|
122
|
+
EMAIL_SMTP_USER: 'admin@directus.io',
|
|
123
|
+
EMAIL_SMTP_PASSWORD: 'password',
|
|
124
|
+
MAILDEV_WEBUI: '$PORT',
|
|
125
|
+
};
|
|
126
|
+
const baseConfig = {
|
|
127
|
+
maria,
|
|
128
|
+
postgres,
|
|
129
|
+
sqlite,
|
|
130
|
+
cockroachdb,
|
|
131
|
+
mssql,
|
|
132
|
+
mysql,
|
|
133
|
+
oracle,
|
|
134
|
+
};
|
|
135
|
+
export async function getEnv(database, opts) {
|
|
136
|
+
const portMap = {};
|
|
137
|
+
let portIndex = Number(opts.docker.basePort);
|
|
138
|
+
async function getPort() {
|
|
139
|
+
return String(typeof opts.docker.basePort === 'function' ? await opts.docker.basePort() : portIndex++);
|
|
140
|
+
}
|
|
141
|
+
const env = {
|
|
142
|
+
...baseConfig[database],
|
|
143
|
+
PORT: String(opts.port),
|
|
144
|
+
PUBLIC_URL: `http://${baseConfig[database].HOST}:${opts.port}`,
|
|
145
|
+
REDIS_ENABLED: String(opts.extras.redis),
|
|
146
|
+
CACHE_ENABLED: String(opts.cache),
|
|
147
|
+
NODE_ENV: opts.dev ? 'development' : 'production',
|
|
148
|
+
...(opts.extras.minio ? minio : {}),
|
|
149
|
+
...(opts.extras.saml ? saml : {}),
|
|
150
|
+
...(opts.extras.maildev ? maildev : {}),
|
|
151
|
+
...opts.env,
|
|
152
|
+
...process.env,
|
|
153
|
+
};
|
|
154
|
+
if (opts.version && 'DB_VERSION' in env) {
|
|
155
|
+
env.DB_VERSION = opts.version;
|
|
156
|
+
}
|
|
157
|
+
// eslint-disable-next-line prefer-const
|
|
158
|
+
for (let [key, value] of Object.entries(env)) {
|
|
159
|
+
const matches = /\$PORT(?:_[A-Z]+)*/gm.exec(value);
|
|
160
|
+
for (const match of matches ?? []) {
|
|
161
|
+
if (match === '$PORT')
|
|
162
|
+
value = value.replaceAll(match, await getPort());
|
|
163
|
+
if (match in portMap === false) {
|
|
164
|
+
portMap[match] = await getPort();
|
|
165
|
+
}
|
|
166
|
+
value = value.replaceAll(match, portMap[match]);
|
|
167
|
+
}
|
|
168
|
+
env[key] = value;
|
|
169
|
+
}
|
|
170
|
+
return env;
|
|
171
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
services:
|
|
2
|
+
cockroachdb:
|
|
3
|
+
# change in the YY.R component denotes a major release
|
|
4
|
+
image: cockroachdb/cockroach:${DB_VERSION}
|
|
5
|
+
tmpfs: /cockroach/cockroach-data
|
|
6
|
+
command: start-single-node --cluster-name=example-single-node --insecure
|
|
7
|
+
ports:
|
|
8
|
+
- ${DB_PORT}:26257
|
|
9
|
+
- ${COCKROACH_UI}:8080
|
|
10
|
+
healthcheck:
|
|
11
|
+
test: ['CMD', 'curl', '--fail', 'http://localhost:8080/health']
|
|
12
|
+
interval: 5s
|
|
13
|
+
timeout: 5s
|
|
14
|
+
retries: 10
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
services:
|
|
2
|
+
maildev:
|
|
3
|
+
image: maildev/maildev:latest
|
|
4
|
+
ports:
|
|
5
|
+
- '${MAILDEV_WEBUI}:1080' # Web interface
|
|
6
|
+
- '${EMAIL_SMTP_PORT}:1025' # SMTP server
|
|
7
|
+
restart: always
|
|
8
|
+
environment:
|
|
9
|
+
- MAILDEV_WEB_PORT=1080
|
|
10
|
+
- MAILDEV_SMTP_PORT=1025
|
|
11
|
+
- MAILDEV_INCOMING_USER=${EMAIL_SMTP_USER}
|
|
12
|
+
- MAILDEV_INCOMING_PASS=${EMAIL_SMTP_PASSWORD}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
services:
|
|
2
|
+
maria:
|
|
3
|
+
image: mariadb:${DB_VERSION}
|
|
4
|
+
tmpfs: /var/lib/mysql
|
|
5
|
+
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
|
6
|
+
environment:
|
|
7
|
+
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
|
|
8
|
+
MYSQL_USER: ${DB_USER}
|
|
9
|
+
MYSQL_DATABASE: ${DB_DATABASE}
|
|
10
|
+
ports:
|
|
11
|
+
- ${DB_PORT}:3306
|
|
12
|
+
healthcheck:
|
|
13
|
+
test: ['CMD', 'healthcheck.sh', '--connect', '--innodb_initialized']
|
|
14
|
+
interval: 5s
|
|
15
|
+
timeout: 5s
|
|
16
|
+
retries: 10
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
services:
|
|
2
|
+
minio:
|
|
3
|
+
# should stay compatible via S3 driver
|
|
4
|
+
image: minio/minio
|
|
5
|
+
command: server /data/minio/ --console-address :9001
|
|
6
|
+
ports:
|
|
7
|
+
- ${MINIO_PORT}:9000
|
|
8
|
+
- 8882:9001
|
|
9
|
+
environment:
|
|
10
|
+
MINIO_ROOT_USER: directus
|
|
11
|
+
MINIO_ROOT_PASSWORD: miniosecret
|
|
12
|
+
|
|
13
|
+
minio-mc:
|
|
14
|
+
image: minio/mc
|
|
15
|
+
depends_on:
|
|
16
|
+
- minio
|
|
17
|
+
entrypoint: >
|
|
18
|
+
/bin/sh -c " until (/usr/bin/mc alias set directusminio http://minio:9000 directus miniosecret &&
|
|
19
|
+
/usr/bin/mc admin info directusminio > /dev/null 2>&1); do
|
|
20
|
+
echo 'Waiting for MinIO to be ready...';
|
|
21
|
+
sleep 1;
|
|
22
|
+
done; /usr/bin/mc mb directusminio/directus-blackbox-test; while true; do
|
|
23
|
+
sleep 3600;
|
|
24
|
+
done;"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
services:
|
|
2
|
+
mssql:
|
|
3
|
+
image: mcr.microsoft.com/mssql/server:${DB_VERSION}
|
|
4
|
+
tmpfs: /var/opt/mssql/data
|
|
5
|
+
environment:
|
|
6
|
+
- ACCEPT_EULA=Y
|
|
7
|
+
- MSSQL_SA_PASSWORD=${DB_PASSWORD}
|
|
8
|
+
- MSSQL_PID=Express
|
|
9
|
+
ports:
|
|
10
|
+
- ${DB_PORT}:1433
|
|
11
|
+
healthcheck:
|
|
12
|
+
test:
|
|
13
|
+
[
|
|
14
|
+
'CMD',
|
|
15
|
+
'/opt/mssql-tools18/bin/sqlcmd',
|
|
16
|
+
'-S',
|
|
17
|
+
'localhost',
|
|
18
|
+
'-U',
|
|
19
|
+
'sa',
|
|
20
|
+
'-P',
|
|
21
|
+
'${DB_PASSWORD}',
|
|
22
|
+
'-Q',
|
|
23
|
+
'SELECT 1',
|
|
24
|
+
'-No',
|
|
25
|
+
]
|
|
26
|
+
interval: 5s
|
|
27
|
+
timeout: 5s
|
|
28
|
+
retries: 10
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
services:
|
|
2
|
+
mysql:
|
|
3
|
+
image: mysql:${DB_VERSION}
|
|
4
|
+
tmpfs: /var/lib/mysql
|
|
5
|
+
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
|
6
|
+
environment:
|
|
7
|
+
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
|
|
8
|
+
MYSQL_DATABASE: ${DB_DATABASE}
|
|
9
|
+
ports:
|
|
10
|
+
- ${DB_PORT}:3306
|
|
11
|
+
healthcheck:
|
|
12
|
+
test: ['CMD', 'mysql', '--user=root', '--password=${DB_PASSWORD}', '--execute=SELECT 1;']
|
|
13
|
+
interval: 5s
|
|
14
|
+
timeout: 5s
|
|
15
|
+
retries: 10
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
services:
|
|
2
|
+
oracle:
|
|
3
|
+
image: gvenzl/oracle-xe:${DB_VERSION}
|
|
4
|
+
ports:
|
|
5
|
+
- ${DB_PORT}:1521
|
|
6
|
+
environment:
|
|
7
|
+
- OPATCH_JRE_MEMORY_OPTIONS=-Xms128m -Xmx256m -XX:PermSize=16m -XX:MaxPermSize=32m -Xss1m
|
|
8
|
+
- ORACLE_ALLOW_REMOTE=true
|
|
9
|
+
- ORACLE_RANDOM_PASSWORD=yes
|
|
10
|
+
- APP_USER=${DB_USER}
|
|
11
|
+
- APP_USER_PASSWORD=${DB_PASSWORD}
|
|
12
|
+
healthcheck:
|
|
13
|
+
test: healthcheck.sh
|
|
14
|
+
interval: 5s
|
|
15
|
+
timeout: 5s
|
|
16
|
+
retries: 10
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
services:
|
|
2
|
+
postgres:
|
|
3
|
+
image: postgis/postgis:${DB_VERSION}
|
|
4
|
+
tmpfs: /var/lib/postgresql/data
|
|
5
|
+
environment:
|
|
6
|
+
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
7
|
+
POSTGRES_USER: ${DB_USER}
|
|
8
|
+
POSTGRES_DB: ${DB_DATABASE}
|
|
9
|
+
ports:
|
|
10
|
+
- ${DB_PORT}:5432
|
|
11
|
+
healthcheck:
|
|
12
|
+
test: ['CMD-SHELL', 'pg_isready -U ${DB_USER} -d ${DB_DATABASE}']
|
|
13
|
+
interval: 5s
|
|
14
|
+
timeout: 5s
|
|
15
|
+
retries: 10
|