So legen Sie Umgebungsvariablen für Laravel 5 auf AWS EC2 mit MySQL fest

Lesezeit: 6 Minuten

So legen Sie Umgebungsvariablen fur Laravel 5 auf AWS EC2
MartinJH

Ich habe meine Laravel 5-App erfolgreich in AWS EC2 bereitgestellt. Außerdem habe ich mit AWS RDS eine MySQL-Datenbank erstellt und mit meiner App-Instanz verknüpft.

Jetzt möchte ich meine env-Variablen so einstellen, dass sie die Standardwerte von Gehöften verwendet, wenn sie sich auf meinem lokalen Computer in der Entwicklung befinden, und meine AWS-Datenbank, wenn sie bereitgestellt und in der Produktion ist.

Von hier aus habe ich meine ursprüngliche Frage grundlegend geändert, um das widerzuspiegeln, was ich seit der Frage gelernt habe

Das klassische .env in einem Laravel-Projekt für die lokale Entwicklung sieht ungefähr so ​​aus:

APP_ENV=local
APP_DEBUG=true
APP_KEY=BF3nmfzXJ2T6XU8EVkyHtULCtwnakK5k (Note, not a real key)

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

Für die Produktion habe ich endlich verstanden, dass ich einfach eine neue .env-Datei mit meinen Produktionsvariablen erstelle. Bei der Verwendung von AWS würde meine .env-Datei ungefähr so ​​aussehen:

APP_ENV=production
APP_DEBUG=false
APP_KEY=BF3nmfzXJ2T6XU8EVkyHtULCtwnakK5k (Note, not a real key)

DB_HOST=aaxxxxxxxxxxxxx.cyxxxxxxxxxx.eu-central-1.rds.amazonaws.com:3306
DB_DATABASE=MyAppsDatabaseName
DB_USERNAME=MyAWSRDSUserName
DB_PASSWORD=NotARealPassword

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

Meine Frage/Problem jetzt

Ich verwende AWS eb cli, um meine App von git aus bereitzustellen. Aber wie stelle ich meine .env-Produktionsdatei bereit, ohne sie zuerst auf Git pushen zu müssen?

  • Haben Sie Ihre .env-Datei in die Quellcodeverwaltung aufgenommen? NICHT

    – ultimativ

    25. Februar ’15 um 14:44

  • Nein, habe ich nicht 🙂 Es wird standardmäßig in .gitignore ignoriert. Aber ich gehe davon aus, dass es in AWS hochgeladen wird, wenn ich es tue eb deploy. Sonst kann Laravel es nicht lesen… oder?

    – MartinJH

    25. Februar ’15 um 14:51

  • Hast du das schon mal gelöst?

    – Phil Lawlor

    20. Mai ’15 um 17:18

  • Nicht in der Praxis, aber ich glaube, ich habe die Methode dafür gefunden. Es wird von Jeffrey Way auf seinem beschrieben Laracast 5 Folge 17 “Midterm Review”. Er beginnt um 8.31 Uhr mit der Überprüfung von .env und sagt um 9.14 Uhr: “Sobald Sie dies bereitgestellt haben, erstellen Sie eine weitere .env-Datei auf Ihrem Produktionsende. Das ist also das Wichtigste zu verstehen.“Die Frage für mich ist jetzt, wie ich eine Datei in AWS bereitstelle, ohne sie zuerst auf git zu pushen…

    – MartinJH

    20. Mai ’15 um 18:23


  • Genau das was wir denken…

    – Phil Lawlor

    20. Mai ’15 um 18:41

So legen Sie Umgebungsvariablen fur Laravel 5 auf AWS EC2
MartinJH

Russ Matney hat oben die richtige Antwort gegeben, also bekommt er das Häkchen. Ich schreibe hier meine eigene Antwort, um Details dazu hinzuzufügen, wie ich die Dinge zum Laufen gebracht habe. Ich gehe davon aus, dass Sie Ihre Datenbank eingerichtet haben und über alle erforderlichen Anmeldeinformationen verfügen.

1. Gehen Sie zu Ihrem elastischen Bohnenrank-Dashboard

eb-Dashboard


2. Als nächstes gehen Sie zu Ihrer Softwarekonfiguration

eb-Softwarekonfiguration


3. Fügen Sie Ihre Produktionsumgebungsvariablen wie unten gezeigt hinzu. Denken Sie daran, das Doc-Root auf /public zu setzen, und fügen Sie auch :3306 am Ende Ihres Datenbankendpunkts hinzu, um den PDOEXCEPTION-Fehler zu vermeiden.

Siehe größere Version des Bildes unten

Konfigurationsseite für Umgebungsvariablen


