Volevo fare la stessa cosa che fate voi: gestiamo Discourse su Amazon ECS, quindi avevamo bisogno di poter costruire solo l’immagine web e caricarla su un registry. Non volevo modificare il processo di build di Discourse perché vogliamo rimanere il più possibile vicini all’installazione supportata.
Invece, usiamo lo script launcher normale per costruire un setup a due container su una macchina locale, ma ignoriamo il container dati e cariciamo il container web sul registry. A runtime, sovrascriviamo i dettagli di connessione di Postgres e Redis tramite variabili d’ambiente.
Il deployment della nuova immagine è un processo in tre passaggi:
-
Esegui le pre-migrazioni sicure. Fai eseguire a ECS questo comando (con la nuova immagine):
SKIP_POST_DEPLOYMENT_MIGRATIONS=1 rake db:migrate -
Deploy della nuova immagine. Aggiorna il servizio ECS.
-
Esegui le post-migrazioni. Fai eseguire a ECS questo comando:
SKIP_POST_DEPLOYMENT_MIGRATIONS=0 rake db:migrate
Avere un container dati locale in esecuzione mentre costruiamo l’immagine è probabilmente uno spreco, ma ci permette di utilizzare il file standard web.template.yml senza dover preoccuparci di quali parti tentano di comunicare con il database o Redis.