O que é staging numa loja Magento e o que ele evita

Staging, ou ambiente de homologação, é uma segunda instalação da loja: o mesmo código, uma cópia do banco e das imagens, num endereço que cliente nenhum acessa. É ali que o dev roda a atualização, instala o módulo e mostra o resultado antes de tocar na loja que vende.

No Magento isso pesa mais do que num site comum, porque subir código não é copiar arquivo: o setup:upgrade aplica patches que alteram o banco e o setup:di:compile gera código. Se um desses passos quebra em produção, a loja para. No staging, o mesmo erro custa só o tempo do dev.

No Adobe Commerce na nuvem da Adobe, o ambiente vem pronto: segundo a documentação da arquitetura Pro, o Staging roda em infraestrutura dedicada, com os serviços da produção, como Fastly e New Relic. No Magento Open Source, ou no Adobe Commerce hospedado por conta própria, alguém precisa montar, e com as travas abaixo.

Checklist: os 10 itens que eu confiro num staging de loja Magento

Use a tabela como pedido para o dev ou para a hospedagem. Cada linha tem uma forma de conferir que não exige ler código.

ItemO que pedirComo conferir
1. Endereço fechadoSubdomínio com senha no nginx ou liberado só para os IPs da equipeFora da rede liberada, pede senha
2. Base URL própriaweb/secure/base_url e web/unsecure/base_url do staging, gravadas com --lock-envNenhum link do staging pode levar para a loja real
3. E-mail desligadosystem/smtp/disable igual a 1 (Disable Email Communications)Fazer um pedido de teste com o seu e-mail: nada pode chegar
4. Pagamento em sandboxCada meio de pagamento com a credencial de teste do próprio gateway, nenhuma chave de produçãoPagar com cartão de teste e ver a transação no painel de testes do gateway
5. Google foraSenha na porta e cabeçalho X-Robots-Tag: noindexcurl -I de fora da rede liberada devolve 401
6. Cron sob controleCron ligado; integrações com ERP, marketplace e feed desligadas ou no ambiente de teste do parceiroLista escrita do que foi desligado
7. Índice próprio no OpenSearchcatalog/search/opensearch_index_prefix diferente do da produção, se o servidor de busca for o mesmoReindexar o staging e ver que a busca da loja real não mudou
8. Mesmas versõesPHP, MariaDB ou MySQL, OpenSearch, Redis ou Valkey e Varnish iguais aos da produçãoComparar php -v e bin/magento --version nos dois ambientes
9. Sem dado de cliente realCópia do banco com nome, e-mail, telefone, CPF e endereço mascaradosAbrir um pedido antigo no admin do staging
10. Rotina de atualizaçãoQuem copia o banco, quando, e o que é reaplicado depoisDocumento de uma página com a data da última cópia

Os itens 3, 4 e 9 protegem o cliente: staging que esquece um deles manda e-mail de pedido para quem comprou na loja real. Se só couber pouca coisa agora, comece por esses três e pela senha.

Trocar a base URL do staging e desligar o e-mail sem perder tudo na próxima cópia

O erro clássico é este: o dev copia o banco da produção, corrige a base URL direto na tabela core_config_data, esquece o e-mail e, um mês depois, copia o banco de novo. Tudo volta a apontar para a loja real, inclusive o envio de e-mail.

O Magento tem um caminho melhor. O bin/magento config:set com a opção --lock-env grava o valor em app/etc/env.php, e a documentação da Adobe diz que valor presente no env.php tem prioridade sobre o que está no banco e fica travado no admin. Como o env.php não vai para o repositório e não vem junto com o banco copiado, a configuração do staging sobrevive a qualquer importação:

bin/magento config:set --lock-env web/unsecure/base_url https://staging.sualoja.com.br/
bin/magento config:set --lock-env web/secure/base_url https://staging.sualoja.com.br/
bin/magento config:set --lock-env system/smtp/disable 1
bin/magento config:set --lock-env catalog/search/opensearch_index_prefix staging_sualoja
bin/magento indexer:reindex catalogsearch_fulltext
bin/magento cache:flush

Dois cuidados. Se a loja tem base URL própria por website ou por store view, cada uma precisa do mesmo comando com --scope e --scope-code; sem isso, o valor gravado no banco naquele escopo continua valendo. E o campo de e-mail fica em Stores > Configuration > Advanced > System > Mail Sending Settings: depois do comando ele aparece travado no admin, que é justamente o sinal de que funcionou.

