AWS : Setup Laravel on aws ec2



How to Host a Laravel App on AWS EC2 – Step-by-Step Guide

This guide walks you through launching a Laravel app on AWS EC2 from scratch.

1. Launch EC2 Instance

  1. Open EC2 Dashboard > Launch Instance
  2. Choose Amazon Linux 2023 AMI (or Ubuntu)
  3. Instance Type: t2.micro (Free Tier)
  4. Create/Use Key Pair
  5. Security Group: Allow ports 22, 80, 443

2. Connect via SSH

ssh -i your-key.pem ec2-user@YOUR_PUBLIC_IP

3. Install Apache, PHP, Git, Composer

sudo yum update -y
sudo yum install -y httpd php php-cli php-mysqlnd php-mbstring php-xml php-bcmath unzip git
sudo systemctl start httpd
sudo systemctl enable httpd

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer

4. Install Laravel App

cd /var/www/html
sudo git clone https://github.com/your-repo/laravel-app.git
cd laravel-app
sudo composer install
sudo cp .env.example .env
sudo php artisan key:generate

5. Set Permissions

sudo chown -R apache:apache /var/www/html/laravel-app
sudo chmod -R 775 storage bootstrap/cache

6. Configure Apache Virtual Host (Optional)

sudo nano /etc/httpd/conf.d/laravel.conf

Example config:

<VirtualHost *:80>
    DocumentRoot "/var/www/html/laravel-app/public"
    <Directory "/var/www/html/laravel-app/public">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
sudo systemctl restart httpd

7. Install MariaDB

sudo yum install -y mariadb105-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation

8. Create Database

sudo mysql -u root -p
CREATE DATABASE laravel_db;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

9. Update Laravel .env

DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=password

10. Run Migrations (If Any)

php artisan migrate

🎉 Done!

Visit http://YOUR_EC2_PUBLIC_IP to see your Laravel app in action.