Laravel is a free, open-source PHP web framework, created by Taylor Otwell and intended for the development of web applications following the model–viewcontroller (MVC) architectural pattern. Here is a memo when I had setup it.

Package version:

  • Vagrant 2.0.2
  • PHP 7.0.27
  • nginx version: nginx/1.12.2
  • mysqld  Ver 5.6.39

1. Vagrant setup

  • vagrant download from here. then open .dmg file and proceed install.
MacBook-Pro:~ Tadashi$ mkdir ~/vagrant
MacBook-Pro:~ Tadashi$ cd vagrant
MacBook-Pro:~ Tadashi$ mkdir centos7
MacBook-Pro:~ Tadashi$ cd centos7
MacBook-Pro:~ Tadashi$ vagrant init centos/7

Then modify Vagrant file.

MacBook-Pro:centos7_ph7cms Tadashi$ cat Vagrantfile 
# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "centos/7"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  config.vm.provider "virtualbox" do |vb|
    vb.cpus = 2
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
end
MacBook-Pro:~ Tadashi$ vagrant up
MacBook-Pro:~ Tadashi$ vagrant ssh

2. PHP install

[vagrant@localhost ~]$ sudo su
[root@localhost vagrant]# yum install -y epel-release
[root@localhost vagrant]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
[root@localhost vagrant]# yum -y install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-mysql php-xml php-fpm php-pecl-zip

3. Nginx install

[root@localhost vagrant]# yum install -y nginx

4. MySQL install

[root@localhost vagrant]# yum install -y http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
[root@localhost vagrant]# yum --enablerepo=mysql56-community install -y mysql-community-server

5. php-fpm setup

[root@localhost vagrant]# vi /etc/php-fpm.d/www.conf
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
[root@localhost vagrant]# chmod -R 777 /var/lib/php
[root@localhost vagrant]# systemctl start php-fpm.service 
[root@localhost vagrant]# systemctl enable php-fpm.service

6. Nginx setup

[root@localhost vagrant]# vi /etc/nginx/nginx.conf
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  192.168.33.10;
        root         /usr/share/nginx/app/public;
        index        index.php;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
	        try_files $uri $uri/ /index.php?$args;
	        index	index.php;
        }
        location ~ \.php$ {
                root           /usr/share/nginx/app/public;
                fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
                include        fastcgi_params;
    	}
        location ~ /\.ht {
                deny  all;
    	}
[root@localhost vagrant]# systemctl start nginx
[root@localhost vagrant]# systemctl enable nginx

7. MySQL setup

[root@localhost vagrant]# systemctl start mysqld.service
[root@localhost vagrant]# systemctl enable mysqld.service
[root@localhost vagrant]# mysql_secure_installation
... set up appropriately
[root@localhost vagrant]# mysql -u root -p
mysql> CREATE DATABASE laravel_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> quit

8. composer install

[root@localhost vagrant]# curl -sS https://getcomposer.org/installer | php -- --install-dir=/tmp
[root@localhost vagrant]# mv /tmp/composer.phar /usr/local/bin/composer
[root@localhost vagrant]# ln -s /usr/local/bin/composer /bin
[root@localhost vagrant]#

9. Laravel install

[root@localhost vagrant]# cd /usr/share/nginx/
[root@localhost nginx]# composer create-project laravel/laravel app --prefer-dist

[root@localhost nginx]# chown -R nginx:nginx app/
[root@localhost nginx]# sudo chmod 777 -R app/storage app/bootstrap/cache
[root@localhost nginx]# vi app/.env
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=password

10. System setup

[root@localhost html]# vi /etc/sysconfig/selinux 
SELINUX=disabled
[root@localhost html]# 

11. Reboot

[root@localhost html]# reboot
[root@localhost html]# 

12. http://192.168.33.10

Now laravel setup has been completed. Hope this will help you 😉