How To Setup a LAMP Server on Debian Linux 8 (Jessie)
H
ow can I setup up a LAMP (Linux, Apache, MySql, PHP) stack on Debian Linux version 8 (Jessie) using command line options?
Setting up a LAMP stack on your Debian 8 server will allow for the hosting of websites and web applications written in PHP, Perl, and Python. You need to install the following packages on Debian Linux 8:
apache2 : Apache HTTP Server
mysql-server: MySQL Server
php5 : PHP 5
php-pear: PHP 5 pear package
php5-mysql: PHP 5 mysql support
In this tutorial, you will learn installing LAMP on your Debian 8 server.
Update your system
Type the following command:
# apt-get update
# apt-get upgrade
Install Apache 2 package
Type the following apt-get command to instal Apache httpd server version 2:
# apt-get install apache2
Sample outputs:
Fig. 01: Install Apache 2 on Debian 8
Install MySQL server package
Type the following apt-get command to instal Mysql server version 5.x:
# apt-get install mysql-server
Install PHP package
Type the following apt-get command to instal php5:
# apt-get install php5 php-pear libapache2-mod-php5
Install PHP modules
Type the following apt-get command to instal php modules:
# apt-get install php5-mysql php5-gd
To find out additional PHP5 modules, enter:
# apt-cache search php5-
Sample outputs:
php5-exactimage – fast image manipulation library (PHP bindings)
php5-gdcm – Grassroots DICOM PHP5 bindings
php5-vtkgdcm – Grassroots DICOM VTK PHP bindings
php5-geos – GEOS bindings for PHP
php5-lasso – Library for Liberty Alliance and SAML protocols – PHP 5 bindings
php5-libvirt-php – libvirt bindings for PHP
php5-mapscript – php5-cgi module for MapServer
php5-adodb – Extension optimising the ADOdb database abstraction library
php5-apcu – APC User Cache for PHP 5
php5-gearman – PHP wrapper to libgearman
php5-geoip – GeoIP module for php5
php5-gnupg – wrapper around the gpgme library
php5-igbinary – igbinary extension
php5-imagick – Provides a wrapper to the ImageMagick library
php5-json – JSON module for php5
php5-memcache – memcache extension module for PHP5
php5-memcached – memcached extension module for PHP5, uses libmemcached
php5-mongo – MongoDB database driver
php5-msgpack – PHP extension for interfacing with MessagePack
php5-mysqlnd-ms – MySQL replication and load balancing module for PHP
php5-oauth – OAuth 1.0 consumer and provider extension
php5-pecl-http – pecl_http module for PHP 5 Extended HTTP Support
php5-pecl-http-dev – pecl_http module for PHP 5 Extended HTTP Support development headers
php5-pinba – Pinba module for PHP 5
php5-propro – propro module for PHP 5
php5-propro-dev – propro module for PHP 5 development headers
php5-radius – PECL radius module for PHP 5
php5-raphf – raphf module for PHP 5
php5-raphf-dev – raphf module for PHP 5 development headers
php5-redis – PHP extension for interfacing with Redis
php5-rrd – PHP bindings to rrd tool system
php5-sasl – Cyrus SASL Extension
php5-solr – solr module for PHP 5
libssh2-php – transitional dummy package for php5-ssh2
php5-ssh2 – Bindings for the libssh2 library
php5-stomp – Streaming Text Oriented Messaging Protocol (STOMP) client module for PHP 5
php5-svn – PHP Bindings for the Subversion Revision control system
php5-tokyo-tyrant – PHP interface to Tokyo Cabinet s network interface, Tokyo Tyrant
php5-yac – YAC (Yet Another Cache) for PHP 5
php5-zmq – ZeroMQ messaging
libphp5-embed – HTML-embedded scripting language (Embedded SAPI library)
php5-cgi – server-side, HTML-embedded scripting language (CGI binary)
php5-cli – command-line interpreter for the php5 scripting language
php5-common – Common files for packages built from the php5 source
php5-curl – CURL module for php5
php5-dbg – Debug symbols for PHP5
php5-dev – Files for PHP5 module development
php5-enchant – Enchant module for php5
php5-fpm – server-side, HTML-embedded scripting language (FPM-CGI binary)
php5-gd – GD module for php5
php5-gmp – GMP module for php5
php5-imap – IMAP module for php5
php5-interbase – interbase/firebird module for php5
php5-intl – internationalisation module for php5
php5-ldap – LDAP module for php5
php5-mcrypt – MCrypt module for php5
php5-mysql – MySQL module for php5
php5-mysqlnd – MySQL module for php5 (Native Driver)
php5-odbc – ODBC module for php5
php5-pgsql – PostgreSQL module for php5
php5-phpdbg – server-side, HTML-embedded scripting language (PHPDBG binary)
php5-pspell – pspell module for php5
php5-readline – Readline module for php5
php5-recode – recode module for php5
php5-snmp – SNMP module for php5
php5-sqlite – SQLite module for php5
php5-sybase – Sybase / MS SQL Server module for php5
php5-tidy – tidy module for php5
php5-xmlrpc – XML-RPC module for php5
php5-xsl – XSL module for php5
php5-librdf – PHP5 language bindings for the Redland RDF library
php5-remctl – PECL module for Kerberos-authenticated command execution
php5-twig – Enhance performance of the Twig template engine
php5-uprofiler – hierarchical profiler for PHP (extension)
php5-xcache – Fast, stable PHP opcode cacher
php5-xdebug – Xdebug Module for PHP 5
php5-xhprof – Hierarchical Profiler for PHP5
Optional: Install Perl, for Perl apps
Type the following apt-get command to instal Perl module for Apache 2:
# apt-get install perl libapache2-mod-perl2
Optional: Install Python, for python apps
Type the following apt-get command to instal Python module for Apache 2:
# apt-get install python libapache2-mod-python
LAMP configurations
At this stage required software packages are installed. To find your severs’s IP address, run:
# ifconfig eth0
OR
# ip addr show eth0
Sample outputs:
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:08:9b:c4:30:30 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::208:9bff:fec4:3030/64 scope link
valid_lft forever preferred_lft forever
Fire a web-browser and test it by typing your server IP address:
http://192.168.1.10/
Sample outputs:
Fig.02: The default Apache 2 page on Debian Linux 8
Configure Apache
Edit /etc/apache2/apache2.conf file, enter:
# vi /etc/apache2/apache2.conf
Make sure you setup port, IP address, and other information as per your needs. Finally, restart the server:
# systemctl restart apache2
HOW DO I CONFIGURE NAME BASED VIRTUAL HOST FOR DOMAIN CALLED CYBERCITI.BIZ?
First, create directories, as follows:
# D= cyberciti.biz
# mkdir -p /var/www/html/$D/html_root
# mkdir -p /var/log/apache2/$D/
Create /etc/apache2/sites-available/$D.conf file:
# vi /etc/apache2/sites-available/$D.conf
Append the following directives:
<VirtualHost *:80>
ServerAdmin webmaster@cyberciti.biz
ServerName cyberciti.biz
ServerAlias www.cyberciti.biz
DocumentRoot /var/www/html/cyberciti.biz/html_root
ErrorLog /var/log/apache2/cyberciti.biz/logs/error.log
CustomLog /var/log/apache2/cyberciti.biz/logs/access.log combined
</VirtualHost>
Save and close the file. Turn on configuration:
# a2ensite $D.conf
Again, restart apache server:
# systemctl restart apache2
Configure MySQL server
First, secure your mysql server, type:
# mysql_secure_installation
Create a sample mysql database called wordpress. First, login as follows:
# mysql -u root -p
Type the following sql commands at mysql> prompt:
mysql> create database wordpress;
mysql> grant all on wordpress.* to vivek identified by 1SfFAi9$ ;
mysql> quit
The above will create a database called ‘wordpress’ and grant your users permissions on it with username ‘vivek’ and the password ‘1SfFAi9$’. See how to create and use database/users on MySQL for more info.
Configure PHP
Edit /etc/php5/apache2/php.ini, enter:
# vi /etc/php5/apache2/php.ini
Append or modify as follows:
;
; *******************************************************************************************************
; NOTE: These settings are good starting points, but should be adjusted to best suite your requirements.*
; *******************************************************************************************************
; Set error reporting to a log file
display_errors=Off
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
error_log = /var/log/apache2/php-error.log
; Again set this as per your needs – Anit DoS settings
max_execution_time = 30
max_input_time = 30
memory_limit = 40M
; No exposing is allowed
expose_php=Off
; Disable file uploads
file_uploads=Off
; Turn off remote execution
allow_url_fopen=Off
allow_url_include=Off
; Block dangerous php functions
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
Note: See our php 5 security tips guide and block php functions which are not suppose to use for more information.
Again, restart apache 2 server:
# systemctl restart apache2
Next, create /var/www/html/info.php file to test PHP:
# echo <?php phpinfo(); ?> > /var/www/html/info.php
Test url:
http://192.168.1.10/info.php
Sample outputs:
Fig.03 Apache 2 php test page on Debian Linux 8
Security: Firewall settings
You need to open port 80:
/sbin/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
See our firewall settings guide on Debain for more information.
Security: Permission for /var/www/html/ DocumentRoot directory
Make sure you set files and directories permission as follows:
Must run as root user ##
# Make sure Apache user owns /var/www/html/
chown -R www-data:www-data /var/www/html
# Make sure it is read-only
chmod -R 0444 /var/www/html/
# Make sure Apache can read files in sub-dirs to avoid HTTP/403 status errors
find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}
# Do you need to give write permission to certain directories like $D/blog/wp-cache/?
# Edit as per needs 🙂
# chmod -R 0775 /var/www/html/cyberciti.biz/blog/wp-cache/
# echo Deny from all >> /var/www/html/cyberciti.biz/blog/wp-cache/
# EOF
Important commands
To start/stop/restart and to see status of Apache 2, enter:
# systemctl start apache2
# systemctl stop apache2
# systemctl restart apache2
# systemctl status apache2
To start/stop/restart and to see status of MySQL server, enter:
# systemctl start mysql
# systemctl stop mysql
# systemctl restart mysql
# systemctl status mysql
Verify that port # 80 open:
# netstat -tulpn | grep :80
# ss -t -a
# ss -t -a | grep http
# ss -o state established ( dport = :http or sport = :http )
# iptable -L -n -v | less
Important log files
To see Apache 2 log files, enter:
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log
grep something /var/log/apache2/error.log
PHP ##
tail -f /var/log/apache2/php-error.log
Vhost cyberciti.biz ##
tail -f /var/log/apache2/cyberciti.biz/logs/error.log
tail -f /var/log/apache2/cyberciti.biz/logs/access.log
grep something /var/log/apache2/cyberciti.biz/logs/error.log
Now, you have installed LAMP stack on your Debian v8.x server.