clawsql 0.1.0 → 0.1.3
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/README.md +37 -17
- package/dist/app.js +2 -2
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +47 -9
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/utils/docker-files.d.ts.map +1 -1
- package/dist/cli/utils/docker-files.js +39 -1
- package/dist/cli/utils/docker-files.js.map +1 -1
- package/dist/cli/utils/docker-prereq.d.ts +17 -0
- package/dist/cli/utils/docker-prereq.d.ts.map +1 -1
- package/dist/cli/utils/docker-prereq.js +130 -6
- package/dist/cli/utils/docker-prereq.js.map +1 -1
- package/dist/config/settings.js +1 -1
- package/docker/Dockerfile.allinone +117 -0
- package/docker/entrypoint-allinone.sh +59 -0
- package/docker/supervisord.conf +51 -0
- package/docker-compose.allinone.yml +66 -0
- package/docker-compose.demo.yml +1 -1
- package/docker-compose.yml +6 -5
- package/init/primary.sql +6 -5
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -15,7 +15,23 @@ MySQL High Availability Management Platform with automatic failover, read/write
|
|
|
15
15
|
|
|
16
16
|
- **Container Runtime**: Docker or Podman
|
|
17
17
|
- **Docker Compose**: docker-compose or podman-compose
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
### Via npm (Recommended)
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install -g clawsql
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### From Source
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git clone https://github.com/clawsql/clawsql.git
|
|
31
|
+
cd clawsql
|
|
32
|
+
npm install
|
|
33
|
+
npm run build
|
|
34
|
+
```
|
|
19
35
|
|
|
20
36
|
## Quick Start
|
|
21
37
|
|
|
@@ -26,7 +42,8 @@ MySQL High Availability Management Platform with automatic failover, read/write
|
|
|
26
42
|
Start with a pre-configured demo MySQL cluster:
|
|
27
43
|
|
|
28
44
|
```bash
|
|
29
|
-
|
|
45
|
+
clawsql
|
|
46
|
+
> /start --demo
|
|
30
47
|
```
|
|
31
48
|
|
|
32
49
|
This starts:
|
|
@@ -38,27 +55,30 @@ This starts:
|
|
|
38
55
|
Start the platform and connect to your existing MySQL instances:
|
|
39
56
|
|
|
40
57
|
```bash
|
|
41
|
-
# Start
|
|
42
|
-
|
|
58
|
+
# Start the interactive CLI
|
|
59
|
+
clawsql
|
|
60
|
+
|
|
61
|
+
# Start platform services
|
|
62
|
+
> /start
|
|
43
63
|
|
|
44
64
|
# Configure MySQL credentials
|
|
45
|
-
|
|
46
|
-
|
|
65
|
+
> /config set mysql.admin_user root
|
|
66
|
+
> /config set mysql.admin_password yourpassword
|
|
47
67
|
|
|
48
|
-
# Create Orchestrator user on your MySQL instances
|
|
49
|
-
mysql -e "CREATE USER 'clawsql'@'%' IDENTIFIED BY 'clawsql_password'; GRANT ALL ON *.* TO 'clawsql'@'%' WITH GRANT OPTION;"
|
|
68
|
+
# Create Orchestrator user on your MySQL instances (run on your MySQL server)
|
|
69
|
+
# mysql -e "CREATE USER 'clawsql'@'%' IDENTIFIED BY 'clawsql_password'; GRANT ALL ON *.* TO 'clawsql'@'%' WITH GRANT OPTION;"
|
|
50
70
|
|
|
51
71
|
# Discover MySQL instances on your network
|
|
52
|
-
|
|
72
|
+
> /instances discover 172.18.0.0/24 --user root --password yourpassword
|
|
53
73
|
|
|
54
74
|
# Or register instances manually
|
|
55
|
-
|
|
75
|
+
> /instances register --host mysql-primary --port 3306
|
|
56
76
|
|
|
57
77
|
# Sync to ProxySQL
|
|
58
|
-
|
|
78
|
+
> /clusters sync
|
|
59
79
|
|
|
60
80
|
# Verify health
|
|
61
|
-
|
|
81
|
+
> /doctor
|
|
62
82
|
```
|
|
63
83
|
|
|
64
84
|
## Services
|
|
@@ -297,7 +317,7 @@ npm install
|
|
|
297
317
|
# Build TypeScript
|
|
298
318
|
npm run build
|
|
299
319
|
|
|
300
|
-
# Run CLI
|
|
320
|
+
# Run CLI locally
|
|
301
321
|
node dist/bin/clawsql.js
|
|
302
322
|
|
|
303
323
|
# Run tests
|
|
@@ -336,15 +356,15 @@ clawsql/
|
|
|
336
356
|
### Check Platform Health
|
|
337
357
|
|
|
338
358
|
```bash
|
|
339
|
-
|
|
359
|
+
clawsql -c "/doctor"
|
|
340
360
|
```
|
|
341
361
|
|
|
342
362
|
### View Logs
|
|
343
363
|
|
|
344
364
|
```bash
|
|
345
|
-
docker
|
|
346
|
-
docker
|
|
347
|
-
docker
|
|
365
|
+
docker compose logs -f clawsql
|
|
366
|
+
docker compose logs -f orchestrator
|
|
367
|
+
docker compose logs -f proxysql
|
|
348
368
|
```
|
|
349
369
|
|
|
350
370
|
### Check MySQL Replication
|
package/dist/app.js
CHANGED
|
@@ -90,7 +90,7 @@ ClawSQL provides comprehensive automation for MySQL cluster management:
|
|
|
90
90
|
- Prometheus for metrics collection
|
|
91
91
|
- Grafana for visualization
|
|
92
92
|
`,
|
|
93
|
-
version: '0.1.
|
|
93
|
+
version: '0.1.3',
|
|
94
94
|
},
|
|
95
95
|
servers: [
|
|
96
96
|
{ url: '/', description: 'Current server' },
|
|
@@ -115,7 +115,7 @@ ClawSQL provides comprehensive automation for MySQL cluster management:
|
|
|
115
115
|
fastify.get('/', async () => {
|
|
116
116
|
return {
|
|
117
117
|
name: 'ClawSQL',
|
|
118
|
-
version: '0.1.
|
|
118
|
+
version: '0.1.3',
|
|
119
119
|
description: 'MySQL Cluster Automation and Operations Management',
|
|
120
120
|
docs: '/docs',
|
|
121
121
|
health: '/health',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAc,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAc,MAAM,gBAAgB,CAAC;AAYrD;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,OAmJ1B,CAAC;AA4EF,eAAe,YAAY,CAAC"}
|
|
@@ -23,7 +23,14 @@ exports.startCommand = {
|
|
|
23
23
|
handler: async (args, ctx) => {
|
|
24
24
|
const formatter = ctx.formatter;
|
|
25
25
|
const demoMode = args.includes('--demo');
|
|
26
|
+
const allInOneMode = args.includes('--allinone');
|
|
27
|
+
// Parse --registry flag
|
|
28
|
+
const registryIndex = args.indexOf('--registry');
|
|
29
|
+
const registryMirror = registryIndex !== -1 && args[registryIndex + 1] ? args[registryIndex + 1] : null;
|
|
26
30
|
console.log(formatter.header('Starting ClawSQL Platform'));
|
|
31
|
+
if (allInOneMode) {
|
|
32
|
+
console.log(formatter.info('Using all-in-one container mode'));
|
|
33
|
+
}
|
|
27
34
|
// Check Docker prerequisites
|
|
28
35
|
const dockerInfo = await (0, docker_prereq_js_1.checkDockerPrerequisites)();
|
|
29
36
|
if (!dockerInfo.runtime) {
|
|
@@ -38,11 +45,24 @@ exports.startCommand = {
|
|
|
38
45
|
}
|
|
39
46
|
if (!dockerInfo.composeCommand) {
|
|
40
47
|
console.log(formatter.error('Docker Compose not found'));
|
|
41
|
-
console.log(
|
|
48
|
+
console.log((0, docker_prereq_js_1.getComposeInstallGuidance)(dockerInfo.runtime));
|
|
42
49
|
return;
|
|
43
50
|
}
|
|
44
51
|
console.log(formatter.keyValue('Runtime', `${dockerInfo.runtime} ${dockerInfo.version}`));
|
|
45
52
|
console.log(formatter.keyValue('Compose', dockerInfo.composeCommand.join(' ')));
|
|
53
|
+
// Configure registry mirror if specified
|
|
54
|
+
if (registryMirror && dockerInfo.runtime) {
|
|
55
|
+
const mirror = docker_prereq_js_1.REGISTRY_MIRRORS[registryMirror] || registryMirror;
|
|
56
|
+
console.log(formatter.info(`Configuring registry mirror: ${mirror}`));
|
|
57
|
+
const configured = await (0, docker_prereq_js_1.configureRegistryMirror)(dockerInfo.runtime, mirror);
|
|
58
|
+
if (configured) {
|
|
59
|
+
console.log(formatter.success('Registry mirror configured'));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log(formatter.error('Failed to configure registry mirror'));
|
|
63
|
+
console.log(formatter.info('You may need to run with sudo or configure manually'));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
46
66
|
// Ensure Docker files are extracted
|
|
47
67
|
let dockerPath;
|
|
48
68
|
try {
|
|
@@ -57,25 +77,42 @@ exports.startCommand = {
|
|
|
57
77
|
await (0, docker_files_js_1.ensureEnvFile)();
|
|
58
78
|
// Build compose arguments
|
|
59
79
|
const composeArgs = [];
|
|
60
|
-
|
|
61
|
-
|
|
80
|
+
const composeEnv = {};
|
|
81
|
+
const isPodmanCompose = dockerInfo.composeCommand[0] === 'podman-compose';
|
|
82
|
+
// Select compose file based on mode
|
|
83
|
+
if (allInOneMode) {
|
|
84
|
+
composeArgs.push('-f', 'docker-compose.allinone.yml');
|
|
85
|
+
console.log(formatter.info('Starting all-in-one container...'));
|
|
86
|
+
}
|
|
87
|
+
else if (demoMode) {
|
|
62
88
|
composeArgs.push('-f', 'docker-compose.yml', '-f', 'docker-compose.demo.yml');
|
|
63
89
|
console.log(formatter.info('Starting with demo MySQL cluster...'));
|
|
64
90
|
}
|
|
65
91
|
else {
|
|
66
92
|
console.log(formatter.info('Starting platform services (bring your own MySQL)...'));
|
|
67
93
|
}
|
|
68
|
-
// Add metadata profile if no external DB configured
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
94
|
+
// Add metadata profile if no external DB configured (not for all-in-one)
|
|
95
|
+
if (!allInOneMode) {
|
|
96
|
+
const metadataDbHost = process.env.METADATA_DB_HOST;
|
|
97
|
+
if (!metadataDbHost) {
|
|
98
|
+
// podman-compose doesn't support --profile flag, use environment variable instead
|
|
99
|
+
if (isPodmanCompose) {
|
|
100
|
+
composeEnv.COMPOSE_PROFILES = 'metadata';
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
composeArgs.push('--profile', 'metadata');
|
|
104
|
+
}
|
|
105
|
+
console.log(formatter.info('Auto-provisioning metadata database...'));
|
|
106
|
+
}
|
|
73
107
|
}
|
|
74
108
|
// Add up command
|
|
75
109
|
composeArgs.push('up', '-d');
|
|
76
110
|
// Execute compose up
|
|
77
111
|
console.log();
|
|
78
|
-
const result = await executeCommand(dockerInfo.composeCommand, composeArgs, {
|
|
112
|
+
const result = await executeCommand(dockerInfo.composeCommand, composeArgs, {
|
|
113
|
+
cwd: dockerPath,
|
|
114
|
+
env: Object.keys(composeEnv).length > 0 ? composeEnv : undefined,
|
|
115
|
+
});
|
|
79
116
|
if (!result.success) {
|
|
80
117
|
console.log(formatter.error('Failed to start services'));
|
|
81
118
|
console.log(result.stderr);
|
|
@@ -141,6 +178,7 @@ function executeCommand(cmd, args, options) {
|
|
|
141
178
|
const proc = (0, child_process_1.spawn)(cmd[0], [...cmd.slice(1), ...args], {
|
|
142
179
|
cwd: options?.cwd,
|
|
143
180
|
stdio: options?.silent ? 'pipe' : 'inherit',
|
|
181
|
+
env: options?.env ? { ...process.env, ...options.env } : process.env,
|
|
144
182
|
});
|
|
145
183
|
let stdout = '';
|
|
146
184
|
let stderr = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAGH,kDAA0B;AAC1B,iDAAsC;AACtC,8DAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-files.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/docker-files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AASD;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAsBzC;
|
|
1
|
+
{"version":3,"file":"docker-files.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/docker-files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AASD;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAsBzC;AAiED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CA2EzD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAyBrD"}
|
|
@@ -128,6 +128,26 @@ function getBundledDockerComposePath() {
|
|
|
128
128
|
// docker-compose.yml is at the root of the npm package
|
|
129
129
|
return path.join(__dirname, '..', '..', '..');
|
|
130
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Fix docker-compose paths for extracted files
|
|
133
|
+
*
|
|
134
|
+
* When running from npm install, the docker/ directory is flattened.
|
|
135
|
+
* The original docker-compose.yml has paths like:
|
|
136
|
+
* - dockerfile: docker/Dockerfile.node
|
|
137
|
+
* - ./docker/orchestrator/orchestrator.conf.json
|
|
138
|
+
*
|
|
139
|
+
* After extraction, these need to be:
|
|
140
|
+
* - dockerfile: Dockerfile.node
|
|
141
|
+
* - ./orchestrator/orchestrator.conf.json
|
|
142
|
+
*/
|
|
143
|
+
function fixDockerComposePaths(filePath) {
|
|
144
|
+
let content = fs.readFileSync(filePath, 'utf-8');
|
|
145
|
+
// Fix dockerfile path: "dockerfile: docker/Dockerfile.node" -> "dockerfile: Dockerfile.node"
|
|
146
|
+
content = content.replace(/dockerfile: docker\//g, 'dockerfile: ');
|
|
147
|
+
// Fix volume paths: "./docker/orchestrator/..." -> "./orchestrator/..."
|
|
148
|
+
content = content.replace(/\.\/docker\//g, './');
|
|
149
|
+
fs.writeFileSync(filePath, content);
|
|
150
|
+
}
|
|
131
151
|
/**
|
|
132
152
|
* Extract Docker files from npm package to ~/.clawsql/docker/
|
|
133
153
|
*/
|
|
@@ -152,13 +172,15 @@ async function ensureDockerFiles() {
|
|
|
152
172
|
}
|
|
153
173
|
// Copy docker/ directory
|
|
154
174
|
copyDirRecursive(bundledDockerPath, dockerDir);
|
|
155
|
-
// Copy docker-compose.yml files
|
|
175
|
+
// Copy docker-compose.yml files and fix paths
|
|
156
176
|
const composeFiles = ['docker-compose.yml', 'docker-compose.demo.yml'];
|
|
157
177
|
for (const file of composeFiles) {
|
|
158
178
|
const srcPath = path.join(bundledRootPath, file);
|
|
159
179
|
const destPath = path.join(dockerDir, file);
|
|
160
180
|
if (fs.existsSync(srcPath)) {
|
|
161
181
|
fs.copyFileSync(srcPath, destPath);
|
|
182
|
+
// Fix paths for npm installation
|
|
183
|
+
fixDockerComposePaths(destPath);
|
|
162
184
|
}
|
|
163
185
|
}
|
|
164
186
|
// Copy init/ directory (MySQL init scripts)
|
|
@@ -167,6 +189,22 @@ async function ensureDockerFiles() {
|
|
|
167
189
|
if (fs.existsSync(bundledInitPath)) {
|
|
168
190
|
copyDirRecursive(bundledInitPath, destInitPath);
|
|
169
191
|
}
|
|
192
|
+
// Copy package.json for Docker build
|
|
193
|
+
const packageJsonSrc = path.join(bundledRootPath, 'package.json');
|
|
194
|
+
if (fs.existsSync(packageJsonSrc)) {
|
|
195
|
+
fs.copyFileSync(packageJsonSrc, path.join(dockerDir, 'package.json'));
|
|
196
|
+
}
|
|
197
|
+
// Copy package-lock.json if available
|
|
198
|
+
const packageLockSrc = path.join(bundledRootPath, 'package-lock.json');
|
|
199
|
+
if (fs.existsSync(packageLockSrc)) {
|
|
200
|
+
fs.copyFileSync(packageLockSrc, path.join(dockerDir, 'package-lock.json'));
|
|
201
|
+
}
|
|
202
|
+
// Copy dist/ directory for Docker build (the application code)
|
|
203
|
+
const distSrc = path.join(bundledRootPath, 'dist');
|
|
204
|
+
const distDest = path.join(dockerDir, 'dist');
|
|
205
|
+
if (fs.existsSync(distSrc)) {
|
|
206
|
+
copyDirRecursive(distSrc, distDest);
|
|
207
|
+
}
|
|
170
208
|
// Write version file
|
|
171
209
|
const version = (0, settings_js_1.getSettings)().appVersion;
|
|
172
210
|
fs.writeFileSync(getVersionFilePath(), version);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-files.js","sourceRoot":"","sources":["../../../src/cli/utils/docker-files.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,wCAGC;AAKD,8CAEC;AAYD,0CAsBC;
|
|
1
|
+
{"version":3,"file":"docker-files.js","sourceRoot":"","sources":["../../../src/cli/utils/docker-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,19 @@
|
|
|
4
4
|
* Detects and validates Docker/container runtime prerequisites.
|
|
5
5
|
* Consolidates Docker detection logic used across multiple commands.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Known registry mirrors for different regions
|
|
9
|
+
*/
|
|
10
|
+
export declare const REGISTRY_MIRRORS: {
|
|
11
|
+
china: string;
|
|
12
|
+
aliyun: string;
|
|
13
|
+
ustc: string;
|
|
14
|
+
tencent: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Configure registry mirror for podman
|
|
18
|
+
*/
|
|
19
|
+
export declare function configureRegistryMirror(runtime: 'docker' | 'podman', mirror: string): Promise<boolean>;
|
|
7
20
|
/**
|
|
8
21
|
* Docker runtime information
|
|
9
22
|
*/
|
|
@@ -37,6 +50,10 @@ export declare function getRuntimeVersion(runtime: 'docker' | 'podman'): Promise
|
|
|
37
50
|
* Check all Docker prerequisites and return comprehensive info
|
|
38
51
|
*/
|
|
39
52
|
export declare function checkDockerPrerequisites(): Promise<DockerInfo>;
|
|
53
|
+
/**
|
|
54
|
+
* Get installation guidance for Docker Compose or Podman Compose
|
|
55
|
+
*/
|
|
56
|
+
export declare function getComposeInstallGuidance(runtime: 'docker' | 'podman' | null): string;
|
|
40
57
|
/**
|
|
41
58
|
* Get installation guidance for Docker
|
|
42
59
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-prereq.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/docker-prereq.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"docker-prereq.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/docker-prereq.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;CAK5B,CAAC;AAEF;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CA2DlB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;IACpC,mFAAmF;IACnF,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,aAAa,EAAE,OAAO,CAAC;CACxB;AA6CD;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,CAsBzE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAC3B,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAoC1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CASrF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,UAAU,CAAC,CAwBpE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,CAcrF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAgBjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAYzD"}
|
|
@@ -5,15 +5,123 @@
|
|
|
5
5
|
* Detects and validates Docker/container runtime prerequisites.
|
|
6
6
|
* Consolidates Docker detection logic used across multiple commands.
|
|
7
7
|
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
8
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.REGISTRY_MIRRORS = void 0;
|
|
43
|
+
exports.configureRegistryMirror = configureRegistryMirror;
|
|
9
44
|
exports.detectRuntime = detectRuntime;
|
|
10
45
|
exports.detectComposeCommand = detectComposeCommand;
|
|
11
46
|
exports.checkDaemonRunning = checkDaemonRunning;
|
|
12
47
|
exports.getRuntimeVersion = getRuntimeVersion;
|
|
13
48
|
exports.checkDockerPrerequisites = checkDockerPrerequisites;
|
|
49
|
+
exports.getComposeInstallGuidance = getComposeInstallGuidance;
|
|
14
50
|
exports.getDockerInstallGuidance = getDockerInstallGuidance;
|
|
15
51
|
exports.formatDockerInfo = formatDockerInfo;
|
|
16
52
|
const child_process_1 = require("child_process");
|
|
53
|
+
const fs = __importStar(require("fs"));
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const os = __importStar(require("os"));
|
|
56
|
+
/**
|
|
57
|
+
* Known registry mirrors for different regions
|
|
58
|
+
*/
|
|
59
|
+
exports.REGISTRY_MIRRORS = {
|
|
60
|
+
china: 'docker.m.daocloud.io',
|
|
61
|
+
aliyun: 'registry.cn-hangzhou.aliyuncs.com',
|
|
62
|
+
ustc: 'docker.mirrors.ustc.edu.cn',
|
|
63
|
+
tencent: 'mirror.ccs.tencentyun.com',
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Configure registry mirror for podman
|
|
67
|
+
*/
|
|
68
|
+
async function configureRegistryMirror(runtime, mirror) {
|
|
69
|
+
if (runtime === 'podman') {
|
|
70
|
+
// Try user-level config first
|
|
71
|
+
const userConfigDir = path.join(os.homedir(), '.config', 'containers', 'registries.conf.d');
|
|
72
|
+
const systemConfigDir = '/etc/containers/registries.conf.d';
|
|
73
|
+
const configContent = `[[registry]]
|
|
74
|
+
prefix = "docker.io"
|
|
75
|
+
location = "docker.io"
|
|
76
|
+
|
|
77
|
+
[[registry.mirror]]
|
|
78
|
+
location = "${mirror}"
|
|
79
|
+
`;
|
|
80
|
+
// Try user config first (no sudo needed)
|
|
81
|
+
try {
|
|
82
|
+
if (!fs.existsSync(userConfigDir)) {
|
|
83
|
+
fs.mkdirSync(userConfigDir, { recursive: true });
|
|
84
|
+
}
|
|
85
|
+
const userConfigFile = path.join(userConfigDir, 'clawsql-mirror.conf');
|
|
86
|
+
fs.writeFileSync(userConfigFile, configContent);
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// User config failed, try system config (may need sudo)
|
|
91
|
+
try {
|
|
92
|
+
if (!fs.existsSync(systemConfigDir)) {
|
|
93
|
+
fs.mkdirSync(systemConfigDir, { recursive: true });
|
|
94
|
+
}
|
|
95
|
+
const systemConfigFile = path.join(systemConfigDir, 'clawsql-mirror.conf');
|
|
96
|
+
fs.writeFileSync(systemConfigFile, configContent);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// For Docker, configure daemon.json
|
|
105
|
+
if (runtime === 'docker') {
|
|
106
|
+
const daemonJsonPath = '/etc/docker/daemon.json';
|
|
107
|
+
try {
|
|
108
|
+
let existingConfig = {};
|
|
109
|
+
if (fs.existsSync(daemonJsonPath)) {
|
|
110
|
+
const existing = fs.readFileSync(daemonJsonPath, 'utf-8');
|
|
111
|
+
existingConfig = JSON.parse(existing);
|
|
112
|
+
}
|
|
113
|
+
existingConfig['registry-mirrors'] = [mirror];
|
|
114
|
+
fs.writeFileSync(daemonJsonPath, JSON.stringify(existingConfig, null, 2));
|
|
115
|
+
// Restart docker to apply changes
|
|
116
|
+
console.log('Restarting Docker to apply registry mirror...');
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
17
125
|
/**
|
|
18
126
|
* Execute a shell command and return result
|
|
19
127
|
*/
|
|
@@ -165,12 +273,28 @@ async function checkDockerPrerequisites() {
|
|
|
165
273
|
daemonRunning,
|
|
166
274
|
};
|
|
167
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* Get installation guidance for Docker Compose or Podman Compose
|
|
278
|
+
*/
|
|
279
|
+
function getComposeInstallGuidance(runtime) {
|
|
280
|
+
if (runtime === 'podman') {
|
|
281
|
+
return `Install podman-compose:
|
|
282
|
+
• Linux (dnf): dnf install podman-compose
|
|
283
|
+
• Linux (apt): apt install podman-compose
|
|
284
|
+
• pip: pip install podman-compose`;
|
|
285
|
+
}
|
|
286
|
+
// Docker or no runtime detected
|
|
287
|
+
return `Install Docker Compose:
|
|
288
|
+
• Docker Desktop (Mac/Windows): Includes docker compose
|
|
289
|
+
• Linux (apt): apt install docker-compose-plugin
|
|
290
|
+
• Linux (dnf): dnf install docker-compose-plugin
|
|
291
|
+
• Standalone: https://github.com/docker/compose/releases`;
|
|
292
|
+
}
|
|
168
293
|
/**
|
|
169
294
|
* Get installation guidance for Docker
|
|
170
295
|
*/
|
|
171
296
|
function getDockerInstallGuidance() {
|
|
172
|
-
return `
|
|
173
|
-
Docker is required to run ClawSQL platform.
|
|
297
|
+
return `Docker is required to run ClawSQL platform.
|
|
174
298
|
|
|
175
299
|
Install Docker:
|
|
176
300
|
• macOS: https://docs.docker.com/desktop/install/mac-install/
|
|
@@ -178,13 +302,13 @@ Install Docker:
|
|
|
178
302
|
• Linux: https://docs.docker.com/engine/install/
|
|
179
303
|
|
|
180
304
|
After installing Docker, also ensure Docker Compose is available:
|
|
181
|
-
• Docker Desktop
|
|
182
|
-
• Linux:
|
|
305
|
+
• Docker Desktop (Mac/Windows): Includes docker compose
|
|
306
|
+
• Linux: apt install docker-compose-plugin
|
|
307
|
+
• Standalone: https://github.com/docker/compose/releases
|
|
183
308
|
|
|
184
309
|
Alternative: Podman
|
|
185
310
|
• Install: https://podman.io/getting-started/installation
|
|
186
|
-
• Compose:
|
|
187
|
-
`.trim();
|
|
311
|
+
• Compose: dnf install podman-compose or apt install podman-compose`;
|
|
188
312
|
}
|
|
189
313
|
/**
|
|
190
314
|
* Format Docker info for display
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-prereq.js","sourceRoot":"","sources":["../../../src/cli/utils/docker-prereq.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"docker-prereq.js","sourceRoot":"","sources":["../../../src/cli/utils/docker-prereq.ts"],"names":[],"mappings":"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"}
|
package/dist/config/settings.js
CHANGED
|
@@ -94,7 +94,7 @@ const SyncSettingsSchema = zod_1.z.object({
|
|
|
94
94
|
});
|
|
95
95
|
const SettingsSchema = zod_1.z.object({
|
|
96
96
|
appName: zod_1.z.string().default('ClawSQL'),
|
|
97
|
-
appVersion: zod_1.z.string().default('0.1.
|
|
97
|
+
appVersion: zod_1.z.string().default('0.1.3'),
|
|
98
98
|
debug: zod_1.z.boolean().default(false),
|
|
99
99
|
metadataDb: MetadataDBSettingsSchema,
|
|
100
100
|
orchestrator: OrchestratorSettingsSchema,
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# ClawSQL All-in-One Docker Image
|
|
2
|
+
# A single container with all ClawSQL components
|
|
3
|
+
#
|
|
4
|
+
# This image includes:
|
|
5
|
+
# - ClawSQL API (Node.js)
|
|
6
|
+
# - Orchestrator (MySQL topology management)
|
|
7
|
+
# - ProxySQL (MySQL proxy)
|
|
8
|
+
# - Prometheus (metrics)
|
|
9
|
+
# - Grafana (visualization)
|
|
10
|
+
# - Supervisord (process manager)
|
|
11
|
+
|
|
12
|
+
FROM docker.io/library/node:20-alpine AS clawsql-builder
|
|
13
|
+
|
|
14
|
+
WORKDIR /build
|
|
15
|
+
COPY package.json package-lock.json* ./
|
|
16
|
+
RUN npm ci
|
|
17
|
+
COPY . .
|
|
18
|
+
RUN npm run build
|
|
19
|
+
|
|
20
|
+
# =============================================================================
|
|
21
|
+
# Final all-in-one image
|
|
22
|
+
# =============================================================================
|
|
23
|
+
FROM docker.io/library/alpine:3.19
|
|
24
|
+
|
|
25
|
+
# Install all dependencies
|
|
26
|
+
RUN apk add --no-cache \
|
|
27
|
+
nodejs \
|
|
28
|
+
npm \
|
|
29
|
+
curl \
|
|
30
|
+
wget \
|
|
31
|
+
mysql-client \
|
|
32
|
+
supervisor \
|
|
33
|
+
python3 \
|
|
34
|
+
py3-pip \
|
|
35
|
+
bash \
|
|
36
|
+
shadow \
|
|
37
|
+
&& pip3 install --break-system-packages supervisor
|
|
38
|
+
|
|
39
|
+
# Download and install components
|
|
40
|
+
ARG ORCHESTRATOR_VERSION=latest
|
|
41
|
+
ARG PROXYSQL_VERSION=latest
|
|
42
|
+
ARG PROMETHEUS_VERSION=2.45.0
|
|
43
|
+
ARG GRAFANA_VERSION=10.2.0
|
|
44
|
+
|
|
45
|
+
# Create directories
|
|
46
|
+
RUN mkdir -p /opt/clawsql \
|
|
47
|
+
/opt/orchestrator \
|
|
48
|
+
/opt/proxysql \
|
|
49
|
+
/opt/prometheus \
|
|
50
|
+
/opt/grafana \
|
|
51
|
+
/var/log/supervisor \
|
|
52
|
+
/var/lib/proxysql \
|
|
53
|
+
/var/lib/prometheus \
|
|
54
|
+
/var/lib/grafana \
|
|
55
|
+
/data
|
|
56
|
+
|
|
57
|
+
# Copy ClawSQL application
|
|
58
|
+
COPY --from=clawsql-builder /build/dist /opt/clawsql/dist
|
|
59
|
+
COPY --from=clawsql-builder /build/node_modules /opt/clawsql/node_modules
|
|
60
|
+
COPY --from=clawsql-builder /build/package.json /opt/clawsql/
|
|
61
|
+
COPY docker/orchestrator/orchestrator.conf.json /etc/orchestrator.conf.json
|
|
62
|
+
COPY docker/proxysql/proxysql.cnf /etc/proxysql.cnf
|
|
63
|
+
COPY docker/prometheus/prometheus.yml /etc/prometheus.yml
|
|
64
|
+
COPY docker/grafana/provisioning /opt/grafana/conf/provisioning
|
|
65
|
+
COPY docker/grafana/dashboards /opt/grafana/dashboards
|
|
66
|
+
|
|
67
|
+
# Download Orchestrator (we'll use a binary release if available, or the Docker image)
|
|
68
|
+
RUN ARCH=$(uname -m) && \
|
|
69
|
+
if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \
|
|
70
|
+
wget -q "https://github.com/openark/orchestrator/releases/download/v3.2.6/orchestrator-${ARCH}.tar.gz" -O /tmp/orchestrator.tar.gz || true && \
|
|
71
|
+
if [ -f /tmp/orchestrator.tar.gz ]; then \
|
|
72
|
+
tar -xzf /tmp/orchestrator.tar.gz -C /opt/orchestrator --strip-components=1 && \
|
|
73
|
+
rm /tmp/orchestrator.tar.gz; \
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
# Download Prometheus
|
|
77
|
+
RUN ARCH=$(uname -m) && \
|
|
78
|
+
if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; elif [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
|
|
79
|
+
wget -q "https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.linux-${ARCH}.tar.gz" -O /tmp/prometheus.tar.gz && \
|
|
80
|
+
tar -xzf /tmp/prometheus.tar.gz -C /opt/prometheus --strip-components=1 && \
|
|
81
|
+
rm /tmp/prometheus.tar.gz
|
|
82
|
+
|
|
83
|
+
# Download Grafana
|
|
84
|
+
RUN ARCH=$(uname -m) && \
|
|
85
|
+
if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; elif [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
|
|
86
|
+
wget -q "https://dl.grafana.com/oss/release/grafana-${GRAFANA_VERSION}.linux-${ARCH}.tar.gz" -O /tmp/grafana.tar.gz && \
|
|
87
|
+
tar -xzf /tmp/grafana.tar.gz -C /opt/grafana --strip-components=1 && \
|
|
88
|
+
rm /tmp/grafana.tar.gz
|
|
89
|
+
|
|
90
|
+
# ProxySQL will be installed from Alpine package or downloaded
|
|
91
|
+
RUN apk add --no-cache proxysql || true
|
|
92
|
+
|
|
93
|
+
# Copy supervisord configuration
|
|
94
|
+
COPY docker/supervisord.conf /etc/supervisord.conf
|
|
95
|
+
|
|
96
|
+
# Copy entrypoint script
|
|
97
|
+
COPY docker/entrypoint-allinone.sh /entrypoint.sh
|
|
98
|
+
RUN chmod +x /entrypoint.sh
|
|
99
|
+
|
|
100
|
+
# Environment variables
|
|
101
|
+
ENV NODE_ENV=production \
|
|
102
|
+
API_HOST=0.0.0.0 \
|
|
103
|
+
API_PORT=8080 \
|
|
104
|
+
ORCHESTRATOR_URL=http://localhost:3000 \
|
|
105
|
+
PROXYSQL_HOST=localhost \
|
|
106
|
+
PROXYSQL_ADMIN_PORT=6032 \
|
|
107
|
+
PROMETHEUS_URL=http://localhost:9090
|
|
108
|
+
|
|
109
|
+
# Expose all ports
|
|
110
|
+
EXPOSE 8080 3000 6032 6033 9090 3001
|
|
111
|
+
|
|
112
|
+
# Health check
|
|
113
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
|
114
|
+
CMD curl -f http://localhost:8080/health || exit 1
|
|
115
|
+
|
|
116
|
+
# Start all services via supervisord
|
|
117
|
+
CMD ["/entrypoint.sh"]
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
# ClawSQL All-in-One Entrypoint
|
|
5
|
+
# Starts all services in the correct order
|
|
6
|
+
|
|
7
|
+
echo "Starting ClawSQL All-in-One..."
|
|
8
|
+
|
|
9
|
+
# Create required directories
|
|
10
|
+
mkdir -p /var/log/supervisor /var/log/grafana /var/lib/grafana /var/lib/prometheus /var/lib/proxysql
|
|
11
|
+
|
|
12
|
+
# Generate default secrets if not provided
|
|
13
|
+
: ${API_TOKEN_SECRET:=$(openssl rand -hex 32 2>/dev/null || cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1)}
|
|
14
|
+
: ${MYSQL_ADMIN_PASSWORD:=clawsql_password}
|
|
15
|
+
: ${MYSQL_REPLICATION_PASSWORD:=repl_password}
|
|
16
|
+
|
|
17
|
+
export API_TOKEN_SECRET MYSQL_ADMIN_PASSWORD MYSQL_REPLICATION_PASSWORD
|
|
18
|
+
|
|
19
|
+
# Wait for dependent services if external
|
|
20
|
+
wait_for_service() {
|
|
21
|
+
local host=$1
|
|
22
|
+
local port=$2
|
|
23
|
+
local name=$3
|
|
24
|
+
local max_wait=30
|
|
25
|
+
local count=0
|
|
26
|
+
|
|
27
|
+
if [ -n "$host" ] && [ "$host" != "localhost" ] && [ "$host" != "127.0.0.1" ]; then
|
|
28
|
+
echo "Waiting for $name at $host:$port..."
|
|
29
|
+
while ! nc -z "$host" "$port" 2>/dev/null; do
|
|
30
|
+
count=$((count + 1))
|
|
31
|
+
if [ $count -ge $max_wait ]; then
|
|
32
|
+
echo "Warning: $name not available after ${max_wait}s, continuing..."
|
|
33
|
+
return 1
|
|
34
|
+
fi
|
|
35
|
+
sleep 1
|
|
36
|
+
done
|
|
37
|
+
echo "$name is ready"
|
|
38
|
+
fi
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# Wait for external MySQL if configured
|
|
42
|
+
if [ -n "$METADATA_DB_HOST" ]; then
|
|
43
|
+
wait_for_service "$METADATA_DB_HOST" "${METADATA_DB_PORT:-3306}" "Metadata MySQL"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# Update Prometheus config with correct targets
|
|
47
|
+
if [ -f /etc/prometheus.yml ]; then
|
|
48
|
+
sed -i "s/localhost:8080/${API_HOST:-localhost}:${API_PORT:-8080}/g" /etc/prometheus.yml
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# Update Orchestrator config with database settings
|
|
52
|
+
if [ -f /etc/orchestrator.conf.json ]; then
|
|
53
|
+
if [ -n "$METADATA_DB_HOST" ]; then
|
|
54
|
+
sed -i "s/\"Host\":\"metadata-mysql\"/\"Host\":\"${METADATA_DB_HOST}\"/g" /etc/orchestrator.conf.json
|
|
55
|
+
fi
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
echo "Starting services via supervisord..."
|
|
59
|
+
exec /usr/bin/supervisord -c /etc/supervisord.conf
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
[supervisord]
|
|
2
|
+
nodaemon=true
|
|
3
|
+
logfile=/var/log/supervisor/supervisord.log
|
|
4
|
+
pidfile=/var/run/supervisord.pid
|
|
5
|
+
user=root
|
|
6
|
+
|
|
7
|
+
[program:clawsql]
|
|
8
|
+
command=node /opt/clawsql/dist/index.js
|
|
9
|
+
directory=/opt/clawsql
|
|
10
|
+
autostart=true
|
|
11
|
+
autorestart=true
|
|
12
|
+
startsecs=5
|
|
13
|
+
stdout_logfile=/var/log/supervisor/clawsql.log
|
|
14
|
+
stderr_logfile=/var/log/supervisor/clawsql-error.log
|
|
15
|
+
environment=NODE_ENV="production"
|
|
16
|
+
|
|
17
|
+
[program:orchestrator]
|
|
18
|
+
command=/opt/orchestrator/orchestrator http
|
|
19
|
+
directory=/opt/orchestrator
|
|
20
|
+
autostart=true
|
|
21
|
+
autorestart=true
|
|
22
|
+
startsecs=5
|
|
23
|
+
stdout_logfile=/var/log/supervisor/orchestrator.log
|
|
24
|
+
stderr_logfile=/var/log/supervisor/orchestrator-error.log
|
|
25
|
+
|
|
26
|
+
[program:proxysql]
|
|
27
|
+
command=proxysql -f -c /etc/proxysql.cnf
|
|
28
|
+
autostart=true
|
|
29
|
+
autorestart=true
|
|
30
|
+
startsecs=5
|
|
31
|
+
stdout_logfile=/var/log/supervisor/proxysql.log
|
|
32
|
+
stderr_logfile=/var/log/supervisor/proxysql-error.log
|
|
33
|
+
|
|
34
|
+
[program:prometheus]
|
|
35
|
+
command=/opt/prometheus/prometheus --config.file=/etc/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.listen-address=:9090
|
|
36
|
+
directory=/opt/prometheus
|
|
37
|
+
autostart=true
|
|
38
|
+
autorestart=true
|
|
39
|
+
startsecs=5
|
|
40
|
+
stdout_logfile=/var/log/supervisor/prometheus.log
|
|
41
|
+
stderr_logfile=/var/log/supervisor/prometheus-error.log
|
|
42
|
+
|
|
43
|
+
[program:grafana]
|
|
44
|
+
command=/opt/grafana/bin/grafana-server --homepath=/opt/grafana --config=/opt/grafana/conf/defaults.ini
|
|
45
|
+
directory=/opt/grafana
|
|
46
|
+
autostart=true
|
|
47
|
+
autorestart=true
|
|
48
|
+
startsecs=5
|
|
49
|
+
stdout_logfile=/var/log/supervisor/grafana.log
|
|
50
|
+
stderr_logfile=/var/log/supervisor/grafana-error.log
|
|
51
|
+
environment=GF_PATHS_DATA="/var/lib/grafana",GF_PATHS_LOGS="/var/log/grafana"
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# ClawSQL All-in-One Deployment
|
|
2
|
+
# A single container with all components
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# docker-compose -f docker-compose.allinone.yml up -d
|
|
6
|
+
#
|
|
7
|
+
# This is the simplest deployment option - one container with everything.
|
|
8
|
+
|
|
9
|
+
services:
|
|
10
|
+
clawsql-allinone:
|
|
11
|
+
image: clawsql/clawsql:allinone
|
|
12
|
+
build:
|
|
13
|
+
context: .
|
|
14
|
+
dockerfile: docker/Dockerfile.allinone
|
|
15
|
+
container_name: clawsql
|
|
16
|
+
hostname: clawsql
|
|
17
|
+
privileged: true
|
|
18
|
+
ports:
|
|
19
|
+
- "8080:8080" # ClawSQL API
|
|
20
|
+
- "3000:3000" # Orchestrator
|
|
21
|
+
- "6032:6032" # ProxySQL Admin
|
|
22
|
+
- "6033:6033" # ProxySQL MySQL
|
|
23
|
+
- "9090:9090" # Prometheus
|
|
24
|
+
- "3001:3001" # Grafana
|
|
25
|
+
environment:
|
|
26
|
+
- API_HOST=0.0.0.0
|
|
27
|
+
- API_PORT=8080
|
|
28
|
+
- API_TOKEN_SECRET=${API_TOKEN_SECRET:-change-me-in-production}
|
|
29
|
+
- ORCHESTRATOR_URL=http://localhost:3000
|
|
30
|
+
- PROXYSQL_HOST=localhost
|
|
31
|
+
- PROXYSQL_ADMIN_PORT=6032
|
|
32
|
+
- PROMETHEUS_URL=http://localhost:9090
|
|
33
|
+
# Metadata Database (optional - uses internal SQLite if not set)
|
|
34
|
+
- METADATA_DB_HOST=${METADATA_DB_HOST:-}
|
|
35
|
+
- METADATA_DB_PORT=${METADATA_DB_PORT:-3306}
|
|
36
|
+
- METADATA_DB_NAME=${METADATA_DB_NAME:-clawsql_meta}
|
|
37
|
+
- METADATA_DB_USER=${METADATA_DB_USER:-clawsql}
|
|
38
|
+
- METADATA_DB_PASSWORD=${METADATA_DB_PASSWORD:-clawsql_password}
|
|
39
|
+
# MySQL credentials
|
|
40
|
+
- MYSQL_ADMIN_USER=${MYSQL_ADMIN_USER:-clawsql}
|
|
41
|
+
- MYSQL_ADMIN_PASSWORD=${MYSQL_ADMIN_PASSWORD:-clawsql_password}
|
|
42
|
+
- MYSQL_REPLICATION_USER=${MYSQL_REPLICATION_USER:-repl}
|
|
43
|
+
- MYSQL_REPLICATION_PASSWORD=${MYSQL_REPLICATION_PASSWORD:-repl_password}
|
|
44
|
+
# Logging
|
|
45
|
+
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
|
46
|
+
- LOG_FORMAT=${LOG_FORMAT:-json}
|
|
47
|
+
# Failover
|
|
48
|
+
- AUTO_FAILOVER_ENABLED=${AUTO_FAILOVER_ENABLED:-true}
|
|
49
|
+
volumes:
|
|
50
|
+
- clawsql-data:/data
|
|
51
|
+
- prometheus-data:/var/lib/prometheus
|
|
52
|
+
- grafana-data:/var/lib/grafana
|
|
53
|
+
- proxysql-data:/var/lib/proxysql
|
|
54
|
+
restart: unless-stopped
|
|
55
|
+
healthcheck:
|
|
56
|
+
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
|
|
57
|
+
interval: 30s
|
|
58
|
+
timeout: 10s
|
|
59
|
+
retries: 3
|
|
60
|
+
start_period: 60s
|
|
61
|
+
|
|
62
|
+
volumes:
|
|
63
|
+
clawsql-data:
|
|
64
|
+
prometheus-data:
|
|
65
|
+
grafana-data:
|
|
66
|
+
proxysql-data:
|
package/docker-compose.demo.yml
CHANGED
|
@@ -9,7 +9,7 @@ services:
|
|
|
9
9
|
# MySQL Primary (Writer)
|
|
10
10
|
# =============================================================================
|
|
11
11
|
mysql-primary:
|
|
12
|
-
image: mysql:8.0
|
|
12
|
+
image: docker.io/library/mysql:8.0
|
|
13
13
|
container_name: mysql-primary
|
|
14
14
|
hostname: mysql-primary
|
|
15
15
|
ports:
|
package/docker-compose.yml
CHANGED
|
@@ -15,6 +15,7 @@ services:
|
|
|
15
15
|
# ClawSQL Application (Node.js)
|
|
16
16
|
# =============================================================================
|
|
17
17
|
clawsql:
|
|
18
|
+
image: clawsql/clawsql:latest
|
|
18
19
|
build:
|
|
19
20
|
context: .
|
|
20
21
|
dockerfile: docker/Dockerfile.node
|
|
@@ -65,7 +66,7 @@ services:
|
|
|
65
66
|
# Uses shared metadata MySQL database
|
|
66
67
|
# =============================================================================
|
|
67
68
|
orchestrator:
|
|
68
|
-
image: openarkcode/orchestrator:latest
|
|
69
|
+
image: docker.io/openarkcode/orchestrator:latest
|
|
69
70
|
container_name: orchestrator
|
|
70
71
|
hostname: orchestrator
|
|
71
72
|
ports:
|
|
@@ -80,7 +81,7 @@ services:
|
|
|
80
81
|
# ProxySQL - MySQL Proxy with Routing
|
|
81
82
|
# =============================================================================
|
|
82
83
|
proxysql:
|
|
83
|
-
image: proxysql/proxysql:latest
|
|
84
|
+
image: docker.io/proxysql/proxysql:latest
|
|
84
85
|
container_name: proxysql
|
|
85
86
|
hostname: proxysql
|
|
86
87
|
ports:
|
|
@@ -99,7 +100,7 @@ services:
|
|
|
99
100
|
# Prometheus - Metrics Collection
|
|
100
101
|
# =============================================================================
|
|
101
102
|
prometheus:
|
|
102
|
-
image: prom/prometheus:latest
|
|
103
|
+
image: docker.io/prom/prometheus:latest
|
|
103
104
|
container_name: prometheus
|
|
104
105
|
hostname: prometheus
|
|
105
106
|
ports:
|
|
@@ -119,7 +120,7 @@ services:
|
|
|
119
120
|
# Grafana - Visualization
|
|
120
121
|
# =============================================================================
|
|
121
122
|
grafana:
|
|
122
|
-
image: grafana/grafana:latest
|
|
123
|
+
image: docker.io/grafana/grafana:latest
|
|
123
124
|
container_name: grafana
|
|
124
125
|
hostname: grafana
|
|
125
126
|
ports:
|
|
@@ -176,7 +177,7 @@ services:
|
|
|
176
177
|
# Auto-provisioned if METADATA_DB_HOST is not set
|
|
177
178
|
# =============================================================================
|
|
178
179
|
metadata-mysql:
|
|
179
|
-
image: mysql:8.0
|
|
180
|
+
image: docker.io/library/mysql:8.0
|
|
180
181
|
container_name: metadata-mysql
|
|
181
182
|
hostname: metadata-mysql
|
|
182
183
|
profiles:
|
package/init/primary.sql
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
-- Primary initialization script
|
|
2
|
-
-- Create replication user
|
|
3
|
-
CREATE USER IF NOT EXISTS 'repl'@'%' IDENTIFIED BY 'replpassword';
|
|
2
|
+
-- Create replication user with mysql_native_password for compatibility
|
|
3
|
+
CREATE USER IF NOT EXISTS 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'replpassword';
|
|
4
4
|
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
|
|
5
5
|
|
|
6
6
|
-- Create monitoring user
|
|
7
|
-
CREATE USER IF NOT EXISTS 'monitor'@'%' IDENTIFIED BY 'monitorpassword';
|
|
7
|
+
CREATE USER IF NOT EXISTS 'monitor'@'%' IDENTIFIED WITH mysql_native_password BY 'monitorpassword';
|
|
8
8
|
GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'monitor'@'%';
|
|
9
9
|
GRANT SELECT ON mysql.* TO 'monitor'@'%';
|
|
10
10
|
|
|
11
11
|
-- Create Orchestrator user (needs SUPER for topology management)
|
|
12
|
-
|
|
12
|
+
-- Uses mysql_native_password for compatibility with Orchestrator
|
|
13
|
+
CREATE USER IF NOT EXISTS 'clawsql'@'%' IDENTIFIED WITH mysql_native_password BY 'clawsql_password';
|
|
13
14
|
GRANT ALL PRIVILEGES ON *.* TO 'clawsql'@'%' WITH GRANT OPTION;
|
|
14
15
|
|
|
15
16
|
-- Create application user for demo database
|
|
16
|
-
CREATE USER IF NOT EXISTS 'app'@'%' IDENTIFIED BY 'apppassword';
|
|
17
|
+
CREATE USER IF NOT EXISTS 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'apppassword';
|
|
17
18
|
GRANT ALL PRIVILEGES ON clawsql.* TO 'app'@'%';
|
|
18
19
|
|
|
19
20
|
FLUSH PRIVILEGES;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clawsql",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "MySQL Cluster Automation and Operations Management System",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -78,7 +78,9 @@
|
|
|
78
78
|
"docker",
|
|
79
79
|
"docker-compose.yml",
|
|
80
80
|
"docker-compose.demo.yml",
|
|
81
|
+
"docker-compose.allinone.yml",
|
|
81
82
|
"init",
|
|
82
|
-
".env.example"
|
|
83
|
+
".env.example",
|
|
84
|
+
"package-lock.json"
|
|
83
85
|
]
|
|
84
86
|
}
|