Recently, I went to install the Laravel PHP framework on a fresh virtual machine. Here are the steps that I went through.
First of all, I created a directory for my project and made this my current directory.
$ mkdir myproject $ cd myproject
I decided to use Composer to install Laravel. In order to install Composer I needed to use curl. So, I needed to install curl.
$ sudo apt-get install curl $ curl -sS https://getcomposer.org/installer | php
If you want to execute composer directly, so instead of typing…
$ php composer.phar
You can do the following…
$ sudo chmod +x composer.phar $ composer.phar
If you want composer to be globally accessible from any folder on your Linux environment, then use the following…
$ mv composer.phar /usr/local/bin/composer
Next, I went to install Laravel. Here, I got an error saying “Mcrypt PHP extension required”. This was resolved as follows.
$ sudo apt-get install php5-mcrypt
Then, I tested mcrypt as follows.
$ php --ri mcrypt Extension 'mcrypt' not present.
So, I needed to more than just install mcrypt. This was resolved as follows.
$ sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available $ sudo php5enmod mcrypt $ sudo service apache2 restart
Now, I could test as below.
$ php --ri mcrypt mcrypt mcrypt support => enabled mcrypt_filter support => enabled Version => 2.5.8 Api No => 20021217 Supported ciphers => cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes Supported modes => cbc cfb ctr ecb ncfb nofb ofb stream Directive => Local Value => Master Value mcrypt.algorithms_dir => no value => no value mcrypt.modes_dir => no value => no value
Finally, I was ready to install Laravel using Composer. In the following command, I use the folder name “back-end” to store my Larvel files.
$ php composer.phar create-project laravel/laravel back-end –-prefer-dist
There is a note on the Laravel documentation that Laravel needs to configure folders within app/storage with write access by the web server. I achieved this as follows.
$ cd back-end/app $ sudo chown -R www-data:www-data storage
Next, I wanted to set to Apache virtual hosting to point to my Laravel public folder. As in a previous blog entry, I copied my /etc/apache2/sites-available/000-default.conf to mysite.conf.
$ cd /etc/apache2/sites-available/ $ cp 000-default.conf mysite.conf
In mysite.conf, I updated the DocumentRoot directive to point to my local repository. The extract from mysite.conf is as follows. The public folder is Laravel’s public folder.
... DocumentRoot "/home/myuser/myproject/back-end/public/" <Directory "/home/myuser/myproject/back-end/public/"> Options Indexes FollowSymLinks MultiViews # changed from None to All AllowOverride All Require all granted </Directory> ...
Note the line “Require all granted”. This command has been updated from my earlier blog post and is required by Apache 2.4. One of my previous blog entries listed the following lines instead. These are now out of date.
Order allow,deny Allow from all
Once mysite.conf was updated, I used the following commands to activate the new virtual host. I disabled the default site, enabled my virtual site and reloaded Apache.
$ sudo a2dissite 000-default && sudo a2ensite mysite $ sudo service apache2 reload
Finally, I tested my Laravel installation by loading localhost on my web browser to get Lavavel’s default home page.