Générer l'image sans toucher la base de données

Je voulais faire la même chose que vous : nous exécutons Discourse sur Amazon ECS, nous devions donc pouvoir construire uniquement l’image web et la pousser vers un registre. Je n’avais pas envie de modifier le processus de build de Discourse, car nous souhaitons rester aussi proches que possible de l’installation prise en charge.

À la place, nous utilisons le script launcher standard pour construire une configuration à deux conteneurs sur une machine locale, mais nous ignorons le conteneur de données et nous poussons le conteneur web vers le registre. Au moment de l’exécution, nous remplaçons les détails de connexion à Postgres et Redis via des variables d’environnement.

Le déploiement de la nouvelle image se fait en trois étapes :

  1. Exécuter les pré-migrations sécurisées. Demandez à ECS d’exécuter cette commande (avec la nouvelle image) :

     SKIP_POST_DEPLOYMENT_MIGRATIONS=1 rake db:migrate
    
  2. Déployer la nouvelle image. Mettez à jour le service ECS.

  3. Exécuter les post-migrations. Demandez à ECS d’exécuter cette commande :

     SKIP_POST_DEPLOYMENT_MIGRATIONS=0 rake db:migrate
    

Avoir un conteneur de données local en cours d’exécution pendant la construction de l’image est probablement inutile, mais cela nous permet d’utiliser le fichier web.template.yml standard sans nous soucier des parties qui tentent de se connecter à la base de données ou à Redis.

8 « J'aime »