quicklify 0.8.0 → 1.0.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/README.md +220 -32
- package/README.tr.md +800 -0
- package/dist/commands/add.d.ts +9 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +151 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/backup.d.ts +1 -0
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +105 -6
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +1 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +5 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +93 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/maintain.d.ts +8 -0
- package/dist/commands/maintain.d.ts.map +1 -0
- package/dist/commands/maintain.js +253 -0
- package/dist/commands/maintain.js.map +1 -0
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +2 -1
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/remove.d.ts +2 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +25 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/restart.d.ts.map +1 -1
- package/dist/commands/restart.js +4 -0
- package/dist/commands/restart.js.map +1 -1
- package/dist/commands/restore.js +1 -1
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/secure.d.ts.map +1 -1
- package/dist/commands/secure.js +1 -1
- package/dist/commands/secure.js.map +1 -1
- package/dist/commands/status.d.ts +6 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +120 -7
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/transfer.d.ts.map +1 -1
- package/dist/commands/transfer.js +9 -1
- package/dist/commands/transfer.js.map +1 -1
- package/dist/commands/update.d.ts +5 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +101 -14
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +36 -5
- package/dist/index.js.map +1 -1
- package/dist/providers/digitalocean.d.ts.map +1 -1
- package/dist/providers/digitalocean.js +4 -1
- package/dist/providers/digitalocean.js.map +1 -1
- package/dist/providers/hetzner.d.ts.map +1 -1
- package/dist/providers/hetzner.js +2 -2
- package/dist/providers/hetzner.js.map +1 -1
- package/dist/providers/linode.d.ts +21 -0
- package/dist/providers/linode.d.ts.map +1 -0
- package/dist/providers/linode.js +203 -0
- package/dist/providers/linode.js.map +1 -0
- package/dist/providers/vultr.d.ts +21 -0
- package/dist/providers/vultr.d.ts.map +1 -0
- package/dist/providers/vultr.js +183 -0
- package/dist/providers/vultr.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts +1 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +7 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/configMerge.d.ts +16 -0
- package/dist/utils/configMerge.d.ts.map +1 -0
- package/dist/utils/configMerge.js +34 -0
- package/dist/utils/configMerge.js.map +1 -0
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +2 -0
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/providerFactory.d.ts.map +1 -1
- package/dist/utils/providerFactory.js +10 -0
- package/dist/utils/providerFactory.js.map +1 -1
- package/dist/utils/serverSelect.d.ts +1 -0
- package/dist/utils/serverSelect.d.ts.map +1 -1
- package/dist/utils/serverSelect.js +37 -6
- package/dist/utils/serverSelect.js.map +1 -1
- package/dist/utils/ssh.d.ts.map +1 -1
- package/dist/utils/ssh.js +3 -1
- package/dist/utils/ssh.js.map +1 -1
- package/dist/utils/templates.d.ts +6 -0
- package/dist/utils/templates.d.ts.map +1 -0
- package/dist/utils/templates.js +49 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/yamlConfig.d.ts +8 -0
- package/dist/utils/yamlConfig.d.ts.map +1 -0
- package/dist/utils/yamlConfig.js +136 -0
- package/dist/utils/yamlConfig.js.map +1 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|

