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.
- package/README.md +103 -598
- package/README.tr.md +178 -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 +104 -1
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/domain.d.ts +1 -0
- package/dist/commands/domain.d.ts.map +1 -1
- package/dist/commands/domain.js +4 -1
- package/dist/commands/domain.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +20 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/maintain.d.ts +9 -0
- package/dist/commands/maintain.d.ts.map +1 -0
- package/dist/commands/maintain.js +288 -0
- package/dist/commands/maintain.js.map +1 -0
- 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 +3 -3
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/snapshot.d.ts +8 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +199 -0
- package/dist/commands/snapshot.js.map +1 -0
- 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/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 +38 -4
- package/dist/index.js.map +1 -1
- package/dist/providers/base.d.ts +5 -1
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/digitalocean.d.ts +5 -1
- package/dist/providers/digitalocean.d.ts.map +1 -1
- package/dist/providers/digitalocean.js +74 -0
- package/dist/providers/digitalocean.js.map +1 -1
- package/dist/providers/hetzner.d.ts +5 -1
- package/dist/providers/hetzner.d.ts.map +1 -1
- package/dist/providers/hetzner.js +77 -2
- package/dist/providers/hetzner.js.map +1 -1
- package/dist/providers/linode.d.ts +25 -0
- package/dist/providers/linode.d.ts.map +1 -0
- package/dist/providers/linode.js +291 -0
- package/dist/providers/linode.js.map +1 -0
- package/dist/providers/vultr.d.ts +25 -0
- package/dist/providers/vultr.d.ts.map +1 -0
- package/dist/providers/vultr.js +262 -0
- package/dist/providers/vultr.js.map +1 -0
- package/dist/types/index.d.ts +9 -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/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/templates.d.ts.map +1 -1
- package/dist/utils/templates.js +6 -0
- package/dist/utils/templates.js.map +1 -1
- package/dist/utils/yamlConfig.d.ts.map +1 -1
- package/dist/utils/yamlConfig.js +9 -4
- package/dist/utils/yamlConfig.js.map +1 -1
- 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
|

|
|
4
6
|
[](https://codecov.io/gh/omrfc/quicklify)
|
|
5
7
|

|
|
6
|
-

|
|
7
9
|

|
|
8
10
|

|
|
9
11
|
[](https://socket.dev/npm/package/quicklify)
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
**Deploy Coolify to a cloud VPS with one command.**
|
|
12
14
|
|
|
13
|
-
|
|
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
|
-
|
|
17
|
+
## Quick Start
|
|
16
18
|
|
|
17
|
-
|
|
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
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
77
|
-
|
|
50
|
+
### Update & Maintain
|
|
78
51
|
```bash
|
|
79
|
-
|
|
80
|
-
quicklify
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
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
|
-
|
|
339
|
-
quicklify
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
###
|
|
450
|
-
|
|
451
|
-
Set your API token as an environment variable, then pass all options as flags:
|
|
452
|
-
|
|
81
|
+
### Monitor & Debug
|
|
453
82
|
```bash
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
#
|
|
457
|
-
|
|
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
|
-
|
|
90
|
+
## Supported Providers
|
|
468
91
|
|
|
469
|
-
|
|
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
|
-
|
|
99
|
+
> **Note:** Linode support is in beta — community testing welcome.
|
|
472
100
|
|
|
473
|
-
|
|
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:
|
|
481
|
-
name: my-coolify
|
|
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
|
-
|
|
119
|
+
## Templates
|
|
493
120
|
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
139
|
+
## Installation
|
|
530
140
|
|
|
531
141
|
```bash
|
|
532
|
-
# Run
|
|
533
|
-
|
|
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
|
-
|
|
150
|
+
Requires Node.js 20 or later.
|
|
642
151
|
|
|
643
|
-
|
|
152
|
+
## Troubleshooting
|
|
644
153
|
|
|
645
|
-
|
|
154
|
+
**Server creation fails?**
|
|
155
|
+
Run `quicklify doctor --check-tokens` to verify your API token and local environment.
|
|
646
156
|
|
|
647
|
-
|
|
157
|
+
**Coolify not responding?**
|
|
158
|
+
Use `quicklify status my-server --autostart` to check and auto-restart if needed.
|
|
648
159
|
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
- All contributors and users!
|
|
160
|
+
**Need to start fresh?**
|
|
161
|
+
`quicklify destroy my-server` removes the cloud server entirely.
|
|
652
162
|
|
|
653
|
-
##
|
|
163
|
+
## Contributing
|
|
654
164
|
|
|
655
|
-
|
|
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
|
-
##
|
|
167
|
+
## What's Next
|
|
661
168
|
|
|
662
|
-
|
|
169
|
+
- Interactive TUI dashboard for server management
|
|
663
170
|
|
|
664
|
-
|
|
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
|
-
|
|
175
|
+
## Support
|
|
672
176
|
|
|
673
|
-
|
|
177
|
+
- [GitHub Issues](https://github.com/omrfrkcpr/quicklify/issues) — Bug reports and feature requests
|
|
178
|
+
- [Changelog](CHANGELOG.md) — Version history
|