簡體   English   中英

如何使用MySQL在AWS EC2上為Laravel 5設置環境變量

[英]How to set environment variables for Laravel 5 on AWS EC2 with MySQL

我已成功將我的laravel 5應用程序部署到AWS EC2。 我還使用AWS RDS創建了一個MySQL數據庫,並將其與我的應用實例相關聯。

現在我想設置我的env變量,以便在我開發的本地機器上使用homesteads默認值,在部署和生產時使用我的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 eb cli從git部署我的應用程序。 但是如何部署我的生產.env文件而不必先將其推送到git?

上面的Russ Matney給出了正確的答案,所以他得到了復選標記。 我會在這里寫下自己的答案,詳細說明我如何使事情發揮作用。 我假設您確實已設置數據庫並擁有所需的所有憑據。

1.轉到彈性beanstalk儀表板

eb儀表板


2.接下來轉到您的軟件配置

eb軟件配置


3.添加生產環境變量,如下所示。 請記住將doc root設置為/ public,並在數據庫端點的末尾添加:3306以避免PDOEXCEPTION錯誤。

請參閱下面的更大版本的圖片

環境變量配置頁面


4.下一個SSH進入你的應用程序eb實例。 請在此處查看詳細信息 ,或嘗試以下操作:

$ ssh -i path/to/your/key/pair/pem/file.pem ec2-user@ec1-11-11-11-111.eu-central-1.compute.amazonaws.com

請注意ec1-11-11-11-111.eu-central-1.compute.amazonaws.com是您的應用程序公共DNS。 你會在這里找到你的:

EC2實例儀表板上的公共DNS


5. cd到你的應用程序: $ cd /var/app/current


6.授予對存儲文件夾的讀/寫訪問權限,否則應用程序無法寫入日志文件夾,並且在運行遷移時會導致錯誤。 提供訪問: $ sudo chmod -R ugo+rw storage


7.終於! 如果您願意,可以運行您的遷移並執行其他工匠命令! $ php artisan migrate成功應該從gitbash大致看起來像這樣:

在aws eb上遷移成功

您可以在ec2實例上創建一個新的.env,並在其中添加所有env變量。 一個選項是ssh-ing到框中並通過vi或cat創建文件。 或者您可以編寫一個腳本來遠程從外部位置拉入.env。

您也可以在框中輸入並export APP_ENV=production所有的env變量(假設這是您的操作系統的正確命令)。

將env變量添加到您的環境將取決於您的ec2實例正在運行的操作系統,因此解決方案將依賴於此。 ec2有一個“標簽”的概念可能很有用,但文檔顯示它們將標簽數量限制為10,所以你可能需要手動完成每個ec2實例:/

請參閱此處了解一種方法,該方法使用標記來引入並設置env變量(非特定於laravel)。

我昨天剛剛經歷了這個問題,同時讓Laravel在Elastic Beanstalk上運行,解決方案很干凈。 您實際上可以通過aws控制台直接設置env變量(EB app / environment - > Configuration - > Software Configuration - > Environment Properties)。

更新:

理解的關鍵概念是Laravel只使用phpdotenv將。變量文件中的變量轉儲到php的全局$_ENV ,而當php啟動服務器( docs )時,任何現有的env變量都會自動包含在$_ENV 所以.env文件本身是不必要的,實際上只是開發方便。 (除非我剛剛被彈性豆莖破壞了)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM