Erstellung des Images ohne Zugriff auf die Datenbank

Ich wollte das Gleiche wie du tun – wir betreiben Discourse auf Amazon ECS, daher mussten wir in der Lage sein, nur das Web-Image zu bauen und in eine Registry zu pushen. Ich wollte den Discourse-Build-Prozess nicht hacken, da wir so nah wie möglich an der unterstützten Installation bleiben möchten.

Stattdessen nutzen wir das normale launcher-Skript, um auf einem lokalen Rechner ein Setup mit zwei Containern zu erstellen, ignorieren dabei jedoch den Daten-Container und pushen den Web-Container in die Registry. Zur Laufzeit überschreiben wir die Postgres- und Redis-Verbindungsdetails über Umgebungsvariablen.

Das Bereitstellen des neuen Images ist ein dreistufiger Prozess:

  1. Sichere Pre-Migrationen ausführen. Lass ECS diesen Befehl (mit dem neuen Image) ausführen:

     SKIP_POST_DEPLOYMENT_MIGRATIONS=1 rake db:migrate
    
  2. Das neue Image bereitstellen. Aktualisiere den ECS-Service.

  3. Post-Migrationen ausführen. Lass ECS diesen Befehl ausführen:

     SKIP_POST_DEPLOYMENT_MIGRATIONS=0 rake db:migrate
    

Es ist wahrscheinlich verschwenderisch, während des Image-Builds einen lokalen Daten-Container laufen zu lassen, aber dadurch können wir die standardmäßige web.template.yml verwenden, ohne uns Gedanken darüber machen zu müssen, welche Teile mit der Datenbank oder Redis kommunizieren.

8 „Gefällt mir“