Configurar um servidor de testes

Existem vários truques que podem ajudar ao configurar um servidor de staging.

O que é um servidor de staging?

Um servidor de staging é essencialmente uma cópia de um site de produção. Ele também reside em um servidor e funciona de forma idêntica. Ele é executado dentro de um contêiner Docker, assim como um site Discourse normal.

Ele existe para lhe dar um local para experimentar coisas arriscadas, ou para testar coisas que você não pode facilmente ocultar de seus usuários. É muito útil para testar anúncios usando o Discourse Advertising Plugin (Ads), ou se você quiser fazer algo divertido como uma importação ou fusão de fórum.

Isso contrasta com um servidor de desenvolvimento, que normalmente é executado em um local de fácil acesso (e isolado) para que um desenvolvedor possa mexer no código com segurança.

O que eu preciso?

  1. Tudo o que você precisa para uma instalação padrão auto-hospedada

  2. Se você configurou backups S3, sua vida será muito mais fácil

    • caso contrário, você precisará de uma maneira de mover arquivos grandes para dentro e para fora de um servidor via SSH

Passos

Configure seu servidor como desejar

Normalmente em um servidor Ubuntu virtual hospedado no Digital Ocean, mas você pode usar o que lhe for mais confortável.

Instale o Discourse

Através deste guia (ou talvez via dashboard.literatecomputing.com). Recomendo usar credenciais de e-mail ‘junk’ (você não precisa ou quer que o e-mail funcione).

discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

Confirme que sua instalação está funcionando:

Estabeleça uma conta de administrador (se necessário)

Configure uma conta de administrador a partir da linha de comando. Isso evita a necessidade de autenticação por e-mail.

./launcher enter app
rake admin:create

Isso não é estritamente necessário, exceto para testar a instalação, pois você pode restaurar a partir do backup pela linha de comando.

Edite app.yml e adicione alguns ajustes

  1. Você pode gostar de fazer uma cópia do app.yml original (eu chamo o meu app.vanilla.yml) para o qual você pode reverter se estragar as coisas

  2. Na parte inferior da seção env, adicione estas linhas:

      ## Configurações específicas do servidor de staging
      DISCOURSE_AUTOMATIC_BACKUPS_ENABLED: false
      DISCOURSE_LOGIN_REQUIRED: true
      DISCOURSE_DISABLE_EMAILS: 'yes'
      DISCOURSE_S3_DISABLE_CLEANUP: true
      DISCOURSE_ALLOW_RESTORE: true
    
  3. Se você tiver backups S3 (ou similar) configurados, adicione estes também (com suas configurações do site principal)

      ## Configuração S3
      DISCOURSE_S3_ACCESS_KEY_ID: 'sua_chave'
      DISCOURSE_S3_SECRET_ACCESS_KEY: 'seu_segredo'
      DISCOURSE_BACKUP_LOCATION: 's3'
      DISCOURSE_S3_BACKUP_BUCKET: 'seu_local_de_backups'
      DISCOURSE_S3_REGION: 'sua_região_s3'
      DISCOURSE_S3_DISABLE_CLEANUP: true
    

    e se você também estiver fazendo uploads S3:

      DISCOURSE_ENABLE_S3_UPLOADS: true
      DISCOURSE_S3_UPLOAD_BUCKET: 'seu_local_de_uploads'
    
  4. Você pode gostar de adicionar os mesmos plugins que você tem em seu site de produção enquanto está lá.

  5. Faça uma reconstrução

    • ./launcher rebuild app

Gerenciando o servidor de staging

Agora você tem um servidor de staging conectado aos seus backups S3 (mas não os substituirá), é fácil de restaurar e não pode enviar e-mails para ninguém em nenhuma circunstância. Perfeito!

Você pode restaurar um backup recente para o servidor de staging e começar. Se você não gostar do que tem, simplesmente restaure novamente.

Desligando ou ligando

Se você deixar seu servidor de staging ‘ligado’ por longos períodos, você corre o risco de ele ser indexado pelo Google e seus usuários acidentalmente fazerem login nele. Como suas credenciais são uma cópia do seu site de produção, isso é muito possível.

