Skip to content

Instantly share code, notes, and snippets.

@kbond kbond/post.md
Last active Sep 8, 2019

Embed
What would you like to do?
Ubuntu LAMP Development Environment Setup

Install git:

sudo apt-get install git

Configure Git:

touch ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global
git config --global user.name "Your Name"
git config --global user.email "Your Email"

ssh-keygen -t rsa -C "Your Email"
cat ~/.ssh/id_rsa.pub

(Optional) Use PHP 5.4.x:

sudo add-apt-repository ppa:ondrej/php5-oldstable
sudo apt-get update

(Optional) Use PHP 5.5.x:

sudo add-apt-repository ppa:ondrej/php5
sudo apt-get update

(Optional) Use PHP 5.6.x:

sudo add-apt-repository ppa:ondrej/php5-5.6
sudo apt-get update

Install apache/php:

sudo apt-get install apache2 php5 php5-cli libapache2-mod-php5 php5-dev

Ensure this worked by visiting http://localhost/. You should see It works!.

Edit your php.ini:

sudo nano /etc/php5/cli/php.ini
  1. Add a timezone

     date.timezone = America/New_York
    
  2. Turn off short tags

     short_open_tag = Off
    
  3. Increase xdebug.max_nesting_level

     xdebug.max_nesting_level = 250
    

Install mysql (enter through password prompts to use use defaults):

sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

Install phpmyadmin (choose apache2 and enter through password prompts to use default):

sudo apt-get install phpmyadmin

Edit phpmyadmin config.inc.php:

sudo nano /etc/phpmyadmin/config.inc.php

Add/edit the following (around page 42):

// ...

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'config';

$cfg['Servers'][$i]['AllowNoPassword'] = TRUE;
$cfg['Servers'][$i]['user'] = 'root';
/* Server parameters */

// ...

Ensure this worked by visiting http://localhost/phpmyadmin.

Install useful php modules:

sudo apt-get install php5-mcrypt php5-xdebug php5-curl php5-sqlite php5-xsl php-pear php-apc

Change php.ini directory for apache to use the same config as cli:

Edit /etc/apache2/mods-enabled/php5.load to look like the following:

PHPIniDir "/etc/php5/cli"

LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

Install PHPUnit:

sudo pear config-set auto_discover 1
sudo pear install pear.phpunit.de/PHPUnit

Install Composer:

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

Install node.js/npm:

sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

Install some npm modules:

sudo npm install -g bower
sudo npm install -g uglify-js
sudo npm install -g uglifycss
sudo npm install -g grunt-cli
sudo npm install -g zombie

Appendix

A. Configure Apache Sites

Enable Apache mods:

sudo a2enmod rewrite vhost_alias

Add Apache site:

sudo nano /etc/apache2/sites-available/dev

Add the following:

<VirtualHost *:80>
  ServerName localhost
  DocumentRoot /home/{user}/www
</VirtualHost>

<VirtualHost *:80>
  ServerAlias *.local
  VirtualDocumentRoot /home/{user}/www/%1/web
</VirtualHost>

# For SSL
#<VirtualHost *:443>
#  ServerAlias *.local
#  VirtualDocumentRoot /home/kbond/www/%1/web
#
#  SSLEngine on
#  SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
#  SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
#</VirtualHost>

Enable the site:

sudo a2ensite dev

Restart Apache:

sudo apache2ctl restart

Ensure your sites are added to /etc/hosts:

127.0.0.1    mysite.local

B. Enable SSL

Install ssl-cert:

sudo apt-get install ssl-cert

Enable ssl and default ssl site in apache:

sudo a2enmod ssl
sudo a2ensite default-ssl
sudo service apache2 restart

C. Install Twig C Extension

Reference: http://twig.sensiolabs.org/doc/intro.html#installing-the-c-extension

Ensure gcc is intalled:

sudo apt-get install gcc

Then run the following:

git clone https://github.com/fabpot/Twig.git
cd Twig/ext/twig/
sudo phpize
sudo ./configure
sudo make
sudo make install

Add the following to your php.ini:

extension=twig.so

Restart Apache:

sudo apache2ctl restart

