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)

festa
$ cipi app create

Laravel Octane (FrankenPHP)

festa
$ 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)

festa
$ 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
--userNome de usuário do Linux para o aplicativo. Deve ser único, minúsculas, alfanuméricas.
--domainDomínio primário (por ex. myapp.com). Usado para Nginx vhost e APP_URL.
--repositoryURL SSH Git (por exemplo, git@github.com:you/repo.git). Deve ser SSH, não HTTPS.
--branchFilial para implantar. O padrão é main.
--phpPHP versão deste aplicativo (por exemplo, 8.5). O padrão é PHP 8.5. Deve ser uma versão instalada - apenas 8.3, 8.4 e 8.5 são aceitos desde a v4.5.4 (o Deployer 8 requer PHP ≥ 8.3).
--octane / --octane=frankenphpServir HTTP através de Laravel Octane (FrankenPHP) em vez de PHP-FPM (já que v5.0). Laravel apenas aplicativos — rejeitados com --custom. Veja Laravel Octane.
--engineMecanismo de banco de dados: mariadb (padrão) ou pgsql (desde v4.8.0; requer cipi db install pgsql). Prompts interativos de criação quando PostgreSQL for instalado. Grava correspondência .env / connection URL.
Se um token GitHub ou GitLab estiver configurado, Cipi adiciona automaticamente a chave de implantação SSH e cria o webhook no repositório — nenhuma etapa manual é necessária. Veja Configuração automática do Git para obter instruções de configuração e opções de fallback quando a configuração automática não estiver disponível.

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–8999 e lojas octane / octane_port em apps.json
  • Nginx vhost usa proxy_pass para Octane e exibe arquivos estáticos de current/publicnenhum pool FPM por aplicativo
  • Programa Supervisor ${app}-octane ao lado dos trabalhadores da fila
  • Modelo de implantador laravel-octane.php reinicia/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.

festa
# 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.

Octane dica: manter a fila de longa duração funcionando 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:

festa
$ cipi app create --custom --user=mysite --domain=mysite.com \
    --repository=git@github.com:you/mysite.git --docroot=dist

Somente SFTP — omitir --repository e --branch:

festa
$ 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.

festa
$ 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.

festa
$ 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
--domainObrigatório. Domínio principal do novo aplicativo.
--nameNome de usuário Linux opcional para o clone.
--branchImplantar ramificação para o clone (o padrão é branch do aplicativo de origem).
--with-dbCrie um novo banco de dados para o clonar.
--no-dbIgnorar o provisionamento de banco de dados para o clonar.

cipi app limits

Desde v5.0, defina limites de recursos por aplicativo com limites rígidos aplicados por Cipi.

festa
$ 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
--fpm-max-childrenPHP-FPM pm.max_children para aplicativos FPM.
--memory-limitPHP memory_limit.
--octane-workersOctane contagem de trabalhadores para FrankenPHP aplicativos.
--worker-procsSupervisor processo de trabalho da fila contar.

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/.

festa
$ 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 :443 bloquear, 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 listagenscipi app list marca aplicativos suspensos; cipi domains acrescenta ⏸ suspended em cada linha
Suspender versus autenticação básica: 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.

Isto é distinto de 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:

festa
$ 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:

festa
$ 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:

festa
$ 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:

festa
# 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)
Não altere as credenciais do banco de dados manualmente. Se você precisar regenerar o banco de dados uso de senha 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.

ambiente
# 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.

festa
$ 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.

v5.0.4+ fixo /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/.

festa
$ 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
--type=nginxNginx registros de acesso e erros
--type=phpPHP-Registro de erros do FPM
--type=workerSupervisor / saída do trabalhador da fila
--type=deploySaída do implantador — histórico completo de implantação com carimbos de data/hora
--type=laravelLaravel registros do aplicativo de shared/storage/logs/ (rotação diária laravel-YYYY-MM-DD.log)

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.

festa
$ 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:

festa
# 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:

festa
$ 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:

festa
$ cipi app reset-password myapp

A nova senha é exibida na tela – salve-a imediatamente.

Comandos úteis uma vez logado como usuário do aplicativo

festa
# 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.

O usuário do aplicativo 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.