Imposta un server di staging

Ci sono diversi trucchi che possono aiutare quando si configura un server di staging.

Cos’è un server di staging?

Un server di staging è essenzialmente un clone di un sito di produzione. Risiede anche su un server e funziona in modo identico. Funziona all’interno di un container Docker, proprio come un normale sito Discourse.

Esiste per darti un posto dove provare cose rischiose, o per provare cose che non puoi nascondere facilmente ai tuoi utenti. È molto utile per provare annunci utilizzando Discourse Advertising Plugin (Ads), o se vuoi fare qualcosa di divertente come un’importazione o una fusione di forum.

Questo è in contrasto con un server di sviluppo, che in genere viene eseguito in un luogo facilmente accessibile (e isolato) in modo che uno sviluppatore possa armeggiare con il codice in sicurezza.

Di cosa ho bisogno?

  1. Tutto ciò di cui hai bisogno per una normale installazione self-hosted

  2. Se hai configurato i backup S3, la tua vita sarà molto più facile

    • altrimenti avrai bisogno di un modo per spostare file di grandi dimensioni da e verso un server tramite SSH

Passaggi

Configura il tuo server come desideri

Tipicamente in un server Ubuntu virtuale ospitato su Digital Ocean, ma puoi usare quello con cui ti senti più a tuo agio.

Installa Discourse

Tramite questa guida (o forse tramite dashboard.literatecomputing.com). Consiglio di utilizzare credenziali email “spazzatura” (non hai bisogno o non vuoi che l’email funzioni).

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

Conferma che la tua installazione funziona:

Stabilisci un account admin (se necessario)

Configura un account admin dalla riga di comando. Questo salta la necessità di autenticarsi via email.

./launcher enter app
rake admin:create

Questo non è strettamente necessario se non per testare l’installazione, poiché puoi ripristinare dal backup dalla riga di comando.

Modifica app.yml e aggiungi alcune modifiche

  1. Potresti voler fare una copia dell’app.yml originale (io la chiamo app.vanilla.yml) a cui puoi tornare se combini qualcosa

  2. In fondo alla sezione env aggiungi queste righe:

      ## Impostazioni specifiche del server di 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 hai configurato backup S3 (o simili), aggiungi anche questi (con le tue impostazioni dal sito principale)

      ## Configurazione S3
      DISCOURSE_S3_ACCESS_KEY_ID: 'la_tua_chiave'
      DISCOURSE_S3_SECRET_ACCESS_KEY: 'il_tuo_segreto'
      DISCOURSE_BACKUP_LOCATION: 's3'
      DISCOURSE_S3_BACKUP_BUCKET: 'la_tua_posizione_backup'
      DISCOURSE_S3_REGION: 'la_tua_regione_s3'
      DISCOURSE_S3_DISABLE_CLEANUP: true
    

    e se stai anche facendo upload S3:

      DISCOURSE_ENABLE_S3_UPLOADS: true
      DISCOURSE_S3_UPLOAD_BUCKET: 'la_tua_posizione_upload'
    
  4. Potresti voler aggiungere gli stessi plugin che hai sul tuo sito di produzione mentre ci sei.

  5. Esegui una ricostruzione

    • ./launcher rebuild app

Gestione del server di staging

Ora hai un server di staging connesso ai tuoi backup S3 (ma non li sovrascriverà), facile da ripristinare e che non può inviare email a nessuno in nessuna circostanza. Perfetto!

Puoi ripristinare un nuovo backup sul server di staging e andare alla grande. Se non ti piace quello che hai, semplicemente ripristinalo di nuovo.

Spegnimento o accensione

Se lasci il tuo server di staging “acceso” per periodi prolungati, rischi che venga indicizzato da Google e che i tuoi utenti vi accedano accidentalmente. Poiché le loro credenziali sono un clone del tuo sito di produzione, questo è molto possibile.

Un modo semplice per mitigare queste due cose è semplicemente spegnere Discourse:

 ./launcher stop app

E per riaccenderlo in modo da poterlo utilizzare:

./launcher restart app