4. Als nächstes SSH in Ihre Apps eb-Instanz. Weitere Informationen finden Sie hier oder versuchen Sie Folgendes:

$ ssh -i path/to/your/key/pair/pem/file.pem [email protected]

Beachten Sie, dass ec1-11-11-11-1111.eu-central-1.compute.amazonaws.com das öffentliche DNS Ihrer Apps ist. Hier finden Sie Ihren:

öffentliches DNS im EC2-Instanz-Dashboard


5. CD zu Ihrer App: $ cd /var/app/current


6. Gewähren Sie Lese-/Schreibzugriff auf Ihren Speicherordner oder die App kann nicht in den Protokollordner schreiben und dies führt zu einem Fehler beim Ausführen der Migrationen. Zugriff gewähren: $ sudo chmod -R ugo+rw storage


7. Endlich! Führen Sie Ihre Migrationen aus und führen Sie andere handwerkliche Befehle aus, wenn Sie möchten! $ php artisan migrate Der Erfolg sollte von gitbash in etwa so aussehen:

Migrationserfolg auf aws eb

  • Danke für dieses Detail, es hat mir auch beim Laufen geholfen. Eine Anmerkung, die ich hinzufügen möchte: Meine letzten Kopfschmerzen vor der reibungslosen Bereitstellung bestand darin, die Sicherheitsgruppe der RDS-Instanz zu aktualisieren, um Verbindungen von der ec2-App selbst zuzulassen. Habe hier eine nützliche (wenn auch etwas veraltete) Anleitung gefunden: blog.goforyt.com/laravel-aws-elastic-beanstalk-dev-guide

    – Russ Matney

    2. Juni ’15 um 14:49

  • @MartinJH eine Möglichkeit, mit uns in Kontakt zu treten? Ich finde das WIRKLICH schwer und kann eine Hand gebrauchen…

    – ackerchez

    13. Dezember ’16 um 10:31

  • @ackerchez Fühlen Sie sich frei, Ihre Fragen hier zu schreiben, oder senden Sie mir eine E-Mail an martin_hammer AT live.dk 🙂

    – MartinJH

    13. Dezember ’16 um 11:06

So legen Sie Umgebungsvariablen fur Laravel 5 auf AWS EC2
Russ Matney

Sie könnten eine neue .env-Datei auf Ihrer ec2-Instanz erstellen und alle env-Variablen darin hinzufügen. Eine Möglichkeit wäre, in die Box zu ssh-ing und die Datei über vi oder cat zu erstellen. Oder Sie könnten ein Skript schreiben, um die .env-Datei aus der Ferne von einem externen Speicherort zu laden.

Du könntest auch in die Box ssh und export APP_ENV=production alle Ihre env vars (vorausgesetzt, dies ist der richtige Befehl für Ihr Betriebssystem).

Das Hinzufügen von Umgebungsvariablen zu Ihrer Umgebung hängt vom Betriebssystem ab, auf dem Ihre ec2-Instanz ausgeführt wird, sodass die Lösung davon abhängt. ec2 hat ein Konzept von ‘Tags’, das nützlich sein könnte, aber die Dokumentation zeigt, dass die Anzahl der Tags auf 10 begrenzt ist, sodass Sie dies möglicherweise manuell und pro ec2-Instanz tun müssen :/

Sehen Sie hier für eine Methode, die Tags verwendet, um env vars (nicht laravel-spezifisch) einzufügen und festzulegen.

Ich habe das gestern gerade durchgemacht, als ich Laravel auf Elastic Beanstalk zum Laufen brachte, die Lösung war sauber. Sie können die Umgebungsvariablen tatsächlich direkt über die AWS-Konsole einstellen (EB-App/Umgebung -> Konfiguration -> Softwarekonfiguration -> Umgebungseigenschaften).

Aktualisieren:

Das zu verstehende Schlüsselkonzept ist, dass Laravel nur phpdotenv um vars aus der .env-Datei in das globale php von $_ENV, wobei alle bereits vorhandenen env vars automatisch mit eingeschlossen werden $_ENV Wenn PHP den Server startet (Dokumente). Die .env-Datei selbst ist also unnötig, wirklich nur eine Annehmlichkeit für die Entwickler. (es sei denn, ich wurde bisher nur von elastischer Bohnenranke verwöhnt).

  • Ich habe deine Antwort gesehen. Werde mich mit den Ergebnissen zurückmelden und die Antwort akzeptieren, wenn sie gültig ist, NACHDEM ich das verdammt habe php artisan migrate um an meiner eb-Instanz zu arbeiten…

    – MartinJH

    29. Mai ’15 um 21:18 Uhr


.

180600cookie-checkSo legen Sie Umgebungsvariablen für Laravel 5 auf AWS EC2 mit MySQL fest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy