Laravel · Deploy+

Alojamento para Laravel, com deploy em cada push.

PHP 8.3 a 8.5, Composer, Node para Vite, MySQL 8 e Redis, já preparados. Liga o repositório e cada push publica uma versão nova com as suas migrações, sem interrupções; se algo correr mal, volta à anterior em segundos.
tuapp.com produção

Deploy+v42 publicada

main · a91f3c2 · há 3 min

  • PHP 8.4 OPcache · Composer 2 ✓
  • MySQL 8 tuapp_prod · 214 MB ✓
  • Redis cache em memória ✓
  • Scheduler schedule:run · há 12 s
  • Filas default · 0 pendentes ✓

PHP 8.1 a 8.5

a versão que o seu Laravel pedir, por projeto

Deploy+ incluído

a partir do GitHub, GitLab, Bitbucket ou Gitea

Redis incluído

cache em todos os planos; persistente a partir do Avanza

Rollback em segundos

as últimas versões continuam no servidor

Requisitos

O que uma app Laravel precisa, sem montar servidor.

Os requisitos da documentação do Laravel, um a um, face ao que traz qualquer plano de alojamento da Hostsuar.
  • PHP 8.3 ou superior · Laravel 12: 8.2 Da 5.4 à 8.5, com a versão que quiser em cada projeto.
  • Extensões ctype, curl, dom, fileinfo, filter, hash, mbstring, openssl, pcre, pdo, session, tokenizer, xml Disponíveis no seletor de PHP, juntamente com intl, gd, redis ou imagick.
  • Dependências Composer 2 No terminal da sua conta e no script do Deploy+.
  • Assets Node e npm para Vite Node por NVM: o Deploy+ instala-o antes se o seu script o usar.
  • Base de dados MySQL 8, PostgreSQL ou SQLite MySQL 8, e o Deploy+ cria a base de dados e escreve o .env ao ligar o repositório.
  • Cache, filas e sessões database por omissão desde o Laravel 11 Filas e sessões no seu MySQL ou, a partir do Avanza, em Redis persistente; para a cache, Redis incluído em todos os planos.
  • Scheduler cron a cada minuto com schedule:run O Deploy+ deixa-o no seu cron ao publicar, com o PHP da sua versão.
  • Implementação Git e SSH Deploy+ com webhook assinado; SSH e Git na sua conta, ao ativá-lo.

Requisitos segundo a documentação do Laravel.

Deploy+

A última etapa, resolvida.

O código já o tem no Git. O Deploy+ encarrega-se de o levar para produção como o faria num servidor próprio, com o perfil de Laravel já preparado.

Implementação

Um push, uma versão nova, zero segundos de interrupção

O Deploy+ clona o commit para a sua própria pasta, executa o Composer, o build do Vite, as migrações e php artisan optimize e, só se tudo correr bem, muda a ligação que a publica. Se um passo falhar, a versão anterior continua online.
webhook assinado perfil Laravel sem interrupções

Deploy #42 · main

perfil Laravel

› git clone a91f3c2 1,8 s

› composer install --no-dev --optimize-autoloader 12,4 s

› npm ci && npm run build vite 21,0 s

› php artisan migrate --force 0,9 s

› php artisan optimize config · rotas · vistas 1,2 s

releases/42 → current 0 s de interrupção

O perfil

Sabe onde vão public, storage e o .env

Publica a partir de public, deixa storage e o .env fora do código para que sobrevivam a cada versão e, se o assinalar, cria a base de dados e escreve a ligação.

.env + storage

partilhados entre versões; o .env edita-o a partir do painel

Partilhado entre versões

~/deploy/tuapp/

shared/ → releases/20260905-1012/

.enveditável

storage/do perfil

public/uploads/sua

Ligadas em cada nova versão; um rollback também não lhes mexe.

Scheduler e filas

O scheduler por cron, as filas no momento

schedule:run a cada minuto com o PHP da sua app. A partir do Avanza, o seu worker de filas ou o Horizon ficam a correr como processos persistentes e voltam a arrancar sozinhos se caírem. Em qualquer plano, o scheduler pode lançar um worker que processa a fila e para ao esvaziá-la.
schedule:run queue:work Horizon processos persistentes

Uma linha de cron

a cada minuto

* * * * * php ~/tuapp/current/artisan schedule:run

routes/console.php

  • queue:work --stop-when-empty a cada minuto
  • emails:resumen-diario 08:00
  • model:prune 02:00
  • próxima execução

Rollback

Voltar atrás demora segundos

O histórico guarda cada implementação com o seu commit, quem a lançou e o registo completo. As últimas versões continuam no servidor: voltar a uma não clona nada.

5 versões

guardadas por defeito; você decide quantas

Histórico de implementações

5 versões guardadas
DataAcionadorTempo
hoje 10:12 · a91f3c2 Push 38 s
ontem 18:30 · e07b9d4 Manual 41 s
ontem 11:05 · 4c1d8e7 Rollback 2 s
seg 09:48 · 4c1d8e7 Push 35 s

ontem 18:30 · e07b9d4

a versão continua no servidor

Voltar a esta versão

O script

O script que recomendamos para Laravel.

Parte do que o perfil Laravel propõe e acrescenta-lhe as migrações. Corre na versão nova antes de a publicar: se um comando falhar, não é publicada. Depois, o Deploy+ reinicia os seus workers persistentes com o código novo.