|
|
9
9
|
[](https://socket.dev/npm/package/quicklify)
|
|
10
10
|
|
|
11
|
-
> Deploy Coolify to
|
|
11
|
+
> Deploy Coolify to a cloud VPS with one command
|
|
12
12
|
|
|
13
13
|
## 🚀 What is Quicklify?
|
|
14
14
|
|
|
15
|
-
Quicklify is a CLI tool that automates Coolify
|
|
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.
|
|
16
16
|
|
|
17
17
|
**Before Quicklify:**
|
|
18
18
|
|
|
@@ -29,19 +29,19 @@ Total: ~30 minutes + manual work
|
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
31
|
npx quicklify init
|
|
32
|
-
# Hetzner: ~4
|
|
32
|
+
# Hetzner: ~4 min | DigitalOcean: ~6 min | Vultr: ~5 min | Linode: ~6 min
|
|
33
33
|
# Zero manual work ✨
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
## ✨ Features
|
|
37
37
|
|
|
38
38
|
- 🎯 **One Command Deploy** - VPS + Coolify with a single command
|
|
39
|
-
- 💰 **Cost Savings** - $50-200/mo (Vercel/Netlify) → €3.
|
|
39
|
+
- 💰 **Cost Savings** - $50-200/mo (Vercel/Netlify) → €3.79/mo
|
|
40
40
|
- 🔒 **Secure by Default** - Automated security setup
|
|
41
|
-
- 🌍 **Multi-Cloud** - Hetzner Cloud
|
|
41
|
+
- 🌍 **Multi-Cloud** - Hetzner Cloud, DigitalOcean, Vultr, Linode
|
|
42
42
|
- 💻 **Beautiful CLI** - Interactive prompts with validation
|
|
43
43
|
- 🎨 **ARM64 Ready** - Support for cost-effective ARM servers
|
|
44
|
-
- ⚡ **Fast Setup** - Hetzner ~4 min, DigitalOcean ~6 min
|
|
44
|
+
- ⚡ **Fast Setup** - Hetzner ~4 min, DigitalOcean ~6 min, Vultr ~5 min, Linode ~6 min
|
|
45
45
|
- ✨ **Dynamic Server Types** - Only shows compatible types for selected location
|
|
46
46
|
- 🔥 **Auto Firewall** - Ports 8000, 22, 80, 443 configured automatically
|
|
47
47
|
- 🚀 **Zero SSH Required** - Opens directly in browser after deployment
|
|
@@ -61,7 +61,72 @@ npx quicklify init
|
|
|
61
61
|
- 💾 **Backup & Restore** - Database + config backup with SCP download, restore with double confirmation
|
|
62
62
|
- 📦 **Export/Import** - Transfer server list between machines as JSON
|
|
63
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
|
|
64
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
|
+
|
|
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
|
|
81
|
+
```
|
|
82
|
+
|
|
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
|
+
```
|
|
92
|
+
|
|
93
|
+
### Keep Everything Updated & Healthy
|
|
94
|
+
|
|
95
|
+
```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
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Backup & Restore
|
|
104
|
+
|
|
105
|
+
```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
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Security & Networking
|
|
114
|
+
|
|
115
|
+
```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)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Monitoring & Diagnostics
|
|
123
|
+
|
|
124
|
+
```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
|
|
129
|
+
```
|
|
65
130
|
|
|
66
131
|
## 📦 Installation
|
|
67
132
|
|
|
@@ -97,6 +162,18 @@ quicklify init
|
|
|
97
162
|
2. Generate New Token with **Read & Write** scope
|
|
98
163
|
3. Copy the token
|
|
99
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
|
+
|
|
100
177
|
### Step 2: Deploy Coolify
|
|
101
178
|
|
|
102
179
|
```bash
|
|
@@ -112,7 +189,7 @@ You'll be prompted for:
|
|
|
112
189
|
|
|
113
190
|
### Step 3: Access Coolify
|
|
114
191
|
|
|
115
|
-
After deployment (Hetzner ~4 min, DigitalOcean ~6 min):
|
|
192
|
+
After deployment (Hetzner ~4 min, DigitalOcean ~6 min, Vultr ~5 min, Linode ~6 min):
|
|
116
193
|
|
|
117
194
|
```
|
|
118
195
|
✅ Deployment Successful!
|
|
@@ -140,10 +217,10 @@ Visit the URL, create your admin account, and start deploying!
|
|
|
140
217
|
|
|
141
218
|
| Provider | Status | Starting Price | Architecture |
|
|
142
219
|
|----------|--------|----------------|--------------|
|
|
143
|
-
| **Hetzner Cloud** | ✅ Available | €3.
|
|
220
|
+
| **Hetzner Cloud** | ✅ Available | €3.79/mo | ARM64 + x86 |
|
|
144
221
|
| **DigitalOcean** | ✅ Available | $12/mo | x86 |
|
|
145
|
-
| **Vultr** |
|
|
146
|
-
| **Linode** |
|
|
222
|
+
| **Vultr** | ✅ Available | $6/mo | x86 |
|
|
223
|
+
| **Linode (Akamai)** | ✅ Available | $12/mo | x86 |
|
|
147
224
|
|
|
148
225
|
## 💡 Use Cases
|
|
149
226
|
|
|
@@ -167,14 +244,32 @@ Visit the URL, create your admin account, and start deploying!
|
|
|
167
244
|
| Vercel (Hobby) | $20+ | 5 min | Easy |
|
|
168
245
|
| Vercel (Pro) | $50+ | 5 min | Easy |
|
|
169
246
|
| Netlify (Pro) | $19+ | 5 min | Easy |
|
|
170
|
-
| **Quicklify + Hetzner** | **€3.
|
|
247
|
+
| **Quicklify + Hetzner** | **€3.79** | **~4 min** | **Easy** |
|
|
171
248
|
| **Quicklify + DigitalOcean** | **$12** | **~6 min** | **Easy** |
|
|
172
|
-
|
|
|
249
|
+
| **Quicklify + Vultr** | **$6** | **~5 min** | **Easy** |
|
|
250
|
+
| **Quicklify + Linode** | **$12** | **~6 min** | **Easy** |
|
|
251
|
+
| Manual VPS + Coolify | €3.79 | 30+ min | Hard |
|
|
173
252
|
|
|
174
253
|
**Savings: ~$180-240/year per project!** 💰
|
|
175
254
|
|
|
176
255
|
## 📋 Recent Updates
|
|
177
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
|
+
|
|
178
273
|
### v0.8.0 (2026-02-21)
|
|
179
274
|
- **New commands:** `quicklify backup`, `quicklify restore`, `quicklify export`, `quicklify import`
|
|
180
275
|
- **Backup:** pg_dump + config tarball, SCP download to `~/.quicklify/backups/`, manifest.json metadata
|
|
@@ -297,11 +392,24 @@ Visit the URL, create your admin account, and start deploying!
|
|
|
297
392
|
- [x] Export/Import server list (`quicklify export`, `quicklify import`)
|
|
298
393
|
- [x] `--full-setup` flag for auto firewall + SSH hardening on init
|
|
299
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
|
+
|
|
300
410
|
### Future
|
|
301
|
-
- [ ]
|
|
302
|
-
- [ ]
|
|
303
|
-
- [ ] Config file (`quicklify.yml`) for one-command full setup
|
|
304
|
-
- [ ] Template system (`--template starter|production|dev`)
|
|
411
|
+
- [ ] `quicklify snapshot` — automated VPS snapshots before maintenance
|
|
412
|
+
- [ ] `init --mode production` — 2 server deploy (Coolify + worker)
|
|
305
413
|
- [ ] Interactive TUI dashboard
|
|
306
414
|
|
|
307
415
|
## 🛠️ Tech Stack
|
|
@@ -312,7 +420,8 @@ Visit the URL, create your admin account, and start deploying!
|
|
|
312
420
|
- **Interactive Prompts:** Inquirer.js
|
|
313
421
|
- **Styling:** Chalk (colors) + Ora (spinners)
|
|
314
422
|
- **HTTP Client:** Axios
|
|
315
|
-
- **
|
|
423
|
+
- **YAML Parser:** js-yaml
|
|
424
|
+
- **Cloud APIs:** Hetzner Cloud API v1, DigitalOcean API v2, Vultr API v2, Linode API v4
|
|
316
425
|
- **Linting:** ESLint 10 + typescript-eslint
|
|
317
426
|
- **Formatting:** Prettier
|
|
318
427
|
|
|
@@ -325,22 +434,35 @@ Visit the URL, create your admin account, and start deploying!
|
|
|
325
434
|
quicklify init
|
|
326
435
|
|
|
327
436
|
# Deploy non-interactively (CI/CD friendly)
|
|
328
|
-
|
|
437
|
+
export HETZNER_TOKEN="your-api-token"
|
|
438
|
+
quicklify init --provider hetzner --region nbg1 --size cax11 --name my-server
|
|
329
439
|
|
|
330
440
|
# Deploy with auto firewall + SSH hardening
|
|
331
441
|
quicklify init --full-setup
|
|
332
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
|
+
|
|
333
449
|
# List all registered servers
|
|
334
450
|
quicklify list
|
|
335
451
|
|
|
336
452
|
# Check server and Coolify status
|
|
337
453
|
quicklify status 123.45.67.89
|
|
338
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
|
|
339
457
|
|
|
340
458
|
# Destroy a server (with double confirmation)
|
|
341
459
|
quicklify destroy 123.45.67.89
|
|
342
460
|
quicklify destroy my-server
|
|
343
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
|
+
|
|
344
466
|
# Manage default configuration
|
|
345
467
|
quicklify config set provider hetzner
|
|
346
468
|
quicklify config set region nbg1
|
|
@@ -354,6 +476,7 @@ quicklify ssh 123.45.67.89 -c "docker ps"
|
|
|
354
476
|
|
|
355
477
|
# Update Coolify on a server
|
|
356
478
|
quicklify update my-server
|
|
479
|
+
quicklify update --all # Update all servers sequentially
|
|
357
480
|
|
|
358
481
|
# Restart a server
|
|
359
482
|
quicklify restart my-server
|
|
@@ -406,6 +529,7 @@ quicklify secure setup my-server --dry-run # Preview without executing
|
|
|
406
529
|
|
|
407
530
|
# Backup Coolify database and config
|
|
408
531
|
quicklify backup my-server # Full backup (pg_dump + config)
|
|
532
|
+
quicklify backup --all # Backup all servers sequentially
|
|
409
533
|
quicklify backup my-server --dry-run # Preview backup steps
|
|
410
534
|
|
|
411
535
|
# Restore from a backup
|
|
@@ -418,6 +542,17 @@ quicklify export # Export to ./quicklify-export.json
|
|
|
418
542
|
quicklify export /path/to/file.json # Export to custom path
|
|
419
543
|
quicklify import /path/to/file.json # Import servers (skips duplicates)
|
|
420
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
|
+
|
|
421
556
|
# Show version
|
|
422
557
|
quicklify --version
|
|
423
558
|
|
|
@@ -427,36 +562,78 @@ quicklify --help
|
|
|
427
562
|
|
|
428
563
|
### Non-Interactive Mode
|
|
429
564
|
|
|
430
|
-
|
|
565
|
+
Set your API token as an environment variable, then pass all options as flags:
|
|
431
566
|
|
|
432
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
|
|
433
578
|
quicklify init \
|
|
434
579
|
--provider hetzner \
|
|
435
|
-
--token $HETZNER_TOKEN \
|
|
436
580
|
--region nbg1 \
|
|
437
581
|
--size cax11 \
|
|
438
582
|
--name production-coolify
|
|
439
583
|
```
|
|
440
584
|
|
|
441
|
-
|
|
585
|
+
Token resolution order: environment variable > interactive prompt. The `--token` flag is available but **not recommended** as it exposes the token in shell history.
|
|
586
|
+
|
|
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:
|
|
592
|
+
|
|
593
|
+
```yaml
|
|
594
|
+
# quicklify.yml
|
|
595
|
+
template: production
|
|
596
|
+
provider: hetzner
|
|
597
|
+
region: nbg1
|
|
598
|
+
size: cx33
|
|
599
|
+
name: my-coolify-prod
|
|
600
|
+
fullSetup: true
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
Then deploy with:
|
|
442
604
|
|
|
443
605
|
```bash
|
|
444
|
-
# Set token as environment variable (avoids shell history exposure)
|
|
445
606
|
export HETZNER_TOKEN="your-api-token"
|
|
446
|
-
|
|
447
|
-
export DIGITALOCEAN_TOKEN="your-api-token"
|
|
448
|
-
|
|
449
|
-
# Token is read automatically from env var
|
|
450
|
-
quicklify init --provider hetzner --region nbg1 --size cax11 --name my-server
|
|
607
|
+
quicklify init --config quicklify.yml
|
|
451
608
|
```
|
|
452
609
|
|
|
453
|
-
|
|
610
|
+
**Security:** Never store API tokens in config files. Use environment variables (`export HETZNER_TOKEN=...`).
|
|
454
611
|
|
|
455
|
-
|
|
612
|
+
**Config merge priority:** CLI flags > YAML values > template defaults > interactive prompts.
|
|
613
|
+
|
|
614
|
+
### Templates
|
|
615
|
+
|
|
616
|
+
Templates provide sensible defaults per provider:
|
|
617
|
+
|
|
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 |
|
|
623
|
+
|
|
624
|
+
```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
|
|
632
|
+
```
|
|
456
633
|
|
|
457
634
|
### Interactive Prompts
|
|
458
635
|
|
|
459
|
-
1. **Provider Selection** - Choose Hetzner Cloud or
|
|
636
|
+
1. **Provider Selection** - Choose Hetzner Cloud, DigitalOcean, Vultr, or Linode
|
|
460
637
|
2. **API Token** - Validated before proceeding
|
|
461
638
|
3. **Region Selection** - Choose your preferred datacenter
|
|
462
639
|
4. **Server Size** - Filtered by Coolify requirements (2GB RAM, 2 vCPU)
|
|
@@ -515,19 +692,27 @@ tests/
|
|
|
515
692
|
│ ├── backup.test.ts # Backup command tests
|
|
516
693
|
│ ├── restore.test.ts # Restore command tests
|
|
517
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
|
|
518
698
|
│ ├── init-fullsetup.test.ts # Init --full-setup tests
|
|
519
699
|
│ ├── serverSelect.test.ts # Server selection utility tests
|
|
520
700
|
│ ├── ssh-command.test.ts # SSH command tests
|
|
521
701
|
│ ├── ssh-utils.test.ts # SSH helper tests
|
|
522
702
|
│ ├── status.test.ts # Status command unit tests
|
|
523
703
|
│ ├── update.test.ts # Update command tests
|
|
704
|
+
│ ├── add.test.ts # Add command tests
|
|
705
|
+
│ ├── maintain.test.ts # Maintain command tests
|
|
524
706
|
│ └── validators.test.ts
|
|
525
707
|
├── integration/ # Integration tests (provider API calls)
|
|
526
708
|
│ ├── hetzner.test.ts # Including destroyServer tests
|
|
527
|
-
│
|
|
709
|
+
│ ├── digitalocean.test.ts # Including destroyServer tests
|
|
710
|
+
│ ├── vultr.test.ts # Vultr provider tests
|
|
711
|
+
│ └── linode.test.ts # Linode provider tests
|
|
528
712
|
└── e2e/ # End-to-end tests (full command flows)
|
|
529
713
|
├── init.test.ts
|
|
530
714
|
├── init-noninteractive.test.ts # Non-interactive mode E2E
|
|
715
|
+
├── init-config.test.ts # YAML config + template E2E
|
|
531
716
|
├── status.test.ts # Status command E2E
|
|
532
717
|
└── destroy.test.ts # Destroy command E2E
|
|
533
718
|
```
|
|
@@ -541,7 +726,7 @@ Tests run automatically on every push/PR via GitHub Actions across:
|
|
|
541
726
|
|
|
542
727
|
### Coverage
|
|
543
728
|
|
|
544
|
-
Current coverage: **98%+ statements/lines**, **
|
|
729
|
+
Current coverage: **98%+ statements/lines**, **91%+ branches**, **98%+ functions**. 937 tests across 44 test suites.
|
|
545
730
|
|
|
546
731
|
## 🔧 Troubleshooting
|
|
547
732
|
|
|
@@ -585,6 +770,9 @@ See [LICENSE](LICENSE) file for details.
|
|
|
585
770
|
|
|
586
771
|
- [Coolify](https://coolify.io/) - The amazing open-source PaaS
|
|
587
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
|
|
588
776
|
- All contributors and users!
|
|
589
777
|
|
|
590
778
|
## 💬 Support & Community
|