zideploy 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.
Files changed (61) hide show
  1. package/dist/commands/deploy.d.ts +14 -0
  2. package/dist/commands/deploy.d.ts.map +1 -0
  3. package/dist/commands/deploy.js +143 -0
  4. package/dist/commands/deploy.js.map +1 -0
  5. package/dist/commands/init.d.ts +10 -0
  6. package/dist/commands/init.d.ts.map +1 -0
  7. package/dist/commands/init.js +79 -0
  8. package/dist/commands/init.js.map +1 -0
  9. package/dist/config/mirrors.d.ts +13 -0
  10. package/dist/config/mirrors.d.ts.map +1 -0
  11. package/dist/config/mirrors.js +25 -0
  12. package/dist/config/mirrors.js.map +1 -0
  13. package/dist/deploy/detector.d.ts +4 -0
  14. package/dist/deploy/detector.d.ts.map +1 -0
  15. package/dist/deploy/detector.js +67 -0
  16. package/dist/deploy/detector.js.map +1 -0
  17. package/dist/deploy/direct-deploy.d.ts +6 -0
  18. package/dist/deploy/direct-deploy.d.ts.map +1 -0
  19. package/dist/deploy/direct-deploy.js +100 -0
  20. package/dist/deploy/direct-deploy.js.map +1 -0
  21. package/dist/deploy/docker-deploy.d.ts +5 -0
  22. package/dist/deploy/docker-deploy.d.ts.map +1 -0
  23. package/dist/deploy/docker-deploy.js +63 -0
  24. package/dist/deploy/docker-deploy.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +132 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp-server.d.ts +3 -0
  30. package/dist/mcp-server.d.ts.map +1 -0
  31. package/dist/mcp-server.js +269 -0
  32. package/dist/mcp-server.js.map +1 -0
  33. package/dist/prompts/credentials.d.ts +4 -0
  34. package/dist/prompts/credentials.d.ts.map +1 -0
  35. package/dist/prompts/credentials.js +86 -0
  36. package/dist/prompts/credentials.js.map +1 -0
  37. package/dist/setup/docker.d.ts +5 -0
  38. package/dist/setup/docker.d.ts.map +1 -0
  39. package/dist/setup/docker.js +55 -0
  40. package/dist/setup/docker.js.map +1 -0
  41. package/dist/setup/mirrors.d.ts +6 -0
  42. package/dist/setup/mirrors.d.ts.map +1 -0
  43. package/dist/setup/mirrors.js +52 -0
  44. package/dist/setup/mirrors.js.map +1 -0
  45. package/dist/setup/nginx.d.ts +6 -0
  46. package/dist/setup/nginx.d.ts.map +1 -0
  47. package/dist/setup/nginx.js +87 -0
  48. package/dist/setup/nginx.js.map +1 -0
  49. package/dist/setup/nodejs.d.ts +6 -0
  50. package/dist/setup/nodejs.d.ts.map +1 -0
  51. package/dist/setup/nodejs.js +69 -0
  52. package/dist/setup/nodejs.js.map +1 -0
  53. package/dist/ssh/client.d.ts +18 -0
  54. package/dist/ssh/client.d.ts.map +1 -0
  55. package/dist/ssh/client.js +70 -0
  56. package/dist/ssh/client.js.map +1 -0
  57. package/dist/types/index.d.ts +32 -0
  58. package/dist/types/index.d.ts.map +1 -0
  59. package/dist/types/index.js +11 -0
  60. package/dist/types/index.js.map +1 -0
  61. package/package.json +31 -0
