Install Laravel 5 on Nginx

The below Laravel install and setup instructions are derived from forum thread here. It goes as far as proper install and Nginx vhost configuration for Centmin Mod Nginx. However, the rest of Laravel usage is up to you. I have never used Laravel myself beyond just test installation using below steps. If there's any suggestions and/or corrections to the steps and configuration, please post them to the forum thread here

Below steps are derived from official Laravel documentation at

Getting Started guide steps particular step 1 and 2 to create new Nginx vhost via centmin.sh menu option 2, created a domain called newdomain1.com so end up with:

vhost for newdomain1.com created successfully
vhost conf file for newdomain1.com created: /usr/local/nginx/conf/conf.d/newdomain1.com.conf
upload files to /home/nginx/domains/newdomain1.com/public
vhost log files directory is /home/nginx/domains/newdomain1.com/log

Disable apc.enable_cli if you use APC Cache

sed -i 's/apc.enable_cli=1/apc.enable_cli=0/' /etc/centminmod/php.d/apc.ini
fpmrestart
php -i | grep apc.enable_cli

Disable Zend Opcache opcache.enable_cli if enabled. It's usually disabled by default opcache.enable_cli=0

sed -i 's/opcache.enable_cli=1/opcache.enable_cli=0/' /etc/centminmod/php.d/zendopcache.ini
fpmrestart
php -i | grep opcache.enable_cli

Install composer globally

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Check composer works

composer --help

Using composer create-project command Composer to create a new project called, myprojectname by first changing to /home/nginx/domains/newdomain1.com top level directory of your account setup via centmin.sh menu option 2

So your Laravel project ends up at /home/nginx/domains/newdomain1.com/myprojectname

cd /home/nginx/domains/newdomain1.com
composer create-project laravel/laravel myprojectname --prefer-dist

Setup nginx user/group permissions and permissions of storage directory

chown -R nginx:nginx /home/nginx/domains/newdomain1.com/myprojectname
chmod -R 0770 /home/nginx/domains/newdomain1.com/myprojectname/storage

Check directory ownership/permissions

ls -lah /home/nginx/domains/newdomain1.com/myprojectname/
total 164K
drwxr-sr-x 11 nginx nginx 4.0K Aug 31 02:03 .
drwxr-s---  7 nginx nginx   76 Aug 31 01:59 ..
drwxr-sr-x 10 nginx nginx  134 Aug 30 11:31 app
-rwxr-xr-x  1 nginx nginx 1.7K Aug 30 11:31 artisan
drwxr-sr-x  3 nginx nginx   51 Aug 30 11:31 bootstrap
-rw-r--r--  1 nginx nginx 1.2K Aug 30 11:31 composer.json
-rw-r--r--  1 nginx nginx 103K Aug 31 02:03 composer.lock
drwxr-sr-x  2 nginx nginx 4.0K Aug 30 11:31 config
drwxr-sr-x  5 nginx nginx   68 Aug 30 11:31 database
-rw-r--r--  1 nginx nginx  323 Aug 31 02:03 .env
-rw-r--r--  1 nginx nginx  307 Aug 30 11:31 .env.example
-rw-r--r--  1 nginx nginx   61 Aug 30 11:31 .gitattributes
-rw-r--r--  1 nginx nginx   57 Aug 30 11:31 .gitignore
-rw-r--r--  1 nginx nginx  503 Aug 30 11:31 gulpfile.js
-rw-r--r--  1 nginx nginx  159 Aug 30 11:31 package.json
-rw-r--r--  1 nginx nginx   87 Aug 30 11:31 phpspec.yml
-rw-r--r--  1 nginx nginx  899 Aug 30 11:31 phpunit.xml
drwxr-sr-x  2 nginx nginx   73 Aug 30 11:31 public
-rw-r--r--  1 nginx nginx 1.9K Aug 30 11:31 readme.md
drwxr-sr-x  5 nginx nginx   42 Aug 30 11:31 resources
-rw-r--r--  1 nginx nginx  567 Aug 30 11:31 server.php
drwxrws---  5 nginx nginx   43 Aug 30 11:31 storage
drwxr-sr-x  2 nginx nginx   47 Aug 30 11:31 tests
drwxr-sr-x 28 nginx nginx 4.0K Aug 31 02:03 vendor