Uma maneira simples de mitigar essas duas coisas é simplesmente desligar o Discourse:

./launcher stop app

E ligá-lo novamente para que você possa usá-lo:

./launcher restart app

Atualizações

Você terá que garantir que atualiza/reconstrói tanto ele quanto seu site de produção ao mesmo tempo, se quiser garantir que as coisas permaneçam alinhadas do ponto de vista de plugins e código. O mesmo vale para as alterações em app.yml.

Se você não usar S3, terá que mover manualmente os backups entre os servidores. E eles são grandes!

Populando um Servidor de Teste

Se você quer um servidor de staging, então você deve populá-lo com seus dados reais do seu fórum real através de uma Restore. Às vezes, são seus dados específicos que estão causando o problema, e testar seu fórum com outro conjunto de dados pode lhe dar uma falsa sensação de segurança.

Se o que você quer é um servidor de teste para ver como é o Discourse, no entanto, você pode querer verificar as coisas com alguns dados falsos, e se o fizer, você pode fazer isso:

./launcher enter app
ALLOW_DEV_POPULATE=1 bundle install
ALLOW_DEV_POPULATE=1 rake dev:populate

Isso irá popular seu fórum com alguns dados falsos para que você possa ver como as coisas ficam com quaisquer temas e plugins que você desejar. Se você ainda não iniciou seu fórum, isso lhe dará uma ideia de como as coisas provavelmente ficarão.

Gerenciando a Autenticação de Dois Fatores

Embora o nome de usuário/senha da sua conta principal também funcione bem no site de staging, não é tão bom com 2FA. Se você tiver um problema, desative o 2FA:

./launcher enter app
rake users:disable_2fa[<USERNAME>]
32 curtidas

Nathan, ótima ideia para montar este guia.

Talvez eu tenha deixado passar, mas qual etapa aqui desabilita o e-mail?

5 curtidas

Boa pergunta. Inserir credenciais SMTP inválidas impede absolutamente isso, mas também faria sentido desativar os e-mails com:

DISCOURSE_DISABLE_EMAILS = yes

Além disso, isso é ativado automaticamente ao fazer um restore, então não é realmente necessário.

8 curtidas

Adicionadas algumas instruções para desativar o aplicativo ao OP.

2 curtidas

Certo, e, muitas vezes é bom poder obter um link de login, então, eu recomendaria

 DISCOURSE_DISABLE_EMAILS = 'non-staff'
6 curtidas

Que tal uma seção sobre a criação de usuários falsos? Alguns administradores podem não querer nenhuma informação pessoalmente identificável em servidores de staging. O que as pessoas estão usando para criar usuários falsos em maior escala ou se livrar de PII?

Pensei em usar uma importação de produção e depois executar o job de anonimização em cada um, mas isso resultaria em um site de staging com aparência muito sem graça!

Posso sugerir que o OP seja transformado em um Wiki?

Alguns links:

https://hackernoon.com/ruby-on-rails-and-the-complexity-of-fake-user-profiles-made-simple-mf4j31gv

Eu fiz disso uma wiki.

Geralmente, quero que um site de staging use os mesmos dados do site de produção para que você possa testar se as coisas funcionarão com os dados reais. Mas talvez as pessoas queiram dados falsos para ver o que o Discourse pode fazer antes de começarem a usá-lo? (Ah, acho que esses links têm algumas soluções mais sofisticadas.)

Acho que você poderia ter um User.create em um loop com uma lista de nomes de algum lugar.

2 curtidas

Obviamente não é o meu forte :slightly_smiling_face:, mas seria uma boa oportunidade para usar rake dev:populate?

cd /var/www/discourse
ALLOW_DEV_POPULATE=1 bundle install
ALLOW_DEV_POPULATE=1 rake dev:populate

Acho que isso também funcionaria em um site de produção que seja mais um ambiente de staging/site de teste.

4 curtidas

Aparentemente, isso não é um impedimento!

Essa é uma ótima sugestão:

Código da tarefa: discourse/populate.rake at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse (github.com)

Ações específicas do usuário:

1 curtida