Como bloquear o Google no ambiente de teste da loja

Senha na porta é a trava que não depende do banco. A documentação do Google orienta proteger com senha o conteúdo que não deve ser encontrado e avisa que página bloqueada só por robots.txt ainda pode aparecer nos resultados, por exemplo quando outra página aponta para ela.

No nginx, a configuração abaixo pede senha para quem está fora e deixa passar o IP da equipe sem pedir. O par satisfy any com allow e auth_basic é o exemplo da própria documentação do nginx:

satisfy any;
allow 203.0.113.10;
deny all;
auth_basic "Staging";
auth_basic_user_file /etc/nginx/.htpasswd-staging;
add_header X-Robots-Tag "noindex, nofollow" always;

Tem uma armadilha no cabeçalho. O nginx.conf.sample do Magento declara add_header próprio dentro das locations de /static/ e /media/, e pela regra do nginx isso anula o add_header herdado do bloco de fora. As páginas recebem o X-Robots-Tag; as imagens e os arquivos estáticos, não. Por isso a senha vem antes.

A liberação por IP ajuda também em teste de integração pela API REST, em que a senha da autenticação básica e o token disputariam o mesmo cabeçalho Authorization.

Staging no mesmo servidor da loja ou separado?

Não coloco preço aqui porque ele depende da sua hospedagem. O que dá para comparar é o critério:

CritérioMesmo servidorServidor separadoMáquina do dev
IsolamentoBaixo: o staging disputa CPU e memória com a lojaAltoTotal
FidelidadeAlta, com banco, busca e cache separadosAlta, com as mesmas versõesDepende de Docker ou DDEV bem montado
CustoMenor, sem máquina novaMaior, uma máquina a maisNenhum para a loja
Quem consegue homologarVocê e o devVocê e o devSó o dev
Risco principalO teste deixar a loja lentaFicar desatualizadoFuncionar só na máquina dele

O que eu recomendo: o ambiente local é ferramenta do dev; o staging é seu, é onde você aprova, com acesso próprio e limitado para o dev. Loja em servidor com folga se vira com staging no mesmo servidor, com banco, prefixo e cache separados e sem reindexar em horário de venda. Loja perto do limite da máquina precisa de staging separado.

Se quiser que eu olhe como está o staging da sua loja antes de contratar alguma mudança, me chama.

Perguntas frequentes

Staging no mesmo servidor da loja dá problema?

Pode dar, se os dois dividirem recursos sem regra: reindexação e compilação no staging consomem CPU e memória da máquina que atende os clientes. Com banco, busca e cache separados, e testes pesados fora do horário de venda, funciona para loja com folga de servidor.

O Google pode indexar o staging da loja Magento?

Pode, se o endereço estiver aberto. Basta um link esquecido para ele ser descoberto. Senha na porta é a proteção mais segura. Bloquear só pelo robots.txt não impede a URL de aparecer nos resultados, segundo a própria documentação do Google.

Preciso de licença extra de extensão para usar no staging?

Depende dos termos de cada fornecedor. Leia a regra de uso em ambiente de teste na licença de cada extensão paga antes de montar o staging. Se alguma extensão confere a licença pelo domínio, ela pode não funcionar no endereço do staging sem liberação do fornecedor.

Com que frequência atualizar o banco do staging?

Antes de cada homologação importante, e não em data fixa, porque banco antigo esconde erro que depende de produto ou pedido recente. A cada cópia, a máscara dos dados pessoais precisa ser aplicada de novo; a configuração gravada no env.php continua valendo.

Fontes oficiais

  1. Set configuration values (config:set e --lock-env) (Adobe Experience League)
  2. Configuration management: technical details (Adobe Experience League)
  3. Pro architecture (ambiente Staging no Adobe Commerce on Cloud) (Adobe Experience League)
  4. Block Search indexing with noindex (Google Search Central)
  5. Control what you share with Google (Google Search Central)
  6. Module ngx_http_headers_module (herança do add_header) (nginx.org)
  7. Module ngx_http_core_module (diretiva satisfy) (nginx.org)

Outros artigos

Ver todos os artigos

Precisa de um orçamento? Ficarei feliz em ajudar. Clique aqui