Implante WordPress em Cipi: aplicativo personalizado & GitHub implantação automática
Por Andrea Pollastri · Última atualização: · grátis para ler, sem acesso pago
Cipi é Laravel-primeiro, mas também hospeda WordPress como um aplicativo personalizado: usuário Linux isolado, pool PHP-FPM, Nginx vhost, Git pull into htdocs. Este guia caminha de um Ubuntu VPS vazio para um site que se implanta a cada push para main.
- Por que um aplicativo personalizado (não Laravel)
- Como estruturar o repositório WordPress
- Crie o aplicativo personalizado
- Banco de dados, DNS e SSL
- Primeiro implante e wp-config.php
- GitHub Pipeline de ações (recomendado)
- Caminho mais simples: configuração automática do Git
- Cron, backups e operações diárias
- Perguntas frequentes
Por que um aplicativo personalizado (não Laravel)
Cipi suporta dois tipos de aplicativos. O padrão é Laravel: próprio usuário do sistema, PHP-FPM ou Octane, MariaDB, .env, Supervisor trabalhadores, crontab e tempo de inatividade zero Versões do implantador em current/shared. WordPress não é nada disso.
A aplicativo personalizado (cipi app create --custom) tem a forma correta:
- Implantação clássica em
htdocs- nãocurrent/sharedtroca de link simbólico.cipi deploy blogpuxa o repositório para/home/blog/htdocs. - Nginx já está WordPress pronto:
index index.html index.phpetry_files $uri $uri/ /index.php?$args. - Git é opcional. Ignore o repositório para uploads somente SFTP; anexe um mais tarde com
cipi app edit blog --repository=…. - Sem banco de dados, não
.env, sem cron, sem filas até você adicioná-los. WordPress precisa de um banco de dados — você o cria na próxima etapa.
Implantações personalizadas são não tempo de inatividade zero. Mantenha as diferenças de tema e plugin pequenas, faça backup do banco de dados antes de lançamentos arriscados e deixe GitHub Ações ser a porta para que uma verificação vermelha nunca chegue à produção. Para padrões de tempo de inatividade zero Laravel, use oCI/CD para guia Laravel.
Como estruturar o repositório WordPress
Trate o Git como a fonte da verdade para código, não para segredos ou mídia. Um repositório que sobrevive à implantação automática é assim:
wordpress-site/
.gitignore
.github/workflows/deploy.yml
wp-admin/
wp-includes/
wp-content/themes/your-theme/
wp-content/plugins/your-plugin/
wp-config-sample.php
index.php
…
Coloque isso .gitignore portanto, um pull nunca substitui o estado do site ativo:
wp-config.php
wp-content/uploads/
wp-content/cache/
wp-content/upgrade/
wp-content/backup-db/
.htaccess
Como os aplicativos personalizados entram htdocs em vez de trocar um diretório de lançamento, arquivos não rastreados permanecem no disco. É assim que os uploads e wp-config.php sobreviver a cada implantação.
- Núcleo no Gité o fluxo de trabalho mais simples da agência: tema, plugins e o próprio WordPress versionados juntos.
- Composer / Bedrock também funciona - definir
--docroot=web(oupublic) quando o controlador frontal não está na raiz do repositório. - Não cometa segredos de produção. Gere sais no servidor; nunca empurre uma live
wp-config.php.
Crie o aplicativo personalizado
Cipi já deve estar instalado em um novo Ubuntu VPS:
SSH em como cipi, então sudo -s. Crie o aplicativo WordPress de forma não interativa (PHP 8.3 é uma correspondência segura para o WordPress atual; troque a quente mais tarde com cipi app edit):
$ cipi app create --custom --user=blog \
--domain=blog.example.com \
--repository=git@github.com:you/wordpress-site.git \
--branch=main \
--php=8.3
Essas disposições:
- Usuário Linux
bloge casa/home/blog - Pool de PHP-FPM em 8.3 e um vhost de Nginx para
blog.example.com - Chave de implantação SSH para o repositório
- Configuração do implantador que entra
/home/blog/htdocs
Se você salvou um token de acesso pessoal GitHub primeiro, Cipi também adiciona a chave de implantação e um provedor webhook automaticamente:
$ cipi git github-token ghp_xxxxxxxxxxxxxxxxxxxx
$ cipi git status
Tokens refinados precisam Administração e Webhooks definido como Ler e escrever no repositório de destino; tokens clássicos precisam do repo escopo. Os detalhes estão no Configuração automática do Git documentos.
Somente SFTP (ainda sem Git) — omita o repositório e faça upload para ~/htdocs como usuário do aplicativo:
$ cipi app create --custom --user=blog --domain=blog.example.com --php=8.3
Banco de dados, DNS e SSL
Os aplicativos personalizados não obtêm um banco de dados. Crie um depois que o aplicativo existir — MariaDB é o padrão e o que WordPress espera:
$ cipi db create --name=blog
Cipi imprime o nome do banco de dados, usuário, senha e um mariadb+ssh:// URL para TablePlus ou DBeaver. Copie esses valores; eles entram wp-config.php no servidor, não no Git.
Ponto DNS A registros para blog.example.com e www.blog.example.com em VPS, então:
$ cipi alias add blog www.blog.example.com
$ cipi www add blog
$ cipi ssl install blog
cipi ssl install emite um certificado Let’s Encrypt que cobre todos os alias (SAN) e ativa o redirecionamento HTTPS. cipi www mantém apex e www canônicos. Veja SSL e redirecionamentos www.
Primeiro implante e wp-config.php
Extraia o repositório uma vez e escreva a configuração como o usuário do aplicativo para que a propriedade do arquivo permaneça correta:
$ cipi deploy blog
$ su - blog
blog@server:~$ cd ~/htdocs
blog@server:~/htdocs$ cp wp-config-sample.php wp-config.php
blog@server:~/htdocs$ nano wp-config.php
Valores mínimos de produção (use as credenciais de cipi db create):
define('DB_NAME', 'blog');
define('DB_USER', 'blog');
define('DB_PASSWORD', 'the-password-cipi-printed');
define('DB_HOST', '127.0.0.1');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', '');
define('DISALLOW_FILE_EDIT', true);
define('DISABLE_WP_CRON', true);
define('WP_MEMORY_LIMIT', '256M');
Gere novos sais a partir de api.wordpress.org/secret-key e cole-os no lugar dos espaços reservados. Abrir https://blog.example.com e finalize o instalador WordPress no navegador.
wp-config.php não está rastreado. Mais tarde cipi deploy não irá excluí-lo. Se você clonar novamente todo o diretório inicial, recrie o arquivo a partir das mesmas credenciais do banco de dados (cipi db password blog se você os perdeu).
GitHub Pipeline de ações (recomendado)
O Agente Laravel webhook (https://your-app.com/cipi/webhook) é uma rota dentro um aplicativo Laravel. Não existe em WordPress. Para implantação automática, tenha GitHub SSH no servidor e execute cipi deploy - o mesmo implantação de SSH de pipeline Cipi documentos para liberações Laravel fechadas.
Escolha um gatilho. Se a configuração automática do Git já criou um provedor webhook, desative-o (ou nunca crie um) antes de adicionar ações. Duas implantações no mesmo push lutam pelo arquivo de bloqueio.
1. Chave SSH dedicada para CI
Gere uma chave ed25519 em seu laptop. Adicione o público chave para o servidor; armazenar o privado chave como um segredo GitHub. Não reutilize chaves de implantação do Git ou sua chave SSH pessoal.
# on your laptop
$ ssh-keygen -t ed25519 -C "ci-deploy-blog" -f ~/.ssh/ci_deploy_blog -N ""
$ ssh-copy-id -i ~/.ssh/ci_deploy_blog.pub cipi@your-server-ip
$ cat ~/.ssh/ci_deploy_blog
No repositório GitHub: Configurações → Segredos e variáveis → Ações. Criar:
SERVER_HOST— VPS IP ou nome de hostSERVER_SSH_KEY— conteúdo completo da chave privada
2. Arquivo de fluxo de trabalho
Deixe isso dentro .github/workflows/deploy.yml:
name: Deploy WordPress
on:
push:
branches: [main]
workflow_dispatch:
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Guard tracked secrets
run: |
if git ls-files --error-unmatch wp-config.php >/dev/null 2>&1; then
echo "wp-config.php must not be committed"
exit 1
fi
- name: PHP syntax
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
coverage: none
- name: Lint theme and plugins
run: |
find wp-content/themes wp-content/plugins -name '*.php' -print0 \
| xargs -0 -n1 php -l
deploy:
runs-on: ubuntu-latest
needs: check
steps:
- name: Deploy via Cipi
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: cipi
key: ${{ secrets.SERVER_SSH_KEY }}
script: sudo cipi deploy blog
O que isso compra para você:
- Um portão de qualidade - um compromisso
wp-config.phpou um erro de análise PHP nunca atinge VPS. - Um comando no servidor — Cipi puxa
mainemhtdocscom o binário PHP do aplicativo. - Repetição manual —
workflow_dispatchreimplanta o mesmo commit sem outro push.
Proteger main: sem push direto, verificações de status obrigatórias, ramificações de curta duração. Os mesmos hábitos baseados no tronco que os Laravel CI/CD guia, sem fingir que WordPress tem Pest e Pint.
Assista à implantação do servidor:
$ cipi app logs blog --type=deploy
3. Opcional: backup antes do lançamento
WordPress alterações de esquema são muitas vezes irreversíveis. Instantâneo MariaDB primeiro e depois implante:
script: |
sudo cipi db backup blog
sudo cipi deploy blog
Restaurar com cipi db restore blog backup.sql.gz se um lançamento der errado. Os aplicativos personalizados não têm link simbólico de lançamento para reverter - o despejo do banco de dados é o seu botão de desfazer. Veja cipi db.
Caminho mais simples: configuração automática do Git
Se você não precisa de portas CI (site solo, commits confiáveis), pule as ações e deixe Cipi conectar GitHub para você:
$ cipi git github-token ghp_xxxxxxxxxxxxxxxxxxxx
$ cipi app create --custom --user=blog --domain=blog.example.com \
--repository=git@github.com:you/wordpress-site.git --branch=main --php=8.3
Ligado app create, Cipi adiciona a chave de implantação SSH e um webhook no repositório. O resumo mostra configurado automaticamente ✓. Um empurrão para main então executa o mesmo cipi deploy pipeline sem um arquivo YAML.
Se você criou o aplicativo antes de salvar um token, imprima os valores e adicione-os manualmente:
$ cipi deploy blog --key # Settings → Deploy keys
$ cipi deploy blog --webhook # Settings → Webhooks
Não aponte um site WordPress para a URL do agente Laravel /cipi/webhook. Essa rota só existe depois de você composer require cipi/agent dentro de um aplicativo Laravel. WordPress usa o provedor webhook Cipi prints ou GitHub Actions over SSH — não ambos.
Cron, backups e operações diárias
Substitua WP-Cron pelo sistema cron
Aplicativos personalizados não recebem crontab. Com DISABLE_WP_CRON definir, acertar wp-cron.php do crontab do usuário do aplicativo:
$ su - blog
blog@server:~$ crontab -e
*/5 * * * * /usr/bin/php8.3 /home/blog/htdocs/wp-cron.php >/dev/null 2>&1
Combine o binário PHP com a versão que você passou para app create. Depois cipi app edit blog --php=8.4, atualize o caminho do crontab.
Cópias de segurança
cipi db backup blog- dump MariaDB (agende-o todas as noites no crontab do root ou chame-o em Actions).- Mantenha
wp-content/uploadsno servidor (e em backups externos). Não está no Git. - Backups externos compatíveis com S3:
cipi backup.
Comandos úteis
| Comando | O que isso faz |
|---|---|
cipi deploy blog |
Puxar main em htdocs |
cipi app logs blog --type=deploy |
Histórico de implantação |
cipi app logs blog --type=php |
Erros PHP-FPM |
cipi app edit blog --php=8.4 |
Troca a quente PHP |
cipi app edit blog --branch=staging |
Alterar o branch de implantação |
cipi db backup blog |
Despejar MariaDB |
cipi ssl install blog |
Renovar, vamos criptografar (SAN) |
Coloque isso em prática com Cipi
Cipi é o open-source deploy CLI gratuito usado neste guia: um comando transforma um novo Ubuntu VPS em um servidor protegido para Laravel e aplicativos PHP personalizados, como WordPress — Nginx, PHP-FPM, MariaDB, SSL e implantações Git incluídas.
Perguntas frequentes
Devo criar WordPress como um aplicativo Laravel ou um aplicativo personalizado em Cipi?
Sempre como um aplicativo personalizado. Laravel aplicativos esperam artisan, Composer, um .env arquivo e o releases/current layout. WordPress é um site PHP clássico: cipi app create --custom implanta em htdocs com Nginx já definido para index.php.
Cipi cria um banco de dados para um aplicativo personalizado WordPress?
Não. Os aplicativos personalizados são fornecidos sem banco de dados. .env, cron ou trabalhadores da fila. Depois que o aplicativo existir, execute cipi db create --name=<app> (MariaDB por padrão) e coloque essas credenciais em wp-config.php no servidor.
Uma implantação do Git apagará meus WordPress uploads?
Não se eles não forem rastreados. Aplicativos personalizados são acessados htdocs em vez de trocar um link simbólico de lançamento. Mantenha wp-content/uploads e wp-config.php fora do Git para que a mídia e os segredos sobrevivam a cada cipi deploy.
Posso usar o Agente Cipi webhook para WordPress?
Não. O /cipi/webhook rota reside dentro de um aplicativo Laravel através do cipi/agent pacote. Para WordPress, o gatilho é implantado a partir de GitHub Ações por SSH com sudo cipi deploy, ou use Cipi configuração automática do Git (chave de implantação mais provedor webhook) quando você não precisar de portas CI.
A implantação de WordPress ocorre em Cipi com tempo de inatividade zero?
Não. Aplicativos personalizados usam implantação clássica em htdocs - não há current/shared troca de link simbólico. Mantenha as diferenças de tema e plugin pequenas, dê uma olhada cipi db backup antes de lançamentos arriscados e use GitHub Ações para que uma verificação com falha nunca chegue ao servidor.