Ciao, ho appena configurato una nuova installazione di Discourse, grazie per tutto il duro lavoro nel renderla così semplice!
Idealmente, vorrei rendere il mio server Discourse “usa e getta”, in modo che se, ad esempio, qualcuno lo dovesse terminare accidentalmente nella console EC2, non perderei alcun dato.
La funzionalità integrata di backup/ripristino è ottima e ho già fatto alcune prove. Sto archiviando app.yml, upload e backup in S3.
Il passo successivo sarebbe spostare il database su Amazon RDS, per il quale c’è una guida eccellente qui.
La mia domanda è: se lo faccio, in teoria dovrei essere al sicuro nel terminare l’istanza, quindi su un nuovo server semplicemente clonare Discourse, recuperare il mio app.yml ed eseguire ./launcher rebuild app? OPPURE c’è altro stato oltre a postgres/uploads/app.yml? Forse in Redis?
Penso che sia in gran parte vero. Dovrai assicurarti di non averne due in esecuzione contemporaneamente. Quando costruirai il nuovo container, migrerai il database, rendendolo potenzialmente inutilizzabile per l’altro container (puoi evitarlo con skip_post_deployment_migrations). Le cose in Redis sono considerate eteree e non vengono sottoposte a backup. Non sono abbastanza sicuro di come o se alcune delle cose lì vengano ripristinate, ma probabilmente non ti interessa.
@phil22 - Ho lavorato su una configurazione simile a quella che stai proponendo ed è più sottile di quanto pensi:
Il team di Discourse rilascia più versioni al mese, quindi devi rimanere con la tua versione originale quando cloni sul tuo nuovo ec2. Normalmente va bene aggiornare ciecamente l’app, ma alcune versioni includono importanti aggiornamenti del database (PG 12 → PG 13) e se non lo tieni traccia e trascuri di aggiornare il tuo RDS esterno, potresti rimanere bloccato.
Abbiamo avuto successo facendo in modo che l’ec2 utilizzasse un volume EBS che è anche configurato per essere montato all’interno del tuo container dell’app. Usando questo, memorizziamo tutti i contenuti della cartella /shared. In questo modo, quando le tue istanze ec2 vanno e vengono, hai tutto questo contenuto della cartella condivisa persistente su EBS. Inoltre, a volte cambi idea sulla memorizzazione dei file in s3. Avere un posto alternativo dove memorizzare i file caricati (come la cartella /shared) è utile in quel caso.
Seguendo il vostro consiglio, penso che opterò per RDS ma bloccando a un commit specifico del repository discourse_docker. Sebbene ciò renda gli aggiornamenti più complessi, spero che significhi che se avremo un problema con il server avremo tutto al sicuro su RDS e saremo in grado di ripristinare abbastanza rapidamente lo stesso stato funzionante senza un ripristino manuale.
(Penso che potremmo ottenere la stessa cosa con EBS, ma con la crittografia del volume e la magia Unix per montare/smontare il volume tra le istanze, sono un po’ spaventato dal processo di automazione di ciò)