[英]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儀表板
2.接下來轉到您的軟件配置
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。 你會在這里找到你的:
5. cd到你的應用程序: $ cd /var/app/current
6.授予對存儲文件夾的讀/寫訪問權限,否則應用程序無法寫入日志文件夾,並且在運行遷移時會導致錯誤。 提供訪問: $ sudo chmod -R ugo+rw storage
7.終於! 如果您願意,可以運行您的遷移並執行其他工匠命令! $ php artisan migrate
成功應該從gitbash大致看起來像這樣:
您可以在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.