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.
- package/LICENSE +1 -1
- package/README.md +86 -25
- package/README.tr.md +86 -25
- package/SECURITY.md +79 -17
- package/bin/quicklify-mcp +5 -0
- package/dist/commands/add.d.ts +1 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +41 -65
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/backup.d.ts +2 -11
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +113 -57
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/destroy.d.ts.map +1 -1
- package/dist/commands/destroy.js +58 -37
- package/dist/commands/destroy.js.map +1 -1
- package/dist/commands/domain.d.ts +2 -9
- package/dist/commands/domain.d.ts.map +1 -1
- package/dist/commands/domain.js +47 -56
- package/dist/commands/domain.js.map +1 -1
- package/dist/commands/firewall.d.ts +3 -10
- package/dist/commands/firewall.d.ts.map +1 -1
- package/dist/commands/firewall.js +28 -51
- package/dist/commands/firewall.js.map +1 -1
- package/dist/commands/health.d.ts +2 -2
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +77 -19
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +142 -24
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/interactive.d.ts +2 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +357 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +4 -2
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/logs.d.ts +3 -2
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +15 -12
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/maintain.d.ts.map +1 -1
- package/dist/commands/maintain.js +28 -47
- package/dist/commands/maintain.js.map +1 -1
- package/dist/commands/monitor.d.ts +3 -9
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +3 -48
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +25 -0
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/restart.d.ts.map +1 -1
- package/dist/commands/restart.js +39 -39
- package/dist/commands/restart.js.map +1 -1
- package/dist/commands/restore.d.ts +2 -13
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +42 -54
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/secure.d.ts +2 -9
- package/dist/commands/secure.d.ts.map +1 -1
- package/dist/commands/secure.js +2 -97
- package/dist/commands/secure.js.map +1 -1
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +55 -67
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/ssh.d.ts.map +1 -1
- package/dist/commands/ssh.js +4 -1
- package/dist/commands/ssh.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +53 -85
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +23 -16
- package/dist/commands/update.js.map +1 -1
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/backup.d.ts +59 -0
- package/dist/core/backup.d.ts.map +1 -0
- package/dist/core/backup.js +417 -0
- package/dist/core/backup.js.map +1 -0
- package/dist/core/domain.d.ts +30 -0
- package/dist/core/domain.d.ts.map +1 -0
- package/dist/core/domain.js +170 -0
- package/dist/core/domain.js.map +1 -0
- package/dist/core/firewall.d.ts +27 -0
- package/dist/core/firewall.d.ts.map +1 -0
- package/dist/core/firewall.js +158 -0
- package/dist/core/firewall.js.map +1 -0
- package/dist/core/logs.d.ts +28 -0
- package/dist/core/logs.d.ts.map +1 -0
- package/dist/core/logs.js +129 -0
- package/dist/core/logs.js.map +1 -0
- package/dist/core/maintain.d.ts +41 -0
- package/dist/core/maintain.d.ts.map +1 -0
- package/dist/core/maintain.js +179 -0
- package/dist/core/maintain.js.map +1 -0
- package/dist/core/manage.d.ts +43 -0
- package/dist/core/manage.d.ts.map +1 -0
- package/dist/core/manage.js +241 -0
- package/dist/core/manage.js.map +1 -0
- package/dist/core/provision.d.ts +19 -0
- package/dist/core/provision.d.ts.map +1 -0
- package/dist/core/provision.js +192 -0
- package/dist/core/provision.js.map +1 -0
- package/dist/core/secure.d.ts +29 -0
- package/dist/core/secure.d.ts.map +1 -0
- package/dist/core/secure.js +204 -0
- package/dist/core/secure.js.map +1 -0
- package/dist/core/snapshot.d.ts +22 -0
- package/dist/core/snapshot.d.ts.map +1 -0
- package/dist/core/snapshot.js +58 -0
- package/dist/core/snapshot.js.map +1 -0
- package/dist/core/status.d.ts +12 -0
- package/dist/core/status.d.ts.map +1 -0
- package/dist/core/status.js +44 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/tokens.d.ts +4 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/core/tokens.js +23 -0
- package/dist/core/tokens.js.map +1 -0
- package/dist/index.js +17 -4
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +16 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +111 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/serverBackup.d.ts +24 -0
- package/dist/mcp/tools/serverBackup.d.ts.map +1 -0
- package/dist/mcp/tools/serverBackup.js +262 -0
- package/dist/mcp/tools/serverBackup.js.map +1 -0
- package/dist/mcp/tools/serverInfo.d.ts +36 -0
- package/dist/mcp/tools/serverInfo.d.ts.map +1 -0
- package/dist/mcp/tools/serverInfo.js +283 -0
- package/dist/mcp/tools/serverInfo.js.map +1 -0
- package/dist/mcp/tools/serverLogs.d.ts +25 -0
- package/dist/mcp/tools/serverLogs.d.ts.map +1 -0
- package/dist/mcp/tools/serverLogs.js +124 -0
- package/dist/mcp/tools/serverLogs.js.map +1 -0
- package/dist/mcp/tools/serverMaintain.d.ts +17 -0
- package/dist/mcp/tools/serverMaintain.d.ts.map +1 -0
- package/dist/mcp/tools/serverMaintain.js +156 -0
- package/dist/mcp/tools/serverMaintain.js.map +1 -0
- package/dist/mcp/tools/serverManage.d.ts +38 -0
- package/dist/mcp/tools/serverManage.d.ts.map +1 -0
- package/dist/mcp/tools/serverManage.js +190 -0
- package/dist/mcp/tools/serverManage.js.map +1 -0
- package/dist/mcp/tools/serverProvision.d.ts +36 -0
- package/dist/mcp/tools/serverProvision.d.ts.map +1 -0
- package/dist/mcp/tools/serverProvision.js +116 -0
- package/dist/mcp/tools/serverProvision.js.map +1 -0
- package/dist/mcp/tools/serverSecure.d.ts +35 -0
- package/dist/mcp/tools/serverSecure.d.ts.map +1 -0
- package/dist/mcp/tools/serverSecure.js +335 -0
- package/dist/mcp/tools/serverSecure.js.map +1 -0
- package/dist/mcp/utils.d.ts +42 -0
- package/dist/mcp/utils.d.ts.map +1 -0
- package/dist/mcp/utils.js +61 -0
- package/dist/mcp/utils.js.map +1 -0
- package/dist/providers/base.d.ts +2 -2
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/digitalocean.d.ts +2 -2
- package/dist/providers/digitalocean.d.ts.map +1 -1
- package/dist/providers/digitalocean.js +3 -3
- package/dist/providers/digitalocean.js.map +1 -1
- package/dist/providers/hetzner.d.ts +2 -2
- package/dist/providers/hetzner.d.ts.map +1 -1
- package/dist/providers/hetzner.js +7 -4
- package/dist/providers/hetzner.js.map +1 -1
- package/dist/providers/linode.d.ts +2 -2
- package/dist/providers/linode.d.ts.map +1 -1
- package/dist/providers/linode.js +2 -2
- package/dist/providers/linode.js.map +1 -1
- package/dist/providers/vultr.d.ts +2 -2
- package/dist/providers/vultr.d.ts.map +1 -1
- package/dist/providers/vultr.js +9 -3
- package/dist/providers/vultr.js.map +1 -1
- package/dist/types/index.d.ts +11 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/cloudInit.d.ts +1 -0
- package/dist/utils/cloudInit.d.ts.map +1 -1
- package/dist/utils/cloudInit.js +62 -0
- package/dist/utils/cloudInit.js.map +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/errorMapper.d.ts +1 -0
- package/dist/utils/errorMapper.d.ts.map +1 -1
- package/dist/utils/errorMapper.js +25 -1
- package/dist/utils/errorMapper.js.map +1 -1
- package/dist/utils/modeGuard.d.ts +5 -0
- package/dist/utils/modeGuard.d.ts.map +1 -0
- package/dist/utils/modeGuard.js +13 -0
- package/dist/utils/modeGuard.js.map +1 -0
- package/dist/utils/openBrowser.d.ts.map +1 -1
- package/dist/utils/openBrowser.js +9 -2
- package/dist/utils/openBrowser.js.map +1 -1
- package/dist/utils/prompts.d.ts +2 -2
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +3 -3
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/ssh.d.ts +10 -0
- package/dist/utils/ssh.d.ts.map +1 -1
- package/dist/utils/ssh.js +181 -17
- package/dist/utils/ssh.js.map +1 -1
- package/dist/utils/sshKey.d.ts.map +1 -1
- package/dist/utils/sshKey.js +3 -0
- package/dist/utils/sshKey.js.map +1 -1
- package/package.json +7 -4
package/LICENSE
CHANGED
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
|

