quicklify 1.1.0 → 1.2.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 (187) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +46 -22
  3. package/README.tr.md +46 -22
  4. package/SECURITY.md +63 -34
  5. package/dist/commands/add.d.ts +1 -0
  6. package/dist/commands/add.d.ts.map +1 -1
  7. package/dist/commands/add.js +41 -65
  8. package/dist/commands/add.js.map +1 -1
  9. package/dist/commands/backup.d.ts +2 -11
  10. package/dist/commands/backup.d.ts.map +1 -1
  11. package/dist/commands/backup.js +111 -53
  12. package/dist/commands/backup.js.map +1 -1
  13. package/dist/commands/destroy.d.ts.map +1 -1
  14. package/dist/commands/destroy.js +58 -37
  15. package/dist/commands/destroy.js.map +1 -1
  16. package/dist/commands/domain.d.ts +2 -9
  17. package/dist/commands/domain.d.ts.map +1 -1
  18. package/dist/commands/domain.js +47 -56
  19. package/dist/commands/domain.js.map +1 -1
  20. package/dist/commands/firewall.d.ts +3 -10
  21. package/dist/commands/firewall.d.ts.map +1 -1
  22. package/dist/commands/firewall.js +28 -51
  23. package/dist/commands/firewall.js.map +1 -1
  24. package/dist/commands/health.d.ts +2 -2
  25. package/dist/commands/health.d.ts.map +1 -1
  26. package/dist/commands/health.js +77 -19
  27. package/dist/commands/health.js.map +1 -1
  28. package/dist/commands/init.d.ts.map +1 -1
  29. package/dist/commands/init.js +115 -29
  30. package/dist/commands/init.js.map +1 -1
  31. package/dist/commands/interactive.d.ts +2 -0
  32. package/dist/commands/interactive.d.ts.map +1 -0
  33. package/dist/commands/interactive.js +357 -0
  34. package/dist/commands/interactive.js.map +1 -0
  35. package/dist/commands/list.d.ts.map +1 -1
  36. package/dist/commands/list.js +4 -2
  37. package/dist/commands/list.js.map +1 -1
  38. package/dist/commands/logs.d.ts.map +1 -1
  39. package/dist/commands/logs.js +9 -1
  40. package/dist/commands/logs.js.map +1 -1
  41. package/dist/commands/maintain.d.ts.map +1 -1
  42. package/dist/commands/maintain.js +28 -47
  43. package/dist/commands/maintain.js.map +1 -1
  44. package/dist/commands/monitor.js +1 -1
  45. package/dist/commands/monitor.js.map +1 -1
  46. package/dist/commands/remove.d.ts.map +1 -1
  47. package/dist/commands/remove.js +25 -0
  48. package/dist/commands/remove.js.map +1 -1
  49. package/dist/commands/restart.d.ts.map +1 -1
  50. package/dist/commands/restart.js +39 -39
  51. package/dist/commands/restart.js.map +1 -1
  52. package/dist/commands/restore.d.ts +2 -13
  53. package/dist/commands/restore.d.ts.map +1 -1
  54. package/dist/commands/restore.js +42 -54
  55. package/dist/commands/restore.js.map +1 -1
  56. package/dist/commands/secure.d.ts +2 -9
  57. package/dist/commands/secure.d.ts.map +1 -1
  58. package/dist/commands/secure.js +2 -97
  59. package/dist/commands/secure.js.map +1 -1
  60. package/dist/commands/snapshot.d.ts.map +1 -1
  61. package/dist/commands/snapshot.js +55 -67
  62. package/dist/commands/snapshot.js.map +1 -1
  63. package/dist/commands/status.d.ts.map +1 -1
  64. package/dist/commands/status.js +33 -16
  65. package/dist/commands/status.js.map +1 -1
  66. package/dist/commands/update.d.ts.map +1 -1
  67. package/dist/commands/update.js +23 -16
  68. package/dist/commands/update.js.map +1 -1
  69. package/dist/constants.d.ts +14 -0
  70. package/dist/constants.d.ts.map +1 -0
  71. package/dist/constants.js +23 -0
  72. package/dist/constants.js.map +1 -0
  73. package/dist/core/backup.d.ts +16 -0
  74. package/dist/core/backup.d.ts.map +1 -1
  75. package/dist/core/backup.js +159 -1
  76. package/dist/core/backup.js.map +1 -1
  77. package/dist/core/domain.d.ts.map +1 -1
  78. package/dist/core/domain.js +1 -5
  79. package/dist/core/domain.js.map +1 -1
  80. package/dist/core/firewall.d.ts +2 -0
  81. package/dist/core/firewall.d.ts.map +1 -1
  82. package/dist/core/firewall.js +12 -0
  83. package/dist/core/firewall.js.map +1 -1
  84. package/dist/core/logs.js +1 -1
  85. package/dist/core/logs.js.map +1 -1
  86. package/dist/core/maintain.d.ts.map +1 -1
  87. package/dist/core/maintain.js +1 -2
  88. package/dist/core/maintain.js.map +1 -1
  89. package/dist/core/manage.d.ts +10 -1
  90. package/dist/core/manage.d.ts.map +1 -1
  91. package/dist/core/manage.js +42 -4
  92. package/dist/core/manage.js.map +1 -1
  93. package/dist/core/provision.d.ts +2 -1
  94. package/dist/core/provision.d.ts.map +1 -1
  95. package/dist/core/provision.js +7 -12
  96. package/dist/core/provision.js.map +1 -1
  97. package/dist/core/secure.d.ts.map +1 -1
  98. package/dist/core/secure.js +8 -2
  99. package/dist/core/secure.js.map +1 -1
  100. package/dist/core/status.d.ts.map +1 -1
  101. package/dist/core/status.js +2 -1
  102. package/dist/core/status.js.map +1 -1
  103. package/dist/index.js +17 -4
  104. package/dist/index.js.map +1 -1
  105. package/dist/mcp/server.d.ts.map +1 -1
  106. package/dist/mcp/server.js +13 -7
  107. package/dist/mcp/server.js.map +1 -1
  108. package/dist/mcp/tools/serverBackup.d.ts +2 -7
  109. package/dist/mcp/tools/serverBackup.d.ts.map +1 -1
  110. package/dist/mcp/tools/serverBackup.js +120 -234
  111. package/dist/mcp/tools/serverBackup.js.map +1 -1
  112. package/dist/mcp/tools/serverInfo.d.ts +18 -2
  113. package/dist/mcp/tools/serverInfo.d.ts.map +1 -1
  114. package/dist/mcp/tools/serverInfo.js +121 -57
  115. package/dist/mcp/tools/serverInfo.js.map +1 -1
  116. package/dist/mcp/tools/serverLogs.d.ts +2 -7
  117. package/dist/mcp/tools/serverLogs.d.ts.map +1 -1
  118. package/dist/mcp/tools/serverLogs.js +36 -57
  119. package/dist/mcp/tools/serverLogs.js.map +1 -1
  120. package/dist/mcp/tools/serverMaintain.d.ts +3 -8
  121. package/dist/mcp/tools/serverMaintain.d.ts.map +1 -1
  122. package/dist/mcp/tools/serverMaintain.js +48 -109
  123. package/dist/mcp/tools/serverMaintain.js.map +1 -1
  124. package/dist/mcp/tools/serverManage.d.ts +5 -0
  125. package/dist/mcp/tools/serverManage.d.ts.map +1 -1
  126. package/dist/mcp/tools/serverManage.js +92 -109
  127. package/dist/mcp/tools/serverManage.js.map +1 -1
  128. package/dist/mcp/tools/serverProvision.d.ts +5 -0
  129. package/dist/mcp/tools/serverProvision.d.ts.map +1 -1
  130. package/dist/mcp/tools/serverProvision.js +67 -76
  131. package/dist/mcp/tools/serverProvision.js.map +1 -1
  132. package/dist/mcp/tools/serverSecure.d.ts +2 -7
  133. package/dist/mcp/tools/serverSecure.d.ts.map +1 -1
  134. package/dist/mcp/tools/serverSecure.js +109 -170
  135. package/dist/mcp/tools/serverSecure.js.map +1 -1
  136. package/dist/mcp/utils.d.ts +42 -0
  137. package/dist/mcp/utils.d.ts.map +1 -0
  138. package/dist/mcp/utils.js +61 -0
  139. package/dist/mcp/utils.js.map +1 -0
  140. package/dist/providers/base.d.ts +2 -2
  141. package/dist/providers/base.d.ts.map +1 -1
  142. package/dist/providers/digitalocean.d.ts +2 -2
  143. package/dist/providers/digitalocean.d.ts.map +1 -1
  144. package/dist/providers/digitalocean.js +3 -3
  145. package/dist/providers/digitalocean.js.map +1 -1
  146. package/dist/providers/hetzner.d.ts +2 -2
  147. package/dist/providers/hetzner.d.ts.map +1 -1
  148. package/dist/providers/hetzner.js +7 -4
  149. package/dist/providers/hetzner.js.map +1 -1
  150. package/dist/providers/linode.d.ts +2 -2
  151. package/dist/providers/linode.d.ts.map +1 -1
  152. package/dist/providers/linode.js +2 -2
  153. package/dist/providers/linode.js.map +1 -1
  154. package/dist/providers/vultr.d.ts +2 -2
  155. package/dist/providers/vultr.d.ts.map +1 -1
  156. package/dist/providers/vultr.js +2 -2
  157. package/dist/providers/vultr.js.map +1 -1
  158. package/dist/types/index.d.ts +11 -0
  159. package/dist/types/index.d.ts.map +1 -1
  160. package/dist/utils/cloudInit.d.ts +1 -0
  161. package/dist/utils/cloudInit.d.ts.map +1 -1
  162. package/dist/utils/cloudInit.js +62 -0
  163. package/dist/utils/cloudInit.js.map +1 -1
  164. package/dist/utils/config.js +1 -1
  165. package/dist/utils/config.js.map +1 -1
  166. package/dist/utils/errorMapper.d.ts.map +1 -1
  167. package/dist/utils/errorMapper.js +5 -1
  168. package/dist/utils/errorMapper.js.map +1 -1
  169. package/dist/utils/modeGuard.d.ts +5 -0
  170. package/dist/utils/modeGuard.d.ts.map +1 -0
  171. package/dist/utils/modeGuard.js +13 -0
  172. package/dist/utils/modeGuard.js.map +1 -0
  173. package/dist/utils/openBrowser.d.ts.map +1 -1
  174. package/dist/utils/openBrowser.js +3 -1
  175. package/dist/utils/openBrowser.js.map +1 -1
  176. package/dist/utils/prompts.d.ts +2 -2
  177. package/dist/utils/prompts.d.ts.map +1 -1
  178. package/dist/utils/prompts.js +3 -3
  179. package/dist/utils/prompts.js.map +1 -1
  180. package/dist/utils/ssh.d.ts +9 -0
  181. package/dist/utils/ssh.d.ts.map +1 -1
  182. package/dist/utils/ssh.js +175 -15
  183. package/dist/utils/ssh.js.map +1 -1
  184. package/dist/utils/sshKey.d.ts.map +1 -1
  185. package/dist/utils/sshKey.js +3 -0
  186. package/dist/utils/sshKey.js.map +1 -1
  187. package/package.json +2 -2
