Instalando Cipi

Cipi instala uma pilha de produção completa pronta para Laravel em Ubuntu 24.04 ou 26.04 com um único comando. O instalador leva cerca de 10 minutos e configura Nginx, MariaDB, PHP, Valkey (opcional PostgreSQL via cipi db install pgsql após a instalação), Supervisor, Fail2ban, UFW, Certbot, Deployer e o cipi CLI em si.

Do zero à produção em três etapas

festa
# 1 — on a fresh Ubuntu 24.04 / 26.04 VPS, over SSH, as a user with sudo
wget -O - https://cipi.sh/setup.sh | bash

# 2 — create the app (Laravel by default)
cipi app create

# 3 — deploy it and put it behind HTTPS
cipi deploy myapp
cipi ssl install myapp

Esse é todo o caminho. Primeiro crie uma chave SSH no seu computador (abaixo) e execute o instalador no servidor – será solicitado que você cole essa chave pública. Tudo depois disso é explicado em o resto desta página.

Execute o instalador no servidor, não em sua própria máquina. SSH para o novo VPS primeiro e execute-o lá, como um usuário com sudo. Cipi abastece toda a caixa — ela não é algo que você aponta para um host remoto do seu laptop.

Crie uma chave SSH no seu computador

Faça isso no seu laptop ou estação de trabalho, não em VPS. O instalador precisa do público metade da chave para que ele possa bloquear o servidor: após a configuração, você usa SSH como o cipi usuário com esta chave. O login SSH raiz está desativado. Nunca cole o privado chave.

Veja se você já tem um:

festa
ls ~/.ssh/*.pub

Se id_ed25519.pub ou id_rsa.pub está listado, você já tem uma chave - pule geração e copie o arquivo público com o comando abaixo. Se a pasta estiver vazia ou o comando erros, crie uma nova chave Ed25519:

festa
ssh-keygen -t ed25519 -C "you@example.com"

Pressione Enter para aceitar o caminho padrão (~/.ssh/id_ed25519). Defina uma senha se você deseja (recomendado). No macOS e no Linux, execute-o no Terminal; no Windows, use PowerShell ou WSL.

Mostre a chave pública — esta é a única linha que você colará quando o instalador perguntar:

festa
cat ~/.ssh/id_ed25519.pub

Parece ssh-ed25519 AAAA… comment. Copie a linha inteira:

  • macOS: pbcopy < ~/.ssh/id_ed25519.pub
  • Linux: xclip -sel clip < ~/.ssh/id_ed25519.pub (ou copie do terminais)
  • Windows (PowerShell): Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
Apenas o .pub arquivo é público. O arquivo nomeado id_ed25519 (não extensão) é o privado chave – mantenha-a no seu computador e nunca cole no instalador ou envie-o para o servidor.

Execute o instalador no servidor

SSH no novo Ubuntu VPS como um usuário com sudo, então:

festa
wget -O - https://cipi.sh/setup.sh | bash

O assistente pede a chave pública antes de qualquer pacote ser instalado. Cole a linha você copiou acima (formatos aceitos: ssh-ed25519, ssh-rsa, ecdsa). Cipi limpa comentários, retornos de carro e espaços em branco extras e, em seguida, cria um dedicado cipi Usuário Linux para acesso SSH de administrador e fortalece o SSH: login root desativado, cipi somente chave pública (grupo cipi-ssh), usuários de aplicativos (grupo cipi-apps) pode se conectar com senha. As tentativas de login são limitadas a 3 com um Período de carência de 20 segundos; O encaminhamento X11 está desabilitado.

O instalador também gera um senha raiz aleatória de 40 caracteres, armazena-o em /etc/cipi/server.jsone o exibe no resumo da instalação. É não uma senha SSH: o login SSH root está desabilitado. É o que você digita quando, já logado como cipi usuário com sua chave, você executa su root. Mantenha-o em uma senha gerente.

Instalação não interativa

Para configurações automatizadas, passe sua chave pública SSH por meio do SSH_PUBKEYvariável de ambiente para pular o prompt interativo:

festa
SSH_PUBKEY="ssh-ed25519 AAAA..." wget -O - https://cipi.sh/setup.sh | bash

AWS (login root desabilitado por padrão)

festa
$ ssh ubuntu@your-server-ip
$ sudo -s
$ wget -O - https://cipi.sh/setup.sh | bash

Ao final da instalação você verá uma tela de resumo com os detalhes de acesso SSH, o senha root gerada automaticamente e a senha root MariaDB. Salve-os imediatamente - eles são mostrados apenas uma vez. As credenciais são armazenadas em /etc/cipi/server.json, que — como todos os arquivos de configuração Cipi — é criptografado em repouso usando AES-256-CBC através do built-in Cofre sistema. Credenciais, chaves SSH, .env arquivos e dumps de banco de dados são protegidos tanto em disco e durante a transferência (via Sincronizar arquivos criptografados). Cipi também impõe Retenção de registros compatível com GDPR com políticas de rotação automática para aplicação, segurança e HTTP logs — consulte Retenção de registros para obter detalhes.

Salve os detalhes de acesso SSH, senha root e senha root MariaDB. Mostrado apenas uma vez durante instalação. As credenciais são armazenadas criptografadas em /etc/cipi/server.json.

Acesso pós-instalação

Após a instalação, acesso de administrador usa autenticação de chave pública como cipi usuário (o login root está desabilitado). Usuários de aplicativos pode usar SSH diretamente com ssh myapp@server-ip e a senha gerada na criação do aplicativo. Para correr cipi comandos ou executar qualquer tarefa administrativa, conecte-se como cipi e então aumente:

festa
# 1. connect to the server (key-based auth only)
$ ssh cipi@your-server-ip

# 2. escalate to root to run cipi commands
cipi@server:~$ sudo -s

# 3. now you can use all cipi commands
root@server:~# cipi status
root@server:~# cipi app list

# 4. to work as an app user, switch with su
root@server:~# su - myapp

Requisitos

  • Ubuntu 24.04 ou 26.04 LTS (apenas novas instalações; versões provisórias não são suportadas)
  • Acesso root (ou sudo -s na AWS)
  • Portas 22, 80 e 443 abertas
  • Um servidor limpo — não instale Cipi em um servidor com uma pilha web existente
  • A servidor público voltado para a Internet com um roteável IPv4 público endereço — VPS somente NAT, redes domésticas atrás de um roteador e hosts não acessíveis a internet não é suportada
  • Virtualização KVM completa ou bare-metal — não OpenVZ, contêineres LXC ou kernel compartilhado ambientes (incluindo Docker local, Docker Desktop, OrbStack, Colima, WSL e similares tempos de execução do contêiner de desktop)
Cipi não é executado localmente. Não é compatível com dockerizado local ambientes. O instalador pode parecer bem-sucedido em uma VM ou contêiner de laptop, mas SSL provisionamento, roteamento de domínio e fluxos de trabalho de produção não funcionarão sem um público real servidor. Veja Por que não local? para a explicação completa.

Cipi foi testado e funciona em: DigitalOcean, AWS EC2, Vultr, Linode/Akamai, Hetzner, Google Cloud, OVH, Scaleway e qualquer host KVM ou bare-metal rodando Ubuntu com IP público.

Início rápido

1. Crie seu primeiro aplicativo

O assistente interativo solicita um nome de usuário, domínio primário, URL do repositório Git (formato SSH) e filial quando aplicável, e versão PHP. Laravel aplicativos sempre exigem um repositório; para personalizado apps você pode deixar o repositório vazio para hospedar o site somente via SFTP — vejaaplicativos personalizados. Desde v5.0, Laravel aplicativos podem usar clássico PHP-FPM ou Laravel Octane (FrankenPHP) com --octane - veja Laravel Octane.

festa
$ cipi app create
$ cipi app create --octane   # Laravel Octane (FrankenPHP)

Ou passe todos os sinalizadores diretamente para pular o modo interativo:

festa
$ cipi app create \
    --user=myapp \
    --domain=myapp.com \
    --repository=git@github.com:you/myapp.git \
    --branch=main \
    --php=8.5

No final, Cipi imprime um resumo de credenciais —salve-o, mostrado apenas uma vez - incluindo o endereço IP público do servidor (para configuração DNS), a chave de implantação SSH, credenciais do banco de dados, um pronto para usar mariadb+ssh:// URL de conexão para GUI clientes (TablePlus, DBeaver, Sequel Pro), URL webhook e token webhook.

2. Adicione a chave de implantação ao seu provedor Git

Se você configurou um token GitHub ou GitLab via cipi git, esta etapa é automático — Cipi adiciona a chave de implantação e cria o webhook para você. Veja Configuração automática do Git para obter detalhes.

Caso contrário, copie o ssh-ed25519 ... chave mostrada após a criação do aplicativo e adicione-a como um Implante a chave em seu repositório:

  • GitHub: Repositório → Configurações → Chaves de implantação → Adicionar chave de implantação
  • GitLab: Repositório → Configurações → Repositório → Implantar chaves

3. Prepare seu projeto Laravel

Cipi usa o driver de banco de dados para cache, sessões e filas. Execute-os uma vez dentro do seu Laravel projete, confirme e envie as migrações geradas:

festa
$ php artisan cache:table
$ php artisan session:table
$ php artisan queue:table
$ php artisan migrate
Cipi é executado automaticamente artisan migrate --force em cada implantação. A cache, sessão e tabelas de filas serão criadas na primeira implantação se você confirmar as migrações.

4. Implantar

festa
$ cipi deploy myapp

O Deployer clona seu repositório em um novo releases/N/ diretório, executa composer install --no-dev, links .env e storage/, corre migrações, corridasartisan optimize, cria storage:link, troca o current link simbólico atomicamente e reinicia os trabalhadores da fila. Tempo de inatividade zero.

5. Instale SSL

festa
$ cipi ssl install myapp

O Certbot provisiona um certificado Let's Encrypt, configura Nginx para HTTPS e atualiza APP_URL em .env. Seu aplicativo Laravel já está ativo https://myapp.com.

Pilha de tecnologia

Cipi traz uma pilha completa e pronta para produção para o seu servidor Ubuntu. Aqui está tudo o que acontece instalado e configurado:

Componente Função
Ubuntu SO básico (24.04 ou 26.04 LTS)
Nginx Servidor Web, proxy reverso, terminação SSL. Desde v4.5.9, linha principal nginx de nginx.org (1.29.8+) com max_headers 1000 para endurecimento HTTP/2 — não o Ubuntu pacote de arquivo
PHP-FPM Tempo de execução padrão PHP por aplicativo (8,3–8,5; ondrej/php, packages.sury.org ou Ubuntu main por lançamento)
Laravel Octane Servidor FrankenPHP HTTP opcional por aplicativo Laravel (desde v5.0) — cipi app create --octane; Aplicativos FPM e Octane coexistem no mesmo servidor
MariaDB Banco de dados relacional padrão (substituição MySQL, porta 3306). Opcional PostgreSQL através cipi db install pgsql (porta 5432) desde v4.8.0
Valkey Armazenamento na memória para cache, sessões, filas, transmissão (fork Redis licenciado por BSD)
Supervisor Gerenciador de processos para Laravel trabalhadores de fila, Octane, Horizon e Reverb
Implantador Ferramenta de implantação com tempo de inatividade zero
Certbot Let's Encrypt SSL certificados
UFW Firewall (portas 22, 80, 443)
Fail2ban Proteção progressiva de força bruta com prisão reincidente
atualizações autônomas Patches de segurança automáticos
Composer PHP gerenciador de dependências
cipi CLI Gerenciamento e orquestração de servidores

O que cada aplicativo recebe

Cada aplicativo é executado em um ambiente totalmente isolado. Laravel é o padrão – tempo de inatividade zero implanta, seu próprio banco de dados, trabalhadores, agendador e webhook - opcionalmente servido por Octane (FrankenPHP) em vez de PHP-FPM. --custom é para sites simples (WordPress, estático + PHP): uma implantação clássica em htdocs, um docroot configurável, não banco de dados, não .env, sem cron, sem trabalhadores.

Área O que Cipi oferece a você
Servidor web Nginx com um host virtual por aplicativo — PHP-FPM ou Octane via proxy_pass, sintonizado em Laravel
PHP e Composer Selecionável por aplicativo, hot-swap; configurações gerenciadas com cipi ini em todo o FPM e CLI
Banco de dados MariaDB por padrão, opcional PostgreSQL — um banco de dados dedicado e usuário por Laravel aplicativo
Trabalhadores da fila Supervisor pools por aplicativo — queue:work ou Horizon; opcional Reverb para WebSockets
Implantações Deployer — link simbólico atômico, 5 versões, rollback, construção de Node opcional; clone clássico em htdocs para aplicativos personalizados
SSL Let's Encrypt via Certbot — HTTP-01 por padrão, opcional DNS-01 (Cloudflare) com curingas
Segurança Fail2ban + UFW, um usuário Linux dedicado, seu próprio processo FPM/Octane e chave SSH por aplicativo
Verificações de saúde HTTP sondas a cada 5 minutos, mais um verificação pós-implantação com opcional reversão automática de uma versão quebrada
Cópias de segurança Perfis de backup - o que, com que frequência, onde, por quanto tempo — compatível com S3 / S3 / local, com criptografia do lado do cliente
Configuração Opcional por projeto cipi.yml para aliases, bancos de dados, trabalhadores, verificação de integridade e backups

Estrutura do aplicativo

Quando você corre cipi app create, Cipi cria um ambiente totalmente isolado para o aplicativo. Aqui está tudo o que é configurado:

/home/myapp/ ← usuário Linux isolado (chmod 750)
├── .ssh/
│   ├── id_ed25519 ← implantar chave (privada)
│   └── id_ed25519.pub ← chave de implantação (pública — adicionada ao Git)
├── .deployer/
│   └── deploy.php ← Configuração do implantador (gerada automaticamente)
├── atual -> releases/3/ ← link simbólico para lançamento ativo
├── releases/
│   ├── 1/
│   ├── 2/
│   └── 3/ ← último lançamento (últimos 5 mantidos)
├── shared/
│   ├── .env ← compilado automaticamente por Cipi
│   └── storage/ ← armazenamento persistente
└── logs/
    ├── nginx-access.log
    ├── nginx-error.log
    ├── php-fpm-error.log
    ├── worker-default.log
    └── deploy.log

Além do diretório inicial, Cipi cria estes arquivos de sistema:

PHP-FPM pool: /etc/php/8.5/fpm/pool.d/meu aplicativo.conf (user=myapp; omitido para Octane aplicativos)
Octane (v5+): Supervisor meu aplicativo-octane + Nginx proxy_pass → 127.0.0.1:81xx
Nginx vhost:  /etc/nginx/sites-available/meu aplicativo
Supervisor:   /etc/supervisor/conf.d/meu aplicativo.conf
Crontab:      * * * * * php artisan schedule:run
MariaDB:      database 'meu aplicativo', user 'meu aplicativo'@'localhost'

O .env é compilado automaticamente com todas as credenciais - nome do banco de dados, senha, token webhook, e APP_KEY. Você nunca precisa tocá-lo manualmente, mas sempre pode editá-lo com cipi app env myapp.