So stellen Sie eine Rails 5.2 PostgreSQL-App auf AWS Elastic Beanstalk bereit

Es ist offiziell, Heroku für alle meine Rails-Projekte zu verwenden, hat mich bisher verdorben. Nachdem ich dank eines Pitch-Wettbewerbs einige AWS-Credits erhalten hatte, entschied ich mich, mein neuestes Projekt auf Elastic Beanstalk (AWS 'Heroku-Konkurrent) einzusetzen. Ich muss nur sagen, dass ich Heroku vermisse.

Wenn Sie sich in einer ähnlichen Situation befinden, finden Sie hier schrittweise Anweisungen zum Bereitstellen Ihrer Rails 5.2 / PostgreSQL-App auf Elastic Beanstalk.

Installieren der Elastic Beanstalk CLI

Wir werden das Terminal in diesem Tutorial verwenden. Beginnen wir mit der Installation der "Elastic Beanstalk Command Line Interface". So geht's unter macOS mit Homebrew:

brew install awsebcli

Wenn Sie eine andere Plattform verwenden, sollte das Googeln „Installieren von awsebcli auf [Ihrer Plattform]“ Sie in die richtige Richtung führen.

Elastische Bohnenstange initialisieren

Ich gehe davon aus, dass Sie bereits ein Amazon Web Services-Konto haben, wenn nicht, erstellen Sie eines. Gehen Sie nun in das Verzeichnis Ihres Projekts und initialisieren Sie Elastic Beanstalk:

cd my_projecteb init

Anschließend stellt Ihnen die EB CLI einige Fragen, um die Elastic Beanstalk-Anwendung zu initialisieren. Der Initialisierungsteil ist unkompliziert. Wenn Sie irgendwo hängen bleiben, lesen Sie die Seite „Konfigurieren der EB-CLI“ in der Dokumentation.

Eine neue Umgebung schaffen

Wie Sie bereits wissen, kann Ihre Anwendung viele Umgebungen haben (stellen Sie sich diese als unterschiedliche Konfigurationen vor). Beispielsweise haben Sie möglicherweise eine Produktionsumgebung. Dies ist die Umgebung, die Sie für die benutzerbezogene Version Ihrer App verwenden. Möglicherweise möchten Sie jedoch eine andere Umgebung mit dem Namen "Staging". Hier probieren Sie neue Versionen Ihrer App aus, bevor Sie sie in die Produktionsumgebung übertragen.

Mit dem folgenden Befehl können wir eine Umgebung erstellen:

eb create production

Bereitstellung auf Elastic Beanstalk

Angenommen, Sie verwenden Git, übernehmen Sie Ihre Änderungen, bevor Sie Ihre Anwendung bereitstellen. Die EB CLI stellt Ihr letztes Commit bereit. Wenn Sie vor dem Festschreiben bereitstellen, stellen Sie eine frühere Version Ihrer App bereit.

Stellen Sie nach dem Festschreiben Ihrer Änderungen Folgendes bereit:

eb deploy

So weit so gut, jetzt müssen wir ein paar Dinge einstellen, bevor unsere App tatsächlich funktioniert.

Hauptschlüssel einrichten

Sie können die CLI auch für diesen Zweck verwenden, ich bevorzuge jedoch die Verwendung des Webpanels. Hier ist, wie:

  1. Gehen Sie zu AWS, wählen Sie "Services -> Elastic Beanstalk" und klicken Sie dann auf Ihre Umgebung.
  2. Öffnen Sie die Registerkarte "Konfiguration" und klicken Sie unter dem Feld "Software" auf "Ändern".
  3. Fügen Sie unter "Umgebungseigenschaften" einen neuen Schlüssel mit dem Namen hinzu RAILS_MASTER_KEY. Stellen Sie den Wert auf den Inhalt Ihrer Datei "master.key" ein. Sie finden diese Datei im Verzeichnis "config" Ihrer Rails-App.
  4. Klicken Sie unten auf der Seite auf die Schaltfläche "Übernehmen".

Einrichten einer PostgreSQL-Datenbank

Elastic Beanstalk bietet eine einfache Möglichkeit, eine Datenbank einzurichten, die Sie über "Konfiguration -> Datenbank" erreichen können. Ich bevorzuge es, das nicht zu verwenden, da Ihre Datenbank gelöscht wird, wenn Sie Ihre Elastic Beanstalk-Umgebung neu erstellen müssen. Daher werden wir die Datenbank getrennt von unserer Elastic Beanstalk-Umgebung einrichten.

Erstellen einer PostgreSQL-Datenbank auf RDS

  1. Gehen Sie zu AWS und wählen Sie "Services -> RDS".
  2. Wählen Sie "Datenbank erstellen".
  3. Wählen Sie "PostgreSQL" und klicken Sie auf "Weiter".
  4. Wählen Sie Ihren Anwendungsfall "Produktion" oder "Entwicklung / Test" und klicken Sie auf "Weiter".
  5. Hier können Sie verschiedene Optionen ausprobieren und die geschätzten monatlichen Kosten ermitteln. Begnügen Sie sich mit etwas, das innerhalb Ihres Budgets liegt. Sie können mit einer db.t2.microInstanz, keiner Multi-AZ-Bereitstellung und einer Allzweck-SSD beginnen.
  6. Wählen Sie eine Instanzkennung, dies ist eine Art "Namespace".
  7. Wählen Sie einen Benutzernamen und ein Passwort, halten Sie diese vorerst bereit und klicken Sie auf "Weiter".
  8. Im Abschnitt "Erweiterte Einstellungen konfigurieren" sind die Sicherheitsgruppen wichtig. Wählen Sie "Vorhandene VPC-Sicherheitsgruppen auswählen" und wählen Sie die Sicherheitsgruppe aus, die wie folgt aussieht: "… -AWSEBSecurityGroup-…"
  9. Wählen Sie einen Datenbanknamen aus, z my_app_production.
  10. Klicken Sie auf "Datenbank erstellen". Dies dauert eine Weile.

Zugriff auf die Datenbank zulassen

Fügen Sie in der Zwischenzeit Postgres-Zugriff zu Ihrer Sicherheitsgruppe hinzu:

  1. Gehen Sie zu AWS und wählen Sie "Services -> EC2".
  2. Klicken Sie im linken Bereich auf "Sicherheitsgruppen".
  3. Wählen Sie die Sicherheitsgruppe aus dem vorherigen Abschnitt.
  4. Gehen Sie zur Registerkarte "Eingehend" und klicken Sie auf "Bearbeiten".
  5. Klicken Sie auf "Regel hinzufügen". Wählen Sie für "Typ" "PostgreSQL" und für "Quelle" die ID der Sicherheitsgruppe, zu der Sie diese Regel hinzufügen. Es sollte sich direkt über der Registerkarte "Eingehend" befinden und wie folgt aussehen sg-*.
  6. Klicken Sie auf "Speichern".

Einrichten der Produktionsdatenbankkonfiguration

Öffnen Sie nun in Ihrem Rails-Verzeichnis config/database.yml. Ändern Sie es als solches:

# ...
production: <<: *default database:  username:  password:  host:  port: 

Hinzufügen relevanter Umgebungsvariablen zu Elastic Beanstalk

Wir haben Rails angewiesen, die Informationen für die Produktionsdatenbank mithilfe der oben genannten Umgebungsvariablen abzurufen. Jetzt müssen wir sicherstellen, dass unsere Elastic Beanstalk-Umgebung die folgenden Variablen enthält:

  1. Gehen Sie zu AWS, wählen Sie "Services -> Elastic Beanstalk" und klicken Sie dann auf Ihre Umgebung.
  2. Öffnen Sie die Registerkarte "Konfiguration" und klicken Sie unter dem Feld "Software" auf "Ändern".
  3. Fügen Sie unter "Umgebungseigenschaften" die folgenden Schlüssel-Wert-Paare hinzu:
  4. RDS_DB_NAME: Datenbankname, den Sie beim Einrichten Ihrer Datenbank ausgewählt haben.
  5. RDS_USERNAME: Benutzername, den Sie beim Einrichten Ihrer Datenbank ausgewählt haben.
  6. RDS_PASSWORD: Passwort, das Sie beim Einrichten Ihrer Datenbank ausgewählt haben.
  7. RDS_HOSTNAME: Gehen Sie zu "Dienste -> RDS". Diese Informationen finden Sie im Abschnitt "Verbinden" auf der Informationsseite Ihrer Datenbankinstanz. Es heißt "Endpunkt".
  8. RDS_PORT: Stellen Sie dies auf 5432 ein.
  9. Klicken Sie unten auf der Seite auf die Schaltfläche "Übernehmen".

Danach legen Sie Ihr Rails-App-Verzeichnis erneut fest und führen es aus eb deploy. Möglicherweise möchten Sie einige Minuten warten, bevor Sie dies tun, da Elastic Beanstalk nach dem Aktualisieren der Umgebungsvariablen einige Aufgaben im Hintergrund ausführt.

Nach diesen Schritten sollte Ihre Rails-App ausgeführt werden.

Funktioniert immer noch nicht?

Wenn Probleme auftreten, können Sie im AWS-Webpanel zu Ihrer EB-Umgebung wechseln, auf "Protokolle" klicken und "Protokolle anfordern -> Letzte 100 Zeilen" auswählen, um die Protokolle anzuzeigen. Bevor Sie dies tun, würde ich empfehlen, Ihre Rails-App mithilfe der Produktionsumgebung auf Ihrem lokalen Computer unter Verwendung des Kommas nd rails s RAILS_ENV=productauszuführen.

Ich gebe als Erster zu, dass ich nicht die erfahrenste Person bin, wenn es um den Einsatz geht. Wie gesagt, ich habe Heroku in der Vergangenheit immer verwendet und werde es wahrscheinlich auch für meine zukünftigen Projekte verwenden. Diese Schritte funktionierten für mich, nachdem ich mich ein paar Tage lang am Kopf gekratzt hatte, als ich versuchte, meine Rails-App auf Elastic Beanstalk einzurichten. Deshalb wollte ich diese in der Hoffnung teilen, Zeit für Menschen zu sparen, die sich in der gleichen Situation wie ich befinden. Also, nimm das alles mit einem Körnchen Salz und viel Glück!

Wenn Ihnen dieser Artikel gefällt, folgen Sie mir auf Twitter oder abonnieren Sie meinen Newsletter, um benachrichtigt zu werden, wenn ich neue Artikel schreibe. Ich schreibe über Software und Startups.

Wenn Sie einen Rails-Entwickler suchen, bin ich derzeit für Remote-Arbeiten verfügbar. Nehmen Sie unter hi {at} evrim.io Kontakt mit mir auf.

Ursprünglich veröffentlicht auf evrim.io am 28. November 2018.