Aggiornamenti

Dovrai assicurarti di aggiornare/ricostruire sia esso che il tuo sito di produzione contemporaneamente se vuoi garantire che le cose rimangano allineate dal punto di vista dei plugin e del codice. Lo stesso vale per le modifiche a app.yml.

Se non usi S3, dovrai spostare manualmente i backup tra i server. E sono grandi!

Popolamento di un server di test

Se vuoi un server di staging, dovresti popolarlo con i tuoi dati effettivi dal tuo forum effettivo tramite un Restore. A volte sono i tuoi dati specifici a causare il problema, e testare il tuo forum con un altro set di dati può darti un senso di falsa speranza.

Se invece quello che vuoi è un server di test per vedere com’è Discourse, potresti voler controllare le cose con alcuni dati fittizi, e se lo fai, puoi fare questo:

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

Questo popolerà il tuo forum con alcuni dati fittizi in modo che tu possa vedere come appaiono le cose con qualsiasi tema e plugin tu voglia. Se non hai ancora avviato il tuo forum, questo ti darà un’idea di come potrebbero apparire le cose.

Gestione dell’autenticazione a due fattori

Mentre il nome utente/password del tuo account dal tuo sito principale dovrebbe funzionare anche nel sito di staging, non è così bello con l’autenticazione a due fattori. Se hai un problema, disabilita l’autenticazione a due fattori:

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

Nathan, un’ottima idea mettere insieme questa guida.

Forse mi è sfuggito, ma quale passaggio qui disabilita l’email?

5 Mi Piace

Ottima domanda. Inserire credenziali SMTP errate lo impedisce assolutamente, ma avrebbe senso disattivare anche le email con:

DISCOURSE_DISABLE_EMAILS = yes

Inoltre, questa opzione viene attivata automaticamente quando si esegue un ripristino, quindi non è veramente necessaria.

8 Mi Piace

Aggiunte istruzioni per disattivare l’app all’OP.

2 Mi Piace

Giusto, ed è spesso bello poter ottenere un link di accesso, quindi, consiglierei

 DISCOURSE_DISABLE_EMAILS = 'non-staff'
6 Mi Piace

Che ne dici di una sezione sulla creazione di utenti fittizi? Alcuni amministratori potrebbero non volere alcuna informazione personalmente identificabile sui server di staging. Cosa stanno usando le persone per creare utenti fittizi su larga scala o eliminare i PII?

Ho pensato di utilizzare un’importazione di produzione e quindi eseguire il processo di anonimizzazione su ciascuno, ma ciò si tradurrebbe in un sito di staging dall’aspetto molto noioso!

Posso suggerire che l’OP venga trasformato in una Wiki?

Alcuni link:

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

L’ho reso un wiki.

In generale, voglio che un sito di staging utilizzi gli stessi dati del sito di produzione in modo da poter testare che le cose funzioneranno con i dati effettivi. Ma forse le persone vogliono dati fittizi per vedere cosa può fare Discourse prima di iniziare a usarlo? (Oh, immagino che quei link abbiano soluzioni più sofisticate.)

Immagino che potresti avere un User.create in un ciclo con un elenco di nomi da qualche parte.

2 Mi Piace

Ovviamente non è il mio forte :slightly_smiling_face:, ma sarebbe una buona opportunità per usare rake dev:populate?

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

Penso che funzionerebbe anche su un sito di produzione che è più un ambiente di staging/sito di test.

4 Mi Piace

Apparentemente non è un ostacolo!

Ottimo suggerimento:

Codice attività: discourse/populate.rake at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse (github.com)

Azioni specifiche dell’utente:

1 Mi Piace

Bello! In effetti, qualcuno ha già pensato a questo problema!

MODIFICA: e per divertimento, ho provato questo su un sito di test appena installato; ho incollato i tuoi task bundle e rake e ha fatto questo:

