quicklify 1.0.0 → 1.0.2

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