Laravel 5.x on Ubuntu 14.x, PHP 7.x, Nginx 1.9.x
#Steps to install latest Laravel, LEMP on AWS Ubuntu 14.4 version. This tutorial is the improvised verision of this tutorial on Digitalocean based on my experience.
Run the following commands in sequence.
sudo apt-get install -y language-pack-en-base
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install zip unzip
sudo apt-get install -y php7.0 php7.0-fpm php7.0-mysql php7.0-zip php7.0-gd
sudo apt-get install nginx git
Important packages for Laravel
sudo apt-get install mcrypt php7.0-mcrypt
sudo apt-get install -y php7.0-mbstring php7.0-xml --force-yes
Some Optional ones
sudo apt-get install php7.0-curl php7.0-json
NOTE: You can use the following command to list available PHP 7.0 packages:
sudo apt-cache search php7-*
Run the following command to go to php.ini
sudo nano /etc/php/7.0/fpm/php.ini
And uncomment and fix cgi.fix_pathinfo
to
cgi.fix_pathinfo=0
Restart PHP 7.0 FPM
sudo service php7.0-fpm restart
I am going to setup using a blank latest version of Laravel. This would installed in /var/www/laravel
folder.
Run the following in terminal:
sudo mkdir -p /var/www/laravel
Next, we are going to modify the nginx's default configuration file: /etc/nginx/sites-available/default
. But before that, just make a backup of the file:
sudo mkdir ~/Backups
sudo cp /etc/nginx/sites-available/default ~/Backups/default
Use the following command to edit the file
sudo nano /etc/nginx/sites-available/default
Next modify default
from this:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
}
to this:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/laravel/public;
index index.php index.html index.htm;
# Make site accessible from http://localhost/
server_name <Your Domain name / Public IP Address>;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$query_string;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Notice the difference:
try_files $uri $uri/ =404;
has been changed to try_files $uri $uri/ /index.php?$query_string;
location ~ \.php$ { ... }
block has been added.Restart nginx.
sudo service nginx restart
If all was configured well, you'd see no error.
Swap files would help in cases where your server might run out of memory.
sudo fallocate -l 1G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Use the following commands to install composer and make it available across all folders.
cd ~
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Test by composer
command to see if it was installed correctly.
Install laravel by using the following command.
sudo composer create-project laravel/laravel /var/www/laravel
In case it throws out errors due to missing packages, find the package name using
sudo service php7.0-fpm restart
and then remove and create the folder before running the composer create-project again.
sudo rm -rf /var/www/laravel
sudo mkdir /var/www/laravel
sudo chown -R :www-data /var/www/laravel
sudo chmod -R 775 /var/www/laravel/storage
Check your site by http://server_domain_or_IP
and it should show you "Laravel" homepage.
Installed a package that you don't need? Use the following commands to remove the package.
sudo apt-get purge <package name>
sudo apt-get autoremove --purge
Use following command to remove a folder and it's contents
sudo rm -rfv <folder_name>
Test PHP version
php -v
This is covered in this gist. Both gists were written in continuation.