#The following script will deploy a Laravel 5 applicaion on AWS Elastic Beanstalk. # Add to.ebextensions at the root of your application and name your commands file (e.g., commands.config). May 29, 2015 Laravel 5 Configurations in AWS Elastic Beanstalk. ('APPKEY', 'SomeRandomString’). A good one for laravel on beanstalk. If you are experiencing composer. CakePHP is an open source, MVC framework for PHP. This tutorial walks you through the process of generating a CakePHP project, deploying it to an Elastic Beanstalk environment, and configuring it to connect to an Amazon RDS database instance.
This middlware will ensure that your Laravel app will correctly recognise secure requests when running on Elastic Beanstalk with a Load Balancer.NOTE: make sure your web server is not publicly accessible and that the Load Balancer only have access (you can manage that through AWS security groups).
There is also a gist that does the exact same thing.
![For For](/uploads/1/2/6/1/126187490/543339545.png)
Installation
You can install this middleware through Composer
Usage
The simplest way to use the middleware is to add it as a global middleware in
app/Http/Kernel.php
but you are free to add it to a middleware group or directly into your controllers.
TL;DR
Laravel App Function
On Elastic Beanstalk (with a load balancer), all the requests are being 'proxied' to port 80. The load balancer will add the
x-forwarded-*
headers to the request.Laravel
Request
inherits from SymfonyComponentHttpFoundationRequest
, so it already supports the x-forwarded-*
headers, but it needs to be configured to look at those headers or you are going to get incorrect informations about the request (eg. $request->isSecure()
will always return false).The Amazon ELB don't have a static IP or a range to target, so you'll need to trust all proxies.Of course you need to make sure your web server will respond only to the load balancer.
Read also
Deploy Laravel 5 applications on AWS Elastic Beanstalk
gistfile1.sh
# The following script will deploy a Laravel 5 applicaion on AWS Elastic Beanstalk. |
# Add to .ebextensions at the root of your application and name your commands file (e.g., commands.config) |
# -------------------------------- Commands ------------------------------------ |
# Use 'commands' key to execute commands on the EC2 instance. The commands are |
# processed in alphabetical order by name, and they run before the application |
# and web server are set up and the application version file is extracted. |
# ------------------------------------------------------------------------------ |
commands: |
01updateComposer: |
command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update |
option_settings: |
- namespace: aws:elasticbeanstalk:application:environment |
option_name: COMPOSER_HOME |
value: /root |
- namespace: aws:elasticbeanstalk:container:php:phpini |
option_name: document_root |
value: /public |
- namespace: aws:elasticbeanstalk:container:php:phpini |
option_name: memory_limit |
value: 512M |
# Create RDS database, requires adding env variables. |
# Resources: |
# AWSEBRDSDatabase: |
# Type: AWS::RDS::DBInstance |
# Properties: |
# AllocatedStorage: 5 |
# DBInstanceClass: db.t1.micro |
# DBName: #insert db name |
# Engine: mysql |
# EngineVersion: 5.6 |
# MasterUsername: #insert name |
# MasterUserPassword: #insert pass |
# ---------------------------- Container Commands ------------------------------ |
# You can use the container_commands key to execute commands for your container. |
# The commands in container_commands are processed in alphabetical order by |
# name. They run after the application and web server have been set up and the |
# application version file has been extracted, but before the application |
# version is deployed. They also have access to environment variables such as |
# your AWS security credentials. Additionally, you can use leader_only. One |
# instance is chosen to be the leader in an Auto Scaling group. If the |
# leader_only value is set to true, the command runs only on the instance |
# that is marked as the leader. |
# |
# Artisan commands include environment flag for production. If you are not |
# deploying to a production environment, update the flag. |
# ------------------------------------------------------------------------------ |
container_commands: |
01express: |
command: 'echo AWS Container Commands started, starting Composer install.' |
02installComposer: |
command: 'php /opt/elasticbeanstalk/support/composer.phar install' |
cwd: '/var/app/ondeck' |
03express: |
command: 'echo Composer install completed, starting Laravel migration' |
04migrations: |
command: 'php artisan migrate --env=production' |
cwd: '/var/app/ondeck' |
05express: |
command: 'echo Completed Laravel migration, starting Laravel database seeding' |
06seeds: |
command: 'php artisan db:seed --env=production' |
cwd: '/var/app/ondeck' |
leader_only: true |
07express: |
command: 'echo Completed database seeting, Container Commands complete.' |
![App App](/uploads/1/2/6/1/126187490/879572395.png)
commented Apr 19, 2019
You rock |
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment