quicklify 1.0.5 → 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 (214) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +86 -25
  3. package/README.tr.md +86 -25
  4. package/SECURITY.md +79 -17
  5. package/bin/quicklify-mcp +5 -0
  6. package/dist/commands/add.d.ts +1 -0
  7. package/dist/commands/add.d.ts.map +1 -1
  8. package/dist/commands/add.js +41 -65
  9. package/dist/commands/add.js.map +1 -1
  10. package/dist/commands/backup.d.ts +2 -11
  11. package/dist/commands/backup.d.ts.map +1 -1
  12. package/dist/commands/backup.js +113 -57
  13. package/dist/commands/backup.js.map +1 -1
  14. package/dist/commands/destroy.d.ts.map +1 -1
  15. package/dist/commands/destroy.js +58 -37
  16. package/dist/commands/destroy.js.map +1 -1
  17. package/dist/commands/domain.d.ts +2 -9
  18. package/dist/commands/domain.d.ts.map +1 -1
  19. package/dist/commands/domain.js +47 -56
  20. package/dist/commands/domain.js.map +1 -1
  21. package/dist/commands/firewall.d.ts +3 -10
  22. package/dist/commands/firewall.d.ts.map +1 -1
  23. package/dist/commands/firewall.js +28 -51
  24. package/dist/commands/firewall.js.map +1 -1
  25. package/dist/commands/health.d.ts +2 -2
  26. package/dist/commands/health.d.ts.map +1 -1
  27. package/dist/commands/health.js +77 -19
  28. package/dist/commands/health.js.map +1 -1
  29. package/dist/commands/init.d.ts.map +1 -1
  30. package/dist/commands/init.js +142 -24
  31. package/dist/commands/init.js.map +1 -1
  32. package/dist/commands/interactive.d.ts +2 -0
  33. package/dist/commands/interactive.d.ts.map +1 -0
  34. package/dist/commands/interactive.js +357 -0
  35. package/dist/commands/interactive.js.map +1 -0
  36. package/dist/commands/list.d.ts.map +1 -1
  37. package/dist/commands/list.js +4 -2
  38. package/dist/commands/list.js.map +1 -1
  39. package/dist/commands/logs.d.ts +3 -2
  40. package/dist/commands/logs.d.ts.map +1 -1
  41. package/dist/commands/logs.js +15 -12
  42. package/dist/commands/logs.js.map +1 -1
  43. package/dist/commands/maintain.d.ts.map +1 -1
  44. package/dist/commands/maintain.js +28 -47
  45. package/dist/commands/maintain.js.map +1 -1
  46. package/dist/commands/monitor.d.ts +3 -9
  47. package/dist/commands/monitor.d.ts.map +1 -1
  48. package/dist/commands/monitor.js +3 -48
  49. package/dist/commands/monitor.js.map +1 -1
  50. package/dist/commands/remove.d.ts.map +1 -1
  51. package/dist/commands/remove.js +25 -0
  52. package/dist/commands/remove.js.map +1 -1
  53. package/dist/commands/restart.d.ts.map +1 -1
  54. package/dist/commands/restart.js +39 -39
  55. package/dist/commands/restart.js.map +1 -1
  56. package/dist/commands/restore.d.ts +2 -13
  57. package/dist/commands/restore.d.ts.map +1 -1
  58. package/dist/commands/restore.js +42 -54
  59. package/dist/commands/restore.js.map +1 -1
  60. package/dist/commands/secure.d.ts +2 -9
  61. package/dist/commands/secure.d.ts.map +1 -1
  62. package/dist/commands/secure.js +2 -97
  63. package/dist/commands/secure.js.map +1 -1
  64. package/dist/commands/snapshot.d.ts.map +1 -1
  65. package/dist/commands/snapshot.js +55 -67
  66. package/dist/commands/snapshot.js.map +1 -1
  67. package/dist/commands/ssh.d.ts.map +1 -1
  68. package/dist/commands/ssh.js +4 -1
  69. package/dist/commands/ssh.js.map +1 -1
  70. package/dist/commands/status.d.ts.map +1 -1
  71. package/dist/commands/status.js +53 -85
  72. package/dist/commands/status.js.map +1 -1
  73. package/dist/commands/update.d.ts.map +1 -1
  74. package/dist/commands/update.js +23 -16
  75. package/dist/commands/update.js.map +1 -1
  76. package/dist/constants.d.ts +14 -0
  77. package/dist/constants.d.ts.map +1 -0
  78. package/dist/constants.js +23 -0
  79. package/dist/constants.js.map +1 -0
  80. package/dist/core/backup.d.ts +59 -0
  81. package/dist/core/backup.d.ts.map +1 -0
  82. package/dist/core/backup.js +417 -0
  83. package/dist/core/backup.js.map +1 -0
  84. package/dist/core/domain.d.ts +30 -0
  85. package/dist/core/domain.d.ts.map +1 -0
  86. package/dist/core/domain.js +170 -0
  87. package/dist/core/domain.js.map +1 -0
  88. package/dist/core/firewall.d.ts +27 -0
  89. package/dist/core/firewall.d.ts.map +1 -0
  90. package/dist/core/firewall.js +158 -0
  91. package/dist/core/firewall.js.map +1 -0
  92. package/dist/core/logs.d.ts +28 -0
  93. package/dist/core/logs.d.ts.map +1 -0
  94. package/dist/core/logs.js +129 -0
  95. package/dist/core/logs.js.map +1 -0
  96. package/dist/core/maintain.d.ts +41 -0
  97. package/dist/core/maintain.d.ts.map +1 -0
  98. package/dist/core/maintain.js +179 -0
  99. package/dist/core/maintain.js.map +1 -0
  100. package/dist/core/manage.d.ts +43 -0
  101. package/dist/core/manage.d.ts.map +1 -0
  102. package/dist/core/manage.js +241 -0
  103. package/dist/core/manage.js.map +1 -0
  104. package/dist/core/provision.d.ts +19 -0
  105. package/dist/core/provision.d.ts.map +1 -0
  106. package/dist/core/provision.js +192 -0
  107. package/dist/core/provision.js.map +1 -0
  108. package/dist/core/secure.d.ts +29 -0
  109. package/dist/core/secure.d.ts.map +1 -0
  110. package/dist/core/secure.js +204 -0
  111. package/dist/core/secure.js.map +1 -0
  112. package/dist/core/snapshot.d.ts +22 -0
  113. package/dist/core/snapshot.d.ts.map +1 -0
  114. package/dist/core/snapshot.js +58 -0
  115. package/dist/core/snapshot.js.map +1 -0
  116. package/dist/core/status.d.ts +12 -0
  117. package/dist/core/status.d.ts.map +1 -0
  118. package/dist/core/status.js +44 -0
  119. package/dist/core/status.js.map +1 -0
  120. package/dist/core/tokens.d.ts +4 -0
  121. package/dist/core/tokens.d.ts.map +1 -0
  122. package/dist/core/tokens.js +23 -0
  123. package/dist/core/tokens.js.map +1 -0
  124. package/dist/index.js +17 -4
  125. package/dist/index.js.map +1 -1
  126. package/dist/mcp/index.d.ts +3 -0
  127. package/dist/mcp/index.d.ts.map +1 -0
  128. package/dist/mcp/index.js +16 -0
  129. package/dist/mcp/index.js.map +1 -0
  130. package/dist/mcp/server.d.ts +3 -0
  131. package/dist/mcp/server.d.ts.map +1 -0
  132. package/dist/mcp/server.js +111 -0
  133. package/dist/mcp/server.js.map +1 -0
  134. package/dist/mcp/tools/serverBackup.d.ts +24 -0
  135. package/dist/mcp/tools/serverBackup.d.ts.map +1 -0
  136. package/dist/mcp/tools/serverBackup.js +262 -0
  137. package/dist/mcp/tools/serverBackup.js.map +1 -0
  138. package/dist/mcp/tools/serverInfo.d.ts +36 -0
  139. package/dist/mcp/tools/serverInfo.d.ts.map +1 -0
  140. package/dist/mcp/tools/serverInfo.js +283 -0
  141. package/dist/mcp/tools/serverInfo.js.map +1 -0
  142. package/dist/mcp/tools/serverLogs.d.ts +25 -0
  143. package/dist/mcp/tools/serverLogs.d.ts.map +1 -0
  144. package/dist/mcp/tools/serverLogs.js +124 -0
  145. package/dist/mcp/tools/serverLogs.js.map +1 -0
  146. package/dist/mcp/tools/serverMaintain.d.ts +17 -0
  147. package/dist/mcp/tools/serverMaintain.d.ts.map +1 -0
  148. package/dist/mcp/tools/serverMaintain.js +156 -0
  149. package/dist/mcp/tools/serverMaintain.js.map +1 -0
  150. package/dist/mcp/tools/serverManage.d.ts +38 -0
  151. package/dist/mcp/tools/serverManage.d.ts.map +1 -0
  152. package/dist/mcp/tools/serverManage.js +190 -0
  153. package/dist/mcp/tools/serverManage.js.map +1 -0
  154. package/dist/mcp/tools/serverProvision.d.ts +36 -0
  155. package/dist/mcp/tools/serverProvision.d.ts.map +1 -0
  156. package/dist/mcp/tools/serverProvision.js +116 -0
  157. package/dist/mcp/tools/serverProvision.js.map +1 -0
  158. package/dist/mcp/tools/serverSecure.d.ts +35 -0
  159. package/dist/mcp/tools/serverSecure.d.ts.map +1 -0
  160. package/dist/mcp/tools/serverSecure.js +335 -0
  161. package/dist/mcp/tools/serverSecure.js.map +1 -0
  162. package/dist/mcp/utils.d.ts +42 -0
  163. package/dist/mcp/utils.d.ts.map +1 -0
  164. package/dist/mcp/utils.js +61 -0
  165. package/dist/mcp/utils.js.map +1 -0
  166. package/dist/providers/base.d.ts +2 -2
  167. package/dist/providers/base.d.ts.map +1 -1
  168. package/dist/providers/digitalocean.d.ts +2 -2
  169. package/dist/providers/digitalocean.d.ts.map +1 -1
  170. package/dist/providers/digitalocean.js +3 -3
  171. package/dist/providers/digitalocean.js.map +1 -1
  172. package/dist/providers/hetzner.d.ts +2 -2
  173. package/dist/providers/hetzner.d.ts.map +1 -1
  174. package/dist/providers/hetzner.js +7 -4
  175. package/dist/providers/hetzner.js.map +1 -1
  176. package/dist/providers/linode.d.ts +2 -2
  177. package/dist/providers/linode.d.ts.map +1 -1
  178. package/dist/providers/linode.js +2 -2
  179. package/dist/providers/linode.js.map +1 -1
  180. package/dist/providers/vultr.d.ts +2 -2
  181. package/dist/providers/vultr.d.ts.map +1 -1
  182. package/dist/providers/vultr.js +9 -3
  183. package/dist/providers/vultr.js.map +1 -1
  184. package/dist/types/index.d.ts +11 -1
  185. package/dist/types/index.d.ts.map +1 -1
  186. package/dist/utils/cloudInit.d.ts +1 -0
  187. package/dist/utils/cloudInit.d.ts.map +1 -1
  188. package/dist/utils/cloudInit.js +62 -0
  189. package/dist/utils/cloudInit.js.map +1 -1
  190. package/dist/utils/config.js +1 -1
  191. package/dist/utils/config.js.map +1 -1
  192. package/dist/utils/errorMapper.d.ts +1 -0
  193. package/dist/utils/errorMapper.d.ts.map +1 -1
  194. package/dist/utils/errorMapper.js +25 -1
  195. package/dist/utils/errorMapper.js.map +1 -1
  196. package/dist/utils/modeGuard.d.ts +5 -0
  197. package/dist/utils/modeGuard.d.ts.map +1 -0
  198. package/dist/utils/modeGuard.js +13 -0
  199. package/dist/utils/modeGuard.js.map +1 -0
  200. package/dist/utils/openBrowser.d.ts.map +1 -1
  201. package/dist/utils/openBrowser.js +9 -2
  202. package/dist/utils/openBrowser.js.map +1 -1
  203. package/dist/utils/prompts.d.ts +2 -2
  204. package/dist/utils/prompts.d.ts.map +1 -1
  205. package/dist/utils/prompts.js +3 -3
  206. package/dist/utils/prompts.js.map +1 -1
  207. package/dist/utils/ssh.d.ts +10 -0
  208. package/dist/utils/ssh.d.ts.map +1 -1
  209. package/dist/utils/ssh.js +181 -17
  210. package/dist/utils/ssh.js.map +1 -1
  211. package/dist/utils/sshKey.d.ts.map +1 -1
  212. package/dist/utils/sshKey.js +3 -0
  213. package/dist/utils/sshKey.js.map +1 -1
  214. package/package.json +7 -4
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 omrfc
3
+ Copyright (c) 2026 Ömer Faruk CAN
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # quicklify
2
2
 
3
+ > Your self-hosted PaaS, fully managed. Deploy, secure, back up — one command at a time.
4
+
3
5
  > English | [Türkçe](README.tr.md)
4
6
 
5
7
  ![Tests](https://github.com/omrfc/quicklify/actions/workflows/ci.yml/badge.svg)
@@ -9,14 +11,11 @@
9
11
  ![License](https://img.shields.io/badge/license-MIT-blue)
10
12
  ![GitHub stars](https://img.shields.io/github/stars/omrfc/quicklify?style=flat-square)
11
13
  [![Socket Badge](https://socket.dev/api/badge/npm/package/quicklify)](https://socket.dev/npm/package/quicklify)
12
-
13
- **Self-hosting made simple.**
14
-
15
- Deploy, secure, back up, snapshot, and maintain your servers with confidence.
14
+ [![Website](https://img.shields.io/website?url=https%3A%2F%2Fquicklify.omrfc.dev&label=website)](https://quicklify.omrfc.dev)
16
15
 
17
16
  ## Why Quicklify Exists
18
17
 
19
- Most self-hosted Coolify servers break because:
18
+ Most self-hosted servers break because:
20
19
 
21
20
  - No backup discipline
22
21
  - No update strategy
@@ -24,19 +23,42 @@ Most self-hosted Coolify servers break because:
24
23
  - No monitoring
25
24
  - No snapshot routine
26
25
 
27
- Stop babysitting your Coolify server. Quicklify was built to fix that.
26
+ Stop babysitting your servers. Quicklify was built to fix that.
28
27
 
29
28
  ## Quick Start
30
29
 
31
30
  ```bash
32
- # 1. Get your API token from Hetzner, DigitalOcean, Vultr, or Linode
33
- # 2. Run the installer
34
- npx quicklify init
31
+ # Interactive mode no commands to memorize
32
+ npx quicklify
33
+ ```
34
+
35
+ Running `quicklify` without any arguments launches an **interactive menu** where you can browse all available actions by category, pick what you need with arrow keys, and configure options step by step — no need to remember any command names or flags.
36
+
37
+ ```
38
+ ? What would you like to do?
39
+ Server Management
40
+ ❯ Deploy a new server
41
+ Add an existing server
42
+ List all servers
43
+ Check server status
44
+ ...
45
+ Security
46
+ Harden SSH & fail2ban
47
+ Manage firewall (UFW)
48
+ ...
49
+ ```
35
50
 
36
- # 3. Access Coolify at http://<your-ip>:8000
51
+ Each action includes sub-options (server mode, template, log source, port number, etc.) and a **← Back** option to return to the main menu at any point.
52
+
53
+ If you already know the commands, you can still use them directly:
54
+
55
+ ```bash
56
+ quicklify init # Deploy a new server
57
+ quicklify status my-server # Check server status
58
+ quicklify backup --all # Backup all servers
37
59
  ```
38
60
 
39
- That's it. Quicklify handles server provisioning, SSH key setup, firewall configuration, and Coolify installation automatically.
61
+ Quicklify handles server provisioning, SSH key setup, firewall configuration, and platform installation automatically.
40
62
 
41
63
  ## What Makes Quicklify Different?
42
64
 
@@ -47,27 +69,30 @@ That's it. Quicklify handles server provisioning, SSH key setup, firewall config
47
69
  | Security is an afterthought? | Firewall, SSH hardening, SSL, and security audits built-in |
48
70
  | Backups? Maybe someday... | One-command backup & restore with manifest tracking |
49
71
  | Managing multiple servers? | `--all` flag across backup, maintain, status, and health |
50
- | Existing server not tracked? | `quicklify add` brings any Coolify server under management |
72
+ | Existing server not tracked? | `quicklify add` brings any server under management |
73
+ | Don't want to memorize commands? | Just run `quicklify` — interactive menu guides you |
51
74
 
52
75
  ## What Can You Do?
53
76
 
54
77
  ### Deploy
55
78
  ```bash
56
- quicklify init # Interactive setup
79
+ quicklify # Interactive menu (recommended)
80
+ quicklify init # Interactive setup (direct)
57
81
  quicklify init --provider hetzner # Non-interactive
58
82
  quicklify init --config quicklify.yml # From YAML config
59
83
  quicklify init --template production # Use a template
84
+ quicklify init --mode bare # Generic VPS (no Coolify)
60
85
  ```
61
86
 
62
87
  ### Manage
63
88
  ```bash
64
89
  quicklify list # List all servers
65
- quicklify status my-server # Check server & Coolify status
90
+ quicklify status my-server # Check server status
66
91
  quicklify status --all # Check all servers
67
92
  quicklify ssh my-server # SSH into server
68
93
  quicklify restart my-server # Restart server
69
94
  quicklify destroy my-server # Destroy cloud server entirely
70
- quicklify add # Add existing Coolify server
95
+ quicklify add # Add existing server
71
96
  quicklify remove my-server # Remove from local config
72
97
  quicklify config set key value # Manage default configuration
73
98
  quicklify export # Export server list to JSON
@@ -76,7 +101,7 @@ quicklify import servers.json # Import servers from JSON
76
101
 
77
102
  ### Update & Maintain
78
103
  ```bash
79
- quicklify update my-server # Update Coolify
104
+ quicklify update my-server # Update Coolify (Coolify servers)
80
105
  quicklify maintain my-server # Full maintenance (snapshot + update + health + reboot)
81
106
  quicklify maintain --all # Maintain all servers
82
107
  ```
@@ -101,14 +126,14 @@ quicklify snapshot delete my-server # Delete a snapshot
101
126
  quicklify firewall status my-server # Check firewall
102
127
  quicklify firewall setup my-server # Configure UFW
103
128
  quicklify secure audit my-server # Security audit
104
- quicklify secure harden my-server # SSH hardening + fail2ban
129
+ quicklify secure setup my-server # SSH hardening + fail2ban
105
130
  quicklify domain add my-server --domain example.com # Set domain + SSL
106
131
  ```
107
132
 
108
133
  ### Monitor & Debug
109
134
  ```bash
110
135
  quicklify monitor my-server # CPU, RAM, disk usage
111
- quicklify logs my-server # View Coolify logs
136
+ quicklify logs my-server # View server logs
112
137
  quicklify logs my-server -f # Follow logs
113
138
  quicklify health # Health check all servers
114
139
  quicklify doctor # Check local environment
@@ -157,16 +182,18 @@ quicklify init --template production --provider hetzner
157
182
 
158
183
  ## Security
159
184
 
160
- Quicklify is built with security as a priority — **1,300+ tests** across 55 suites, including dedicated security test suites.
185
+ Quicklify is built with security as a priority — **2,047 tests** across 76 suites, including dedicated security test suites.
161
186
 
162
187
  - API tokens are never stored on disk — prompted at runtime or via environment variables
163
188
  - SSH keys are auto-generated if needed (Ed25519)
164
- - All SSH connections use `StrictHostKeyChecking=accept-new` with IP validation and environment filtering
165
- - Shell injection protection on all user-facing inputs
189
+ - All SSH connections use `StrictHostKeyChecking=accept-new` with IP validation (octet range) and environment filtering
190
+ - Shell injection protection on all user-facing inputs (`spawn`/`spawnSync`, no `execSync`)
166
191
  - Provider error messages are sanitized to prevent token leakage
192
+ - stderr sanitization redacts IPs, home paths, tokens, and secrets from error output
167
193
  - Config file token detection (22+ key patterns, case-insensitive, nested)
168
- - Import/export operations strip sensitive fields and enforce strict file permissions
194
+ - Import/export operations strip sensitive fields and enforce strict file permissions (`0o600`)
169
195
  - `--full-setup` enables UFW firewall and SSH hardening automatically
196
+ - MCP: SAFE_MODE (default: on) blocks all destructive operations, Zod schema validation on all inputs, path traversal protection on backup restore
170
197
 
171
198
  ## Installation
172
199
 
@@ -196,17 +223,51 @@ Use `quicklify status my-server --autostart` to check and auto-restart if needed
196
223
 
197
224
  See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, testing, and contribution guidelines.
198
225
 
226
+ ## MCP Server (AI Integration)
227
+
228
+ Quicklify includes a built-in [Model Context Protocol](https://modelcontextprotocol.io/) server for AI-powered server management. Works with Claude Code, Cursor, Windsurf, and other MCP-compatible clients.
229
+
230
+ ```json
231
+ {
232
+ "mcpServers": {
233
+ "quicklify": {
234
+ "command": "npx",
235
+ "args": ["-y", "-p", "quicklify", "quicklify-mcp"],
236
+ "env": {
237
+ "HETZNER_TOKEN": "your-token",
238
+ "DIGITALOCEAN_TOKEN": "your-token",
239
+ "VULTR_TOKEN": "your-token",
240
+ "LINODE_TOKEN": "your-token"
241
+ }
242
+ }
243
+ }
244
+ }
245
+ ```
246
+
247
+ Available tools:
248
+
249
+ | Tool | Actions | Description |
250
+ |------|---------|-------------|
251
+ | `server_info` | list, status, health | Query server information, check cloud provider & Coolify status |
252
+ | `server_logs` | logs, monitor | Fetch Coolify/Docker logs and system metrics via SSH |
253
+ | `server_manage` | add, remove, destroy | Register, unregister, or destroy cloud servers |
254
+ | `server_maintain` | update, restart, maintain | Update Coolify, restart servers, run full maintenance |
255
+ | `server_secure` | secure, firewall, domain | SSH hardening, firewall rules, domain/SSL management (10 subcommands) |
256
+ | `server_backup` | backup, snapshot | Backup/restore databases and create/manage VPS snapshots |
257
+ | `server_provision` | create | Provision new servers on cloud providers |
258
+
259
+ > All destructive operations (destroy, restore, snapshot-delete, provision, restart, maintain, snapshot-create) require `SAFE_MODE=false` to execute.
260
+
199
261
  ## What's Next
200
262
 
201
263
  - Scheduled maintenance (cron-based automatic upkeep)
202
- - Generic server management (non-Coolify servers)
203
- - Interactive TUI dashboard
264
+ - Dokploy platform support (`--platform dokploy`)
204
265
 
205
266
  ## Philosophy
206
267
 
207
268
  > Infrastructure should be boring, predictable, and safe.
208
269
 
209
- Quicklify is not a script. It's your DevOps safety layer for Coolify.
270
+ Quicklify is not a script. It's your DevOps safety layer for self-hosted infrastructure.
210
271
 
211
272
  ## License
212
273
 
package/README.tr.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # quicklify
2
2
 
3
+ > Self-hosted PaaS'ınız, tamamen yönetilen. Deploy, güvenlik, yedekleme — tek komutla.
4
+
3
5
  > [English](README.md) | Türkçe
4
6
 
5
7
  ![Tests](https://github.com/omrfc/quicklify/actions/workflows/ci.yml/badge.svg)
@@ -9,14 +11,11 @@
9
11
  ![License](https://img.shields.io/badge/license-MIT-blue)
10
12
  ![GitHub stars](https://img.shields.io/github/stars/omrfc/quicklify?style=flat-square)
11
13
  [![Socket Badge](https://socket.dev/api/badge/npm/package/quicklify)](https://socket.dev/npm/package/quicklify)
12
-
13
- **Self-hosting basitleştirildi.**
14
-
15
- Sunucularınızı deploy edin, güvence altına alın, yedekleyin, snapshot alın ve bakımını yapın — güvenle.
14
+ [![Website](https://img.shields.io/website?url=https%3A%2F%2Fquicklify.omrfc.dev&label=website)](https://quicklify.omrfc.dev)
16
15
 
17
16
  ## Quicklify Neden Var?
18
17
 
19
- Self-hosted Coolify sunucularının çoğu şu nedenlerle çöker:
18
+ Self-hosted sunucuların çoğu şu nedenlerle çöker:
20
19
 
21
20
  - Yedekleme disiplini yok
22
21
  - Güncelleme stratejisi yok
@@ -24,19 +23,42 @@ Self-hosted Coolify sunucularının çoğu şu nedenlerle çöker:
24
23
  - İzleme yok
25
24
  - Snapshot rutini yok
26
25
 
27
- Coolify sunucunuza çocuk bakıcılığı yapmayı bırakın. Quicklify bunu çözmek için yapıldı.
26
+ Sunucularınıza çocuk bakıcılığı yapmayı bırakın. Quicklify bunu çözmek için yapıldı.
28
27
 
29
28
  ## Hızlı Başlangıç
30
29
 
31
30
  ```bash
32
- # 1. Hetzner, DigitalOcean, Vultr veya Linode'dan API token'ınızı alın
33
- # 2. Kurulumu başlatın
34
- npx quicklify init
31
+ # İnteraktif mod komut ezberlemeye gerek yok
32
+ npx quicklify
33
+ ```
34
+
35
+ `quicklify` komutunu argümansız çalıştırdığınızda **interaktif bir menü** açılır. Tüm işlemleri kategorilere göre görebilir, ok tuşlarıyla seçim yapabilir ve alt seçenekleri adım adım yapılandırabilirsiniz — komut adı veya flag ezberlemek zorunda değilsiniz.
36
+
37
+ ```
38
+ ? What would you like to do?
39
+ Server Management
40
+ ❯ Deploy a new server
41
+ Add an existing server
42
+ List all servers
43
+ Check server status
44
+ ...
45
+ Security
46
+ Harden SSH & fail2ban
47
+ Manage firewall (UFW)
48
+ ...
49
+ ```
35
50
 
36
- # 3. Coolify'a http://<sunucu-ip>:8000 adresinden erişin
51
+ Her işlem alt seçenekler (sunucu modu, şablon, log kaynağı, port numarası vb.) içerir ve istediğiniz noktada ana menüye dönmek için **← Back** seçeneği sunar.
52
+
53
+ Komutları zaten biliyorsanız, doğrudan da kullanabilirsiniz:
54
+
55
+ ```bash
56
+ quicklify init # Yeni sunucu kur
57
+ quicklify status sunucum # Sunucu durumunu kontrol et
58
+ quicklify backup --all # Tüm sunucuları yedekle
37
59
  ```
38
60
 
39
- Hepsi bu kadar. Quicklify sunucu oluşturma, SSH anahtar kurulumu, güvenlik duvarı yapılandırması ve Coolify kurulumunu otomatik yapar.
61
+ Quicklify sunucu oluşturma, SSH anahtar kurulumu, güvenlik duvarı yapılandırması ve platform kurulumunu otomatik yapar.
40
62
 
41
63
  ## Quicklify'ı Farklı Kılan Ne?
42
64
 
@@ -47,27 +69,30 @@ Hepsi bu kadar. Quicklify sunucu oluşturma, SSH anahtar kurulumu, güvenlik duv
47
69
  | Güvenlik sonradan mı düşünülüyor? | Güvenlik duvarı, SSH sıkılaştırma, SSL ve güvenlik denetimi hazır |
48
70
  | Yedekleme? Belki bir gün... | Tek komutla yedekleme ve geri yükleme, manifest takibiyle |
49
71
  | Birden fazla sunucu mu yönetiyorsunuz? | Yedekleme, bakım, durum ve sağlıkta `--all` desteği |
50
- | Mevcut sunucu takip dışı mı? | `quicklify add` ile her Coolify sunucusunu yönetime alın |
72
+ | Mevcut sunucu takip dışı mı? | `quicklify add` ile her sunucuyu yönetime alın |
73
+ | Komutları ezberlemek mi? | `quicklify` yazın — interaktif menü sizi yönlendirir |
51
74
 
52
75
  ## Neler Yapabilirsiniz?
53
76
 
54
77
  ### Kurulum
55
78
  ```bash
56
- quicklify init # İnteraktif kurulum
79
+ quicklify # İnteraktif menü (önerilen)
80
+ quicklify init # İnteraktif kurulum (doğrudan)
57
81
  quicklify init --provider hetzner # Otomatik kurulum
58
82
  quicklify init --config quicklify.yml # YAML ile kurulum
59
83
  quicklify init --template production # Şablon kullanarak
84
+ quicklify init --mode bare # Genel VPS (Coolify olmadan)
60
85
  ```
61
86
 
62
87
  ### Yönetim
63
88
  ```bash
64
89
  quicklify list # Sunucuları listele
65
- quicklify status sunucum # Sunucu ve Coolify durumu
90
+ quicklify status sunucum # Sunucu durumu
66
91
  quicklify status --all # Tüm sunucuları kontrol et
67
92
  quicklify ssh sunucum # Sunucuya SSH bağlantısı
68
93
  quicklify restart sunucum # Sunucuyu yeniden başlat
69
94
  quicklify destroy sunucum # Bulut sunucusunu tamamen sil
70
- quicklify add # Mevcut Coolify sunucusu ekle
95
+ quicklify add # Mevcut sunucu ekle
71
96
  quicklify remove sunucum # Yerel yapılandırmadan kaldır
72
97
  quicklify config set key value # Varsayılan yapılandırma yönet
73
98
  quicklify export # Sunucu listesini JSON'a aktar
@@ -76,7 +101,7 @@ quicklify import servers.json # JSON'dan sunucuları içe aktar
76
101
 
77
102
  ### Güncelleme ve Bakım
78
103
  ```bash
79
- quicklify update sunucum # Coolify güncelle
104
+ quicklify update sunucum # Coolify güncelle (Coolify sunucuları)
80
105
  quicklify maintain sunucum # Tam bakım (snapshot + güncelleme + sağlık + yeniden başlatma)
81
106
  quicklify maintain --all # Tüm sunucuları bakıma al
82
107
  ```
@@ -101,14 +126,14 @@ quicklify snapshot delete sunucum # Snapshot sil
101
126
  quicklify firewall status sunucum # Güvenlik duvarı durumu
102
127
  quicklify firewall setup sunucum # UFW yapılandırması
103
128
  quicklify secure audit sunucum # Güvenlik denetimi
104
- quicklify secure harden sunucum # SSH sıkılaştırma + fail2ban
129
+ quicklify secure setup sunucum # SSH sıkılaştırma + fail2ban
105
130
  quicklify domain add sunucum --domain ornek.com # Domain + SSL ayarla
106
131
  ```
107
132
 
108
133
  ### İzleme ve Hata Ayıklama
109
134
  ```bash
110
135
  quicklify monitor sunucum # CPU, RAM, disk kullanımı
111
- quicklify logs sunucum # Coolify logları
136
+ quicklify logs sunucum # Sunucu logları
112
137
  quicklify logs sunucum -f # Logları canlı takip et
113
138
  quicklify health # Tüm sunucuların sağlık kontrolü
114
139
  quicklify doctor # Yerel ortam kontrolü
@@ -157,16 +182,18 @@ quicklify init --template production --provider hetzner
157
182
 
158
183
  ## Güvenlik
159
184
 
160
- Quicklify güvenlik öncelikli olarak geliştirilmektedir — 55 test suite'inde **1.300+ test**, özel güvenlik test suite'leri dahil.
185
+ Quicklify güvenlik öncelikli olarak geliştirilmektedir — 76 test suite'inde **2.047 test**, özel güvenlik test suite'leri dahil.
161
186
 
162
187
  - API token'ları asla diske kaydedilmez — çalışma zamanında sorulur veya ortam değişkenlerinden alınır
163
188
  - SSH anahtarları gerekirse otomatik oluşturulur (Ed25519)
164
- - Tüm SSH bağlantıları `StrictHostKeyChecking=accept-new` ile IP doğrulama ve ortam filtreleme kullanır
165
- - Tüm kullanıcı girdilerinde shell injection koruması
189
+ - Tüm SSH bağlantıları `StrictHostKeyChecking=accept-new` ile IP doğrulama (oktet aralığı) ve ortam filtreleme kullanır
190
+ - Tüm kullanıcı girdilerinde shell injection koruması (`spawn`/`spawnSync`, `execSync` yok)
166
191
  - Provider hata mesajları token sızıntısını önlemek için temizlenir
192
+ - stderr temizleme — hata çıktısından IP'ler, home dizinleri, token'lar ve gizli veriler otomatik redakte edilir
167
193
  - Yapılandırma dosyasında token tespiti (22+ anahtar pattern, büyük/küçük harf duyarsız, iç içe yapılar)
168
- - İçe/dışa aktarma işlemleri hassas alanları temizler ve dosya izinlerini sıkılaştırır
194
+ - İçe/dışa aktarma işlemleri hassas alanları temizler ve dosya izinlerini sıkılaştırır (`0o600`)
169
195
  - `--full-setup` güvenlik duvarı ve SSH sıkılaştırmasını otomatik etkinleştirir
196
+ - MCP: SAFE_MODE (varsayılan: açık) tüm yıkıcı işlemleri engeller, tüm girdilerde Zod şema doğrulaması, yedek geri yüklemede path traversal koruması
170
197
 
171
198
  ## Kurulum
172
199
 
@@ -196,17 +223,51 @@ Durumu kontrol edip gerekirse otomatik yeniden başlatmak için `quicklify statu
196
223
 
197
224
  Geliştirme ortamı kurulumu, test ve katkı rehberi için [CONTRIBUTING.md](CONTRIBUTING.md) dosyasına bakın.
198
225
 
226
+ ## MCP Sunucusu (Yapay Zeka Entegrasyonu)
227
+
228
+ Quicklify, yapay zeka destekli sunucu yönetimi için yerleşik bir [Model Context Protocol](https://modelcontextprotocol.io/) sunucusu içerir. Claude Code, Cursor, Windsurf ve diğer MCP uyumlu istemcilerle çalışır.
229
+
230
+ ```json
231
+ {
232
+ "mcpServers": {
233
+ "quicklify": {
234
+ "command": "npx",
235
+ "args": ["-y", "-p", "quicklify", "quicklify-mcp"],
236
+ "env": {
237
+ "HETZNER_TOKEN": "token-buraya",
238
+ "DIGITALOCEAN_TOKEN": "token-buraya",
239
+ "VULTR_TOKEN": "token-buraya",
240
+ "LINODE_TOKEN": "token-buraya"
241
+ }
242
+ }
243
+ }
244
+ }
245
+ ```
246
+
247
+ Mevcut araçlar:
248
+
249
+ | Araç | Eylemler | Açıklama |
250
+ |------|----------|----------|
251
+ | `server_info` | list, status, health | Sunucu bilgilerini sorgula, bulut sağlayıcı ve Coolify durumunu kontrol et |
252
+ | `server_logs` | logs, monitor | SSH ile Coolify/Docker loglarını ve sistem metriklerini getir |
253
+ | `server_manage` | add, remove, destroy | Sunucuları kaydet, kaldır veya bulut sunucusunu sil |
254
+ | `server_maintain` | update, restart, maintain | Coolify güncelle, sunucuları yeniden başlat, tam bakım yap |
255
+ | `server_secure` | secure, firewall, domain | SSH sıkılaştırma, güvenlik duvarı kuralları, domain/SSL yönetimi (10 alt komut) |
256
+ | `server_backup` | backup, snapshot | Veritabanı yedekle/geri yükle ve VPS snapshot oluştur/yönet |
257
+ | `server_provision` | create | Bulut sağlayıcılarda yeni sunucu oluştur |
258
+
259
+ > Tüm yıkıcı işlemler (destroy, restore, snapshot-delete, provision, restart, maintain, snapshot-create) çalıştırılmak için `SAFE_MODE=false` gerektirir.
260
+
199
261
  ## Gelecek Planlar
200
262
 
201
263
  - Zamanlanmış bakım (cron tabanlı otomatik bakım)
202
- - Genel sunucu yönetimi (Coolify olmayan sunucular)
203
- - İnteraktif TUI arayüzü
264
+ - Dokploy platform desteği (`--platform dokploy`)
204
265
 
205
266
  ## Felsefe
206
267
 
207
268
  > Altyapı sıkıcı, öngörülebilir ve güvenli olmalıdır.
208
269
 
209
- Quicklify bir script değildir. Coolify için DevOps güvenlik katmanınızdır.
270
+ Quicklify bir script değildir. Self-hosted altyapınız için DevOps güvenlik katmanınızdır.
210
271
 
211
272
  ## Lisans
212
273
 
package/SECURITY.md CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  | Version | Supported |
6
6
  | ------- | ------------------ |
7
- | 0.4.x | :white_check_mark: |
8
- | < 0.4 | :x: |
7
+ | 1.x | :white_check_mark: |
8
+ | < 1.0 | :x: |
9
9
 
10
10
  ## Reporting a Vulnerability
11
11
 
@@ -21,32 +21,94 @@ If you discover a security vulnerability in Quicklify:
21
21
 
22
22
  Response time: Within 48 hours
23
23
 
24
- ## Security Measures
24
+ ## Security Architecture
25
25
 
26
- - All dependencies scanned with Socket.dev
27
- - No credentials stored in code
28
- - API tokens can be provided via environment variables (`HETZNER_TOKEN`, `DIGITALOCEAN_TOKEN`) to avoid shell history exposure
26
+ ### Token Handling (A2 Sensitive Data Exposure)
27
+ - API tokens are **never stored on disk** — runtime prompt or environment variables only
28
+ - Supported env vars: `HETZNER_TOKEN`, `DIGITALOCEAN_TOKEN`, `VULTR_TOKEN`, `LINODE_TOKEN`
29
29
  - API tokens collected via interactive secure prompts (masked input) when env vars are not set
30
- - Config directory created with restrictive permissions (`0o700`)
30
+ - `sanitizedEnv()` strips all keys containing TOKEN, SECRET, PASSWORD, CREDENTIAL from child process environments before every `spawn`/`spawnSync`/`exec` call
31
+ - Provider errors sanitized via `stripSensitiveData()` — removes Authorization headers from axios errors before they reach error messages
32
+
33
+ ### Input Validation (A1 — Injection)
34
+ - All shell execution uses `spawn`/`spawnSync` with array arguments (never string interpolation into shell commands)
35
+ - `assertValidIp()` — IPv4 format and octet range (0-255) validation applied before every SSH/SCP connection and before ssh-keygen calls (defense-in-depth)
36
+ - `assertSafePath()` — rejects remote SCP paths containing shell metacharacters (`;`, `|`, `&`, `$`, `` ` ``, `(`, `)`, `<`, `>`, newlines, spaces)
37
+ - Server name validation: 3-63 chars, lowercase alphanumeric + hyphens, must start with letter
38
+ - `buildHardeningCommand()` — SSH port option validated as integer in range 1-65535 before interpolation into sed command
39
+ - YAML config: 22+ security key patterns detected and warned
40
+ - MCP tools: Zod schema validation on all inputs (port ranges, provider enums, backup ID regex)
41
+
42
+ ### SSH & Network Security
43
+ - `StrictHostKeyChecking=accept-new` for initial connections (first connect accepts key, subsequent connections verify)
44
+ - `BatchMode=yes` on non-interactive SSH (prevents stdin hijacking — critical for MCP mode)
45
+ - `ConnectTimeout=10` and 30s exec timeout prevent hanging connections
46
+ - Stale host key auto-removal with IP re-validation before `ssh-keygen -R` calls
47
+ - SSRF defense: `assertValidIp()` on all Coolify health check targets
48
+
49
+ ### File System Security (A5 — Security Misconfiguration)
50
+ - Config directory (`~/.quicklify/`) created with `0o700` permissions (owner only)
31
51
  - Server config file written with `0o600` permissions (owner read/write only)
52
+ - Backup directories created with `0o700` permissions
53
+ - Backup manifest files written with `0o600` permissions
54
+ - Export files written with `0o600` permissions
32
55
  - Cloud-init install log restricted to `chmod 600` (root only)
33
- - Server name validation: 3-63 chars, lowercase alphanumeric + hyphens, must start with letter
34
- - Input validation on all user inputs
35
- - Automated security checks via GitHub Actions
36
56
 
37
- ## HTTP Usage
57
+ ### Error Handling & Data Exposure
58
+ - `getErrorMessage()` returns only `error.message` — never exposes stack traces to users
59
+ - `sanitizeStderr()` redacts home directory paths, IP addresses, `password=`, `token=`, `secret=` patterns from SSH stderr output (200 char limit)
60
+ - MCP error responses use `getErrorMessage()` — no stack trace disclosure
38
61
 
39
- Quicklify accesses Coolify at `http://IP:8000` during initial setup. This is expected because SSL/TLS is not configured on a fresh Coolify installation. Users are warned to set up a domain and enable SSL for production use.
62
+ ### Path Traversal Protection (A5)
63
+ - Backup restore: `backupId` regex validation + `path.resolve()` guard ensures backup path stays within the server's backup directory
64
+ - Remote SCP paths validated by `assertSafePath()` before use
65
+
66
+ ### Access Control (A3 — Broken Access Control)
67
+ - **SAFE_MODE** (`QUICKLIFY_SAFE_MODE=true`, default enabled for MCP) blocks destructive operations: `destroy`, `restore`, `snapshot-delete`, `provision`, `restart`, `maintain`, `snapshot-create`
68
+ - Mode guard (`requireCoolifyMode()`) prevents Coolify-specific operations on bare servers
40
69
 
41
- ## Third-party Dependencies
70
+ ### Import/Export Security
71
+ - Sensitive field stripping on import
72
+ - Strict file permissions on export
73
+ - Format validation with field-level checking
74
+ - Duplicate detection by server ID
42
75
 
43
- Quicklify uses audited dependencies:
76
+ ## OWASP Top 10 Compliance Summary
77
+
78
+ | Category | Status | Implementation |
79
+ |----------|--------|----------------|
80
+ | A1 - Injection | Mitigated | `spawn` array args, `assertValidIp`, `assertSafePath`, port integer validation |
81
+ | A2 - Sensitive Data Exposure | Mitigated | `sanitizedEnv()` on all child processes, `stripSensitiveData()` on provider errors, tokens never on disk |
82
+ | A3 - Broken Access Control | Mitigated | SAFE_MODE blocks destructive ops, mode guard on Coolify-only ops |
83
+ | A4 - Insecure Design | N/A | CLI tool, minimal attack surface |
84
+ | A5 - Security Misconfiguration | Mitigated | Restrictive file permissions (0o600/0o700), timeout limits, buffer caps |
85
+ | A6 - Vulnerable Components | See below | Production: 0 vulnerabilities |
86
+ | A7 - XSS | N/A | CLI tool, no web UI |
87
+ | A8 - Insecure Deserialization | Mitigated | JSON.parse wrapped in try/catch with safe defaults |
88
+ | A9 - Logging & Monitoring | Partial | `sanitizeStderr()` prevents sensitive data in logs |
89
+ | A10 - SSRF | Mitigated | `assertValidIp()` on all outbound SSH/HTTP targets |
90
+
91
+ ## Dependency Security
92
+
93
+ ### Production Dependencies (0 known vulnerabilities)
94
+ ```
95
+ npm audit --omit=dev → found 0 vulnerabilities
96
+ ```
97
+
98
+ All production dependencies use audited, versioned packages:
44
99
  - Hetzner Cloud API v1 (via Axios, HTTPS)
45
100
  - DigitalOcean API v2 (via Axios, HTTPS)
101
+ - Vultr API v2 (via Axios, HTTPS)
102
+ - Linode API v4 (via Axios, HTTPS)
103
+ - Model Context Protocol SDK (`@modelcontextprotocol/sdk`) for MCP server
104
+ - Zod for runtime input validation
46
105
  - Coolify installed via `curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash` (official method, HTTPS)
47
- - All dependencies regularly updated
48
- - Socket.dev security monitoring enabled
49
106
 
50
- **Note:** The `curl | bash` installation method is the official Coolify installation procedure. The script is fetched over HTTPS from Coolify's CDN.
107
+ ### Dev Dependencies
108
+ One moderate-severity ReDoS vulnerability remains in `test-exclude` → `glob` → `minimatch@10.0.0-10.2.2` (jest code coverage toolchain). This is a dev-only dependency not present in production builds. Remediation is blocked by the dependency chain — `npm audit fix --force` would cause lock file breakage per project policy. Risk accepted as dev-only, not exploitable in production.
51
109
 
52
110
  Security scan: https://socket.dev/npm/package/quicklify
111
+
112
+ ## HTTP Usage
113
+
114
+ Quicklify accesses Coolify at `http://IP:8000` during initial setup. This is expected because SSL/TLS is not configured on a fresh Coolify installation. Users are warned to set up a domain and enable SSL for production use.
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/mcp/index.js').catch((err) => {
3
+ process.stderr.write(`quicklify-mcp: ${err}\n`);
4
+ process.exit(1);
5
+ });
@@ -3,6 +3,7 @@ interface AddOptions {
3
3
  ip?: string;
4
4
  name?: string;
5
5
  skipVerify?: boolean;
6
+ mode?: string;
6
7
  }
7
8
  export declare function addCommand(options?: AddOptions): Promise<void>;
8
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAUA,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,UAAU,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyJxE"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAQA,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,UAAU,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6HxE"}