@@ -1,14 +1,5 @@
1
- export declare function formatTimestamp(date: Date): string;
2
- export declare function getBackupDir(serverName: string): string;
3
- export declare function buildPgDumpCommand(): string;
4
- export declare function buildConfigTarCommand(): string;
5
- export declare function buildCleanupCommand(): string;
6
- export declare function buildCoolifyVersionCommand(): string;
7
- export declare function scpDownload(ip: string, remotePath: string, localPath: string): Promise<{
8
- code: number;
9
- stderr: string;
10
- }>;
11
- export declare function listBackups(serverName: string): string[];
1
+ import { formatTimestamp, getBackupDir, buildPgDumpCommand, buildConfigTarCommand, buildCleanupCommand, buildCoolifyVersionCommand, listBackups, scpDownload, listOrphanBackups, cleanupServerBackups } from "../core/backup.js";
2
+ export { formatTimestamp, getBackupDir, buildPgDumpCommand, buildConfigTarCommand, buildCleanupCommand, buildCoolifyVersionCommand, listBackups, scpDownload, listOrphanBackups, cleanupServerBackups, };
12
3
  export declare function backupCommand(query?: string, options?: {
13
4
  dryRun?: boolean;
14
5
  all?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAaA,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAElD;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAc3C;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAWxD;AAiID,wBAAsB,aAAa,CACjC,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAmIf"}
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,EACX,WAAW,EAEX,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,oBAAoB,GACrB,CAAC;AAqMF,wBAAsB,aAAa,CACjC,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAoKf"}
@@ -1,56 +1,15 @@
1
- import { mkdirSync, existsSync, writeFileSync, readdirSync } from "fs";
1
+ import { mkdirSync, writeFileSync } from "fs";
2
2
  import { join } from "path";
3
- import { spawn } from "child_process";
3
+ import inquirer from "inquirer";
4
4
  import { getServers } from "../utils/config.js";
5
5
  import { resolveServer } from "../utils/serverSelect.js";
6
- import { checkSshAvailable, sshExec, sanitizedEnv } from "../utils/ssh.js";
7
- import { BACKUPS_DIR } from "../utils/config.js";
6
+ import { checkSshAvailable, sshExec } from "../utils/ssh.js";
8
7
  import { logger, createSpinner } from "../utils/logger.js";
9
8
  import { getErrorMessage, mapSshError } from "../utils/errorMapper.js";
10
- // Pure functions (testable)
11
- export function formatTimestamp(date) {
12
- return date.toISOString().replace(/[:.]/g, "-").replace("T", "_").replace("Z", "");
13
- }
14
- export function getBackupDir(serverName) {
15
- return join(BACKUPS_DIR, serverName);
16
- }
17
- export function buildPgDumpCommand() {
18
- return "docker exec coolify-db pg_dump -U coolify -d coolify | gzip > /tmp/coolify-backup.sql.gz";
19
- }
20
- export function buildConfigTarCommand() {
21
- return "tar czf /tmp/coolify-config.tar.gz -C /data/coolify/source .env docker-compose.yml docker-compose.prod.yml 2>/dev/null || tar czf /tmp/coolify-config.tar.gz -C /data/coolify/source .env docker-compose.yml";
22
- }
23
- export function buildCleanupCommand() {
24
- return "rm -f /tmp/coolify-backup.sql.gz /tmp/coolify-config.tar.gz";
25
- }
26
- export function buildCoolifyVersionCommand() {
27
- return "docker inspect coolify --format '{{.Config.Image}}' 2>/dev/null | sed 's/.*://' || echo unknown";
28
- }
29
- export function scpDownload(ip, remotePath, localPath) {
30
- return new Promise((resolve) => {
31
- const child = spawn("scp", ["-o", "StrictHostKeyChecking=accept-new", `root@${ip}:${remotePath}`, localPath], { stdio: ["inherit", "pipe", "pipe"], env: sanitizedEnv() });
32
- let stderr = "";
33
- child.stderr?.on("data", (data) => {
34
- stderr += data.toString();
35
- });
36
- child.on("close", (code) => resolve({ code: code ?? 1, stderr }));
37
- child.on("error", (err) => resolve({ code: 1, stderr: err.message }));
38
- });
39
- }
40
- export function listBackups(serverName) {
41
- const dir = getBackupDir(serverName);
42
- if (!existsSync(dir))
43
- return [];
44
- try {
45
- return readdirSync(dir)
46
- .filter((name) => existsSync(join(dir, name, "manifest.json")))
47
- .sort()
48
- .reverse();
49
- }
50
- catch {
51
- return [];
52
- }
53
- }
9
+ import { isBareServer } from "../utils/modeGuard.js";
10
+ import { formatTimestamp, getBackupDir, buildPgDumpCommand, buildConfigTarCommand, buildCleanupCommand, buildCoolifyVersionCommand, listBackups, scpDownload, createBareBackup, listOrphanBackups, cleanupServerBackups, } from "../core/backup.js";
11
+ // Re-export pure functions from core/backup.ts for backward compatibility
12
+ export { formatTimestamp, getBackupDir, buildPgDumpCommand, buildConfigTarCommand, buildCleanupCommand, buildCoolifyVersionCommand, listBackups, scpDownload, listOrphanBackups, cleanupServerBackups, };
54
13
  // Single server backup (extracted for reuse)
55
14
  async function backupSingleServer(server, dryRun) {
56
15
  const timestamp = formatTimestamp(new Date());
@@ -59,6 +18,29 @@ async function backupSingleServer(server, dryRun) {
59
18
  logger.info(`[${server.name}] Dry run - would backup to: ${backupPath}`);
60
19
  return true;
61
20
  }
21
+ // Bare server: backup system config files instead of Coolify DB
22
+ if (isBareServer(server)) {
23
+ const spinner = createSpinner(`[${server.name}] Backing up system config...`);
24
+ spinner.start();
25
+ try {
26
+ const result = await createBareBackup(server.ip, server.name, server.provider);
27
+ if (result.success) {
28
+ spinner.succeed(`[${server.name}] System config backup saved to ${result.backupPath}`);
29
+ return true;
30
+ }
31
+ else {
32
+ spinner.fail(`[${server.name}] Backup failed: ${result.error}`);
33
+ if (result.hint)
34
+ logger.info(result.hint);
35
+ return false;
36
+ }
37
+ }
38
+ catch (error) {
39
+ spinner.fail(`[${server.name}] Backup failed`);
40
+ logger.error(getErrorMessage(error));
41
+ return false;
42
+ }
43
+ }
62
44
  const versionResult = await sshExec(server.ip, buildCoolifyVersionCommand());
63
45
  const coolifyVersion = versionResult.code === 0 ? versionResult.stdout.trim() : "unknown";
64
46
  const dbSpinner = createSpinner(`[${server.name}] Creating database backup...`);
@@ -131,6 +113,7 @@ async function backupSingleServer(server, dryRun) {
131
113
  writeFileSync(join(backupPath, "manifest.json"), JSON.stringify(manifest, null, 2), { mode: 0o600 });
132
114
  await sshExec(server.ip, buildCleanupCommand()).catch(() => { });
133
115
  logger.success(`[${server.name}] Backup saved to ${backupPath}`);
116
+ logger.info(`Provider: ${server.provider} | IP: ${server.ip} | Mode: ${server.mode || "coolify"}`);
134
117
  return true;
135
118
  }
136
119
  async function backupAll(dryRun) {
@@ -161,8 +144,52 @@ async function backupAll(dryRun) {
161
144
  logger.warning(`${succeeded} succeeded, ${failed} failed`);
162
145
  }
163
146
  }
147
+ // Backup cleanup command
148
+ async function backupCleanupCommand() {
149
+ const servers = getServers();
150
+ const activeNames = servers.map((s) => s.name);
151
+ const orphans = listOrphanBackups(activeNames);
152
+ if (orphans.length === 0) {
153
+ logger.success("No orphan backups found. All backups belong to active servers.");
154
+ return;
155
+ }
156
+ logger.title(`Found ${orphans.length} orphan backup(s):`);
157
+ for (const name of orphans) {
158
+ const backupCount = listBackups(name).length;
159
+ logger.step(`${name} (${backupCount} backup${backupCount !== 1 ? "s" : ""})`);
160
+ }
161
+ console.log();
162
+ const { confirm } = await inquirer.prompt([
163
+ {
164
+ type: "confirm",
165
+ name: "confirm",
166
+ message: `Remove all ${orphans.length} orphan backup folder(s)?`,
167
+ default: false,
168
+ },
169
+ ]);
170
+ if (!confirm) {
171
+ logger.info("Cleanup cancelled.");
172
+ return;
173
+ }
174
+ let removed = 0;
175
+ for (const name of orphans) {
176
+ const result = cleanupServerBackups(name);
177
+ if (result.removed) {
178
+ logger.success(`Removed backups for "${name}"`);
179
+ removed++;
180
+ }
181
+ else {
182
+ logger.warning(`Failed to remove backups for "${name}"`);
183
+ }
184
+ }
185
+ logger.success(`Cleaned up ${removed}/${orphans.length} orphan backup(s).`);
186
+ }
164
187
  // Command
165
188
  export async function backupCommand(query, options) {
189
+ // Handle cleanup subcommand
190
+ if (query === "cleanup") {
191
+ return backupCleanupCommand();
192
+ }
166
193
  if (options?.all) {
167
194
  return backupAll(options?.dryRun || false);
168
195
  }
@@ -182,15 +209,45 @@ export async function backupCommand(query, options) {
182
209
  logger.info(`Backup path: ${backupPath}`);
183
210
  console.log();
184
211
  logger.info("Commands to execute:");
185
- logger.step(buildPgDumpCommand());
186
- logger.step(buildConfigTarCommand());
187
- logger.step(`scp root@${server.ip}:/tmp/coolify-backup.sql.gz ${backupPath}/`);
188
- logger.step(`scp root@${server.ip}:/tmp/coolify-config.tar.gz ${backupPath}/`);
189
- logger.step(buildCleanupCommand());
212
+ if (isBareServer(server)) {
213
+ logger.step("tar czf /tmp/bare-config.tar.gz --ignore-failed-read -C / etc/nginx etc/ssh/sshd_config etc/ufw etc/fail2ban etc/crontab");
214
+ logger.step(`scp root@${server.ip}:/tmp/bare-config.tar.gz ${backupPath}/`);
215
+ }
216
+ else {
217
+ logger.step(buildPgDumpCommand());
218
+ logger.step(buildConfigTarCommand());
219
+ logger.step(`scp root@${server.ip}:/tmp/coolify-backup.sql.gz ${backupPath}/`);
220
+ logger.step(`scp root@${server.ip}:/tmp/coolify-config.tar.gz ${backupPath}/`);
221
+ logger.step(buildCleanupCommand());
222
+ }
190
223
  console.log();
191
224
  logger.warning("No changes applied. Remove --dry-run to execute.");
192
225
  return;
193
226
  }
227
+ // Bare server: backup system config files instead of Coolify DB
228
+ if (isBareServer(server)) {
229
+ const spinner = createSpinner("Backing up system config...");
230
+ spinner.start();
231
+ try {
232
+ const result = await createBareBackup(server.ip, server.name, server.provider);
233
+ if (result.success) {
234
+ spinner.succeed("System config backup created");
235
+ logger.success(`Backup saved to ${result.backupPath}`);
236
+ logger.info("Files: bare-config.tar.gz, manifest.json");
237
+ }
238
+ else {
239
+ spinner.fail("System config backup failed");
240
+ logger.error(result.error ?? "Backup failed");
241
+ if (result.hint)
242
+ logger.info(result.hint);
243
+ }
244
+ }
245
+ catch (error) {
246
+ spinner.fail("System config backup failed");
247
+ logger.error(getErrorMessage(error));
248
+ }
249
+ return;
250
+ }
194
251
  // Step 1: Get Coolify version
195
252
  const versionResult = await sshExec(server.ip, buildCoolifyVersionCommand());
196
253
  const coolifyVersion = versionResult.code === 0 ? versionResult.stdout.trim() : "unknown";
@@ -278,6 +335,7 @@ export async function backupCommand(query, options) {
278
335
  await sshExec(server.ip, buildCleanupCommand()).catch(() => { });
279
336
  logger.success(`Backup saved to ${backupPath}`);
280
337
  logger.info(`Coolify version: ${coolifyVersion}`);
338
+ logger.info(`Provider: ${server.provider} | IP: ${server.ip} | Mode: ${server.mode || "coolify"}`);
281
339
  logger.info("Files: coolify-backup.sql.gz, coolify-config.tar.gz, manifest.json");
282
340
  }
283
341
  //# sourceMappingURL=backup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../src/commands/destroy.ts"],"names":[],"mappings":"AAOA,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ElE"}
1
+ {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../src/commands/destroy.ts"],"names":[],"mappings":"AA8BA,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyElE"}
@@ -1,9 +1,33 @@
1
1
  import inquirer from "inquirer";
2
- import { removeServer } from "../utils/config.js";
3
- import { resolveServer, promptApiToken } from "../utils/serverSelect.js";
4
- import { createProviderWithToken } from "../utils/providerFactory.js";
2
+ import { resolveServer } from "../utils/serverSelect.js";
3
+ import { destroyCloudServer } from "../core/manage.js";
5
4
  import { logger, createSpinner } from "../utils/logger.js";
6
- import { getErrorMessage, mapProviderError } from "../utils/errorMapper.js";
5
+ import { listBackups, cleanupServerBackups } from "../core/backup.js";
6
+ async function promptBackupCleanup(serverName) {
7
+ const backups = listBackups(serverName);
8
+ if (backups.length === 0)
9
+ return;
10
+ const { cleanBackups } = await inquirer.prompt([
11
+ {
12
+ type: "confirm",
13
+ name: "cleanBackups",
14
+ message: `Found ${backups.length} backup(s) for "${serverName}". Remove them?`,
15
+ default: false,
16
+ },
17
+ ]);
18
+ if (cleanBackups) {
19
+ const result = cleanupServerBackups(serverName);
20
+ if (result.removed) {
21
+ logger.success("Backups removed.");
22
+ }
23
+ else {
24
+ logger.warning("Failed to remove backups.");
25
+ }
26
+ }
27
+ else {
28
+ logger.info("Backups kept. Run 'quicklify backup cleanup' later to remove orphans.");
29
+ }
30
+ }
7
31
  export async function destroyCommand(query) {
8
32
  const server = await resolveServer(query, "Select a server to destroy:");
9
33
  if (!server)
@@ -33,44 +57,41 @@ export async function destroyCommand(query) {
33
57
  logger.error("Server name does not match. Destroy cancelled.");
34
58
  return;
35
59
  }
36
- // Ask for API token
37
- const apiToken = await promptApiToken(server.provider);
38
60
  const spinner = createSpinner("Destroying server...");
39
61
  spinner.start();
40
- try {
41
- const provider = createProviderWithToken(server.provider, apiToken);
42
- await provider.destroyServer(server.id);
43
- removeServer(server.id);
62
+ // Delegate cloud deletion to core
63
+ const result = await destroyCloudServer(server.name);
64
+ if (result.success && result.cloudDeleted) {
44
65
  spinner.succeed(`Server "${server.name}" destroyed`);
45
66
  logger.success("Server has been removed from your cloud provider and local config.");
67
+ await promptBackupCleanup(server.name);
68
+ return;
46
69
  }
47
- catch (error) {
48
- const message = getErrorMessage(error);
49
- const isNotFound = message.toLowerCase().includes("not found") || message.toLowerCase().includes("not_found");
50
- if (isNotFound) {
51
- removeServer(server.id);
52
- spinner.warn(`Server not found on ${server.provider} (may have been deleted manually)`);
53
- logger.info("Removed from local config.");
54
- }
55
- else {
56
- spinner.fail("Failed to destroy server");
57
- logger.error(message);
58
- const hint = mapProviderError(error, server.provider);
59
- if (hint) {
60
- logger.info(hint);
61
- }
62
- const { removeLocal } = await inquirer.prompt([
63
- {
64
- type: "confirm",
65
- name: "removeLocal",
66
- message: "Remove this server from local config anyway?",
67
- default: false,
68
- },
69
- ]);
70
- if (removeLocal) {
71
- removeServer(server.id);
72
- logger.success("Removed from local config.");
73
- }
70
+ if (result.success && result.hint) {
71
+ spinner.warn(`Server not found on ${server.provider} (may have been deleted manually)`);
72
+ logger.info("Removed from local config.");
73
+ await promptBackupCleanup(server.name);
74
+ return;
75
+ }
76
+ // Cloud deletion failed
77
+ spinner.fail("Failed to destroy server");
78
+ if (result.error)
79
+ logger.error(result.error);
80
+ if (result.hint)
81
+ logger.info(result.hint);
82
+ const { removeLocal } = await inquirer.prompt([
83
+ {
84
+ type: "confirm",
85
+ name: "removeLocal",
86
+ message: "Remove this server from local config anyway?",
87
+ default: false,
88
+ },
89
+ ]);
90
+ if (removeLocal) {
91
+ const { removeServerRecord } = await import("../core/manage.js");
92
+ const removeResult = removeServerRecord(server.name);
93
+ if (removeResult.success) {
94
+ logger.success("Removed from local config.");
74
95
  }
75
96
  }
76
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.js","sourceRoot":"","sources":["../../src/commands/destroy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"destroy.js","sourceRoot":"","sources":["../../src/commands/destroy.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,5 @@
1
- export declare function isValidDomain(domain: string): boolean;
2
- export declare function sanitizeDomain(input: string): string;
3
- export declare function escapePsqlString(input: string): string;
4
- export declare function buildSetFqdnCommand(domain: string, ssl: boolean): string;
5
- export declare function buildGetFqdnCommand(): string;
6
- export declare function buildCoolifyCheckCommand(): string;
7
- export declare function buildDnsCheckCommand(domain: string): string;
8
- export declare function parseDnsResult(stdout: string): string | null;
9
- export declare function parseFqdn(stdout: string): string | null;
1
+ import { isValidDomain, sanitizeDomain, escapePsqlString, buildSetFqdnCommand, buildGetFqdnCommand, buildCoolifyCheckCommand, buildDnsCheckCommand, parseDnsResult, parseFqdn } from "../core/domain.js";
2
+ export { isValidDomain, sanitizeDomain, escapePsqlString, buildSetFqdnCommand, buildGetFqdnCommand, buildCoolifyCheckCommand, buildDnsCheckCommand, parseDnsResult, parseFqdn, };
10
3
  export declare function domainCommand(subcommand?: string, query?: string, options?: {
11
4
  domain?: string;
12
5
  ssl?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/commands/domain.ts"],"names":[],"mappings":"AAUA,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIrD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASpD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAUxE;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvD;AAED,wBAAsB,aAAa,CACjC,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,IAAI,CAAC,CAiCf"}
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/commands/domain.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,SAAS,GACV,CAAC;AAEF,wBAAsB,aAAa,CACjC,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -2,67 +2,16 @@ import { resolveServer } from "../utils/serverSelect.js";
2
2
  import { checkSshAvailable, sshExec } from "../utils/ssh.js";
3
3
  import { logger, createSpinner } from "../utils/logger.js";
4
4
  import { getErrorMessage, mapSshError } from "../utils/errorMapper.js";
5
- const COOLIFY_SOURCE_DIR = "/data/coolify/source";
6
- const COOLIFY_DB_CONTAINER = "coolify-db";
7
- const COOLIFY_DB_USER = "coolify";
8
- const COOLIFY_DB_NAME = "coolify";
9
- export function isValidDomain(domain) {
10
- // RFC 1035 compliant domain validation
11
- const pattern = /^(?!-)[a-zA-Z0-9-]{1,63}(?<!-)(\.[a-zA-Z0-9-]{1,63})*\.[a-zA-Z]{2,}$/;
12
- return pattern.test(domain);
13
- }
14
- export function sanitizeDomain(input) {
15
- let domain = input.trim();
16
- // Strip protocol prefix
17
- domain = domain.replace(/^https?:\/\//, "");
18
- // Strip trailing slash
19
- domain = domain.replace(/\/+$/, "");
20
- // Strip port
21
- domain = domain.replace(/:\d+$/, "");
22
- return domain;
23
- }
24
- export function escapePsqlString(input) {
25
- return input.replace(/'/g, "''");
26
- }
27
- export function buildSetFqdnCommand(domain, ssl) {
28
- if (/[^a-zA-Z0-9.:_-]/.test(domain)) {
29
- throw new Error(`Invalid domain for FQDN command: ${domain}`);
30
- }
31
- const protocol = ssl ? "https" : "http";
32
- const url = escapePsqlString(`${protocol}://${domain}`);
33
- return [
34
- `docker exec ${COOLIFY_DB_CONTAINER} psql -U ${COOLIFY_DB_USER} -d ${COOLIFY_DB_NAME} -c "UPDATE instance_settings SET fqdn='${url}' WHERE id=0;"`,
35
- `cd ${COOLIFY_SOURCE_DIR} && docker compose -f docker-compose.yml -f docker-compose.prod.yml restart coolify`,
36
- ].join(" && ");
37
- }
38
- export function buildGetFqdnCommand() {
39
- return `docker exec ${COOLIFY_DB_CONTAINER} psql -U ${COOLIFY_DB_USER} -d ${COOLIFY_DB_NAME} -t -c "SELECT fqdn FROM instance_settings WHERE id=0;"`;
40
- }
41
- export function buildCoolifyCheckCommand() {
42
- return `docker ps --filter name=${COOLIFY_DB_CONTAINER} --format '{{.Names}}' 2>/dev/null`;
43
- }
44
- export function buildDnsCheckCommand(domain) {
45
- const safeDomain = domain.replace(/[^a-zA-Z0-9.-]/g, "");
46
- return `dig +short A ${safeDomain} 2>/dev/null || getent ahosts ${safeDomain} 2>/dev/null | head -1 | awk '{print $1}'`;
47
- }
48
- export function parseDnsResult(stdout) {
49
- // dig +short returns just IP addresses, getent returns IP + hostname
50
- const ipMatch = stdout.match(/\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/);
51
- return ipMatch ? ipMatch[1] : null;
52
- }
53
- export function parseFqdn(stdout) {
54
- // psql -t output: just the value with possible leading/trailing whitespace
55
- const trimmed = stdout.trim();
56
- if (!trimmed)
57
- return null;
58
- return trimmed;
59
- }
5
+ import { COOLIFY_DB_CONTAINER } from "../constants.js";
6
+ import { requireCoolifyMode } from "../utils/modeGuard.js";
7
+ import { isValidDomain, sanitizeDomain, escapePsqlString, buildSetFqdnCommand, buildGetFqdnCommand, buildCoolifyCheckCommand, buildDnsCheckCommand, parseDnsResult, parseFqdn, } from "../core/domain.js";
8
+ export { isValidDomain, sanitizeDomain, escapePsqlString, buildSetFqdnCommand, buildGetFqdnCommand, buildCoolifyCheckCommand, buildDnsCheckCommand, parseDnsResult, parseFqdn, };
60
9
  export async function domainCommand(subcommand, query, options) {
61
10
  if (!checkSshAvailable()) {
62
11
  logger.error("SSH client not found. Please install OpenSSH.");
63
12
  return;
64
13
  }
65
- const validSubcommands = ["add", "remove", "check", "list"];
14
+ const validSubcommands = ["add", "remove", "check", "list", "info"];
66
15
  const sub = subcommand || "list";
67
16
  if (!validSubcommands.includes(sub)) {
68
17
  logger.error(`Invalid subcommand: ${sub}. Choose from: ${validSubcommands.join(", ")}`);
@@ -71,6 +20,11 @@ export async function domainCommand(subcommand, query, options) {
71
20
  const server = await resolveServer(query, "Select a server for domain management:");
72
21
  if (!server)
73
22
  return;
23
+ const modeError = requireCoolifyMode(server, "domain");
24
+ if (modeError) {
25
+ logger.error(modeError);
26
+ return;
27
+ }
74
28
  const dryRun = options?.dryRun || false;
75
29
  switch (sub) {
76
30
  case "add":
@@ -85,6 +39,9 @@ export async function domainCommand(subcommand, query, options) {
85
39
  case "list":
86
40
  await domainList(server.ip, server.name);
87
41
  break;
42
+ case "info":
43
+ await domainInfo(server.ip, server.name);
44
+ break;
88
45
  }
89
46
  }
90
47
  async function domainAdd(ip, name, options, dryRun) {
@@ -245,4 +202,38 @@ async function domainList(ip, name) {
245
202
  logger.info(hint);
246
203
  }
247
204
  }
205
+ async function domainInfo(ip, name) {
206
+ const spinner = createSpinner(`Fetching domain info for ${name}...`);
207
+ spinner.start();
208
+ try {
209
+ const result = await sshExec(ip, buildGetFqdnCommand());
210
+ if (result.code !== 0) {
211
+ spinner.fail("Failed to fetch domain info");
212
+ if (result.stderr)
213
+ logger.error(result.stderr);
214
+ return;
215
+ }
216
+ const fqdn = parseFqdn(result.stdout);
217
+ spinner.succeed(`Domain info for ${name}`);
218
+ console.log();
219
+ logger.info(`Server: ${name} (${ip})`);
220
+ if (fqdn) {
221
+ logger.info(`FQDN: ${fqdn}`);
222
+ const isHttps = fqdn.startsWith("https://");
223
+ logger.info(`SSL: ${isHttps ? "enabled" : "disabled"}`);
224
+ logger.info(`URL: ${fqdn}`);
225
+ }
226
+ else {
227
+ logger.info(`FQDN: not set (using IP)`);
228
+ logger.info(`URL: http://${ip}:8000`);
229
+ }
230
+ }
231
+ catch (error) {
232
+ spinner.fail("Failed to fetch domain info");
233
+ logger.error(getErrorMessage(error));
234
+ const hint = mapSshError(error, ip);
235
+ if (hint)
236
+ logger.info(hint);
237
+ }
238
+ }
248
239
  //# sourceMappingURL=domain.js.map