Check version of Laravel installed

cd /home/nginx/domains/newdomain1.com/myprojectname
php artisan -V
Laravel Framework version 5.1.12 (LTS)

For Centmin Mod .08 beta and higher, need to edit /usr/local/nginx/conf/php.conf and modify and comment out the open_basedir path as that prevents laravel from finding and accessing the rest of the projects files. You can use command short cut to edit /usr/local/nginx/conf/php.conf

phpinc

then comment out with hash # in front this line

#fastcgi_param PHP_ADMIN_VALUE open_basedir=$document_root/:/usr/local/lib/php/:/tmp/;

so it shows up as

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass   127.0.0.1:9000;
    #fastcgi_pass   unix:/tmp/php5-fpm.sock;
    fastcgi_index  index.php;
    #fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_FILENAME    $request_filename;
    #fastcgi_param PHP_ADMIN_VALUE open_basedir=$document_root/:/usr/local/lib/php/:/tmp/;

If you use Centmin Mod .07 stable you can ignore commenting out open_base_dir line

Then setup your Nginx vhost that was generated via centmin.sh menu option 2 at /usr/local/nginx/conf/conf.d/newdomain1.com.conf

change from default format below

# Centmin Mod Getting Started Guide
# must read http://centminmod.com/getstarted.html

# redirect from non-www to www
# uncomment, save file and restart Nginx to enable
# if unsure use return 302 before using return 301
#server {
#            listen   80;
#            server_name newdomain1.com;
#            return 301 $scheme://www.newdomain1.com$request_uri;
#       }

server {
  server_name newdomain1.com www.newdomain1.com;

# ngx_pagespeed & ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

  # limit_conn limit_per_ip 16;
  # ssi  on;

  access_log /home/nginx/domains/newdomain1.com/log/access.log combined buffer=256k flush=5m;
  error_log /home/nginx/domains/newdomain1.com/log/error.log;

  root /home/nginx/domains/newdomain1.com/public;

  location / {

# block common exploits, sql injections etc
#include /usr/local/nginx/conf/block.conf;

  # Enables directory listings when index file not found
  #autoindex  on;

  # Shows file listing times as local time
  #autoindex_localtime on;

  # Enable for vBulletin usage WITHOUT vbSEO installed
  # More example Nginx vhost configurations at
  # http://centminmod.com/nginx_configure.html
  #try_files            $uri $uri/ /index.php;

  }

  include /usr/local/nginx/conf/staticfiles.conf;
  include /usr/local/nginx/conf/php.conf;
  include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  include /usr/local/nginx/conf/vts_server.conf;  
}

to this format with custom root doc root path at /home/nginx/domains/newdomain1.com/myprojectname/public

# Centmin Mod Getting Started Guide
# must read http://centminmod.com/getstarted.html

# redirect from non-www to www
# uncomment, save file and restart Nginx to enable
# if unsure use return 302 before using return 301
#server {
#            listen   80;
#            server_name newdomain1.com;
#            return 301 $scheme://www.newdomain1.com$request_uri;
#       }

server {
  server_name newdomain1.com www.newdomain1.com;

# ngx_pagespeed & ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

  access_log /home/nginx/domains/newdomain1.com/log/access.log combined buffer=256k flush=5m;
  error_log /home/nginx/domains/newdomain1.com/log/error.log;

  root /home/nginx/domains/newdomain1.com/myprojectname/public;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  include /usr/local/nginx/conf/staticfiles.conf;
  include /usr/local/nginx/conf/php.conf;
  include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  include /usr/local/nginx/conf/vts_server.conf;  
} 

Then restart Nginx and PHP-FPM services

using command shortcuts restart Nginx

ngxrestart

using command shortcuts restart PHP-FPM

fpmrestart

using command shortcuts restart Nginx + PHP-FPM at same time

nprestart

Then go to newdomain1.com in web browser and should see the Laravel 5 defaul placeholder page.