Boilerplate para deploy e gerenciamento de instalações WordPress com DDEV (desenvolvimento) e EasyEngine (produção/staging).
- Inicialização automática do WordPress no
ddev start - Deploy via Deployer com cadeia de tarefas automatizada
- Provisionamento de ambientes EasyEngine (criação de site, shared wp-config, primeiro deploy)
- Instalação de scripts de manutenção remotos (backup, restore)
- Suporte a múltiplos ambientes com
.envpor stage
O projeto usa arquivos .env por stage. Copie .env.example para .env e preencha os valores:
cp .env.example .env| Arquivo | Uso |
|---|---|
.env |
Valores locais / desenvolvimento (base) |
.env.production |
Sobrescreve .env para produção |
.env.staging |
Sobrescreve .env para staging |
O stage é detectado automaticamente pelo argumento do dep (ex: dep deploy production) ou pela variável DEPLOY_ENV=production.
PROJECT_TYPE=native # native | bedrock
PROD_STACK=easyengine # stack do servidor de produção
PROD_IP=0.0.0.0
PROD_PORT=2232
PROD_DOMAIN=example.com
STAGING_IP=0.0.0.0
STAGING_PORT=2232
STAGING_DOMAIN=staging.example.com
MGMT_USER=infoadm # usuário SSH no host EasyEngine (porta 22)
# WordPress bootstrap
WP_TITLE="Meu Site"
WP_ADMIN_USER=admin
WP_ADMIN_PASSWORD=change-me
WP_ADMIN_EMAIL=admin@example.com
WP_TIMEZONE=America/Sao_Paulo
WP_DB_PREFIX=""
WP_LOCALE=pt_BR
# Banco de dados de produção
DBNAME=""
DBUSER=doadmin
DBPASS=""
DBHOST=""
DBPREFIX=""
# Backup Duplicati/B2 (opcional)
B2_APPLICATION_KEY=""
B2_APPLICATION_KEY_ID=""git clone https://github.com/devmasnaodev/wp-deployer.git
cd wp-deployer
cp .env.example .env # preencha WP_ADMIN_PASSWORD no mínimo
ddev startNo ddev start, o projeto executa em sequência:
composer-install-if-needed— instala dependências se necessárioimport-seed— importainit/data/db.sql.gzse existirinstall-wp-if-needed— executawp core installse o WordPress ainda não estiver instaladoimport-uploads— extraiinit/data/uploads.tar.gzse existir
Se init/data/db.sql.gz existir, a instalação via WP-CLI é ignorada.
Para criar o padrão de importação do projeto (banco + uploads):
ddev generate-init-dataO comando exporta e salva em init/data/:
db.sqledb.sql.gzuploads.tar.gzwebp-express.tar.gz(se o diretório existir)
O deploy é feito via Deployer. As configurações de hosts ficam em deploy/config.php.
dep deploy production
dep deploy stagingvalidate:env
backup:files → backup:db
→ deploy (upload + composer install)
→ wordpress:update-db
→ wordpress:cache
→ services:restart
→ services:clean
→ wp:config:lock
Em caso de falha, deploy:unlock é executado automaticamente. Rollback com restore opcional:
dep rollback production # rollback simples
RESTORE_ON_ROLLBACK=1 dep rollback production # rollback + restore de arquivos/bancoAs variáveis de ambiente são configuradas nos segredos do repositório. O workflow .github/workflows/deploy.yml é acionado manualmente (workflow_dispatch) e roda em um runner self-hosted com a tag deployer.
Para provisionar um novo ambiente do zero (criação do site, primeiro deploy, importação de dados):
dep ee:provision production
dep ee:provision stagingO ee:provision executa em sequência:
ee:site:create— cria o site no EasyEngine com SSL, cache e banco externoee:configure-deploy-target— adiciona volume do site ao container deploy-targetee:prepare-htdocs— salvawp-config.phpgerado pelo EE e limpacurrent/composer:auth:upload— enviaauth.jsonparashared/no servidoree:setup-shared-wp-config— movewp-config.phpparashared/- Primeiro
dep deploy <stage> init:generate-data+init:data:import— gera e importa dados locais
dep ee:site:create production # só criação do site
dep ee:configure-deploy-target production
dep ee:prepare-htdocs production
dep ee:setup-shared-wp-config production
dep composer:auth:upload productionInstala scripts de backup e restore no servidor a partir do repositório remoto:
dep setup:scripts production
dep setup:scripts stagingScripts instalados em <base_dir>/scripts/: backup-db.sh, backup-files.sh, restore.sh e lib/common.sh. O conjunto de scripts é selecionado automaticamente pelo PROD_STACK e PROJECT_TYPE.
# Importação de dados
dep init:data:import production # importa banco + uploads + webp-express
dep db:import production # só banco (db.sql)
dep uploads:import production # só uploads
dep db:replace-urls production # substitui URLs do DDEV para produção
# wp-config.php
dep wp:config:lock production # define DISALLOW_FILE_EDIT, DISALLOW_FILE_MODS, etc.
dep wp:config:unlock production # remove as constantes acima
# Backup Duplicati
dep duplicati:register-backup-task production # registra tarefa e cron diário.ddev/
commands/
host/generate-init-data # exporta banco e uploads para init/data
web/install-wp-if-needed # instala WordPress via WP-CLI no start
deploy/
bootstrap.php # carregamento de .env por stage
config.php # hosts (production, staging)
helpers.php # funções auxiliares (ee_shell, run_on_management_host, …)
tasks/
deploy-chain.php # cadeia de deploy e hooks
provisioning.php # provisionamento EasyEngine e scripts
maintenance.php # db:import, uploads:import, wp:config:lock, …
init/data/ # seeds de banco e uploads (não versionados)
scripts/ # install-wp-core.php (bootstrap local)
web/ # instalação WordPress
deploy.php # entrypoint do Deployer
Pull requests são bem-vindos. Para grandes mudanças, abra uma issue primeiro.
Consulte o arquivo LICENSE para mais informações.