npm ci && npm run build
só se a sua app compilar assets com Vite; o Deploy+ instala o Node antes
migrate --force
as migrações correm antes de publicar, contra a base de dados de produção
optimize
coloca em cache a configuração, as rotas, as vistas e os eventos da versão nova; os workers persistentes são reiniciados pelo Deploy+ ao publicá-la
Script de implementação · perfil Laravel
  1. 1composer install --no-dev --optimize-autoloader --no-interaction
  2. 2npm ci && npm run build
  3. 3php artisan migrate --force
  4. 4php artisan optimize
Variáveis, comandos bloqueados e Node, no guia do Deploy+

Forge, VPS ou alojamento

Precisa de um servidor para o seu Laravel?

Para a maioria das apps, não. O que muda é quem administra o servidor e que processos pode ter ativos.
  • O servidor

    Um VPS com Forge
    Administra-o você; o Forge configura-o
    Um VPS gerido manualmente
    Monta-o e administra-o você
    Hostsuar
    Administramo-lo nós
  • Patches e segurança

    Um VPS com Forge
    A seu cargo
    Um VPS gerido manualmente
    A seu cargo
    Hostsuar
    A nosso cargo, com antivírus e isolamento
  • Implementação

    Um VPS com Forge
    Forge, com o seu script
    Um VPS gerido manualmente
    O seu próprio script
    Hostsuar
    Deploy+ incluído, com rollback
  • Cópias

    Um VPS com Forge
    As que configurar
    Um VPS gerido manualmente
    As que configurar
    Hostsuar
    80 pontos de restauro incluídos
  • Filas e Horizon

    Um VPS com Forge
    Sim
    Um VPS gerido manualmente
    Sim
    Hostsuar
    Sim, a correr a partir do Avanza
  • WebSockets (Reverb)

    Um VPS com Forge
    Sim
    Um VPS gerido manualmente
    Sim
    Hostsuar
    Com um serviço compatível com Pusher; ajudamo-lo a ligá-lo
  • Octane

    Um VPS com Forge
    Sim
    Um VPS gerido manualmente
    Sim
    Hostsuar
    Não: o PHP é servido pelo LiteSpeed
  • Suporte

    Um VPS com Forge
    O da ferramenta
    Um VPS gerido manualmente
    O seu
    Hostsuar
    Técnicos que trabalham com Laravel

O que não encaixa é o que precisa do seu próprio servidor à frente: o Octane, porque aqui o PHP é servido pelo LiteSpeed, e o Reverb, um servidor que escuta na sua própria porta, algo que não suportamos. Para o tempo real, o Laravel comunica de origem com o Pusher e serviços compatíveis. Workers de filas e o Horizon ficam a correr como processos persistentes a partir do Avanza: administrar um servidor para isso é trabalho desnecessário.

Dúvidas

Laravel num alojamento, sem letras pequenas.

Posso usar filas do Laravel num alojamento?

Sim, de duas formas. A partir do plano Avanza, um queue:work ou o Horizon fica a correr como processo persistente: processa cada trabalho no momento e, se cair, volta a arrancar sozinho. O Avanza admite 3 processos, o Max 5 e o Elastic 8. Em qualquer plano, o scheduler pode lançar a cada minuto um queue:work --stop-when-empty que processa o pendente e termina. Tudo conta dentro dos recursos do seu plano.

O Horizon, o Reverb e o Octane funcionam?

O Horizon, sim, a partir do plano Avanza: deixa-o a correr como processo persistente sobre um Redis persistente, ambos a partir da área de cliente. O Reverb, não no próprio alojamento: é um servidor que escuta na sua própria porta, e não damos suporte a programas desse tipo. Para os WebSockets, liga a sua app a um serviço compatível com Pusher, como o Pusher Channels ou o Ably, que o Laravel suporta de origem, e ajudamo-lo a ligá-lo. O Octane, não: aqui o PHP é servido pelo LiteSpeed, e o Octane precisa do seu próprio servidor de aplicação (Swoole, RoadRunner ou FrankenPHP). Livewire, Inertia, Filament, Sanctum, Socialite ou Scout funcionam sem nada de especial.

De que versão de PHP preciso?

O Laravel 13 pede PHP 8.3 ou superior e o Laravel 12, PHP 8.2. Tem da 5.4 à 8.5 e escolhe-a por domínio ou por pasta, por isso uma app antiga e uma nova convivem na mesma conta. Num site publicado com Deploy+, a versão é definida no .htaccess do seu repositório, para que viaje com o código em cada implementação.

Posso ter um ambiente de testes?

Sim. Ligue o mesmo repositório duas vezes: o ramo main ao domínio e, por exemplo, develop a staging.suaapp.pt, cada um com o seu .env e a sua base de dados. Cada push para um ramo implementa só no seu sítio.

Tenho SSH e Composer?

Sim. Ativa o acesso SSH a partir das opções do serviço na área de cliente e, além disso, tem o terminal integrado do cPanel, com Git e Composer. E a partir do Deploy+ pode lançar um comando de artisan sobre a versão publicada sem abrir nenhum terminal.

E se vier do Forge ou de outro alojamento?

Liga o mesmo repositório e o Deploy+ implementa-o da mesma forma; o que é preciso trazer é a base de dados e o que guardar em storage. Se vier de outro fornecedor, ajudamo-lo com a transferência.

Guias relacionados na nossa documentação

O seu próximo push, em produção.

Qualquer plano traz Deploy+, Redis e o PHP que a sua versão de Laravel pede. Foi montado por pessoas que trabalham com Laravel todos os dias; se vier de outro fornecedor, ajudamo-lo a trazê-lo. Planos desde 4,10 €/mês.