Version 4.5.1
[4.5.1] — 2026-05-21
Fixed
-
Panel API: recurring 500s on
/and/api/*while user apps stayed up — 4.5.0 fixed the acute FPM saturation symptom, but the chronic cause was untouched: thecipi-apiLaravel package (v1.7.0+) registers scheduled commands (cipi:prune-job-logsdaily @ 03:30,cipi:record-server-metricsevery minute) and the cipi installer never wired up* * * * * php artisan schedule:runfor/opt/cipi/api— user apps had it via their per-user crontab; the panel did not. Over weeks of operation this produced:storage/app/cipi-job-logs/{uuid}.logaccumulating forever (one file per deploy / artisan / MCP /sudo cipi db …call invoked via the API), eventually exhausting disk space or inodes →fopen()failures surfaced as opaque 500s on the panel while per-app vhosts (separate pool, separate writes) kept serving.cipi_jobsandfailed_jobsrows accumulating forever in the panel SQLite, slowing every authenticated request and bloating WAL.database.sqlite-walgrowing unbounded —PASSIVEauto-checkpoints don't reclaim space under concurrent FPM + queue writers.- Laravel session files piling up under the default
filedriver. The welcome route'swebmiddleware writes one file per anonymous hit (bots, uptime monitors); GC is probabilistic (2/100) so low-traffic panels effectively never GC. Once the sessions dir grew large enough,scandir()stalled FPM workers pastrequest_terminate_timeout.
Fixed by wiring the Laravel scheduler into system cron for the panel app, adding a daily maintenance job for the SQLite cleanups, and switching the panel to the
arraysession driver so the welcome page no longer writes to disk per request.
Added
/etc/cron.d/cipi-api— installed by_api_setup_cron(inlib/api.sh) and by migration 4.5.1 on existing servers. Two entries:* * * * *runsphp /opt/cipi/api/artisan schedule:runaswww-data(drives the cipi-api package's scheduled commands);15 4 * * *runs/usr/local/bin/cipi-api-maintaindaily for the SQLite cleanups./usr/local/bin/cipi-api-maintain— daily maintenance helper. Runsphp artisan queue:prune-failed --hours=336, deletescipi_jobsrows older than 14 days that arecompletedorfailed(running/pending are preserved), and runsPRAGMA wal_checkpoint(TRUNCATE)to reclaim WAL space.lib/migrations/4.5.1.sh— retrofits installed servers: lays down the two cron files, setsSESSION_DRIVER=arrayin.env, prunes accumulatedcipi-job-logs/*.logolder than 14 days, runs an immediatecipi_jobs+queue:prune-failed+ WAL truncate so operators see the benefit without waiting for 04:15, and reloadscron. Idempotent.- Logrotate for the maintenance log —
/etc/logrotate.d/cipi-api-maintainkeeps/var/log/cipi-api-maintain.logbounded (weekly, 8 rotations,copytruncate).
Changed
SESSION_DRIVER=arrayis now forced in/opt/cipi/api/.envon install/update/upgrade/migration (the panel is token-only; persistent sessions only added disk thrash).api_setup/api_update/api_upgradeall call_api_setup_cronand_api_ensure_session_driver_envnow, so any path through the API installer leaves the cron + env in the correct state.