Legal! De fato, alguém já pensou nesse problema!

EDIT: e por diversão, testei isso em um site de teste recém-instalado; colei suas tarefas bundle e rake e ele fez isso:

root@test2-app:/var/www/discourse# ALLOW_DEV_POPULATE=1 rake dev:populate
OK
Não detectei um arquivo `config/dev.yml` personalizado, criando um para você onde pode alterar os padrões.
Existem 9 registros de grupo. Criando mais 6.
......
Existem 3 registros de usuário. Criando mais 27.
...........................
Existem 4 registros de categoria. Criando mais 26.
..........................
discourse-solved ativado na categoria 'Recipes' (12).
Criando 30 registros de tags de exemplo
..............................
Existem 6 registros de tópico. Criando mais 24.
........................
root@test2-app:/var/www/discourse# 

3 curtidas

O grande problema com isso é que seu conjunto de dados não representa mais seus dados reais.

Um servidor de staging precisa ser representativo do ambiente real, caso contrário, você não poderá testar tudo antes de ir para a produção com quaisquer alterações planejadas.

Eu observei algumas falhas bastante impressionantes em que testes não representativos não conseguiram identificar problemas que surgiram posteriormente no ambiente real. Na maioria das vezes, eles ocorreram devido a problemas de qualidade de dados.

Sobrenomes duplos (com e sem hífen) e caracteres acentuados, por exemplo, causaram enormes problemas.

Se for um servidor de staging verdadeiro, ele precisa imitar o ambiente real precisamente. A cópia não precisa ser visível para usuários normais e desativar e-mails não pertencentes à equipe é bastante aconselhável, mas, caso contrário, isso apenas convida problemas.

5 curtidas

Concordo. Minha pergunta foi motivada por um cliente que estava receoso de ter identidades reais de clientes em staging.

O ideal seria termos um script para embaralhar nomes e endereços de e-mail, e deixar todo o resto igual.

1 curtida

Parece uma conversa bem direta. Se eles não tiverem uma cópia representativa, então eles não têm um site de staging.

Se estiver implantado e seguro da mesma forma que o site principal, qual é o risco percebido por eles?

2 curtidas

Estou com o Stephen. O cliente fica mais nervoso por ter dados reais em um site de staging, ou por não ter um site de staging que realmente teste seus dados reais?

Se você não está testando com seus dados reais de produção, então você não sabe o que acontecerá quando usar os dados reais.

E essa discussão está se afastando muito do OP. :slight_smile:

2 curtidas

Eu acho que isso deveria ser configurado para excluir posts após 30 dias ou algo assim. Adicionei isso ao OP. Há momentos em que dados falsos são úteis. Os mais paranoicos entre nós (incluindo eu) têm razões do mundo real para não confiar em um servidor de staging se ele não foi testado com seus dados reais.

4 curtidas

Após ter alguns problemas após implementar a 2FA em nosso site, adicionei isto:

1 curtida

Uau – isso foi demais! Bada-bing-bada-boom!

Sinto-me tão produtivo depois de importar esses dados fictícios… de repente, meu fórum de testes foi preenchido automaticamente com um monte de usuários e posts e tags e categorias e grupos… nossa!

Muito obrigado @nathank e @pfaffman e @merefield e @JammyDodger e @Stephen… nossa!

Happy So Excited GIF

5 curtidas

Eu adoraria ler recomendações sobre como desativar o pop polling via linha de comando.

A melhor maneira é definir uma variável de ambiente DISCOURSE_POP3_POLLING_ENABLED=false

Você precisa colocar o nome da variável inteira em maiúsculas, mas não consigo fazer isso no meu celular.

2 curtidas

Migrei recentemente meu fórum de produção para S3 e CloudFront. Eu já tinha um servidor de staging funcionando, mas agora ele está fora de sincronia com a produção e o S3 porque não tenho certeza se preciso de um bucket separado e uma conexão CDN - não quero incorrer em custos adicionais da AWS apenas para um servidor de staging. Presumivelmente, apontar ambos os servidores para o mesmo bucket S3 não é recomendado? Qual é a maneira correta de fazer isso?

1 curtida