Aplicativos
cipi app create
cipi app create suporta dois tipos de aplicativos: Laravel (padrão) e
Personalizado (--custom). Laravel aplicativos obtêm um ambiente totalmente isolado:
Usuário Linux, conjunto PHP-FPM ou Laravel Octane (FrankenPHP) desde
v5.0, Nginx vhost, banco de dados (MariaDB por padrão; opcional PostgreSQL desde
v4.8.0), trabalhador Supervisor, entrada crontab, versões com tempo de inatividade zero do Deployer, SSH
implantar chave e compilar automaticamente .env. Aplicativos personalizados são mais simples – veja
aplicativos personalizados para obter detalhes.
Aplicativo Laravel (padrão — PHP-FPM)
$ cipi app create
Laravel Octane (FrankenPHP)
$ cipi app create --octane $ cipi app create --octane=frankenphp # explicit (same as --octane)
Veja Laravel Octane para requisitos, conversão e como o vhost difere do FPM.
Não interativo (sinalizadores)
$ cipi app create \ --user=myapp \ --domain=myapp.com \ --repository=git@github.com:you/myapp.git \ --branch=main \ --php=8.5 # Laravel Octane (FrankenPHP) — v5.0+ $ cipi app create --user=myapp --domain=myapp.com \ --repository=git@github.com:you/myapp.git --octane # optional PostgreSQL (v4.8.0+, after cipi db install pgsql) $ cipi app create --user=myapp --domain=myapp.com \ --repository=git@github.com:you/myapp.git --engine=pgsql
Aplicativos
Laravel Octane (FrankenPHP)
Desde v5.0, Laravel aplicativos podem servir HTTP via Laravel Octane com o FrankenPHP servidor em vez de por aplicativo Conjunto PHP-FPM. Os aplicativos Octane e FPM clássicos são executados lado a lado no mesmo servidor Cipi.
O que Cipi configura
- Aloca uma porta localhost em
8100–8999e lojasoctane/octane_portemapps.json - Nginx vhost usa
proxy_passpara Octane e exibe arquivos estáticos decurrent/public— nenhum pool FPM por aplicativo - Programa Supervisor
${app}-octaneao lado dos trabalhadores da fila - Modelo de implantador
laravel-octane.phpreinicia/recarrega Octane na implantação .env:OCTANE_SERVER=frankenphp,OCTANE_HTTPS=true
Requisitos do aplicativo
Seu repositório Laravel deve incluir laravel/octane e correr
php artisan octane:install --server=frankenphp. Octane começa após o primeiro
implantação bem-sucedida.
# create an Octane app $ cipi app create --user=myapp --domain=myapp.com \ --repository=git@github.com:you/myapp.git --octane # convert an existing FPM app → Octane (or the reverse) $ cipi app convert myapp --to=octane $ cipi app convert myapp --to=fpm # tune Octane workers (also see app limits) $ cipi app limits myapp --octane-workers=4
cipi app convert --to=octane|fpm reescreve o pool /vhost/Supervisor/Deployer
modelo / .enve reaplica SSL quando um certificado já está presente.
cipi worker ou
Horizon — Octane lida apenas com HTTP. Emparelhar com
Reverb para WebSockets.cipi app create --custom
Cria um aplicativo personalizado com implantação clássica (sem tempo de inatividade zero): o código é implantado em
htdocs - não current/shared links simbólicos. Ideal para sites estáticos,
SPAs (Vue, React, Svelte), WordPress, outro CMS ou qualquer projeto ou estrutura não Laravel PHP.
Durante a criação você escolhe apenas a raiz do documento (padrão /, ou por ex. www,
dist, public). Nginx está pré-configurado com index index.html
index.php, try_files $uri $uri/ /index.php?$argse
error_page 404 /404.html — não há prompts para try_files ou ponto de entrada.
Git opcional (somente SFTP)
O repositório Git é opcional para aplicativos personalizados.
Laravel os aplicativos ainda exigem um repositório. Se você pular o repositório para um personalizado
aplicativo,
Cipi cria /home/<app>/htdocs com um espaço reservado index.html e
faz
não configure uma chave de implantação ou webhook — você carrega arquivos com SFTP (ou SCP/rsync)
para
~/htdocs como o usuário do aplicativo. A saída de integração explica isso “sem repo – apenas SFTP”
fluxo de trabalho. Se você fornecer um repositório, o comportamento permanecerá inalterado: use cipi deploy
<app> para puxar o código para htdocs.
O que está incluído e o que você adiciona
Aplicativos personalizados têm sem banco de dados, não .env, não cron e não
trabalhadores da fila. Quando um repositório é configurado, uma chave de implantação e (com configuração automática do Git) webhook são
mostrado; para aplicativos somente SFTP, eles são omitidos. O resumo pós-criação lista o acesso SSH e o próximo
passos em conformidade.
Se o seu aplicativo personalizado precisar de um banco de dados (por exemplo, WordPress, Drupal), crie um com
cipi db create --name=<app> após a implantação. Veja cipi banco de dados
para backup, restauração e gerenciamento de senhas.
Com Git — exemplo não interativo:
$ cipi app create --custom --user=mysite --domain=mysite.com \
--repository=git@github.com:you/mysite.git --docroot=dist
Somente SFTP — omitir --repository e --branch:
$ cipi app create --custom --user=mysite --domain=mysite.com --docroot=dist
Com um repositório, use cipi deploy <app> implantar; código é clonado em
/home/<app>/htdocs.
app list / app show / app edit / app delete
| Comando | Descrição |
|---|---|
| cipi lista de aplicativos | Listar todos os aplicativos com domínio, versão PHP e status ((suspended) quando
off-line) |
| cipi aplicativo mostra <aplicativo> | Detalhes completos: domínio, PHP, chave de implantação, trabalhadores, webhook, estado de suspensão. Para aplicativos personalizados: digite "Personalizado", docroot; webhook (e chave de implantação) omitido quando somente SFTP sem um repositório. |
| cipi edição do aplicativo <app> --php=8.5 | Versão PHP de troca a quente. Atualiza pool FPM, soquete Nginx, Supervisor, crontab, Deployer
configuração e .env - tempo de inatividade zero |
| cipi edição do aplicativo <app> --branch=develop | Alterar o branch de implantação |
| cipi edição do aplicativo <app> --domain=new.example.com | Renomeie o domínio primário (já que v4.6.2). Valida o formato e
exclusividade, move o antigo primário para aliases, regenera o Nginx vhost, atualiza
APP_URL, atualiza webhooks do Git quando configurados automaticamente e emite novamente
Let's Encrypt quando já existia um certificado |
| cipi edição do aplicativo <app> --repository=<SSH-URL> | Anexe ou altere o repositório Git (por exemplo, habilite a implantação em um aplicativo personalizado somente SFTP
criado sem --repository). Combinável com --branch,
--phpe --domain
|
| cipi edição do aplicativo <app> --node-build='npm ci && npm executar compilação' | Execute uma compilação do Node após Composer fornecedores em cada implantação (desde
v5.0). O implantador é executado
.deployer/node-build.sh (falha fechada; comando é validado). Limpar com
--no-node-build |
| cipi edição do aplicativo <app> --predeploy-snapshot | Habilite um dump do banco de dados antes de cada implantação (desde
v5.0). O mesmo comportamento de passar
--snapshot em cada cipi deploy. Veja
Pré-implantar snapshots de banco de dados |
| cipi conversão de aplicativo <app> --to=octane|fpm | Converter entre PHP-FPM e Laravel Octane (desde v5.0). Veja Laravel Octane |
| cipi ambiente do aplicativo <app> [--show|--get|--set|--unset] | Abra o aplicativo .env em nano ou gerenciar chaves
de forma não interativa, pois v5.0.3
(--show/--get/--set/--unset,
opcional --json). Sai com erro para aplicativos personalizados
(não .env). |
| cipi execução do aplicativo <app> <cmd> [args…] | Comando não interativo incluído na lista de permissões como usuário do aplicativo (desde
v5.0.3). Veja app run |
| cipi configuração de implantação do aplicativo <app> | Opções de receita do Structured Deployer (desde v5.0.3). Veja implantação-config |
| cipi aplicativo webhook recriar <app> [--rotate-secret] | Recrie a implantação GitHub/GitLab webhook; rotação secreta opcional
atualizações CIPI_WEBHOOK_TOKEN (desde
v5.0.6). DESCANSO:POST /api/apps/{name}/webhook/recreate (PHP
1.15.0+). Desde 5.0.6,
app edit --repository= recria apenas a chave webhook/deploy
quando a URL do repositório realmente muda. |
| cipi senha de redefinição do aplicativo <app> | Gere novamente a senha SSH do usuário Linux do aplicativo. A nova senha é exibida em tela – salve-a imediatamente |
| cipi app reset-db-password <app> | Gere novamente a senha do banco de dados do aplicativo (MariaDB ou PostgreSQL por aplicativo
engine) e atualizar automaticamente DB_PASSWORD no aplicativo
.env. Sai com erro para aplicativos personalizados (sem banco de dados).
|
| cipi exclusão de aplicativo <aplicativo> | Remova permanentemente o aplicativo, o usuário, o banco de dados (se Laravel), Nginx vhost, pool FPM e Supervisor trabalhadores. Para aplicativos personalizados, ignora a eliminação do banco de dados (nenhum foi criado). Pede confirmação. |
| cipi exclusão de aplicativo <app> --force | O mesmo que excluir, mas ignora o prompt de confirmação — para scripts, o painel API e
cipi-cli
|
cipi app reverb
Desde v5.0, habilitar Laravel Reverb para WebSockets primários em um
Laravel aplicativo. Cipi aloca uma porta localhost em 9000–9099, adiciona o programa Supervisor
${app}-reverb, proxies Nginx /app para aquela porta e escreve
REVERB_* em .env.
$ cipi app reverb enable myapp $ cipi app reverb status myapp $ cipi app reverb disable myapp
cipi app clone
Desde v5.0, clone um aplicativo Laravel existente em um novo aplicativo de teste (ou revisão) com
seu próprio domínio. Conjuntos cloned_from em apps.json; faz não
copie webhook ou IDs git.
$ cipi app clone myapp --domain=staging.myapp.com $ cipi app clone myapp --domain=staging.myapp.com --name=myapp-stg --branch=develop --with-db $ cipi app clone myapp --domain=staging.myapp.com --no-db
cipi app limits
Desde v5.0, defina limites de recursos por aplicativo com limites rígidos aplicados por Cipi.
$ cipi app limits myapp --fpm-max-children=20 --memory-limit=256M $ cipi app limits myapp --octane-workers=4 --worker-procs=3 $ cipi app limits myapp # show current limits
app suspend / app unsuspend
Disponível desde v4.5.8. Coloque um aplicativo off-line sem excluí-lo – útil para faturamento
retenções, janelas de manutenção ou sites de teste que você deseja que sejam totalmente escuros. A suspensão troca o vhost Nginx por
uma estática HTTP 503 página veiculada de /var/www/cipi-suspended/.
$ cipi app suspend myapp # take offline (503 page) $ cipi app unsuspend myapp # restore normal vhost
| Comando | Descrição |
|---|---|
| cipi suspensão do aplicativo <app> | Conjuntos suspended: true em apps.json, reconstrói o vhost para
retorne 503 para todas as solicitações. Idempotente se já estiver suspenso. |
| cipi aplicativo cancela a suspensão <app> | Limpa o sinalizador, restaura o Laravel/vhost personalizado normal e reaplica os blocos SSL. Idempotente se já estiver online. |
Comportamento
- HTTPS incluído — certbot clona o vhost de suspensão no
:443bloquear, então HTTPS também mostra a página off-line - Let's Encrypt ainda funciona - o
/.well-known/acme-challenge/caminho permanece público para que os certificados possam ser emitidos ou renovados enquanto estiverem suspensos - Sobrevive à regeneração vhost — alterações de alias, PHP edições e SSL instalações respeite a bandeira suspensa
- Visível nas listagens —
cipi app listmarca aplicativos suspensos;cipi domainsacrescenta⏸ suspendedem cada linha
cipi basicauth
mostra um prompt de login, mas ainda executa seu aplicativo. app suspend para PHP completamente e
veicula uma página off-line estática – os visitantes nunca alcançam Laravel. Use suspender para “site fechado”;
autenticação básica para “visualização somente para convidados”.Também disponível através do RESTAPI
(POST /api/apps/{name}/suspend), cipi-cli
(apps suspend) e o Módulo WHMCS (Suspender /
Botões para cancelar a suspensão). Requer habilidade de token apps-suspend para acesso API.
cipi basicauth
Disponível desde v4.5.2. Proteja qualquer aplicativo — Laravel ou personalizado — atrás de um Nginx prompt de nome de usuário/senha. Útil para testar sites, ferramentas internas ou aplicativos que não estão prontos para tráfego público ainda.
| Comando | Descrição |
|---|---|
| cipi basicauth enable <aplicativo> [--user=NOME] [--password=PASS] | Ative a autenticação básica HTTP. As credenciais são geradas quando omitidas e mostradas uma vez tela – salve-os imediatamente |
| cipi desativação de autenticação básica <aplicativo> | Remova o prompt e limpe as credenciais armazenadas |
| cipi status de autenticação básica <aplicativo> | Mostrar se a autenticação básica está habilitada e o usuário configurado |
As credenciais são hash com openssl passwd -apr1 (não apache2-utils necessário)
e armazenado em /etc/nginx/cipi-basicauth/<app>.htpasswd; o estado habilitado reside em
apps.json. O auth_basic diretivas são injetadas por location
bloco, para que a proteção sobreviva à regeneração do vhost (alterações de alias, edições PHP) e seja clonada no
:443 bloquear por certbot — HTTPS também está coberto. Os desafios da ACME permanecem
público, portanto a emissão e renovação de certificados nunca são bloqueadas. A autenticação básica é removida automaticamente em
cipi app delete.
cipi auth, que gerencia o Composer
auth.json para repositórios de pacotes privados.Gerenciando variáveis ENV
Cada Laravel aplicativo tem um único .env arquivo morando em
/home/<app>/shared/.env. Aplicativos personalizados não têm .env.
Ele é criado e pré-preenchido por Cipi durante app create com o banco de dados
credenciais, APP_KEY, APP_URL, configurações de cache/sessão/fila e o
webhook token. O shared/ diretório é vinculado simbolicamente a cada versão, então o mesmo
.env está sempre ativo, independentemente da versão atual.
Edite interativamente via CLI
A maneira mais segura de alterar os valores ENV é através do próprio Cipi - ele abre o arquivo em nano como o aplicativo usuário, com as permissões corretas:
$ cipi app env myapp
Salvar com Ctrl+O então saia com Ctrl+X. As alterações entram em vigor imediatamente para novos solicitações — não é necessário reiniciar para a maioria dos valores. Se você alterar a conexão da fila ou o driver de cache, reinicie os trabalhadores:
$ cipi worker restart myapp
Sinalizadores não interativos (v5.0.3+)
Desde v5.0.3, scripts, o painel API e a web GUI podem gerenciar.env sem abrir um editor:
$ cipi app env myapp --show $ cipi app env myapp --show --json $ cipi app env myapp --get=APP_URL $ cipi app env myapp --set=APP_DEBUG=false $ cipi app env myapp --unset=LEGACY_KEY
DESCANSO: GET|PUT /api/apps/{name}/env (habilidade apps-env, PHP
1.14+). MCP: AppEnvShow, AppEnvUpdate.
Edite diretamente via SSH
Você também pode editar o arquivo diretamente via SSH como root ou como usuário do aplicativo:
# as root $ nano /home/myapp/shared/.env # or switch to the app user first $ su - myapp $ nano ~/shared/.env
Principais variáveis ENV definidas por Cipi
| Variável | Descrição | Definido por |
|---|---|---|
| APP_KEY | Chave de criptografia Laravel — gerada uma vez na criação do aplicativo | Cipi |
| APP_URL | Atualizado automaticamente por cipi ssl install |
Cipi |
| DB_CONNECTION | mysql para MariaDB (compatível com drop-in) ou pgsql quando o aplicativo
o mecanismo é PostgreSQL (v4.8.0+) |
Cipi |
| DB_DATABASE/DB_USERNAME/DB_PASSWORD | Credenciais geradas automaticamente para o banco de dados isolado do aplicativo | Cipi |
| CACHE_STORE | database — usa o banco de dados do aplicativo |
Cipi |
| SESSION_DRIVER | database |
Cipi |
| QUEUE_CONNECTION | database |
Cipi |
| CIPI_WEBHOOK_TOKEN | Segredo HMAC para validação do agente cipi webhook | Cipi |
| CIPI_APP_USER | Nome de usuário do Linux que possui este aplicativo | Cipi |
| CIPI_MCP | Ative ou desative o servidor MCP integrado em /cipi/mcp |
Usuário (true por padrão) |
cipi db password myapp (ou
cipi app reset-db-password myapp) - atualiza o mecanismo e o
.env atomicamente. Editá-los manualmente corre o risco de deixar os dois fora de sincronia.
Adicionando suas próprias variáveis
Adicione qualquer variável personalizada na parte inferior do arquivo, como faria normalmente em um projeto Laravel. Eles
são preservados nas implantações porque o .env mora em shared/ e é
nunca substituído pelo Deployer.
# your custom variables
STRIPE_KEY=sk_live_...
STRIPE_SECRET=sk_live_...
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailgun.org
cipi app run
Desde v5.0.3, execute um não interativo na lista de permissões comando como o aplicativo
usuário - útil em CLI, painel API e web GUI “Comandos do aplicativo”. Editores, pagers, shells e
REPLs estão bloqueados (nano, vim, less, bash,
tinker,…). Sinalizadores interativos (por exemplo tail -f, php -a) são
rejeitado.
$ cipi app run myapp composer install --no-dev $ cipi app run myapp npm ci $ cipi app run myapp ls -la shared $ cipi app run --commands # list allowed binaries $ cipi app run --commands --json
Os binários permitidos incluem composer, npm/npx/yarn/pnpm,
ls/ll, cat/head/tail, sistema de arquivos
ajudantes, arquivos, git, php, nodee find.
DESCANSO: POST /api/apps/{name}/run (trabalho assíncrono, capacidade apps-run) e
GET /api/run-commands (PHP 1.14+). MCP:
AppRun, AppRunCommands.
/usr/bin/env: '--': No such file or directory -
todos os comandos da lista de permissões (incluindo comandos do aplicativo GUI) falharam antes desse patch. Corre
cipi self-update.cipi app logs
Acompanhe os logs do aplicativo em tempo real. Os logs são rotacionados diariamente e mantidos por 14 dias. Por
padrão, todos os registros são mostrados, incluindo Laravel registros diários
(laravel-YYYY-MM-DD.log) de shared/storage/logs/.
$ cipi app logs myapp # all logs (incl. Laravel daily logs) $ cipi app logs myapp --type=nginx # Nginx access + error $ cipi app logs myapp --type=php # PHP-FPM errors $ cipi app logs myapp --type=worker # queue worker output $ cipi app logs myapp --type=deploy # deploy history $ cipi app logs myapp --type=laravel # Laravel application logs
app artisan & app tinker
Execute comandos Artisan e Tinker como o usuário do aplicativo com a versão PHP correta e
open_basedir contexto — exatamente como seriam executados durante uma implantação.
$ cipi app artisan myapp migrate:status $ cipi app artisan myapp queue:retry all $ cipi app artisan myapp db:seed --class=ProductionSeeder $ cipi app artisan myapp cache:clear $ cipi app tinker myapp
SSH como usuário do aplicativo
Cada aplicativo é executado sob seu próprio usuário Linux isolado. Às vezes você precisa trabalhar diretamente dentro desse ambiente do usuário - inspecione arquivos, execute scripts únicos ou depure algo que apenas se reproduz como o usuário correto.
SSH direto como usuário do aplicativo (recomendado)
Os usuários do aplicativo podem usar SSH diretamente no servidor com a senha gerada na criação do aplicativo:
# connect as the app user (password auth) $ ssh myapp@your-server-ip # you are directly inside the app user's shell myapp@server:~$ pwd /home/myapp myapp@server:~$ cd ~/current myapp@server:~$ ls
A senha é mostrada quando o aplicativo é criado (ou usa cipi app reset-password myapp para
regenerá-lo). Isso funciona para clientes SFTP, sessões remotas IDE e acesso de terminal.
Via cipi (caminho do administrador)
Se você já estiver conectado como cipi, você pode mudar diretamente para qualquer usuário do aplicativo:
$ ssh cipi@your-server-ip
cipi@server:~$ sudo su - myapp
myapp@server:~$ pwd
/home/myapp
Redefinir a senha do usuário do aplicativo
Se você precisar gerar novamente a senha de um usuário do aplicativo (por exemplo, para SSH direto ou SFTP), use:
$ cipi app reset-password myapp
A nova senha é exibida na tela – salve-a imediatamente.
Comandos úteis uma vez logado como usuário do aplicativo
# navigate to the active release myapp@server:~$ cd ~/current # run artisan directly with the correct PHP version myapp@server:~$ /usr/bin/php8.5 ~/current/artisan tinker # inspect the shared .env myapp@server:~$ cat ~/shared/.env # tail all logs myapp@server:~$ tail -f ~/logs/*.log # check active releases (ll is a built-in alias for ls -al) myapp@server:~$ ll ~/releases/
Cada usuário do aplicativo .bashrc define um prático ll='ls -al' apelido (desde
v4.5.5) para listagens de diretórios mais rápidas por SSH, junto com o
deploy e composer atalhos. Os aplicativos criados antes da versão 4.5.5 recebem o
ll alias automaticamente no próximo cipi self-update através do
4.5.5 migração.
open_basedir limites de restrição PHP para /home/myapp.
Isso é aplicado no nível PHP-FPM, não no nível do shell — você pode acessar qualquer arquivo do seu
o usuário shell pode ler ao trabalhar no terminal.