Get the document root right and most of the rest follows. Laravel serves from public/ and CakePHP from webroot/, and the fix is to point the domain's web root at that subdirectory in the control panel. The two workarounds people reach for are both worse: moving index.php into the project root exposes .env, and rewriting into public/ with .htaccess leaves the rest of the tree reachable by direct URL. If you have inherited a site set up either way, treat the credentials in .env as compromised and rotate them.
Composer works over SSH, and what trips it is memory rather than availability, since resolving a large dependency tree is expensive. Committing vendor/ and deploying it is a legitimate answer. Cron covers the scheduler: one entry running artisan schedule:run each minute is all Laravel needs.
Queues are where shared hosting actually stops. queue:work is a daemon, and a shared plan has no supervisor to restart it when it exits. Calling queue:work --stop-when-empty from cron approximates it, which is fine for email and poor for anything latency-sensitive. Redis is a managed cloud server feature here, not a shared-plan one.
Not for you if you need Horizon, Octane, WebSockets, a persistent queue worker or Redis. Those are the reasons to take a cloud server, and they are good ones.