root@test2-app:/var/www/discourse# ALLOW_DEV_POPULATE=1 rake dev:populate
OK
Non ho rilevato un file `config/dev.yml` personalizzato, ne sto creando uno per te dove puoi modificare i valori predefiniti.
Ci sono 9 record di gruppi. Ne sto creando altri 6.
......
Ci sono 3 record di utenti. Ne sto creando altri 27.
...........................
Ci sono 4 record di categorie. Ne sto creando altri 26.
..........................
discourse-solved abilitato nella categoria 'Recipes' (12).
Creazione di 30 record di tag di esempio
..............................
Ci sono 6 record di topic. Ne sto creando altri 24.
........................
root@test2-app:/var/www/discourse# 

3 Mi Piace

Il grosso problema di questo è che il tuo set di dati non rappresenta più i tuoi dati live.

Un server di staging deve essere rappresentativo del live, altrimenti non puoi testare tutto prima di andare in produzione con le modifiche pianificate.

Ho assistito a fallimenti piuttosto impressionanti in cui test non rappresentativi non sono riusciti a identificare problemi che in seguito sono sorti nell’ambiente live. Più spesso di quanto non si verifichino, si sono verificati a causa di problemi di qualità dei dati.

Cognomi doppi (con e senza trattino) e caratteri accentati, ad esempio, hanno causato enormi problemi.

Se si tratta di un vero server di staging, allora deve imitare il live precisamente. La copia non deve essere visibile agli utenti normali e disabilitare le e-mail non del personale è piuttosto consigliabile, ma altrimenti si invitano solo problemi.

5 Mi Piace

Oh, sono d’accordo. La mia domanda era dovuta a un cliente che era preoccupato di avere vere identità di clienti in staging.

Idealmente dovremmo avere uno script per mescolare nomi e indirizzi email e lasciare tutto il resto invariato.

1 Mi Piace

Sembra una conversazione piuttosto semplice. Se non hanno una copia rappresentativa, allora non hanno un sito di staging.

Se è distribuito e protetto nello stesso modo del sito live, qual è il loro rischio percepito?

2 Mi Piace

Sono con Stephen. Il cliente è più nervoso avendo dati reali su un sito di staging, o non avendo un sito di staging che testa effettivamente i tuoi dati effettivi?

Se non stai testando con i tuoi dati effettivi live dalla produzione, allora non sai cosa succederà quando userai i dati live.

E questa discussione si sta allontanando troppo dall’OP. :slight_smile:

2 Mi Piace

Penso che questo dovrebbe essere impostato per eliminare i post dopo 30 giorni o qualcosa del genere. L’ho aggiunto all’OP. Ci sono momenti in cui i dati fittizi sono utili. I più paranoici tra noi (incluso me stesso), hanno ragioni reali per non fidarsi di un server di staging se non è stato testato con i tuoi dati effettivi.

4 Mi Piace

Dopo aver riscontrato alcuni problemi dopo l’implementazione della 2FA sul nostro sito, ho aggiunto questo:

1 Mi Piace

WoW – è stato fantastico! Bada-bing-bada-boom!

Mi sento così produttivo dopo aver importato quei dati fittizi… all’improvviso il mio forum di test si è popolato automaticamente con un sacco di utenti e post e tag e categorie e gruppi… oh mio!

Grazie mille @nathank e @pfaffman e @merefield e @JammyDodger e @Stephen… oh mio!

Happy So Excited GIF

5 Mi Piace

Mi piacerebbe leggere raccomandazioni su come disabilitare il pop polling tramite riga di comando.

Il modo migliore è impostare una variabile d’ambiente DISCOURSE_pop3_polling_enabled=false

Devi mettere in maiuscolo l’intero nome della variabile, ma non posso farlo dal mio telefono.

2 Mi Piace

Ho recentemente migrato il mio forum di produzione a S3 e CloudFront. Avevo già un server di staging funzionante, ma ora è fuori sincronia con la produzione e S3 perché non sono sicuro se ho bisogno di un bucket separato e di una connessione CDN: non voglio in particolare sostenere costi AWS aggiuntivi solo per un server di staging. Presumibilmente puntare entrambi i server allo stesso bucket S3 non è raccomandato? Qual è il modo giusto per farlo?

1 Mi Piace