--- name: coolify description: >- Deploy and manage applications, databases, and services on Coolify. Use when a user asks to deploy an app to Coolify, manage Coolify deployments, check deployment logs, sync environment variables, create or manage databases on Coolify, trigger a deployment, manage Coolify servers, or troubleshoot Coolify issues. Covers the Coolify CLI and REST API. For infrastructure provisioning on Hetzner, see hetzner-cloud. license: Apache-2.0 compatibility: "Requires Coolify CLI (coolify) or curl for API access. Install CLI: curl -fsSL https://raw.githubusercontent.com/coollabsio/coolify-cli/main/scripts/install.sh | bash" metadata: author: terminal-skills version: "1.0.0" category: devops tags: ["coolify", "paas", "deployment", "self-hosting", "docker"] evals: - name: deploy-nextjs-with-env-sync prompt: | Deploy my Next.js app to my Coolify instance. The app UUID is abc123-def456. Before deploying, sync the production env vars from my local .env.production file. Then trigger the deploy and tell me how to monitor the logs. rubric: | Score 0-100 by points achieved: - Uses `coolify app env sync abc123-def456 --file .env.production` (or equivalent --file flag): 30pts - Notes the sync is non-destructive (keeps unlisted vars intact): 10pts - Uses `coolify deploy uuid abc123-def456` (not dashboard UI, not `coolify deploy app`): 30pts - Mentions `coolify app deployments logs ` for monitoring: 20pts - Does NOT recommend scp/SSH or manual file copy of the .env: 10pts - name: debug-failed-deployment prompt: | My deployment to Coolify just failed. The deployment UUID is dep-789xyz. Help me figure out what went wrong and how to fix it. rubric: | Score 0-100 by points achieved: - First diagnostic step is `coolify app deployments logs dep-789xyz` (NOT SSH-into-server): 35pts - Distinguishes build-time vs runtime errors when interpreting logs: 15pts - Suggests `coolify deploy cancel ` if the deploy is stuck/queued: 15pts - Mentions checking env vars / config if logs show missing-config errors: 15pts - Does NOT recommend SSH-into-server as the first or primary action: 20pts - name: postgres-with-nightly-backups prompt: | Create a PostgreSQL database on my Coolify server (server UUID srv-abc123) called "analytics" with automated nightly backups to S3. rubric: | Score 0-100 by points achieved: - Uses `coolify database create postgresql --name analytics --server srv-abc123`: 30pts - Uses `coolify database backup create --frequency` with cron syntax for nightly (e.g. "0 2 * * *"): 30pts - Includes `--s3 ` flag (or notes an S3 storage target is required): 20pts - Notes the S3 storage target must be pre-configured in the Coolify dashboard before creating the backup: 10pts - Does NOT suggest pg_dump-via-cron on the host or manual backup scripts: 10pts - name: github-actions-deploy-webhook prompt: | Set up GitHub Actions to automatically deploy my Coolify app whenever I push to the main branch. My Coolify URL is https://coolify.example.com and the app UUID is xyz-789. Show me the workflow file. rubric: | Score 0-100 by points achieved: - Uses the `/api/v1/deploy` endpoint (NOT a custom webhook URL or dashboard URL): 25pts - POSTs JSON body `{"uuid": "xyz-789"}` (correct payload shape): 20pts - Includes `Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}` header: 20pts - Stores COOLIFY_TOKEN (and any other sensitive values) in GitHub Secrets, not hardcoded: 20pts - Provides a complete, working `.github/workflows/deploy.yml` example with `on.push.branches: [main]`: 15pts - name: manage-multiple-coolify-instances prompt: | I have two Coolify instances — one for production and one for staging. How do I switch between them with the CLI without re-entering API tokens every time? rubric: | Score 0-100 by points achieved: - Uses `coolify context add ` to register both instances: 30pts - Uses `coolify context use ` to switch the active context: 30pts - Mentions `coolify context list` to see configured contexts: 15pts - Mentions `coolify context verify` to test the connection after switching: 15pts - Does NOT recommend manual env-var swapping, .coolifyrc edits, or re-running setup: 10pts --- # Coolify ## Overview Manage Coolify deployments, applications, databases, and services from the terminal. Supports the Coolify CLI for day-to-day operations and the REST API for CI/CD integration. Coolify is an open-source self-hostable PaaS that deploys resources as Docker containers on your own servers. ## Instructions When a user asks for help with Coolify, determine which task they need: ### Task A: Set up CLI context Connect the CLI to a Coolify instance: ```bash # Add a context (name, URL, API token) coolify context add production https://coolify.example.com # List configured contexts coolify context list # Switch active context coolify context use production # Verify connection coolify context verify ``` API tokens are created in the Coolify dashboard under **Keys & Tokens > API tokens**. Permission levels: - `read-only` — view resources, no sensitive data - `read:sensitive` — view resources including secrets - `*` — full access (needed for deploys and mutations) ### Task B: Deploy applications ```bash # Deploy by UUID coolify deploy uuid # Deploy by name coolify deploy name my-api # Deploy multiple resources at once coolify deploy batch app1-uuid,app2-uuid,db-uuid # List recent deployments coolify app deployments list # View deployment logs coolify app deployments logs # Cancel a running deployment coolify deploy cancel ``` **Via API (for CI/CD pipelines):** ```bash curl -X POST "https://coolify.example.com/api/v1/deploy" \ -H "Authorization: Bearer $COOLIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"uuid": "app-uuid-here"}' ``` ### Task C: Manage environment variables ```bash # List env vars for an application coolify app env list # Create a single env var coolify app env create --key DATABASE_URL --value "postgres://user:pass@db:5432/myapp" # Sync from a .env file (creates missing, updates existing, leaves others untouched) coolify app env sync --file .env.production # Bulk update via API curl -X PATCH "https://coolify.example.com/api/v1/applications//envs/bulk" \ -H "Authorization: Bearer $COOLIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '[{"key": "NODE_ENV", "value": "production"}, {"key": "PORT", "value": "3000"}]' ``` ### Task D: Manage databases ```bash # List all databases coolify database list # Create a PostgreSQL database coolify database create postgresql --name my-postgres --server # Start/stop/restart a database coolify database start coolify database stop coolify database restart # Create a backup configuration coolify database backup create --frequency "0 2 * * *" --s3 # Trigger a backup immediately coolify database backup trigger ``` Supported database types: PostgreSQL, MySQL, MariaDB, MongoDB, Redis, ClickHouse, Dragonfly, KeyDB. ### Task E: Manage applications and services ```bash # List all applications coolify app list # Get application details coolify app get # Start/stop/restart an application coolify app start coolify app stop coolify app restart # View application logs coolify app logs # List one-click services coolify service list # Start/stop a service coolify service start coolify service stop ``` ### Task F: Server and resource management ```bash # List all servers coolify server list # Validate a server (checks SSH, Docker, prerequisites) coolify server validate # List all resources across servers coolify resources list # Get server details (JSON output for scripting) coolify server get --format json ``` ## Examples ### Example 1: Deploy a Next.js app and sync env vars **User request:** "Deploy my Next.js app to Coolify and sync the production env vars" **Steps taken:** ```bash # First, sync env vars from local .env.production $ coolify app env sync abc123-def456 --file .env.production Synced 12 environment variables (3 created, 9 updated) # Trigger deployment $ coolify deploy uuid abc123-def456 Deployment queued: dep-789xyz # Monitor deployment $ coolify app deployments logs dep-789xyz [2024-01-15 10:23:01] Building with Nixpacks... [2024-01-15 10:23:45] Build completed successfully [2024-01-15 10:23:50] Deploying container... [2024-01-15 10:24:02] Health check passed [2024-01-15 10:24:03] Deployment successful ``` ### Example 2: Set up a PostgreSQL database with automated backups **User request:** "Create a PostgreSQL database on Coolify with nightly backups" **Steps taken:** ```bash # Create the database $ coolify database create postgresql --name analytics-db --server srv-abc123 Created database: db-xyz789 (PostgreSQL 16) # Create backup schedule (daily at 2 AM) $ coolify database backup create db-xyz789 --frequency "0 2 * * *" --s3 s3-backup-config Backup schedule created: backup-111222 # Verify it's running $ coolify database list UUID NAME TYPE STATUS db-xyz789 analytics-db postgresql running ``` ### Example 3: CI/CD deployment from GitHub Actions **User request:** "Set up automatic deployment from GitHub Actions" **GitHub Actions workflow:** ```yaml # .github/workflows/deploy.yml name: Deploy to Coolify on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - name: Trigger Coolify deployment run: | curl -X POST "${{ secrets.COOLIFY_URL }}/api/v1/deploy" \ -H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}" \ -H "Content-Type: application/json" \ -d '{"uuid": "${{ secrets.COOLIFY_APP_UUID }}"}' ``` ## Guidelines - Store your Coolify API token securely. Never commit it to version control. Use `COOLIFY_TOKEN` as an environment variable in CI/CD. - Use `coolify context` to manage multiple Coolify instances (production, staging). Avoid hardcoding URLs. - The `coolify app env sync` command is non-destructive — it won't remove env vars not in your file. Use this for safe syncing. - Deployments are queued and processed sequentially per server. Check the queue if deploys seem delayed. - For troubleshooting failed deployments, always check `coolify app deployments logs ` first. - Database backups require an S3-compatible storage target configured in Coolify (AWS S3, MinIO, Backblaze B2, etc.). - Use `--format json` with any CLI command to get machine-readable output for scripting. - For detailed API endpoint reference, see [references/api-reference.md](references/api-reference.md).