composer.json e serve o site com o servidor do PHP, pela pasta public quando ela existe (Laravel, Slim) ou pela raiz do projeto.
public/index.php
composer.json
composer.json na raiz sobe sem cube.json: a Cube entende que é um site PHP. Para escolher a versão, a pasta servida ou a memória, use o cube.json:
cube.json
Como funciona
- Dependências:
composer install --no-devquando ocomposer.jsonou ocomposer.lockmudam. A pastavendorfica no projeto e continua lá num envio novo sem ela; o cache dos pacotes fica na pasta do projeto e conta no espaço dele. Semcomposer.json, nada é instalado (o .zip com a pastavendorpronta sobe como veio). - Site sem comando: a Cube serve a pasta
publicquando ela existe e a raiz quando não existe. Orootdocube.jsonescolhe outra pasta ("root": "web"). Uma rota que não é arquivo vai aoindex.phpda pasta, como o Laravel e o Slim esperam. - O que nunca é servido: o
.enve tudo o que começa com ponto (.git,.htaccess), ocube.json, ocomposer.jsone ocomposer.lock, e a pastavendordo topo. Um caminho com..(também escrito como%2e%2e) e um link para fora da pasta também dão 404. - Comando próprio: com
command, ele vale no lugar do servidor da Cube. O comando do servidor aparece em Configurações › Geral comocube-php-server; para outra pasta,cube-php-server web. - Extensões:
pdo_mysql,pdo_pgsql,mysqli,redis,intl,gd,zip,bcmath,pcntlesocketsjá vêm instaladas. O PHP roda com ophp.inide produção: um erro vai para os logs, nunca para quem visita.
Laravel
Com a pastapublic do Laravel, o site sobe sem comando. As variáveis do .env (APP_KEY, APP_ENV=production, DB_*) vão em Variáveis de ambiente:
cube.json
artisan serve no comando:
cube.json
public/build já pronta (npm run build antes de compactar).
Bot ou worker
Um bot (Discord, Telegram) ou um worker de fila roda o arquivo com ophp. Use "type": "bot":
cube.json
Versões e memória
- PHP 8.4 (a padrão) e PHP 8.5. A
require.phpdocomposer.jsontem que aceitar a versão escolhida, senão ocomposer installpara com o erro nos logs da instalação. - A memória segue o mínimo do tipo no plano (site 512 MB; bot 256 MB nos pagos e 100 MB no Free). O Free não tem sites: um .zip de site PHP no Free é recusado com
site_not_allowed.
Problemas comuns
Your requirements could not be resolved to an installable set of packages: um pacote pede outra versão do PHP ou de outro pacote. Confira arequire.phpe a versão escolhida no projeto.- A página diz “Página não encontrada” no
/: a pasta servida não temindex.phpnemindex.html. Confira oroot(ou a pastapublic). Failed opening required '.../vendor/autoload.php': ocomposer.jsonnão está na raiz do .zip, então nada foi instalado. Mova-o para a raiz e envie de novo.

