quicklify 0.9.0 → 1.0.1

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 (85) hide show
  1. package/README.md +103 -598
  2. package/README.tr.md +178 -0
  3. package/dist/commands/add.d.ts +9 -0
  4. package/dist/commands/add.d.ts.map +1 -0
  5. package/dist/commands/add.js +151 -0
  6. package/dist/commands/add.js.map +1 -0
  7. package/dist/commands/backup.d.ts +1 -0
  8. package/dist/commands/backup.d.ts.map +1 -1
  9. package/dist/commands/backup.js +104 -1
  10. package/dist/commands/backup.js.map +1 -1
  11. package/dist/commands/domain.d.ts +1 -0
  12. package/dist/commands/domain.d.ts.map +1 -1
  13. package/dist/commands/domain.js +4 -1
  14. package/dist/commands/domain.js.map +1 -1
  15. package/dist/commands/init.d.ts.map +1 -1
  16. package/dist/commands/init.js +20 -6
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/commands/maintain.d.ts +9 -0
  19. package/dist/commands/maintain.d.ts.map +1 -0
  20. package/dist/commands/maintain.js +288 -0
  21. package/dist/commands/maintain.js.map +1 -0
  22. package/dist/commands/remove.d.ts +2 -0
  23. package/dist/commands/remove.d.ts.map +1 -0
  24. package/dist/commands/remove.js +25 -0
  25. package/dist/commands/remove.js.map +1 -0
  26. package/dist/commands/restart.d.ts.map +1 -1
  27. package/dist/commands/restart.js +4 -0
  28. package/dist/commands/restart.js.map +1 -1
  29. package/dist/commands/restore.js +3 -3
  30. package/dist/commands/restore.js.map +1 -1
  31. package/dist/commands/snapshot.d.ts +8 -0
  32. package/dist/commands/snapshot.d.ts.map +1 -0
  33. package/dist/commands/snapshot.js +199 -0
  34. package/dist/commands/snapshot.js.map +1 -0
  35. package/dist/commands/status.d.ts +6 -1
  36. package/dist/commands/status.d.ts.map +1 -1
  37. package/dist/commands/status.js +120 -7
  38. package/dist/commands/status.js.map +1 -1
  39. package/dist/commands/update.d.ts +5 -1
  40. package/dist/commands/update.d.ts.map +1 -1
  41. package/dist/commands/update.js +101 -14
  42. package/dist/commands/update.js.map +1 -1
  43. package/dist/index.js +38 -4
  44. package/dist/index.js.map +1 -1
  45. package/dist/providers/base.d.ts +5 -1
  46. package/dist/providers/base.d.ts.map +1 -1
  47. package/dist/providers/digitalocean.d.ts +5 -1
  48. package/dist/providers/digitalocean.d.ts.map +1 -1
  49. package/dist/providers/digitalocean.js +74 -0
  50. package/dist/providers/digitalocean.js.map +1 -1
  51. package/dist/providers/hetzner.d.ts +5 -1
  52. package/dist/providers/hetzner.d.ts.map +1 -1
  53. package/dist/providers/hetzner.js +77 -2
  54. package/dist/providers/hetzner.js.map +1 -1
  55. package/dist/providers/linode.d.ts +25 -0
  56. package/dist/providers/linode.d.ts.map +1 -0
  57. package/dist/providers/linode.js +291 -0
  58. package/dist/providers/linode.js.map +1 -0
  59. package/dist/providers/vultr.d.ts +25 -0
  60. package/dist/providers/vultr.d.ts.map +1 -0
  61. package/dist/providers/vultr.js +262 -0
  62. package/dist/providers/vultr.js.map +1 -0
  63. package/dist/types/index.d.ts +9 -0
  64. package/dist/types/index.d.ts.map +1 -1
  65. package/dist/utils/config.d.ts +1 -0
  66. package/dist/utils/config.d.ts.map +1 -1
  67. package/dist/utils/config.js +7 -0
  68. package/dist/utils/config.js.map +1 -1
  69. package/dist/utils/prompts.d.ts.map +1 -1
  70. package/dist/utils/prompts.js +2 -0
  71. package/dist/utils/prompts.js.map +1 -1
  72. package/dist/utils/providerFactory.d.ts.map +1 -1
  73. package/dist/utils/providerFactory.js +10 -0
  74. package/dist/utils/providerFactory.js.map +1 -1
  75. package/dist/utils/serverSelect.d.ts +1 -0
  76. package/dist/utils/serverSelect.d.ts.map +1 -1
  77. package/dist/utils/serverSelect.js +37 -6
  78. package/dist/utils/serverSelect.js.map +1 -1
  79. package/dist/utils/templates.d.ts.map +1 -1
  80. package/dist/utils/templates.js +6 -0
  81. package/dist/utils/templates.js.map +1 -1
  82. package/dist/utils/yamlConfig.d.ts.map +1 -1
  83. package/dist/utils/yamlConfig.js +9 -4
  84. package/dist/utils/yamlConfig.js.map +1 -1
  85. package/package.json +3 -1
package/README.md CHANGED
@@ -1,673 +1,178 @@
1
1
  # quicklify
2
2
 