D. Enable ACL

Edit your filesystem table:

sudo nano /etc/fstab

Add acl to the options column of ext4:

# <file system>  <mount point>  <type>  <options>              <dump>  <pass>
UUID=...         /              ext4    acl,errors=remount-ro  0       1

E. Install icu/php-intl from source

Download latest ICU

./configure
make
make install

Download latest intl

phpize
./configure
make
make install

Add the following to your php.ini:

extension=intl.so

F. Install pdo_dblib/mssql from source

UPDATE: on Ubuntu 14.04 and PHP 5.6 you can simply install Sybase DB:

apt-get install php5-sybase

Download latest FreeTDS and compile:

./configure --prefix=/usr/local/freetds --with-tdsver=7.0 --enable-msdblib --with-gnu-ld
make
make install

Download source for your version of php

Compile pdo_dblib:

cd ext/pdo_dblib
phpize
./configure --with-pdo-dblib=/usr/local/freetds --with-php-config=/path/to/php-config
make
make install

Compile mssql:

cd ext/mssql
phpize
./configure --with-mssql=/usr/local/freetds --with-php-config=/path/to/php-config
make
make install

Add the following to your php.ini:

extension=pdo_dblib.so
extension=mssql.so

Note: ensure these are below extension=pdo.so

Ensure dblib it is available with:

php -r "phpinfo();" | grep "PDO drivers"

Note: during ./configure if you get the error: configure: error: Cannot find php_pdo_driver.h., edit the following section in the ./configure file:

From:

if test -f $abs_srcdir/include/php5/ext/pdo/php_pdo_driver.h; then
  pdo_cv_inc_path=$abs_srcdir/ext
elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
  pdo_cv_inc_path=$abs_srcdir/ext
elif test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then
  pdo_cv_inc_path=$prefix/include/php/ext
fi

To:

pdo_cv_inc_path=/path/to/php_pdo_driver.h # mine was: /usr/include/php5/ext/pdo/php_pdo_driver.h

G. Install weasyprint

Install dependencies:

sudo apt-get install python-dev python-pip python-lxml libcairo2 libpango1.0-0 libgdk-pixbuf2.0-0 libffi-dev libxml2-dev libxslt-dev

Install weasyprint:

sudo pip install weasyprint

H. Install wkhtmltopdf dependencies

sudo apt-get install libxrender1 libfontconfig1 libxtst6
@gnperumal

This comment has been minimized.

Copy link

gnperumal commented Oct 28, 2014

Hi
I have some error from this setup:: Invalid ServerName "*.local" use ServerAlias to set multiple server names.

@kbond

This comment has been minimized.

Copy link
Owner Author

kbond commented Jan 29, 2015

@gnperumal sorry for the late reply, I didn't get notified and just saw this now... You are right - I see I have that line commented out in my setup. I will update the doc.

@4riel

This comment has been minimized.

Copy link

4riel commented Feb 25, 2015

Thanks man!

@jashwant

This comment has been minimized.

Copy link

jashwant commented Aug 25, 2015

If you get Not Found on visiting localhost/phpmyadmin, create a link in /var/www/html with:

sudo ln -s /usr/share/phpmyadmin /var/www/html/

Reference

@jashwant

This comment has been minimized.

Copy link

jashwant commented Aug 25, 2015

Now, the recommended way to install nodejs should be,

curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -
sudo apt-get install -y nodejs

For version 0.10,
Use curl -sL https://deb.nodesource.com/setup_0.10 | sudo bash -

Reference

@gmnowels

This comment has been minimized.

Copy link

gmnowels commented Apr 11, 2016

Thanks

Just an update.

phpunit not available via pear anymore

I installed on ubuntu: apt-get install phpunit

Reference

@soulwon

This comment has been minimized.

Copy link

soulwon commented May 2, 2016

I'm trying to Install Twig C Extension maybe it doesn't matter wut dir u start from but i wish ppl wud say where they r starting from,,unless it doesn't matter than I wish they wud say that too...

Then run the following:

git clone https://github.com/fabpot/Twig.git

does it matter from where u run it????

@ankurk91

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.