You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First deploy fails on horizon:terminate / readlink …/current — Deployer resolves {{current_path}} with readlink before the shell || true can run, so a brand-new app (no current symlink yet) aborted at before('deploy:symlink', 'horizon:terminate'). Templates now guard with [ -L {{deploy_path}}/current ] and call artisan via {{deploy_path}}/current. Migration 5.0.0 regenerates existing deploy.php files.
Added
Optional Laravel Octane (FrankenPHP) — create Laravel apps that serve HTTP via Octane instead of PHP-FPM, in parallel with classic FPM apps on the same server:
cipi app create --octane or --octane=frankenphp (Laravel only; rejected with --custom)
Allocates a localhost port (8100–8999), stores octane / octane_port in apps.json
Nginx vhost proxies to Octane (proxy_pass) and serves static files from current/public — no per-app FPM pool
Supervisor program ${app}-octane alongside queue workers; Deployer template laravel-octane.php restarts/reloads on deploy
.env: OCTANE_SERVER=frankenphp, OCTANE_HTTPS=true
Requires laravel/octane + php artisan octane:install --server=frankenphp in the app repo (Octane starts after the first successful deploy)
cipi app convert <app> --to=octane|fpm — convert an existing Laravel app between PHP-FPM and Octane (pool/vhost/supervisor/deployer/.env; SSL re-applied when present)
Scheduler CLI — cipi schedule on|off|status <app> (crontab schedule:run already existed; now manageable; schedule in apps.json)
Node build on deploy — cipi app edit --node-build='npm ci && npm run build' / --no-node-build; Deployer runs .deployer/node-build.sh after vendors (fail-closed; validated command)
cipi app clone <src> --domain=… — staging as a new app ([--name=] [--branch=] [--with-db|--no-db]); sets cloned_from; does not copy webhook/git IDs
Pre-deploy DB snapshot — opt-in via predeploy_snapshot / cipi deploy --snapshot / --snapshot-required; dump under /var/log/cipi/backups/; code rollback does not auto-restore DB
Resource limits — cipi app limits <app> (--fpm-max-children, --memory-limit, --octane-workers, --worker-procs) with hard caps
SSL DNS-01 (Cloudflare) — cipi ssl dns set --provider=cloudflare --token= then cipi ssl install <app> --dns=cloudflare [--wildcard]; HTTP-01 remains default
HTTP healthchecks — cipi health set|unset|check|list; cron every 5 minutes; notify health_fail after 3 consecutive failures