quicklify

Deploy Coolify to any cloud VPS with one command
π What is Quicklify?
Quicklify is a CLI tool that automates Coolify installation on cloud VPS providers. One command to deploy your self-hosted PaaS platform.
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
- π» Beautiful CLI - Interactive prompts with validation
- π¨ ARM64 Ready - Support for cost-effective ARM servers
- β‘ Fast Setup - Hetzner ~4 min, DigitalOcean ~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
π¦ 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
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):
β
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 | π Planned | $2.50/mo | x86 |
| Linode | π Planned | $5/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 |
| Manual VPS + Coolify | β¬3.79 | 30+ min | Hard |
Savings: ~$180-240/year per project! π°
π Recent Updates
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)
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
- 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 destroy 123.45.67.89
quicklify destroy my-server
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 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 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 --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"
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) | No |
production | nbg1 / cx33 (β¬5.49) | fra1 / s-2vcpu-4gb ($24) | Yes |
dev | nbg1 / cax11 (β¬3.79) | fra1 / s-2vcpu-2gb ($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 or DigitalOcean
- 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
β βββ validators.test.ts
βββ integration/ # Integration tests (provider API calls)
β βββ hetzner.test.ts # Including destroyServer tests
β βββ digitalocean.test.ts # Including destroyServer 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. 742 tests across 40 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
- 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. β‘