quicklify

Deploy Coolify to a cloud VPS with one command
π What is Quicklify?
Quicklify is a CLI tool that automates Coolify 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.
Before Quicklify:
Create VPS manually (5 min)
SSH into server (2 min)
Install Docker (10 min)
Configure firewall (5 min)
Install Coolify (10 min)
Total: ~30 minutes + manual work
With Quicklify:
npx quicklify init
β¨ Features
- π― One Command Deploy - VPS + Coolify with a single command
- π° Cost Savings - $50-200/mo (Vercel/Netlify) β β¬3.79/mo
- π Secure by Default - Automated security setup
- π Multi-Cloud - Hetzner Cloud, DigitalOcean, Vultr, Linode
- π» Beautiful CLI - Interactive prompts with validation
- π¨ ARM64 Ready - Support for cost-effective ARM servers
- β‘ Fast Setup - Hetzner ~4 min, DigitalOcean ~6 min, Vultr ~5 min, Linode ~6 min
- β¨ Dynamic Server Types - Only shows compatible types for selected location
- π₯ Auto Firewall - Ports 8000, 22, 80, 443 configured automatically
- π Zero SSH Required - Opens directly in browser after deployment
- π Server Management - List, status check, destroy, restart, backup, restore commands
- π§ Default Config - Set defaults to skip repetitive prompts
- π SSH Access - Connect to servers or run remote commands
- π Coolify Update - Update Coolify with one command
- π₯ Health Check Polling - Detects when Coolify is ready (no more blind waiting)
- π Server Monitoring - CPU/RAM/Disk usage and Docker container status
- π Log Viewer - View Coolify, Docker, or system logs with follow mode
- π©Ί Environment Doctor - Diagnose local setup issues
- π« Bulk Health Check - Check all servers at once
- π₯ Firewall Management - UFW setup, add/remove ports, protected port safety
- π Domain Management - Bind domains, DNS check, auto SSL via Coolify
- π‘οΈ SSH Hardening - Disable password auth, fail2ban, security audit with score
- π§ͺ Dry-Run Mode - Preview commands on firewall/domain/secure/backup/restore before executing
- πΎ Backup & Restore - Database + config backup with SCP download, restore with double confirmation
- π¦ Export/Import - Transfer server list between machines as JSON
- β‘ Full Setup -
--full-setup flag auto-configures firewall + SSH hardening after deploy
- π YAML Config -
quicklify init --config quicklify.yml for one-command deploy
- π Templates -
--template starter|production|dev with per-provider defaults
- π€ Non-Interactive Mode - CI/CD friendly with
--provider --token --region --size --name flags
- β Add Existing Servers -
quicklify add to register existing Coolify servers
- π Bulk Operations -
--all flag for status, update, backup across all servers
- π Auto-Restart -
status --autostart restarts Coolify if server is running but Coolify is down
- π§ Full Maintenance -
quicklify maintain runs status, update, health check, reboot in sequence
π― What Can You Do with Quicklify?
Deploy a Coolify Server in Minutes
npx quicklify init
npx quicklify init --provider hetzner --full-setup
npx quicklify init --template production
npx quicklify init --config quicklify.yml
Manage Your Servers
quicklify list
quicklify status my-server
quicklify status --all
quicklify ssh my-server
quicklify ssh my-server -c "uptime"
Keep Everything Updated & Healthy
quicklify update my-server
quicklify restart my-server
quicklify maintain my-server
quicklify maintain --all
quicklify health
Backup & Restore
quicklify backup my-server
quicklify backup --all
quicklify restore my-server
quicklify export servers.json
quicklify import servers.json
Security & Networking
quicklify firewall setup my-server
quicklify domain add my-server --domain coolify.example.com
quicklify secure setup my-server
quicklify secure audit my-server
Monitoring & Diagnostics
quicklify monitor my-server
quicklify logs my-server -f
quicklify doctor
quicklify status my-server --autostart
π¦ Installation
Using npx (Recommended)
npx quicklify init
Global Installation
npm install -g quicklify
quicklify init
π¬ Quick Start
Step 1: Get API Token
Hetzner Cloud:
- Visit Hetzner Console
- Select your project
- Navigate to Security β API Tokens
- Click "Generate API Token"
- Set permissions to Read & Write
- Copy the token (shown only once!)
DigitalOcean:
- Visit DigitalOcean API
- Generate New Token with Read & Write scope
- Copy the token
Vultr:
- Visit Vultr API
- Enable API and copy the API Key
- Whitelist your IP address
Linode (Akamai):
- Visit Linode API Tokens
- Create a Personal Access Token with Read/Write scope
- Copy the token
Step 2: Deploy Coolify
npx quicklify init
You'll be prompted for:
- β
API Token - Paste your cloud provider token
- β
Region - Select datacenter location
- β
Server Size - Choose VPS specs (CAX11 recommended)
- β
Server Name - Name your instance
Step 3: Access Coolify
After deployment (Hetzner ~4 min, DigitalOcean ~6 min, Vultr ~5 min, Linode ~6 min):
β
Deployment Successful!
Server IP: 123.45.67.89
Access Coolify: http://123.45.67.89:8000
Visit the URL, create your admin account, and start deploying!
π Security Notes
Important: Port 8000 is publicly accessible after deployment.
Recommended next steps:
- One-command setup:
quicklify init --full-setup (auto-configures firewall + SSH hardening)
- Or manually:
quicklify firewall setup my-server
- Add a domain:
quicklify domain add my-server --domain example.com
- Harden SSH:
quicklify secure setup my-server
- Run security audit:
quicklify secure audit my-server
- Create a backup:
quicklify backup my-server
- Set a strong password on first login
- Consider Cloudflare for DDoS protection
π Supported Providers
| Hetzner Cloud | β
Available | β¬3.79/mo | ARM64 + x86 |
| DigitalOcean | β
Available | $12/mo | x86 |
| Vultr | β
Available | $6/mo | x86 |
| Linode (Akamai) | β
Available | $12/mo | x86 |
π‘ Use Cases
Perfect for:
- π Side projects and MVPs
- πΌ Client deployments (freelancers/agencies)
- π Learning DevOps and self-hosting
- πΈ Cutting cloud hosting costs
- π’ Small team internal tools
When to use alternatives:
- Large enterprise? β Coolify Cloud or enterprise PaaS
- Extreme scale? β Kubernetes + managed services
π Cost Comparison
| Vercel (Hobby) | $20+ | 5 min | Easy |
| Vercel (Pro) | $50+ | 5 min | Easy |
| Netlify (Pro) | $19+ | 5 min | Easy |
| Quicklify + Hetzner | β¬3.79 | ~4 min | Easy |
| Quicklify + DigitalOcean | $12 | ~6 min | Easy |
| Quicklify + Vultr | $6 | ~5 min | Easy |
| Quicklify + Linode | $12 | ~6 min | Easy |
| Manual VPS + Coolify | β¬3.79 | 30+ min | Hard |
Savings: ~$180-240/year per project! π°
π Recent Updates
v1.0.0 (2026-02-23)
- New providers: Vultr and Linode (Akamai) β 4 cloud providers now supported
- New command:
quicklify add β register existing Coolify servers to Quicklify management
- New command:
quicklify maintain β full maintenance cycle (status, update, health, reboot)
- Bulk operations:
--all flag on status, update, backup β operate on all servers at once
- Auto-restart:
status --autostart β restarts Coolify if server is running but Coolify is down
collectProviderTokens() β asks for each provider's token only once across all servers
- 937 tests across 44 suites with 98%+ statement coverage, zero new dependencies
v0.9.0 (2026-02-21)
- YAML Config:
quicklify init --config quicklify.yml - deploy from a config file
- Templates:
--template starter|production|dev - predefined server configurations per provider
- Config merge: Priority order: CLI flags > YAML config > template defaults > interactive prompts
- Security: Token fields in YAML are detected and warned (never store tokens in config files)
- 1 new dependency (js-yaml), 742 tests with 98%+ statement coverage
v0.8.0 (2026-02-21)
- New commands:
quicklify backup, quicklify restore, quicklify export, quicklify import
- Backup: pg_dump + config tarball, SCP download to
~/.quicklify/backups/, manifest.json metadata
- Restore: Upload backup to server, stop/start Coolify, restore DB + config, double confirmation safety
- Export/Import: Transfer
servers.json between machines, duplicate detection, format validation
--full-setup flag: quicklify init --full-setup auto-configures firewall + SSH hardening after deploy
- Zero new dependencies, 636 tests with 98%+ statement coverage
v0.7.0 (2026-02-20)
- New commands:
quicklify firewall, quicklify domain, quicklify secure
- Firewall management: UFW setup, add/remove ports, protected port 22 safety, Coolify port warnings
- Domain management: Bind domains to Coolify, DNS A record check, auto SSL
- SSH hardening: Disable password auth, key-only root login, fail2ban, security audit with 0-4 score
- Dry-run mode:
--dry-run flag previews all commands without executing
- Zero new dependencies, 494 tests with 97%+ statement coverage
v0.6.0 (2026-02-20)
- New commands:
quicklify logs, quicklify monitor, quicklify health, quicklify doctor
- Log viewer: View Coolify/Docker/system logs with
--follow real-time streaming
- Server monitoring: CPU/RAM/Disk usage and Docker container list
- Bulk health check: Check all registered servers at once with response times
- Environment doctor: Diagnose Node.js, SSH, config issues locally
- Zero new dependencies, 354 tests with 97%+ statement coverage
v0.5.0 (2026-02-20)
- New commands:
quicklify config, quicklify ssh, quicklify update, quicklify restart
- Default config: Set defaults for provider, region, size with
quicklify config set
- SSH access: Connect to servers with
quicklify ssh or run commands with --command
- Coolify updates: Update Coolify via SSH with
quicklify update
- Server restart: Reboot via provider API with
quicklify restart
- 311 tests with 97%+ statement coverage
v0.4.0 (2026-02-20)
- New commands:
quicklify list, quicklify status [query], quicklify destroy [query]
- Non-interactive mode:
quicklify init --provider --token --region --size --name for CI/CD
- Health check polling: Detects when Coolify is ready instead of blind waiting
- 246 tests with 97%+ statement coverage
v0.3.1 (2026-02-19)
- Hetzner pricing now shows net prices (excl. VAT), matching website display
- Hetzner server types use
/datacenters API for real availability per location
- Replaced deprecated Hetzner server types (cpxβcx23/cx33)
- "Server name already used" error now prompts for a new name
- Location disabled retry now re-prompts for server type
v0.3.0 (2026-02-19)
- DigitalOcean provider support (full API integration)
- Interactive provider selection (Hetzner / DigitalOcean)
- Step-based back navigation in all prompts
- Network wait loop + install logging for DigitalOcean cloud-init reliability
πΊοΈ Roadmap
v0.1.0 (Completed)
v0.2.0 (Completed)
v0.2.x (Completed)
v0.3.0 (Completed)
v0.4.0 (Completed)
v0.5.0 (Completed)
v0.6.0 (Completed)
v0.7.0 (Completed)
v0.8.0 (Completed)
v0.9.0 (Completed)
v1.0.0 (Completed)
Future
π οΈ Tech Stack
- Runtime: Node.js 20+
- Language: TypeScript
- CLI Framework: Commander.js
- Interactive Prompts: Inquirer.js
- Styling: Chalk (colors) + Ora (spinners)
- HTTP Client: Axios
- YAML Parser: js-yaml
- Cloud APIs: Hetzner Cloud API v1, DigitalOcean API v2, Vultr API v2, Linode API v4
- Linting: ESLint 10 + typescript-eslint
- Formatting: Prettier
π CLI Reference
Commands
quicklify init
export HETZNER_TOKEN="your-api-token"
quicklify init --provider hetzner --region nbg1 --size cax11 --name my-server
quicklify init --full-setup
quicklify init --config quicklify.yml
quicklify init --template production --provider hetzner
quicklify list
quicklify status 123.45.67.89
quicklify status my-server
quicklify status --all
quicklify status my-server --autostart
quicklify destroy 123.45.67.89
quicklify destroy my-server
quicklify remove my-server
quicklify remove 123.45.67.89
quicklify config set provider hetzner
quicklify config set region nbg1
quicklify config get provider
quicklify config list
quicklify config reset
quicklify ssh my-server
quicklify ssh 123.45.67.89 -c "docker ps"
quicklify update my-server
quicklify update --all
quicklify restart my-server
quicklify logs my-server
quicklify logs my-server --follow
quicklify logs my-server --service docker --lines 100
quicklify logs my-server --service system
quicklify monitor my-server
quicklify monitor my-server --containers
quicklify health
quicklify doctor
quicklify firewall setup my-server
quicklify firewall add my-server --port 3000
quicklify firewall add my-server --port 53 --protocol udp
quicklify firewall remove my-server --port 3000
quicklify firewall list my-server
quicklify firewall status my-server
quicklify firewall setup my-server --dry-run
quicklify domain add my-server --domain example.com
quicklify domain add my-server --domain example.com --no-ssl
quicklify domain remove my-server
quicklify domain check my-server --domain example.com
quicklify domain list my-server
quicklify domain add my-server --domain example.com --dry-run
quicklify secure status my-server
quicklify secure audit my-server
quicklify secure setup my-server
quicklify secure setup my-server --port 2222
quicklify secure setup my-server --dry-run
quicklify backup my-server
quicklify backup --all
quicklify backup my-server --dry-run
quicklify restore my-server
quicklify restore my-server --backup 2026-02-21_15-30-45-123
quicklify restore my-server --dry-run
quicklify export
quicklify export /path/to/file.json
quicklify import /path/to/file.json
quicklify add
quicklify add --provider hetzner --ip 1.2.3.4 --name my-server
quicklify add --provider vultr --ip 1.2.3.4 --skip-verify
quicklify maintain my-server
quicklify maintain my-server --skip-reboot
quicklify maintain --all
quicklify maintain my-server --dry-run
quicklify --version
quicklify --help
Non-Interactive Mode
Set your API token as an environment variable, then pass all options as flags:
export HETZNER_TOKEN="your-api-token"
export DIGITALOCEAN_TOKEN="your-api-token"
export VULTR_TOKEN="your-api-token"
export LINODE_TOKEN="your-api-token"
quicklify init \
--provider hetzner \
--region nbg1 \
--size cax11 \
--name production-coolify
Token resolution order: environment variable > interactive prompt. The --token flag is available but not recommended as it exposes the token in shell history.
If some flags are missing, only the missing values will be prompted interactively.
YAML Config File
Create a quicklify.yml file for repeatable deployments:
template: production
provider: hetzner
region: nbg1
size: cx33
name: my-coolify-prod
fullSetup: true
Then deploy with:
export HETZNER_TOKEN="your-api-token"
quicklify init --config quicklify.yml
Security: Never store API tokens in config files. Use environment variables (export HETZNER_TOKEN=...).
Config merge priority: CLI flags > YAML values > template defaults > interactive prompts.
Templates
Templates provide sensible defaults per provider:
starter | nbg1 / cax11 (β¬3.79) | fra1 / s-2vcpu-2gb ($12) | ewr / vc2-2c-4gb ($24) | us-east / g6-standard-2 ($12) | No |
production | nbg1 / cx33 (β¬5.49) | fra1 / s-2vcpu-4gb ($24) | ewr / vc2-4c-8gb ($48) | us-east / g6-standard-4 ($36) | Yes |
dev | nbg1 / cax11 (β¬3.79) | fra1 / s-2vcpu-2gb ($12) | ewr / vc2-2c-4gb ($24) | us-east / g6-standard-2 ($12) | No |
export HETZNER_TOKEN="your-api-token"
quicklify init --template production --provider hetzner --name my-server
export DIGITALOCEAN_TOKEN="your-api-token"
quicklify init --template starter --provider digitalocean --name test-server
Interactive Prompts
- Provider Selection - Choose Hetzner Cloud, DigitalOcean, Vultr, or Linode
- API Token - Validated before proceeding
- Region Selection - Choose your preferred datacenter
- Server Size - Filtered by Coolify requirements (2GB RAM, 2 vCPU)
- Server Name - Validates format (lowercase, alphanumeric, hyphens)
- Confirmation - Review summary before deployment
All steps support β Back navigation to return to the previous step.
π§ͺ Testing
Run Tests
npm test
npm run test:watch
npm run test:coverage
npm run lint
npm run format
Test Structure
tests/
βββ __mocks__/ # Mock modules (axios, inquirer, ora, chalk)
βββ unit/ # Unit tests
β βββ cloudInit.test.ts
β βββ config.test.ts # Config CRUD operations
β βββ config-edge.test.ts # Config edge cases (corruption, empty files)
β βββ config-command.test.ts # Config command subcommands
β βββ defaults.test.ts # Default config CRUD
β βββ destroy.test.ts # Destroy command unit tests
β βββ doctor.test.ts # Doctor command tests
β βββ domain.test.ts # Domain command tests
β βββ firewall.test.ts # Firewall command tests
β βββ health-command.test.ts # Health command tests
β βββ healthCheck.test.ts # Health check polling tests
β βββ healthCheck-edge.test.ts # Health check edge cases (302, 401, 500)
β βββ list.test.ts # List command unit tests
β βββ logger.test.ts
β βββ logs.test.ts # Logs command tests
β βββ monitor.test.ts # Monitor command tests
β βββ prompts.test.ts
β βββ providerFactory.test.ts # Provider factory tests
β βββ restart.test.ts # Restart command tests
β βββ secure.test.ts # Secure command tests
β βββ backup.test.ts # Backup command tests
β βββ restore.test.ts # Restore command tests
β βββ transfer.test.ts # Export/Import command tests
β βββ templates.test.ts # Template definitions tests
β βββ yamlConfig.test.ts # YAML config loader tests
β βββ configMerge.test.ts # Config merge logic tests
β βββ init-fullsetup.test.ts # Init --full-setup tests
β βββ serverSelect.test.ts # Server selection utility tests
β βββ ssh-command.test.ts # SSH command tests
β βββ ssh-utils.test.ts # SSH helper tests
β βββ status.test.ts # Status command unit tests
β βββ update.test.ts # Update command tests
β βββ add.test.ts # Add command tests
β βββ maintain.test.ts # Maintain command tests
β βββ validators.test.ts
βββ integration/ # Integration tests (provider API calls)
β βββ hetzner.test.ts # Including destroyServer tests
β βββ digitalocean.test.ts # Including destroyServer tests
β βββ vultr.test.ts # Vultr provider tests
β βββ linode.test.ts # Linode provider tests
βββ e2e/ # End-to-end tests (full command flows)
βββ init.test.ts
βββ init-noninteractive.test.ts # Non-interactive mode E2E
βββ init-config.test.ts # YAML config + template E2E
βββ status.test.ts # Status command E2E
βββ destroy.test.ts # Destroy command E2E
CI/CD
Tests run automatically on every push/PR via GitHub Actions across:
- OS: Ubuntu, macOS, Windows
- Node.js: 20, 22
Coverage
Current coverage: 98%+ statements/lines, 91%+ branches, 98%+ functions. 937 tests across 44 test suites.
π§ Troubleshooting
"Invalid API token"
- Ensure token has Read & Write permissions
- Check for extra spaces when copying
- Regenerate token if needed
"Server creation failed"
- Verify cloud account has sufficient funds
- Check account limits (new accounts may have restrictions)
- Try different region or server size
"Cannot access Coolify UI"
- Wait 3-5 more minutes (Coolify initialization takes time)
- Check the install log:
ssh root@YOUR_IP "cat /var/log/quicklify-install.log | tail -20"
- Check firewall settings (should auto-configure)
- Verify server is running in cloud console
π€ Contributing
Contributions are welcome! See CONTRIBUTING.md for development setup, code guidelines, and PR process.
Areas for contribution:
- New cloud provider integrations
- CLI improvements
- Documentation
- Bug fixes
π License
MIT Β© 2026 Γmer FC
See LICENSE file for details.
π Acknowledgments
- Coolify - The amazing open-source PaaS
- Hetzner - Affordable, reliable cloud infrastructure
- DigitalOcean - Developer-friendly cloud platform
- Vultr - High-performance cloud compute
- Linode - Simple, affordable cloud computing
- All contributors and users!
β Show Your Support
If Quicklify helped you, please:
- β Star this repository
- π¦ Share on Twitter
- π Write a blog post
- π¬ Tell your friends!
Made with β€οΈ by @omrfc
Saving developers time, one deployment at a time. β‘