|
|
@@ -9,14 +11,11 @@
|
|
|
9
11
|

|
|
10
12
|

|
|
11
13
|
[](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
|
+
[](https://quicklify.omrfc.dev)
|
|
16
15
|
|
|
17
16
|
## Why Quicklify Exists
|
|
18
17
|
|
|
19
|
-
Most self-hosted
|
|
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
|
|
26
|
+
Stop babysitting your servers. Quicklify was built to fix that.
|
|
28
27
|
|
|
29
28
|
## Quick Start
|
|
30
29
|
|
|
31
30
|
```bash
|
|
32
|
-
#
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 — **
|
|
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
|
-
-
|
|
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
|
|
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
|

|
|
@@ -9,14 +11,11 @@
|
|
|
9
11
|

|
|
10
12
|

|
|
11
13
|
[](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
|
+
[](https://quicklify.omrfc.dev)
|
|
16
15
|
|
|
17
16
|
## Quicklify Neden Var?
|
|
18
17
|
|
|
19
|
-
Self-hosted
|
|
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
|
-
|
|
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
|
-
#
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 #
|
|
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 —
|
|
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
|
-
-
|
|
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.
|
|
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
|
-
|
|
|
8
|
-
| < 0
|
|
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
|
|
24
|
+
## Security Architecture
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
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
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
package/dist/commands/add.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"
|
|
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"}
|