3
+ > English | [Türkçe](README.tr.md)
4
+
3
5
  ![Tests](https://github.com/omrfc/quicklify/actions/workflows/ci.yml/badge.svg)
4
6
  [![Coverage](https://codecov.io/gh/omrfc/quicklify/branch/main/graph/badge.svg)](https://codecov.io/gh/omrfc/quicklify)
5
7
  ![npm](https://img.shields.io/npm/v/quicklify)
6
- ![Downloads](https://img.shields.io/npm/dw/quicklify)
8
+ ![Downloads](https://img.shields.io/npm/dt/quicklify)
7
9
  ![License](https://img.shields.io/badge/license-MIT-blue)
8
10
  ![GitHub stars](https://img.shields.io/github/stars/omrfc/quicklify?style=flat-square)
9
11
  [![Socket Badge](https://socket.dev/api/badge/npm/package/quicklify)](https://socket.dev/npm/package/quicklify)
10
12
 
11
- > Deploy Coolify to any cloud VPS with one command
13
+ **Deploy Coolify to a cloud VPS with one command.**
12
14
 
13
- ## 🚀 What is Quicklify?
15
+ Quicklify installs, configures, and manages [Coolify](https://coolify.io) on your cloud server in about 4 minutes. Back up your data, harden security, manage domains, and keep everything updated — all from the terminal.
14
16
 
15
- Quicklify is a CLI tool that automates Coolify installation on cloud VPS providers. One command to deploy your self-hosted PaaS platform.
17
+ ## Quick Start
16
18
 
17
- **Before Quicklify:**
19
+ ```bash
20
+ # 1. Get your API token from Hetzner, DigitalOcean, Vultr, or Linode
21
+ # 2. Run the installer
22
+ npx quicklify init
18
23
 
24
+ # 3. Access Coolify at http://<your-ip>:8000
19
25
  ```
20
- Create VPS manually (5 min)
21
- SSH into server (2 min)
22
- Install Docker (10 min)
23
- Configure firewall (5 min)
24
- Install Coolify (10 min)
25
- Total: ~30 minutes + manual work
26
- ```
27
26
 
28
- **With Quicklify:**
27
+ That's it. Quicklify handles server provisioning, SSH key setup, firewall configuration, and Coolify installation automatically.
28
+
29
+ ## What Can You Do?
29
30
 
31
+ ### Deploy
30
32
  ```bash
31
- npx quicklify init
32
- # Hetzner: ~4 minutes | DigitalOcean: ~6 minutes
33
- # Zero manual work ✨
33
+ quicklify init # Interactive setup
34
+ quicklify init --provider hetzner # Non-interactive
35
+ quicklify init --config quicklify.yml # From YAML config
36
+ quicklify init --template production # Use a template
34
37
  ```
35
38
 
36
- ## ✨ Features
37
-
38
- - 🎯 **One Command Deploy** - VPS + Coolify with a single command
39
- - 💰 **Cost Savings** - $50-200/mo (Vercel/Netlify) → €3.79/mo
40
- - 🔒 **Secure by Default** - Automated security setup
41
- - 🌍 **Multi-Cloud** - Hetzner Cloud + DigitalOcean
42
- - 💻 **Beautiful CLI** - Interactive prompts with validation
43
- - 🎨 **ARM64 Ready** - Support for cost-effective ARM servers
44
- - ⚡ **Fast Setup** - Hetzner ~4 min, DigitalOcean ~6 min
45
- - ✨ **Dynamic Server Types** - Only shows compatible types for selected location
46
- - 🔥 **Auto Firewall** - Ports 8000, 22, 80, 443 configured automatically
47
- - 🚀 **Zero SSH Required** - Opens directly in browser after deployment
48
- - 📋 **Server Management** - List, status check, destroy, restart, backup, restore commands
49
- - 🔧 **Default Config** - Set defaults to skip repetitive prompts
50
- - 🔑 **SSH Access** - Connect to servers or run remote commands
51
- - 🔄 **Coolify Update** - Update Coolify with one command
52
- - 🏥 **Health Check Polling** - Detects when Coolify is ready (no more blind waiting)
53
- - 📊 **Server Monitoring** - CPU/RAM/Disk usage and Docker container status
54
- - 📜 **Log Viewer** - View Coolify, Docker, or system logs with follow mode
55
- - 🩺 **Environment Doctor** - Diagnose local setup issues
56
- - 🫀 **Bulk Health Check** - Check all servers at once
57
- - 🔥 **Firewall Management** - UFW setup, add/remove ports, protected port safety
58
- - 🌐 **Domain Management** - Bind domains, DNS check, auto SSL via Coolify
59
- - 🛡️ **SSH Hardening** - Disable password auth, fail2ban, security audit with score
60
- - 🧪 **Dry-Run Mode** - Preview commands on firewall/domain/secure/backup/restore before executing
61
- - 💾 **Backup & Restore** - Database + config backup with SCP download, restore with double confirmation
62
- - 📦 **Export/Import** - Transfer server list between machines as JSON
63
- - ⚡ **Full Setup** - `--full-setup` flag auto-configures firewall + SSH hardening after deploy
64
- - 📄 **YAML Config** - `quicklify init --config quicklify.yml` for one-command deploy
65
- - 📋 **Templates** - `--template starter|production|dev` with per-provider defaults
66
- - 🤖 **Non-Interactive Mode** - CI/CD friendly with `--provider --token --region --size --name` flags
67
-
68
- ## 📦 Installation
69
-
70
- ### Using npx (Recommended)
71
-
39
+ ### Manage
72
40
  ```bash
73
- npx quicklify init
41
+ quicklify list # List all servers
42
+ quicklify status my-server # Check server & Coolify status
43
+ quicklify status --all # Check all servers
44
+ quicklify ssh my-server # SSH into server
45
+ quicklify restart my-server # Restart server
46
+ quicklify add # Add existing Coolify server
47
+ quicklify remove my-server # Remove from local config
74
48
  ```
75
49
 
76
- ### Global Installation
77
-
50
+ ### Update & Maintain
78
51
  ```bash
79
- npm install -g quicklify
80
- quicklify init
52
+ quicklify update my-server # Update Coolify
53
+ quicklify maintain my-server # Full maintenance (snapshot + update + health + reboot)
54
+ quicklify maintain --all # Maintain all servers
81
55
  ```
82
56
 
83
- ## 🎬 Quick Start
84
-
85
- ### Step 1: Get API Token
86
-
87
- **Hetzner Cloud:**
88
-
89
- 1. Visit [Hetzner Console](https://console.hetzner.cloud/)
90
- 2. Select your project
91
- 3. Navigate to Security → API Tokens
92
- 4. Click "Generate API Token"
93
- 5. Set permissions to **Read & Write**
94
- 6. Copy the token (shown only once!)
95
-
96
- **DigitalOcean:**
97
-
98
- 1. Visit [DigitalOcean API](https://cloud.digitalocean.com/account/api/tokens)
99
- 2. Generate New Token with **Read & Write** scope
100
- 3. Copy the token
101
-
102
- ### Step 2: Deploy Coolify
103
-
57
+ ### Back Up & Restore
104
58
  ```bash
105
- npx quicklify init
59
+ quicklify backup my-server # Backup DB + config
60
+ quicklify backup --all # Backup all servers
61
+ quicklify restore my-server # Restore from backup
106
62
  ```
107
63
 
108
- You'll be prompted for:
109
-
110
- - **API Token** - Paste your cloud provider token
111
- - **Region** - Select datacenter location
112
- - **Server Size** - Choose VPS specs (CAX11 recommended)
113
- - **Server Name** - Name your instance
114
-
115
- ### Step 3: Access Coolify
116
-
117
- After deployment (Hetzner ~4 min, DigitalOcean ~6 min):
118
-
119
- ```
120
- ✅ Deployment Successful!
121
- Server IP: 123.45.67.89
122
- Access Coolify: http://123.45.67.89:8000
64
+ ### Snapshots
65
+ ```bash
66
+ quicklify snapshot create my-server # Create VPS snapshot (with cost estimate)
67
+ quicklify snapshot list my-server # List snapshots
68
+ quicklify snapshot list --all # List all snapshots across servers
69
+ quicklify snapshot delete my-server # Delete a snapshot
123
70
  ```
124
71
 
125
- Visit the URL, create your admin account, and start deploying!
126
-
127
- ## 🔒 Security Notes
128
-
129
- **Important:** Port 8000 is publicly accessible after deployment.
130
-
131
- **Recommended next steps:**
132
- 1. **One-command setup:** `quicklify init --full-setup` (auto-configures firewall + SSH hardening)
133
- 2. **Or manually:** `quicklify firewall setup my-server`
134
- 3. **Add a domain:** `quicklify domain add my-server --domain example.com`
135
- 4. **Harden SSH:** `quicklify secure setup my-server`
136
- 5. **Run security audit:** `quicklify secure audit my-server`
137
- 6. **Create a backup:** `quicklify backup my-server`
138
- 7. Set a **strong password** on first login
139
- 8. Consider **Cloudflare** for DDoS protection
140
-
141
- ## 🌐 Supported Providers
142
-
143
- | Provider | Status | Starting Price | Architecture |
144
- |----------|--------|----------------|--------------|
145
- | **Hetzner Cloud** | ✅ Available | €3.79/mo | ARM64 + x86 |
146
- | **DigitalOcean** | ✅ Available | $12/mo | x86 |
147
- | **Vultr** | 📋 Planned | $2.50/mo | x86 |
148
- | **Linode** | 📋 Planned | $5/mo | x86 |
149
-
150
- ## 💡 Use Cases
151
-
152
- **Perfect for:**
153
-
154
- - 🚀 Side projects and MVPs
155
- - 💼 Client deployments (freelancers/agencies)
156
- - 🎓 Learning DevOps and self-hosting
157
- - 💸 Cutting cloud hosting costs
158
- - 🏢 Small team internal tools
159
-
160
- **When to use alternatives:**
161
-
162
- - Large enterprise? → Coolify Cloud or enterprise PaaS
163
- - Extreme scale? → Kubernetes + managed services
164
-
165
- ## 📊 Cost Comparison
166
-
167
- | Solution | Monthly Cost | Setup Time | Management |
168
- |----------|--------------|------------|------------|
169
- | Vercel (Hobby) | $20+ | 5 min | Easy |
170
- | Vercel (Pro) | $50+ | 5 min | Easy |
171
- | Netlify (Pro) | $19+ | 5 min | Easy |
172
- | **Quicklify + Hetzner** | **€3.79** | **~4 min** | **Easy** |
173
- | **Quicklify + DigitalOcean** | **$12** | **~6 min** | **Easy** |
174
- | Manual VPS + Coolify | €3.79 | 30+ min | Hard |
175
-
176
- **Savings: ~$180-240/year per project!** 💰
177
-
178
- ## 📋 Recent Updates
179
-
180
- ### v0.9.0 (2026-02-21)
181
- - **YAML Config:** `quicklify init --config quicklify.yml` - deploy from a config file
182
- - **Templates:** `--template starter|production|dev` - predefined server configurations per provider
183
- - **Config merge:** Priority order: CLI flags > YAML config > template defaults > interactive prompts
184
- - **Security:** Token fields in YAML are detected and warned (never store tokens in config files)
185
- - 1 new dependency (js-yaml), 742 tests with 98%+ statement coverage
186
-
187
- ### v0.8.0 (2026-02-21)
188
- - **New commands:** `quicklify backup`, `quicklify restore`, `quicklify export`, `quicklify import`
189
- - **Backup:** pg_dump + config tarball, SCP download to `~/.quicklify/backups/`, manifest.json metadata
190
- - **Restore:** Upload backup to server, stop/start Coolify, restore DB + config, double confirmation safety
191
- - **Export/Import:** Transfer `servers.json` between machines, duplicate detection, format validation
192
- - **`--full-setup` flag:** `quicklify init --full-setup` auto-configures firewall + SSH hardening after deploy
193
- - Zero new dependencies, 636 tests with 98%+ statement coverage
194
-
195
- ### v0.7.0 (2026-02-20)
196
- - **New commands:** `quicklify firewall`, `quicklify domain`, `quicklify secure`
197
- - **Firewall management:** UFW setup, add/remove ports, protected port 22 safety, Coolify port warnings
198
- - **Domain management:** Bind domains to Coolify, DNS A record check, auto SSL
199
- - **SSH hardening:** Disable password auth, key-only root login, fail2ban, security audit with 0-4 score
200
- - **Dry-run mode:** `--dry-run` flag previews all commands without executing
201
- - Zero new dependencies, 494 tests with 97%+ statement coverage
202
-
203
- ### v0.6.0 (2026-02-20)
204
- - **New commands:** `quicklify logs`, `quicklify monitor`, `quicklify health`, `quicklify doctor`
205
- - **Log viewer:** View Coolify/Docker/system logs with `--follow` real-time streaming
206
- - **Server monitoring:** CPU/RAM/Disk usage and Docker container list
207
- - **Bulk health check:** Check all registered servers at once with response times
208
- - **Environment doctor:** Diagnose Node.js, SSH, config issues locally
209
- - Zero new dependencies, 354 tests with 97%+ statement coverage
210
-
211
- ### v0.5.0 (2026-02-20)
212
- - **New commands:** `quicklify config`, `quicklify ssh`, `quicklify update`, `quicklify restart`
213
- - **Default config:** Set defaults for provider, region, size with `quicklify config set`
214
- - **SSH access:** Connect to servers with `quicklify ssh` or run commands with `--command`
215
- - **Coolify updates:** Update Coolify via SSH with `quicklify update`
216
- - **Server restart:** Reboot via provider API with `quicklify restart`
217
- - 311 tests with 97%+ statement coverage
218
-
219
- ### v0.4.0 (2026-02-20)
220
- - **New commands:** `quicklify list`, `quicklify status [query]`, `quicklify destroy [query]`
221
- - **Non-interactive mode:** `quicklify init --provider --token --region --size --name` for CI/CD
222
- - **Health check polling:** Detects when Coolify is ready instead of blind waiting
223
- - 246 tests with 97%+ statement coverage
224
-
225
- ### v0.3.1 (2026-02-19)
226
- - Hetzner pricing now shows net prices (excl. VAT), matching website display
227
- - Hetzner server types use `/datacenters` API for real availability per location
228
- - Replaced deprecated Hetzner server types (cpx→cx23/cx33)
229
- - "Server name already used" error now prompts for a new name
230
- - Location disabled retry now re-prompts for server type
231
-
232
- ### v0.3.0 (2026-02-19)
233
- - DigitalOcean provider support (full API integration)
234
- - Interactive provider selection (Hetzner / DigitalOcean)
235
- - Step-based back navigation in all prompts
236
- - Network wait loop + install logging for DigitalOcean cloud-init reliability
237
-
238
- ## 🗺️ Roadmap
239
-
240
- ### v0.1.0 (Completed)
241
-
242
- - [x] Hetzner Cloud integration
243
- - [x] Interactive CLI
244
- - [x] Automated Coolify installation
245
- - [x] ARM64 support
246
-
247
- ### v0.2.0 (Completed)
248
-
249
- - [x] Dynamic server type filtering
250
- - [x] Auto firewall configuration
251
- - [x] Price formatting fix
252
-
253
- ### v0.2.x (Completed)
254
-
255
- - [x] Deprecated server type filtering
256
- - [x] Retry on unavailable server types
257
- - [x] Dynamic deployment summary
258
- - [x] Dynamic recommended selection
259
- - [x] Codecov integration with coverage badge
260
- - [x] ESLint + Prettier code quality tooling
261
- - [x] Zero `any` types - full type safety
262
-
263
- ### v0.3.0 (Completed)
264
-
265
- - [x] DigitalOcean support
266
- - [x] Interactive provider selection UI
267
- - [x] Step-based back navigation
268
- - [x] Cloud-init reliability improvements (network wait, logging)
269
-
270
- ### v0.4.0 (Completed)
271
-
272
- - [x] Server management commands (list, status, destroy)
273
- - [x] Non-interactive mode for CI/CD
274
- - [x] Coolify health check polling (replaces blind wait)
275
- - [x] Server record persistence (`~/.quicklify/servers.json`)
276
- - [x] `destroyServer()` on provider interface
277
- - [x] Double confirmation safety for destroy
278
-
279
- ### v0.5.0 (Completed)
280
-
281
- - [x] Default configuration management (`quicklify config`)
282
- - [x] SSH access to servers (`quicklify ssh`)
283
- - [x] Coolify update via SSH (`quicklify update`)
284
- - [x] Server restart via provider API (`quicklify restart`)
285
- - [x] Shared server selection and token utilities (DRY refactor)
286
-
287
- ### v0.6.0 (Completed)
288
-
289
- - [x] Server monitoring - CPU/RAM/Disk usage (`quicklify monitor`)
290
- - [x] Log viewer - Coolify/Docker/system logs (`quicklify logs`)
291
- - [x] Bulk health check for all servers (`quicklify health`)
292
- - [x] Environment diagnostics (`quicklify doctor`)
293
- - [x] SSH streaming for real-time log following
294
-
295
- ### v0.7.0 (Completed)
296
-
297
- - [x] Firewall management - UFW setup, add/remove ports (`quicklify firewall`)
298
- - [x] Domain management - Bind domains, DNS check, SSL (`quicklify domain`)
299
- - [x] SSH hardening - Password disable, fail2ban, security audit (`quicklify secure`)
300
- - [x] Dry-run mode for all security commands
301
-
302
- ### v0.8.0 (Completed)
303
-
304
- - [x] Backup Coolify database + config (`quicklify backup`)
305
- - [x] Restore from backup with double confirmation (`quicklify restore`)
306
- - [x] Export/Import server list (`quicklify export`, `quicklify import`)
307
- - [x] `--full-setup` flag for auto firewall + SSH hardening on init
308
-
309
- ### v0.9.0 (Completed)
310
-
311
- - [x] YAML config file (`quicklify.yml`) for one-command deploy
312
- - [x] Template system (`--template starter|production|dev`)
313
- - [x] Config merge with priority: CLI > YAML > template > interactive
314
-
315
- ### Future
316
- - [ ] Vultr support
317
- - [ ] Linode / AWS Lightsail support
318
- - [ ] Interactive TUI dashboard
319
-
320
- ## 🛠️ Tech Stack
321
-
322
- - **Runtime:** Node.js 20+
323
- - **Language:** TypeScript
324
- - **CLI Framework:** Commander.js
325
- - **Interactive Prompts:** Inquirer.js
326
- - **Styling:** Chalk (colors) + Ora (spinners)
327
- - **HTTP Client:** Axios
328
- - **YAML Parser:** js-yaml
329
- - **Cloud APIs:** Hetzner Cloud API v1, DigitalOcean API v2
330
- - **Linting:** ESLint 10 + typescript-eslint
331
- - **Formatting:** Prettier
332
-
333
- ## 📖 CLI Reference
334
-
335
- ### Commands
336
-
72
+ ### Security
337
73
  ```bash
338
- # Deploy new Coolify instance (interactive)
339
- quicklify init
340
-
341
- # Deploy non-interactively (CI/CD friendly)
342
- export HETZNER_TOKEN="your-api-token"
343
- quicklify init --provider hetzner --region nbg1 --size cax11 --name my-server
344
-
345
- # Deploy with auto firewall + SSH hardening
346
- quicklify init --full-setup
347
-
348
- # Deploy from a YAML config file
349
- quicklify init --config quicklify.yml
350
-
351
- # Deploy using a template
352
- quicklify init --template production --provider hetzner
353
-
354
- # List all registered servers
355
- quicklify list
356
-
357
- # Check server and Coolify status
358
- quicklify status 123.45.67.89
359
- quicklify status my-server
360
-
361
- # Destroy a server (with double confirmation)
362
- quicklify destroy 123.45.67.89
363
- quicklify destroy my-server
364
-
365
- # Manage default configuration
366
- quicklify config set provider hetzner
367
- quicklify config set region nbg1
368
- quicklify config get provider
369
- quicklify config list
370
- quicklify config reset
371
-
372
- # SSH into a server
373
- quicklify ssh my-server
374
- quicklify ssh 123.45.67.89 -c "docker ps"
375
-
376
- # Update Coolify on a server
377
- quicklify update my-server
378
-
379
- # Restart a server
380
- quicklify restart my-server
381
-
382
- # View Coolify logs (last 50 lines)
383
- quicklify logs my-server
384
-
385
- # Follow Coolify logs in real-time
386
- quicklify logs my-server --follow
387
-
388
- # View Docker or system logs
389
- quicklify logs my-server --service docker --lines 100
390
- quicklify logs my-server --service system
391
-
392
- # Show CPU/RAM/Disk usage
393
- quicklify monitor my-server
394
-
395
- # Show usage with Docker containers
396
- quicklify monitor my-server --containers
397
-
398
- # Check health of all servers
399
- quicklify health
400
-
401
- # Run environment diagnostics
402
- quicklify doctor
403
-
404
- # Firewall management
405
- quicklify firewall setup my-server # Install UFW + Coolify ports
406
- quicklify firewall add my-server --port 3000 # Open port 3000/tcp
407
- quicklify firewall add my-server --port 53 --protocol udp # Open port 53/udp
408
- quicklify firewall remove my-server --port 3000 # Close port 3000
409
- quicklify firewall list my-server # Show firewall rules
410
- quicklify firewall status my-server # Check UFW active/inactive
411
- quicklify firewall setup my-server --dry-run # Preview without executing
412
-
413
- # Domain management
414
- quicklify domain add my-server --domain example.com # Bind domain + HTTPS
415
- quicklify domain add my-server --domain example.com --no-ssl # HTTP only
416
- quicklify domain remove my-server # Revert to IP:8000
417
- quicklify domain check my-server --domain example.com # Verify DNS
418
- quicklify domain list my-server # Show current domain
419
- quicklify domain add my-server --domain example.com --dry-run # Preview
420
-
421
- # SSH hardening & security
422
- quicklify secure status my-server # Show security settings
423
- quicklify secure audit my-server # Security score (0-4)
424
- quicklify secure setup my-server # Harden SSH + install fail2ban
425
- quicklify secure setup my-server --port 2222 # Change SSH port
426
- quicklify secure setup my-server --dry-run # Preview without executing
427
-
428
- # Backup Coolify database and config
429
- quicklify backup my-server # Full backup (pg_dump + config)
430
- quicklify backup my-server --dry-run # Preview backup steps
431
-
432
- # Restore from a backup
433
- quicklify restore my-server # Interactive backup selection
434
- quicklify restore my-server --backup 2026-02-21_15-30-45-123 # Specific backup
435
- quicklify restore my-server --dry-run # Preview restore steps
436
-
437
- # Export/Import server list
438
- quicklify export # Export to ./quicklify-export.json
439
- quicklify export /path/to/file.json # Export to custom path
440
- quicklify import /path/to/file.json # Import servers (skips duplicates)
441
-
442
- # Show version
443
- quicklify --version
444
-
445
- # Show help
446
- quicklify --help
74
+ quicklify firewall status my-server # Check firewall
75
+ quicklify firewall setup my-server # Configure UFW
76
+ quicklify secure audit my-server # Security audit
77
+ quicklify secure harden my-server # SSH hardening + fail2ban
78
+ quicklify domain add my-server --domain example.com # Set domain + SSL
447
79
  ```
448
80
 
449
- ### Non-Interactive Mode
450
-
451
- Set your API token as an environment variable, then pass all options as flags:
452
-
81
+ ### Monitor & Debug
453
82
  ```bash
454
- # Set token (recommended - avoids shell history exposure)
455
- export HETZNER_TOKEN="your-api-token"
456
- # or
457
- export DIGITALOCEAN_TOKEN="your-api-token"
458
-
459
- # Deploy non-interactively
460
- quicklify init \
461
- --provider hetzner \
462
- --region nbg1 \
463
- --size cax11 \
464
- --name production-coolify
83
+ quicklify monitor my-server # CPU, RAM, disk usage
84
+ quicklify logs my-server # View Coolify logs
85
+ quicklify logs my-server -f # Follow logs
86
+ quicklify health # Health check all servers
87
+ quicklify doctor # Check local environment
465
88
  ```
466
89
 
467
- Token resolution order: environment variable > interactive prompt. The `--token` flag is available but **not recommended** as it exposes the token in shell history.
90
+ ## Supported Providers
468
91
 
469
- If some flags are missing, only the missing values will be prompted interactively.
92
+ | Provider | Status | Regions | Starting Price |
93
+ |----------|--------|---------|---------------|
94
+ | [Hetzner Cloud](https://hetzner.cloud) | Stable | EU, US | €3.49/mo |
95
+ | [DigitalOcean](https://digitalocean.com) | Stable | Global | $12/mo |
96
+ | [Vultr](https://vultr.com) | Stable | Global | $10/mo |
97
+ | [Linode (Akamai)](https://linode.com) | Beta | Global | $12/mo |
470
98
 
471
- ### YAML Config File
99
+ > **Note:** Linode support is in beta — community testing welcome.
472
100
 
473
- Create a `quicklify.yml` file for repeatable deployments:
101
+ ## YAML Config
102
+
103
+ Deploy with a single config file:
474
104
 
475
105
  ```yaml
476
106
  # quicklify.yml
477
- template: production
478
107
  provider: hetzner
479
108
  region: nbg1
480
- size: cx33
481
- name: my-coolify-prod
109
+ size: cax11
110
+ name: my-coolify
482
111
  fullSetup: true
112
+ domain: coolify.example.com
483
113
  ```
484
114
 
485
- Then deploy with:
486
-
487
115
  ```bash
488
- export HETZNER_TOKEN="your-api-token"
489
116
  quicklify init --config quicklify.yml
490
117
  ```
491
118
 
492
- **Security:** Never store API tokens in config files. Use environment variables (`export HETZNER_TOKEN=...`).
119
+ ## Templates
493
120
 
494
- **Config merge priority:** CLI flags > YAML values > template defaults > interactive prompts.
495
-
496
- ### Templates
497
-
498
- Templates provide sensible defaults per provider:
499
-
500
- | Template | Hetzner | DigitalOcean | Full Setup |
501
- |----------|---------|--------------|------------|
502
- | `starter` | nbg1 / cax11 (€3.79) | fra1 / s-2vcpu-2gb ($12) | No |
503
- | `production` | nbg1 / cx33 (€5.49) | fra1 / s-2vcpu-4gb ($24) | Yes |
504
- | `dev` | nbg1 / cax11 (€3.79) | fra1 / s-2vcpu-2gb ($12) | No |
121
+ | Template | Best For | Includes |
122
+ |----------|----------|----------|
123
+ | `starter` | Testing, side projects | Smallest instance |
124
+ | `production` | Live applications | 4+ vCPU, 8+ GB RAM |
125
+ | `dev` | Development & CI/CD | Balanced resources |
505
126
 
506
127
  ```bash
507
- # Quick production deploy
508
- export HETZNER_TOKEN="your-api-token"
509
- quicklify init --template production --provider hetzner --name my-server
510
-
511
- # Cheap starter for testing
512
- export DIGITALOCEAN_TOKEN="your-api-token"
513
- quicklify init --template starter --provider digitalocean --name test-server
128
+ quicklify init --template production --provider hetzner
514
129
  ```
515
130
 
516
- ### Interactive Prompts
517
-
518
- 1. **Provider Selection** - Choose Hetzner Cloud or DigitalOcean
519
- 2. **API Token** - Validated before proceeding
520
- 3. **Region Selection** - Choose your preferred datacenter
521
- 4. **Server Size** - Filtered by Coolify requirements (2GB RAM, 2 vCPU)
522
- 5. **Server Name** - Validates format (lowercase, alphanumeric, hyphens)
523
- 6. **Confirmation** - Review summary before deployment
524
-
525
- All steps support **← Back** navigation to return to the previous step.
131
+ ## Security
526
132
 
527
- ## 🧪 Testing
133
+ - API tokens are never stored on disk — prompted at runtime or via environment variables
134
+ - SSH keys are auto-generated if needed (Ed25519)
135
+ - `--full-setup` enables UFW firewall and SSH hardening automatically
136
+ - All SSH connections use `StrictHostKeyChecking=accept-new`
137
+ - Config file token detection warns against storing secrets in YAML
528
138
 
529
- ### Run Tests
139
+ ## Installation
530
140
 
531
141
  ```bash
532
- # Run all tests
533
- npm test
534
-
535
- # Run tests in watch mode
536
- npm run test:watch
537
-
538
- # Run tests with coverage report
539
- npm run test:coverage
540
-
541
- # Lint code
542
- npm run lint
543
-
544
- # Format code
545
- npm run format
546
- ```
547
-
548
- ### Test Structure
142
+ # Run directly (recommended)
143
+ npx quicklify <command>
549
144
 
145
+ # Or install globally
146
+ npm install -g quicklify
147
+ quicklify <command>
550
148
  ```
551
- tests/
552
- ├── __mocks__/ # Mock modules (axios, inquirer, ora, chalk)
553
- ├── unit/ # Unit tests
554
- │ ├── cloudInit.test.ts
555
- │ ├── config.test.ts # Config CRUD operations
556
- │ ├── config-edge.test.ts # Config edge cases (corruption, empty files)
557
- │ ├── config-command.test.ts # Config command subcommands
558
- │ ├── defaults.test.ts # Default config CRUD
559
- │ ├── destroy.test.ts # Destroy command unit tests
560
- │ ├── doctor.test.ts # Doctor command tests
561
- │ ├── domain.test.ts # Domain command tests
562
- │ ├── firewall.test.ts # Firewall command tests
563
- │ ├── health-command.test.ts # Health command tests
564
- │ ├── healthCheck.test.ts # Health check polling tests
565
- │ ├── healthCheck-edge.test.ts # Health check edge cases (302, 401, 500)
566
- │ ├── list.test.ts # List command unit tests
567
- │ ├── logger.test.ts
568
- │ ├── logs.test.ts # Logs command tests
569
- │ ├── monitor.test.ts # Monitor command tests
570
- │ ├── prompts.test.ts
571
- │ ├── providerFactory.test.ts # Provider factory tests
572
- │ ├── restart.test.ts # Restart command tests
573
- │ ├── secure.test.ts # Secure command tests
574
- │ ├── backup.test.ts # Backup command tests
575
- │ ├── restore.test.ts # Restore command tests
576
- │ ├── transfer.test.ts # Export/Import command tests
577
- │ ├── templates.test.ts # Template definitions tests
578
- │ ├── yamlConfig.test.ts # YAML config loader tests
579
- │ ├── configMerge.test.ts # Config merge logic tests
580
- │ ├── init-fullsetup.test.ts # Init --full-setup tests
581
- │ ├── serverSelect.test.ts # Server selection utility tests
582
- │ ├── ssh-command.test.ts # SSH command tests
583
- │ ├── ssh-utils.test.ts # SSH helper tests
584
- │ ├── status.test.ts # Status command unit tests
585
- │ ├── update.test.ts # Update command tests
586
- │ └── validators.test.ts
587
- ├── integration/ # Integration tests (provider API calls)
588
- │ ├── hetzner.test.ts # Including destroyServer tests
589
- │ └── digitalocean.test.ts # Including destroyServer tests
590
- └── e2e/ # End-to-end tests (full command flows)
591
- ├── init.test.ts
592
- ├── init-noninteractive.test.ts # Non-interactive mode E2E
593
- ├── init-config.test.ts # YAML config + template E2E
594
- ├── status.test.ts # Status command E2E
595
- └── destroy.test.ts # Destroy command E2E
596
- ```
597
-
598
- ### CI/CD
599
-
600
- Tests run automatically on every push/PR via GitHub Actions across:
601
-
602
- - **OS:** Ubuntu, macOS, Windows
603
- - **Node.js:** 20, 22
604
-
605
- ### Coverage
606
-
607
- Current coverage: **98%+ statements/lines**, **91%+ branches**, **98%+ functions**. 742 tests across 40 test suites.
608
-
609
- ## 🔧 Troubleshooting
610
-
611
- **"Invalid API token"**
612
-
613
- - Ensure token has Read & Write permissions
614
- - Check for extra spaces when copying
615
- - Regenerate token if needed
616
-
617
- **"Server creation failed"**
618
-
619
- - Verify cloud account has sufficient funds
620
- - Check account limits (new accounts may have restrictions)
621
- - Try different region or server size
622
-
623
- **"Cannot access Coolify UI"**
624
-
625
- - Wait 3-5 more minutes (Coolify initialization takes time)
626
- - Check the install log: `ssh root@YOUR_IP "cat /var/log/quicklify-install.log | tail -20"`
627
- - Check firewall settings (should auto-configure)
628
- - Verify server is running in cloud console
629
-
630
- ## 🤝 Contributing
631
-
632
- Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, code guidelines, and PR process.
633
-
634
- **Areas for contribution:**
635
-
636
- - New cloud provider integrations
637
- - CLI improvements
638
- - Documentation
639
- - Bug fixes
640
149
 
641
- ## 📄 License
150
+ Requires Node.js 20 or later.
642
151
 
643
- MIT © 2026 Ömer FC
152
+ ## Troubleshooting
644
153
 
645
- See [LICENSE](LICENSE) file for details.
154
+ **Server creation fails?**
155
+ Run `quicklify doctor --check-tokens` to verify your API token and local environment.
646
156
 
647
- ## 🙏 Acknowledgments
157
+ **Coolify not responding?**
158
+ Use `quicklify status my-server --autostart` to check and auto-restart if needed.
648
159
 
649
- - [Coolify](https://coolify.io/) - The amazing open-source PaaS
650
- - [Hetzner](https://www.hetzner.com/) - Affordable, reliable cloud infrastructure
651
- - All contributors and users!
160
+ **Need to start fresh?**
161
+ `quicklify destroy my-server` removes the cloud server entirely.
652
162
 
653
- ## 💬 Support & Community
163
+ ## Contributing
654
164
 
655
- - 🐛 **Bug Reports:** [GitHub Issues](https://github.com/omrfc/quicklify/issues)
656
- - 💡 **Feature Requests:** [GitHub Discussions](https://github.com/omrfc/quicklify/discussions)
657
- - 🐦 **Updates:** [@omrfc](https://twitter.com/omrfc)
658
- - 🌐 **Website:** [quicklify.omrfc.dev](https://quicklify.omrfc.dev)
165
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, testing, and contribution guidelines.
659
166
 
660
- ## Show Your Support
167
+ ## What's Next
661
168
 
662
- If Quicklify helped you, please:
169
+ - Interactive TUI dashboard for server management
663
170
 
664
- - ⭐ Star this repository
665
- - 🐦 Share on Twitter
666
- - 📝 Write a blog post
667
- - 💬 Tell your friends!
171
+ ## License
668
172
 
669
- ---
173
+ MIT — see [LICENSE](LICENSE)
670
174
 
671
- **Made with ❤️ by [@omrfc](https://github.com/omrfc)**
175
+ ## Support
672
176
 
673
- *Saving developers time, one deployment at a time.*
177
+ - [GitHub Issues](https://github.com/omrfrkcpr/quicklify/issues) Bug reports and feature requests
178
+ - [Changelog](CHANGELOG.md) — Version history