web-dev-qa-db-ja.com

MySQLを使用したAWSEC2でLaravel 5の環境変数を設定する方法

laravel 5アプリをAWSEC2に正常にデプロイしました。また、AWS RDSを使用してMySQLデータベースを作成し、それをアプリインスタンスに関連付けました。

ここで、環境変数を設定して、開発中のローカルマシンではホームステッドのデフォルト値を使用し、デプロイおよび本番環境ではAWSデータベースを使用するようにします。

ここから、元の質問を大幅に編集して、質問してから学んだことを反映しました。

ローカル開発用のlaravelプロジェクトの古典的な.envは、おおよそ次のようになります。

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

本番環境では、本番環境変数を使用して新しい.envファイルを作成するだけであることがようやくわかりました。 AWSを使用する場合、私の.envファイルはおおよそ次のようになります。

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

今の私の質問/問題

AWS ebcliを使用してgitからアプリをデプロイします。しかし、最初にgitにプッシュせずに本番環境の.envファイルをデプロイするにはどうすればよいですか?

16
MartinJH

Ec2インスタンスに新しい.envを作成し、そこにすべてのenv変数を追加できます。 1つのオプションは、ボックスにSSHで接続し、viまたはcatを介してファイルを作成することです。または、外部の場所から.envをリモートでプルするスクリプトを作成することもできます。

ボックスにSSHで接続し、すべてのenv変数をexport APP_ENV=productionすることもできます(これがOSに適したコマンドであると想定しています)。

環境へのenv変数の追加は、ec2インスタンスが実行されているOSに依存するため、ソリューションはそれに依存します。 ec2には便利な「タグ」の概念がありますが、ドキュメントにはタグの数が10に制限されていることが示されているため、手動でec2インスタンスごとに行う必要がある場合があります:/

タグを使用してenv変数を取得および設定する1つの方法については、 ここ を参照してください(laravel固有ではありません)。

昨日、Elastic BeanstalkでLaravelを実行しているときに、これを実行しました。ソリューションはクリーンでした。実際には、awsコンソールから直接環境変数を設定できます(EBアプリ/環境->構成->ソフトウェア設定->環境プロパティ)。

更新:

理解すべき重要な概念は、Laravelは phpdotenv を使用して.envファイルからphpのグローバル$_ENVに変数をダンプするのに対し、既存のenv変数はphpがサーバーを起動すると自動的に$_ENVに含まれます( docs )。したがって、.envファイル自体は不要であり、実際には開発の利便性にすぎません(エラスティックに甘やかされていない限り)これまでのbeanstalk)。

17
Russ Matney

上記のRussMatneyが正しい答えを出したので、彼はチェックマークを取得します。私が物事をどのように機能させたかについての詳細を追加するために、ここに私自身の答えを書きます。データベースがセットアップされていて、必要なすべての資格情報を持っていることを前提としています。

1。エラスティックビーンズトークダッシュボードに移動します

eb dashboard


2。次に、ソフトウェア構成に移動します

eb software config


3。以下に示すように、本番環境変数を追加します。 PDOEXCEPTIONエラーを回避するために、ドキュメントルートを/ publicに設定し、データベースエンドポイントの最後に:3306を追加することを忘れないでください。

下の画像の拡大版を参照

environment variable configuration page


4。次にアプリのebインスタンスにSSHで接続します。 詳細はこちらをご覧ください 、または以下をお試しください:

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

Ec1-11-11-11-111.eu-central-1.compute.amazonaws.comがアプリのパブリックDNSであることに注意してください。あなたはここであなたのものを見つけるでしょう:

public dns at EC2 instance dashboard


5。アプリにCD:$ cd /var/app/current


6。ストレージフォルダーへの読み取り/書き込みアクセスを許可しないと、アプリがログフォルダーに書き込めず、実行時にエラーが発生します移行。アクセスを許可するには:$ Sudo chmod -R ugo+rw storage


7。最後に!必要に応じて、移行を実行し、他の職人のコマンドを実行してください。 $ php artisan migrate成功はgitbashから大まかに次のようになります:

Migration success on aws eb

22
MartinJH