Linux, Nginx, MySQL, PHP – LEMP Stack for Laravel on Ubuntu
This quick tutorial will guide to install LEMP stack for Laravel on Ubuntu OS.
Install PHP
- Install necessary php mods:
apt-get install nginx php5-fpm php5-cli php5-mcrypt php5-json php5-dev php-pear git - Enable mcrypt:
ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available php5enmod mcrypt - Modify /etc/php5/fpm/php.ini and change cgi.fix_pathinfo to 0:
cgi.fix_pathinfo=0 - Install opcache:
pecl install zendopcache-7.0.3 echo "zend_extension=/usr/lib/php5/20100525/opcache.so" > /etc/php5/mods-available/opcache.ini ln -s /etc/php5/mods-available/opcache.ini /etc/php5/conf.d/20-opcache.iniWe can also use the following configuration for opcache.ini file (In case your application only uses annotations at development time, you can achieve even better performance by adding opcache.save_comments=0 in your PHP configuration file as well.):
zend_extension=/usr/lib/php5/20100525/opcache.so opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1 - Restart php5-fpm:
service php5-fpm restart - Be sure php5-fpm is running at startup:
initctl list
Intall NGINX
- Install nginx:
apt-get install nginx - Create /etc/nginx/php5-fpm.conf as follow:
location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } - Remember to include the php5-fpm.conf file in nginx configuration for laravel project. Sample file is as follows:
server { listen 80 default_server; root /home/domainname/public; index index.html index.htm index.php; server_name domainname.com www.domainname.com; #access_log /var/log/nginx/local.laravel-access.log; access_log off; error_log /var/log/nginx/local.laravel-error.log error; charset utf-8; location ~* ^.+\.(jpg|jpeg|gif|png|ico|svg|css|zip|tgz|gz|rar|bz2|exe|pdf|doc|xls|ppt|txt|odt|ods|odp|odf|tar|bmp|rtf|js|mp3|avi|mpeg|flv|html|htm|mp4|woff|ttf|eot)$ { root /home/domainname/public; expires max; } location / { try_files \$uri \$uri/ /index.php?$query_string; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; } error_page 404 /index.php; include php5-fpm.conf; # The PHP5-FPM Magic Here # Deny .htaccess file access location ~ /\.ht { deny all; } }
Install MySQL/MariaDB
- For Percona server, check Setting up Nginx, HHVM, and Percona for Laravel
- For MariaDB:
- First, go to Repository configuration tool to add necessary source list to ubuntu. E.g. for Ubuntu 14.04:
sudo apt-get install software-properties-common sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db sudo add-apt-repository 'deb http://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/5.5/ubuntu trusty main'Note: If you only input “keyserver.ubuntu.com”, remember to open the TCP_OUT port 11371 or it will not be able to import necessary keys.
- Install mariadb server, client tools and driver for PHP:
sudo apt-get update sudo apt-get install mariadb-server mariadb-client php5-mysql - Done
- First, go to Repository configuration tool to add necessary source list to ubuntu. E.g. for Ubuntu 14.04:
That’s it. We can work on Laravel right now.

