quicklify
v0.9.0
Published
Automate Coolify deployment on cloud providers
Maintainers
Readme
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 workWith Quicklify:
npx quicklify init
# Hetzner: ~4 minutes | DigitalOcean: ~6 minutes
# Zero manual work ✨✨ 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-setupflag auto-configures firewall + SSH hardening after deploy - 📄 YAML Config -
quicklify init --config quicklify.ymlfor one-command deploy - 📋 Templates -
--template starter|production|devwith per-provider defaults - 🤖 Non-Interactive Mode - CI/CD friendly with
--provider --token --region --size --nameflags
📦 Installation
Using npx (Recommended)
npx quicklify initGlobal 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 initYou'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:8000Visit 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
| Provider | Status | Starting Price | Architecture | |----------|--------|----------------|--------------| | 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
| Solution | Monthly Cost | Setup Time | Management | |----------|--------------|------------|------------| | 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.jsonbetween machines, duplicate detection, format validation --full-setupflag:quicklify init --full-setupauto-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-runflag 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
--followreal-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 sshor 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 --namefor 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
/datacentersAPI 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)
- [x] Hetzner Cloud integration
- [x] Interactive CLI
- [x] Automated Coolify installation
- [x] ARM64 support
v0.2.0 (Completed)
- [x] Dynamic server type filtering
- [x] Auto firewall configuration
- [x] Price formatting fix
v0.2.x (Completed)
- [x] Deprecated server type filtering
- [x] Retry on unavailable server types
- [x] Dynamic deployment summary
- [x] Dynamic recommended selection
- [x] Codecov integration with coverage badge
- [x] ESLint + Prettier code quality tooling
- [x] Zero
anytypes - full type safety
v0.3.0 (Completed)
- [x] DigitalOcean support
- [x] Interactive provider selection UI
- [x] Step-based back navigation
- [x] Cloud-init reliability improvements (network wait, logging)
v0.4.0 (Completed)
- [x] Server management commands (list, status, destroy)
- [x] Non-interactive mode for CI/CD
- [x] Coolify health check polling (replaces blind wait)
- [x] Server record persistence (
~/.quicklify/servers.json) - [x]
destroyServer()on provider interface - [x] Double confirmation safety for destroy
v0.5.0 (Completed)
- [x] Default configuration management (
quicklify config) - [x] SSH access to servers (
quicklify ssh) - [x] Coolify update via SSH (
quicklify update) - [x] Server restart via provider API (
quicklify restart) - [x] Shared server selection and token utilities (DRY refactor)
v0.6.0 (Completed)
- [x] Server monitoring - CPU/RAM/Disk usage (
quicklify monitor) - [x] Log viewer - Coolify/Docker/system logs (
quicklify logs) - [x] Bulk health check for all servers (
quicklify health) - [x] Environment diagnostics (
quicklify doctor) - [x] SSH streaming for real-time log following
v0.7.0 (Completed)
- [x] Firewall management - UFW setup, add/remove ports (
quicklify firewall) - [x] Domain management - Bind domains, DNS check, SSL (
quicklify domain) - [x] SSH hardening - Password disable, fail2ban, security audit (
quicklify secure) - [x] Dry-run mode for all security commands
v0.8.0 (Completed)
- [x] Backup Coolify database + config (
quicklify backup) - [x] Restore from backup with double confirmation (
quicklify restore) - [x] Export/Import server list (
quicklify export,quicklify import) - [x]
--full-setupflag for auto firewall + SSH hardening on init
v0.9.0 (Completed)
- [x] YAML config file (
quicklify.yml) for one-command deploy - [x] Template system (
--template starter|production|dev) - [x] Config merge with priority: CLI > YAML > template > interactive
Future
- [ ] Vultr support
- [ ] Linode / AWS Lightsail support
- [ ] Interactive TUI dashboard
🛠️ 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
# Deploy new Coolify instance (interactive)
quicklify init
# Deploy non-interactively (CI/CD friendly)
export HETZNER_TOKEN="your-api-token"
quicklify init --provider hetzner --region nbg1 --size cax11 --name my-server
# Deploy with auto firewall + SSH hardening
quicklify init --full-setup
# Deploy from a YAML config file
quicklify init --config quicklify.yml
# Deploy using a template
quicklify init --template production --provider hetzner
# List all registered servers
quicklify list
# Check server and Coolify status
quicklify status 123.45.67.89
quicklify status my-server
# Destroy a server (with double confirmation)
quicklify destroy 123.45.67.89
quicklify destroy my-server
# Manage default configuration
quicklify config set provider hetzner
quicklify config set region nbg1
quicklify config get provider
quicklify config list
quicklify config reset
# SSH into a server
quicklify ssh my-server
quicklify ssh 123.45.67.89 -c "docker ps"
# Update Coolify on a server
quicklify update my-server
# Restart a server
quicklify restart my-server
# View Coolify logs (last 50 lines)
quicklify logs my-server
# Follow Coolify logs in real-time
quicklify logs my-server --follow
# View Docker or system logs
quicklify logs my-server --service docker --lines 100
quicklify logs my-server --service system
# Show CPU/RAM/Disk usage
quicklify monitor my-server
# Show usage with Docker containers
quicklify monitor my-server --containers
# Check health of all servers
quicklify health
# Run environment diagnostics
quicklify doctor
# Firewall management
quicklify firewall setup my-server # Install UFW + Coolify ports
quicklify firewall add my-server --port 3000 # Open port 3000/tcp
quicklify firewall add my-server --port 53 --protocol udp # Open port 53/udp
quicklify firewall remove my-server --port 3000 # Close port 3000
quicklify firewall list my-server # Show firewall rules
quicklify firewall status my-server # Check UFW active/inactive
quicklify firewall setup my-server --dry-run # Preview without executing
# Domain management
quicklify domain add my-server --domain example.com # Bind domain + HTTPS
quicklify domain add my-server --domain example.com --no-ssl # HTTP only
quicklify domain remove my-server # Revert to IP:8000
quicklify domain check my-server --domain example.com # Verify DNS
quicklify domain list my-server # Show current domain
quicklify domain add my-server --domain example.com --dry-run # Preview
# SSH hardening & security
quicklify secure status my-server # Show security settings
quicklify secure audit my-server # Security score (0-4)
quicklify secure setup my-server # Harden SSH + install fail2ban
quicklify secure setup my-server --port 2222 # Change SSH port
quicklify secure setup my-server --dry-run # Preview without executing
# Backup Coolify database and config
quicklify backup my-server # Full backup (pg_dump + config)
quicklify backup my-server --dry-run # Preview backup steps
# Restore from a backup
quicklify restore my-server # Interactive backup selection
quicklify restore my-server --backup 2026-02-21_15-30-45-123 # Specific backup
quicklify restore my-server --dry-run # Preview restore steps
# Export/Import server list
quicklify export # Export to ./quicklify-export.json
quicklify export /path/to/file.json # Export to custom path
quicklify import /path/to/file.json # Import servers (skips duplicates)
# Show version
quicklify --version
# Show help
quicklify --helpNon-Interactive Mode
Set your API token as an environment variable, then pass all options as flags:
# Set token (recommended - avoids shell history exposure)
export HETZNER_TOKEN="your-api-token"
# or
export DIGITALOCEAN_TOKEN="your-api-token"
# Deploy non-interactively
quicklify init \
--provider hetzner \
--region nbg1 \
--size cax11 \
--name production-coolifyToken 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:
# quicklify.yml
template: production
provider: hetzner
region: nbg1
size: cx33
name: my-coolify-prod
fullSetup: trueThen deploy with:
export HETZNER_TOKEN="your-api-token"
quicklify init --config quicklify.ymlSecurity: 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:
| Template | Hetzner | DigitalOcean | Full Setup |
|----------|---------|--------------|------------|
| 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 |
# Quick production deploy
export HETZNER_TOKEN="your-api-token"
quicklify init --template production --provider hetzner --name my-server
# Cheap starter for testing
export DIGITALOCEAN_TOKEN="your-api-token"
quicklify init --template starter --provider digitalocean --name test-serverInteractive 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
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage report
npm run test:coverage
# Lint code
npm run lint
# Format code
npm run formatTest 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 E2ECI/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!
💬 Support & Community
- 🐛 Bug Reports: GitHub Issues
- 💡 Feature Requests: GitHub Discussions
- 🐦 Updates: @omrfc
- 🌐 Website: quicklify.omrfc.dev
⭐ 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. ⚡