@@ -0,0 +1,14 @@
1
+ export interface DeployOptions {
2
+ host?: string;
3
+ port?: number;
4
+ user?: string;
5
+ password?: string;
6
+ location?: string;
7
+ ubuntuVersion?: string;
8
+ project?: string;
9
+ domain?: string;
10
+ path?: string;
11
+ appPort?: number;
12
+ }
13
+ export declare function runDeploy(opts: DeployOptions): Promise<void>;
14
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGlE"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runDeploy = runDeploy;
40
+ const fs = __importStar(require("fs"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const client_1 = require("../ssh/client");
43
+ const types_1 = require("../types");
44
+ const credentials_1 = require("../prompts/credentials");
45
+ const detector_1 = require("../deploy/detector");
46
+ const docker_deploy_1 = require("../deploy/docker-deploy");
47
+ const direct_deploy_1 = require("../deploy/direct-deploy");
48
+ const nginx_1 = require("../setup/nginx");
49
+ const nodejs_1 = require("../setup/nodejs");
50
+ const docker_1 = require("../setup/docker");
51
+ async function runDeploy(opts) {
52
+ console.log(chalk_1.default.cyan('\n=== ZiDeploy — Deploy Project ===\n'));
53
+ let serverCreds;
54
+ let config;
55
+ if (opts.host && opts.user && opts.password && opts.project && opts.domain && opts.path) {
56
+ serverCreds = {
57
+ host: opts.host,
58
+ port: opts.port ?? 22,
59
+ username: opts.user,
60
+ password: opts.password,
61
+ location: opts.location ?? 'global',
62
+ ubuntuVersion: opts.ubuntuVersion,
63
+ };
64
+ config = {
65
+ server: serverCreds,
66
+ projectName: opts.project,
67
+ clientDomain: opts.domain,
68
+ localProjectPath: opts.path,
69
+ appPort: opts.appPort ?? 3000,
70
+ };
71
+ }
72
+ else {
73
+ serverCreds = await (0, credentials_1.promptServerCredentials)({
74
+ host: opts.host,
75
+ port: opts.port,
76
+ username: opts.user,
77
+ location: opts.location,
78
+ });
79
+ config = await (0, credentials_1.promptDeployConfig)(serverCreds);
80
+ }
81
+ if (!fs.existsSync(config.localProjectPath)) {
82
+ console.error(chalk_1.default.red(`Error: project path does not exist: ${config.localProjectPath}`));
83
+ process.exit(1);
84
+ }
85
+ const projectType = (0, detector_1.detectProjectType)(config.localProjectPath);
86
+ config.projectType = projectType;
87
+ console.log(chalk_1.default.yellow(`\nDetected project type: ${chalk_1.default.bold(projectType)}`));
88
+ console.log(chalk_1.default.yellow(`Connecting to ${serverCreds.host}:${serverCreds.port}...\n`));
89
+ const ssh = new client_1.SSHClient(serverCreds);
90
+ try {
91
+ await ssh.connect();
92
+ console.log(chalk_1.default.green(`Connected to ${serverCreds.host}\n`));
93
+ switch (projectType) {
94
+ case 'docker': {
95
+ await (0, docker_1.installDocker)(ssh, serverCreds);
96
+ const hasCompose = fs.existsSync(`${config.localProjectPath}/docker-compose.yml`) ||
97
+ fs.existsSync(`${config.localProjectPath}/docker-compose.yaml`);
98
+ if (hasCompose) {
99
+ await (0, docker_deploy_1.deployWithDockerCompose)(ssh, config);
100
+ }
101
+ else {
102
+ await (0, docker_deploy_1.deployWithDocker)(ssh, config);
103
+ }
104
+ break;
105
+ }
106
+ case 'node': {
107
+ await (0, nodejs_1.installNodejs)(ssh, serverCreds);
108
+ await (0, nodejs_1.installPm2)(ssh);
109
+ await (0, direct_deploy_1.deployNode)(ssh, config);
110
+ break;
111
+ }
112
+ case 'php': {
113
+ await (0, nodejs_1.installPhp)(ssh);
114
+ await (0, direct_deploy_1.deployPhp)(ssh, config);
115
+ break;
116
+ }
117
+ case 'static': {
118
+ await (0, direct_deploy_1.deployStatic)(ssh, config);
119
+ break;
120
+ }
121
+ default:
122
+ console.log(chalk_1.default.yellow('Could not detect project type automatically. Treating as Node.js.'));
123
+ await (0, nodejs_1.installNodejs)(ssh, serverCreds);
124
+ await (0, nodejs_1.installPm2)(ssh);
125
+ await (0, direct_deploy_1.deployNode)(ssh, config);
126
+ }
127
+ await (0, nginx_1.createSubdomain)(ssh, {
128
+ projectName: config.projectName,
129
+ appPort: config.appPort,
130
+ clientDomain: config.clientDomain,
131
+ });
132
+ console.log(chalk_1.default.green('\n✓ Deployment complete!'));
133
+ console.log(` Preview URL : ${chalk_1.default.cyan(`http://${config.projectName}.${types_1.PLATFORM_DOMAIN}`)}`);
134
+ if (config.clientDomain) {
135
+ console.log(` Custom domain: ${chalk_1.default.cyan(`http://${config.clientDomain}`)} (point DNS A record to ${serverCreds.host})`);
136
+ }
137
+ console.log();
138
+ }
139
+ finally {
140
+ ssh.disconnect();
141
+ }
142
+ }
143
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface InitOptions {
2
+ host?: string;
3
+ port?: number;
4
+ user?: string;
5
+ password?: string;
6
+ location?: string;
7
+ ubuntuVersion?: string;
8
+ }
9
+ export declare function runInit(opts: InitOptions): Promise<void>;
10
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqE9D"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runInit = runInit;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const inquirer_1 = __importDefault(require("inquirer"));
9
+ const client_1 = require("../ssh/client");
10
+ const credentials_1 = require("../prompts/credentials");
11
+ const mirrors_1 = require("../setup/mirrors");
12
+ const docker_1 = require("../setup/docker");
13
+ const nginx_1 = require("../setup/nginx");
14
+ const nodejs_1 = require("../setup/nodejs");
15
+ async function runInit(opts) {
16
+ console.log(chalk_1.default.cyan('\n=== ZiDeploy Server Initialization ===\n'));
17
+ let creds;
18
+ if (opts.host && opts.user && opts.password) {
19
+ creds = {
20
+ host: opts.host,
21
+ port: opts.port ?? 22,
22
+ username: opts.user,
23
+ password: opts.password,
24
+ location: opts.location ?? 'global',
25
+ ubuntuVersion: opts.ubuntuVersion,
26
+ };
27
+ }
28
+ else {
29
+ creds = await (0, credentials_1.promptServerCredentials)({
30
+ host: opts.host,
31
+ port: opts.port,
32
+ username: opts.user,
33
+ location: opts.location,
34
+ });
35
+ }
36
+ const { components } = await inquirer_1.default.prompt([
37
+ {
38
+ type: 'checkbox',
39
+ name: 'components',
40
+ message: 'What do you want to install?',
41
+ choices: [
42
+ { name: 'Docker', value: 'docker', checked: true },
43
+ { name: 'Nginx (for subdomain routing)', value: 'nginx', checked: true },
44
+ { name: 'Node.js + PM2', value: 'nodejs', checked: true },
45
+ { name: 'PHP + PHP-FPM', value: 'php', checked: false },
46
+ ],
47
+ },
48
+ ]);
49
+ console.log(chalk_1.default.yellow(`\nConnecting to ${creds.host}:${creds.port}...`));
50
+ const ssh = new client_1.SSHClient(creds);
51
+ try {
52
+ await ssh.connect();
53
+ console.log(chalk_1.default.green(`Connected to ${creds.host}\n`));
54
+ await ssh.sudo('apt-get update -y');
55
+ if (creds.location === 'ir') {
56
+ await (0, mirrors_1.configureUbuntuMirrors)(ssh, creds);
57
+ }
58
+ if (components.includes('docker')) {
59
+ await (0, docker_1.installDocker)(ssh, creds);
60
+ await (0, docker_1.installDockerCompose)(ssh);
61
+ }
62
+ if (components.includes('nginx')) {
63
+ await (0, nginx_1.installNginx)(ssh);
64
+ }
65
+ if (components.includes('nodejs')) {
66
+ await (0, nodejs_1.installNodejs)(ssh, creds);
67
+ await (0, nodejs_1.installPm2)(ssh);
68
+ }
69
+ if (components.includes('php')) {
70
+ await (0, nodejs_1.installPhp)(ssh);
71
+ }
72
+ console.log(chalk_1.default.green('\n✓ Server initialization complete!'));
73
+ console.log(chalk_1.default.gray(` Server ${creds.host} is ready for deployments.\n`));
74
+ }
75
+ finally {
76
+ ssh.disconnect();
77
+ }
78
+ }
79
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { UbuntuVersion } from '../types';
2
+ export declare const CHABOKAN_MIRROR_BASE = "https://mirror2.chabokan.net";
3
+ export declare const NPM_MIRROR: {
4
+ registry: string;
5
+ original: string;
6
+ };
7
+ export declare const DOCKER_MIRROR: {
8
+ registryMirrors: string[];
9
+ };
10
+ export declare const UBUNTU_MIRROR_BASE = "https://mirror2.chabokan.net/ubuntu";
11
+ export declare function getUbuntuMirrorLines(version: UbuntuVersion): string;
12
+ export declare function getUbuntuSourcesList(version: UbuntuVersion): string;
13
+ //# sourceMappingURL=mirrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mirrors.d.ts","sourceRoot":"","sources":["../../src/config/mirrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AAEnE,eAAO,MAAM,UAAU;;;CAGtB,CAAC;AAEF,eAAO,MAAM,aAAa;;CAEzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,wCAAmC,CAAC;AAEnE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAMnE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAEnE"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UBUNTU_MIRROR_BASE = exports.DOCKER_MIRROR = exports.NPM_MIRROR = exports.CHABOKAN_MIRROR_BASE = void 0;
4
+ exports.getUbuntuMirrorLines = getUbuntuMirrorLines;
5
+ exports.getUbuntuSourcesList = getUbuntuSourcesList;
6
+ exports.CHABOKAN_MIRROR_BASE = 'https://mirror2.chabokan.net';
7
+ exports.NPM_MIRROR = {
8
+ registry: `${exports.CHABOKAN_MIRROR_BASE}/npm/`,
9
+ original: 'https://registry.npmjs.org/',
10
+ };
11
+ exports.DOCKER_MIRROR = {
12
+ registryMirrors: [exports.CHABOKAN_MIRROR_BASE],
13
+ };
14
+ exports.UBUNTU_MIRROR_BASE = `${exports.CHABOKAN_MIRROR_BASE}/ubuntu`;
15
+ function getUbuntuMirrorLines(version) {
16
+ return [
17
+ `deb [trusted=yes] ${exports.UBUNTU_MIRROR_BASE} ${version} main universe`,
18
+ `deb [trusted=yes] ${exports.UBUNTU_MIRROR_BASE} ${version}-updates main universe`,
19
+ `deb [trusted=yes] ${exports.UBUNTU_MIRROR_BASE} ${version}-security main universe`,
20
+ ].join('\n');
21
+ }
22
+ function getUbuntuSourcesList(version) {
23
+ return getUbuntuMirrorLines(version);
24
+ }
25
+ //# sourceMappingURL=mirrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mirrors.js","sourceRoot":"","sources":["../../src/config/mirrors.ts"],"names":[],"mappings":";;;AAeA,oDAMC;AAED,oDAEC;AAvBY,QAAA,oBAAoB,GAAG,8BAA8B,CAAC;AAEtD,QAAA,UAAU,GAAG;IACxB,QAAQ,EAAE,GAAG,4BAAoB,OAAO;IACxC,QAAQ,EAAE,6BAA6B;CACxC,CAAC;AAEW,QAAA,aAAa,GAAG;IAC3B,eAAe,EAAE,CAAC,4BAAoB,CAAC;CACxC,CAAC;AAEW,QAAA,kBAAkB,GAAG,GAAG,4BAAoB,SAAS,CAAC;AAEnE,SAAgB,oBAAoB,CAAC,OAAsB;IACzD,OAAO;QACL,qBAAqB,0BAAkB,IAAI,OAAO,gBAAgB;QAClE,qBAAqB,0BAAkB,IAAI,OAAO,wBAAwB;QAC1E,qBAAqB,0BAAkB,IAAI,OAAO,yBAAyB;KAC5E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAsB;IACzD,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ProjectType } from '../types';
2
+ export declare function detectProjectType(projectPath: string): ProjectType;
3
+ export declare function getAppEntryPoint(projectPath: string): string | null;
4
+ //# sourceMappingURL=detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/deploy/detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAmBlE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOnE"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.detectProjectType = detectProjectType;
37
+ exports.getAppEntryPoint = getAppEntryPoint;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ function detectProjectType(projectPath) {
41
+ const files = fs.readdirSync(projectPath);
42
+ if (files.includes('Dockerfile') || files.includes('docker-compose.yml') || files.includes('docker-compose.yaml')) {
43
+ return 'docker';
44
+ }
45
+ if (files.includes('go.mod')) {
46
+ return 'go';
47
+ }
48
+ if (files.includes('package.json')) {
49
+ return 'node';
50
+ }
51
+ if (files.includes('composer.json') || files.some(f => f.endsWith('.php'))) {
52
+ return 'php';
53
+ }
54
+ if (files.some(f => f.endsWith('.html') || f.endsWith('.htm'))) {
55
+ return 'static';
56
+ }
57
+ return 'unknown';
58
+ }
59
+ function getAppEntryPoint(projectPath) {
60
+ const pkg = path.join(projectPath, 'package.json');
61
+ if (fs.existsSync(pkg)) {
62
+ const json = JSON.parse(fs.readFileSync(pkg, 'utf-8'));
63
+ return json.main || json.scripts?.start?.replace('node ', '') || 'index.js';
64
+ }
65
+ return null;
66
+ }
67
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/deploy/detector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,8CAmBC;AAED,4CAOC;AAhCD,uCAAyB;AACzB,2CAA6B;AAG7B,SAAgB,iBAAiB,CAAC,WAAmB;IACnD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAE1C,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAClH,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,gBAAgB,CAAC,WAAmB;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { SSHClient } from '../ssh/client';
2
+ import { DeployConfig } from '../types';
3
+ export declare function deployNode(ssh: SSHClient, config: DeployConfig): Promise<void>;
4
+ export declare function deployPhp(ssh: SSHClient, config: DeployConfig): Promise<void>;
5
+ export declare function deployStatic(ssh: SSHClient, config: DeployConfig): Promise<void>;
6
+ //# sourceMappingURL=direct-deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-deploy.d.ts","sourceRoot":"","sources":["../../src/deploy/direct-deploy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAe,MAAM,UAAU,CAAC;AAmBrD,wBAAsB,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BpF;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BnF;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBtF"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deployNode = deployNode;
7
+ exports.deployPhp = deployPhp;
8
+ exports.deployStatic = deployStatic;
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const detector_1 = require("./detector");
11
+ const DEPLOY_BASE = '/var/www/zisites';
12
+ async function uploadFiles(ssh, config) {
13
+ const projectDir = `${DEPLOY_BASE}/${config.projectName}`;
14
+ const spinner = (0, ora_1.default)(`Uploading files to ${projectDir}...`).start();
15
+ try {
16
+ await ssh.sudo(`mkdir -p ${projectDir}`);
17
+ await ssh.putDirectory(config.localProjectPath, projectDir);
18
+ spinner.succeed('Files uploaded');
19
+ return projectDir;
20
+ }
21
+ catch (err) {
22
+ spinner.fail('File upload failed');
23
+ throw err;
24
+ }
25
+ }
26
+ async function deployNode(ssh, config) {
27
+ const projectDir = await uploadFiles(ssh, config);
28
+ let spinner = (0, ora_1.default)('Installing npm dependencies...').start();
29
+ try {
30
+ await ssh.exec(`cd ${projectDir} && npm install --production`);
31
+ spinner.succeed('npm install done');
32
+ }
33
+ catch (err) {
34
+ spinner.fail('npm install failed');
35
+ throw err;
36
+ }
37
+ const entryPoint = (0, detector_1.getAppEntryPoint)(config.localProjectPath) || 'index.js';
38
+ spinner = (0, ora_1.default)('Starting app with PM2...').start();
39
+ try {
40
+ await ssh.exec(`pm2 delete ${config.projectName} 2>/dev/null || true`);
41
+ await ssh.exec(`cd ${projectDir} && PORT=${config.appPort} pm2 start ${entryPoint} --name ${config.projectName} --update-env`);
42
+ await ssh.exec('pm2 save');
43
+ spinner.succeed(`App started with PM2 (port ${config.appPort})`);
44
+ }
45
+ catch (err) {
46
+ spinner.fail('PM2 start failed');
47
+ throw err;
48
+ }
49
+ }
50
+ async function deployPhp(ssh, config) {
51
+ const projectDir = await uploadFiles(ssh, config);
52
+ const spinner = (0, ora_1.default)('Configuring PHP-FPM pool...').start();
53
+ try {
54
+ const phpVersion = (await ssh.exec('php -r "echo PHP_MAJOR_VERSION.\".\".PHP_MINOR_VERSION;"')).stdout.trim();
55
+ const poolConf = `[${config.projectName}]
56
+ user = www-data
57
+ group = www-data
58
+ listen = 127.0.0.1:${config.appPort}
59
+ listen.owner = www-data
60
+ listen.group = www-data
61
+ pm = dynamic
62
+ pm.max_children = 5
63
+ pm.start_servers = 2
64
+ pm.min_spare_servers = 1
65
+ pm.max_spare_servers = 3
66
+ chdir = ${projectDir}
67
+ `;
68
+ await ssh.sudo(`bash -c "cat > /etc/php/${phpVersion}/fpm/pool.d/${config.projectName}.conf << 'POOL_EOF'\n${poolConf}\nPOOL_EOF"`);
69
+ await ssh.sudo(`systemctl restart php${phpVersion}-fpm`);
70
+ spinner.succeed(`PHP-FPM pool configured on port ${config.appPort}`);
71
+ }
72
+ catch (err) {
73
+ spinner.fail('PHP-FPM configuration failed');
74
+ throw err;
75
+ }
76
+ }
77
+ async function deployStatic(ssh, config) {
78
+ const projectDir = await uploadFiles(ssh, config);
79
+ const spinner = (0, ora_1.default)('Configuring Nginx for static files...').start();
80
+ try {
81
+ const staticConf = `server {
82
+ listen ${config.appPort};
83
+ root ${projectDir};
84
+ index index.html index.htm;
85
+ location / {
86
+ try_files $uri $uri/ /index.html;
87
+ }
88
+ }
89
+ `;
90
+ await ssh.sudo(`bash -c "cat > /etc/nginx/sites-available/${config.projectName}-static << 'STATIC_EOF'\n${staticConf}\nSTATIC_EOF"`);
91
+ await ssh.sudo(`ln -sf /etc/nginx/sites-available/${config.projectName}-static /etc/nginx/sites-enabled/`);
92
+ await ssh.sudo('nginx -t && systemctl reload nginx');
93
+ spinner.succeed(`Static site served on port ${config.appPort}`);
94
+ }
95
+ catch (err) {
96
+ spinner.fail('Static deployment failed');
97
+ throw err;
98
+ }
99
+ }
100
+ //# sourceMappingURL=direct-deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-deploy.js","sourceRoot":"","sources":["../../src/deploy/direct-deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { SSHClient } from '../ssh/client';
2
+ import { DeployConfig } from '../types';
3
+ export declare function deployWithDocker(ssh: SSHClient, config: DeployConfig): Promise<void>;
4
+ export declare function deployWithDockerCompose(ssh: SSHClient, config: DeployConfig): Promise<void>;
5
+ //# sourceMappingURL=docker-deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-deploy.d.ts","sourceRoot":"","sources":["../../src/deploy/docker-deploy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1F;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBjG"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deployWithDocker = deployWithDocker;
7
+ exports.deployWithDockerCompose = deployWithDockerCompose;
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const DEPLOY_BASE = '/var/www/zisites';
10
+ async function deployWithDocker(ssh, config) {
11
+ const projectDir = `${DEPLOY_BASE}/${config.projectName}`;
12
+ let spinner = (0, ora_1.default)(`Uploading project files to ${projectDir}...`).start();
13
+ try {
14
+ await ssh.sudo(`mkdir -p ${projectDir}`);
15
+ if (config.server.username !== 'root') {
16
+ await ssh.sudo(`chown ${config.server.username}:${config.server.username} ${projectDir}`);
17
+ }
18
+ await ssh.putDirectory(config.localProjectPath, projectDir);
19
+ spinner.succeed('Files uploaded');
20
+ }
21
+ catch (err) {
22
+ spinner.fail('File upload failed');
23
+ throw err;
24
+ }
25
+ spinner = (0, ora_1.default)('Building Docker image...').start();
26
+ try {
27
+ const imageName = `zisites_${config.projectName}`;
28
+ await ssh.sudo(`docker build -t ${imageName} ${projectDir}`);
29
+ spinner.succeed(`Docker image built: ${imageName}`);
30
+ spinner = (0, ora_1.default)('Starting Docker container...').start();
31
+ await ssh.sudo(`docker rm -f ${config.projectName} 2>/dev/null || true`);
32
+ await ssh.sudo(`docker run -d --name ${config.projectName} --restart unless-stopped -p ${config.appPort}:${config.appPort} ${imageName}`);
33
+ spinner.succeed(`Container running on port ${config.appPort}`);
34
+ }
35
+ catch (err) {
36
+ spinner.fail('Docker deployment failed');
37
+ throw err;
38
+ }
39
+ }
40
+ async function deployWithDockerCompose(ssh, config) {
41
+ const projectDir = `${DEPLOY_BASE}/${config.projectName}`;
42
+ let spinner = (0, ora_1.default)(`Uploading project files to ${projectDir}...`).start();
43
+ try {
44
+ await ssh.sudo(`mkdir -p ${projectDir}`);
45
+ await ssh.putDirectory(config.localProjectPath, projectDir);
46
+ spinner.succeed('Files uploaded');
47
+ }
48
+ catch (err) {
49
+ spinner.fail('File upload failed');
50
+ throw err;
51
+ }
52
+ spinner = (0, ora_1.default)('Starting Docker Compose services...').start();
53
+ try {
54
+ await ssh.sudo(`docker compose -f ${projectDir}/docker-compose.yml down 2>/dev/null || true`);
55
+ await ssh.sudo(`docker compose -f ${projectDir}/docker-compose.yml up -d --build`);
56
+ spinner.succeed('Docker Compose services started');
57
+ }
58
+ catch (err) {
59
+ spinner.fail('Docker Compose deployment failed');
60
+ throw err;
61
+ }
62
+ }
63
+ //# sourceMappingURL=docker-deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-deploy.js","sourceRoot":"","sources":["../../src/deploy/docker-deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}