quicklify 1.0.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 +98 -718
- package/README.tr.md +96 -718
- 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/maintain.d.ts +1 -0
- package/dist/commands/maintain.d.ts.map +1 -1
- package/dist/commands/maintain.js +39 -4
- package/dist/commands/maintain.js.map +1 -1
- package/dist/commands/restore.js +2 -2
- 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/index.js +8 -0
- 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 +75 -0
- package/dist/providers/hetzner.js.map +1 -1
- package/dist/providers/linode.d.ts +5 -1
- package/dist/providers/linode.d.ts.map +1 -1
- package/dist/providers/linode.js +88 -0
- package/dist/providers/linode.js.map +1 -1
- package/dist/providers/vultr.d.ts +5 -1
- package/dist/providers/vultr.d.ts.map +1 -1
- package/dist/providers/vultr.js +79 -0
- package/dist/providers/vultr.js.map +1 -1
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/yamlConfig.d.ts.map +1 -1
- package/dist/utils/yamlConfig.js +6 -1
- package/dist/utils/yamlConfig.js.map +1 -1
- 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
|

|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
29
|
+
## What Can You Do?
|
|
94
30
|
|
|
31
|
+
### Deploy
|
|
95
32
|
```bash
|
|
96
|
-
quicklify
|
|
97
|
-
quicklify
|
|
98
|
-
quicklify
|
|
99
|
-
quicklify
|
|
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
|
-
###
|
|
104
|
-
|
|
39
|
+
### Manage
|
|
105
40
|
```bash
|
|
106
|
-
quicklify
|
|
107
|
-
quicklify
|
|
108
|
-
quicklify
|
|
109
|
-
quicklify
|
|
110
|
-
quicklify
|
|
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
|
-
###
|
|
114
|
-
|
|
50
|
+
### Update & Maintain
|
|
115
51
|
```bash
|
|
116
|
-
quicklify
|
|
117
|
-
quicklify
|
|
118
|
-
quicklify
|
|
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
|
-
###
|
|
123
|
-
|
|
57
|
+
### Back Up & Restore
|
|
124
58
|
```bash
|
|
125
|
-
quicklify
|
|
126
|
-
quicklify
|
|
127
|
-
quicklify
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
### Using npx (Recommended)
|
|
134
|
-
|
|
64
|
+
### Snapshots
|
|
135
65
|
```bash
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
434
|
-
quicklify
|
|
435
|
-
|
|
436
|
-
#
|
|
437
|
-
|
|
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
|
-
|
|
90
|
+
## Supported Providers
|
|
564
91
|
|
|
565
|
-
|
|
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
|
-
|
|
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
|
-
|
|
101
|
+
## YAML Config
|
|
586
102
|
|
|
587
|
-
|
|
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:
|
|
599
|
-
name: my-coolify
|
|
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
|
-
|
|
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 |
|
|
619
|
-
|
|
620
|
-
| `starter` |
|
|
621
|
-
| `production` |
|
|
622
|
-
| `dev` |
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
646
|
-
|
|
647
|
-
### Run Tests
|
|
139
|
+
## Installation
|
|
648
140
|
|
|
649
141
|
```bash
|
|
650
|
-
# Run
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
# Run tests in watch mode
|
|
654
|
-
npm run test:watch
|
|
142
|
+
# Run directly (recommended)
|
|
143
|
+
npx quicklify <command>
|
|
655
144
|
|
|
656
|
-
#
|
|
657
|
-
npm
|
|
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
|
-
|
|
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
|
-
|
|
152
|
+
## Troubleshooting
|
|
766
153
|
|
|
767
|
-
|
|
154
|
+
**Server creation fails?**
|
|
155
|
+
Run `quicklify doctor --check-tokens` to verify your API token and local environment.
|
|
768
156
|
|
|
769
|
-
|
|
157
|
+
**Coolify not responding?**
|
|
158
|
+
Use `quicklify status my-server --autostart` to check and auto-restart if needed.
|
|
770
159
|
|
|
771
|
-
|
|
772
|
-
|
|
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
|
-
##
|
|
163
|
+
## Contributing
|
|
779
164
|
|
|
780
|
-
|
|
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
|
-
##
|
|
167
|
+
## What's Next
|
|
786
168
|
|
|
787
|
-
|
|
169
|
+
- Interactive TUI dashboard for server management
|
|
788
170
|
|
|
789
|
-
|
|
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
|
-
|
|
175
|
+
## Support
|
|
797
176
|
|
|
798
|
-
|
|
177
|
+
- [GitHub Issues](https://github.com/omrfrkcpr/quicklify/issues) — Bug reports and feature requests
|
|
178
|
+
- [Changelog](CHANGELOG.md) — Version history
|