
At sparxsys we use different flavors of Linux operating system like ubuntu, centos and fedora. Most of our servers where we host our Drupal sites are run on Cent OS machines. On all these operating systems for website development there is a need to have Apache, PHP and MySQL installed. Today let us see you how to setup a lamp stack on Cent OS6. Well here I am assuming you already have installed Cent OS on your machine so I will provide info on how to start configuration on your blank machine.
Basic configurations
First and foremost thing is to make sure that the system has the right tools necessary to become a web server. Apart from LAMP stack we need to install few important tools and perform some configurations.
Update your system
Firstly you need to update your newly installed machine so use this command to update your system
yum update
Setup Hostname
You need to setup the hostname to provide a name to your machine.
echo "HOSTNAME=example.com" >> /etc/sysconfig/network
hostname "example.com"
Update /etc/hosts
127.0.0.1 localhost.localdomain localhost
X.X.X.X example.com
X.X.X.X is the ip address of your server.
No need to modify if similar values are already there.
Setup the timezone
You need to set correct time and timezone on your system. So use this command.
ln -sf /usr/share/zoneinfo/Asia/Calcutta /etc/localtime
Of course you can check inside this folder /usr/share/zoneinfo/ to check for the time zone for your country.
After that just check the time.
date
It should display something like this.
Mon Apr 6 15:23:38 IST 2015
Add User
You should create a new user to use your system. You should avoid using root user because a wrong command run carelessly could easily break your system so create a new user using this command.
useradd webuser
Change the password for newly created user
passwd webuser
Now allow this user to run root commands via sudo
yum install sudo
visudo
After doing visudo find the line like this
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
and add the following line after that
webuser ALL=(ALL) ALL
Now logout from system and login as this new user. All the further commands will be given by using this user. After this point do not login with root user until and unless it is absolutely necessary.
Prevent Dictionary attacks
Some security measures. Install Fail2ban
sudo yum install epel-release
sudo yum install fail2ban
Start the service
sudo service fail2ban start
Start fail2ban on boot
sudo /sbin/chkconfig fail2ban on
Checklist - Check available services
ls /etc/init.d/
Setup Apache Web server
Install Apache 2.2
sudo yum install httpd
Edit the /etc/httpd/conf/httpd.conf to adjust the resource usage settings
Before you edit it is best to make a backup of your file like this
cp /etc/httpd/conf/httpd.conf ~/httpd.conf.backup
Now make changes to the file /etc/httpd/conf/httpd.conf.here are some good settings for your server. The settings mentioned below are for fine tuning your server performance.
KeepAlive Off
...
StartServers 2
MinSpareServers 6
MaxSpareServers 12
MaxClients 80
MaxRequestsPerChild 3000
Configure Apache Virtual Hosts
We will manage the sites that we want to manage using vhost file and not the httpd.conf which is used only for global configurations but the actual sites will be configured using vhost.conf file under /etc/httpd/conf.d directory.
- Create a file under /etc/httpd/conf.d called vhost.conf. add the following contents. replace example.com with you domain name
- Now create the respective directories referenced above
- Start Apache for the first time, and set it to run at boot
NameVirtualHost *:80
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /srv/www/example.com/public_html/
ErrorLog /srv/www/example.com/logs/error.log
CustomLog /srv/www/example.com/logs/access.log combined
AllowOverride All
Order allow,deny
Allow from all
ServerAdmin webmaster@example.com
ServerName abc.com
ServerAlias www.abc.com
DocumentRoot /srv/www/abc.com/public_html/
ErrorLog /srv/www/abc.com/logs/error.log
CustomLog /srv/www/abc.com/logs/access.log combined
AllowOverride All
Order allow,deny
Allow from all
As per the vhost.conf file we will have two sites running on our server example.com and abc.com, of course you need to make sure that these two domains point to your server. Either by modifying their A record or complete DNS.
mkdir -p /srv/www/example.com/public_html
mkdir /srv/www/example.com/logs
mkdir -p /srv/www/abc.com/public_html
mkdir /srv/www/abc.com/logs
include a index.html file in /srv/www/example.com/public_html folder with following contents
my apache web server
sudo service httpd start
sudo /sbin/chkconfig --levels 235 httpd on
You should new be able to view a Apache page on your website with following message "my apache web server". You can do the same for abc.com website.
Install and Configure MySQL
Since we will be using Drupal so we need to have MySQL as well installed on the server.
Install the MySQL package
sudo yum install mysql-server
Start MySQL, and set it to run at boot:
sudo service mysqld start
sudo /sbin/chkconfig --levels 235 mysqld on
Run mysql_secure_installation to secure MySQL
You will be given the option to change the root password, remove anonymous user accounts, disable root logins outside of localhost, and remove test databases and reload privileges. It is recommended that you answer yes to these options.
mysql_secure_installation
Login with root and create a new database
- Log in to MySQL and then you will be presented with a MySQL prompt
- Create a database and user
- Now logout from root and login with this webuser and check if this user can access webdata database
- After checking the access logout from mysql
mysql -u root -p
create database webdata;
grant all on webdata.* to 'webuser' identified by 'password';
FLUSH PRIVILEGES;
In the above example webdata is the name of the database, webuser the user, and password a strong password
logout from root
quit
login as webuser
mysql -u webuser -p
quit
Install and Configure PHP
Install PHP
sudo yum install php php-pear
sudo yum install php-mysql
Edit /etc/php.ini
You must edit /etc/php.ini for better error messages and logs, and upgraded performance.Find the error reporting part and add the following lines
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
error_log = /var/log/php/error.log
max_input_time = 30
Create the log directory for PHP and give the Apache user ownership
sudo mkdir /var/log/php
sudo chown apache /var/log/php
Restart or Reload Apache
For restarting use
sudo service httpd restart
For reloading use
sudo service httpd reload
Reload will apply the changes in the configuration without terminating/interrupting any connections. Simple the Apache will first process the request, complete it and then restart, so server will eventually restart but users would not see downtime.In any case this is better than full restart.
Here is it all the pointers you need to follow to setup your lamp server on Centos6.
We host our websites on Linode, which offers reliable VPS solutions.
We have been using Linode since two years now and we must say that we are extremely satisfied with their service.