wordpress-4

Many WordPress users have enjoyed WordPress using an Internet host provider or on an XAMPP installation on a Windows installation. This exercise is a combination of several guides with some personal tweaks to install WordPress on a fresh install of Linux. More specifically an install of CentOS or Red Hat Enterprise Linux (RHEL).

March 9, 2013: This process was originally written two years ago. The WordPress minimum requirements for PHP has changed and has now been taken into account. The script has been developed further, tweaked, and simplified.

Install Packages
Using yum install MySQL, Apache, and PHP. Then make Apache and MySQL autostart, and start the two processes.

Beginning with WordPress 3.2, the minimum requirements for PHP changed to version 5.2.4 or greater. The CentOS 5.x repositories as of March 9, 2013 do not go beyond 5.1.x. The extra step of enabling an additional repository is added to update PHP version beyond the minimum requirement. This script has successfully been tested with WordPress 3.5.1 on CentOS 5.8.

yum -y install mysql-server httpd php php-mysql
rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm
yum --enablerepo=webtatic update php -y
chkconfig mysqld on && service mysqld start

The CentOS 6.x repositories use a different link and a slight variation to the syntax.

yum -y install mysql-server httpd php php-mysql
rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm
yum update php -y
chkconfig mysqld on && service mysqld start

Create a Database for WordPress with a MySQL User
Substitute password with your unique password. Consider changing the database name and database user from WordPress to unique names.

echo 'CREATE DATABASE wordpress;' | mysql
echo "GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'password';" | mysql
echo "FLUSH PRIVILEGES;" | mysql

WordPress
Download, install, remove temporary directories, and configure Apache cache.

curl -O http://wordpress.org/latest.tar.gz
tar -C /var/www/html/ -zxvf latest.tar.gz && rm -f latest.tar.gz
cd /var/www/html
mv wordpress/* . && rmdir wordpress
mkdir wp-content/uploads wp-content/cache
chown apache:apache wp-content/uploads wp-content/cache

Configure WordPress
Copy (cp) the sample configuration to the default configuration. Substitute the word password with your unique password.

cp wp-config-sample.php  wp-config.php
sed -ie 's@database_name_here@wordpress@' wp-config.php
sed -ie 's@username_here@wordpress@' wp-config.php
sed -ie 's@password_here@password@' wp-config.php
curl https://api.wordpress.org/secret-key/1.1/salt/ >> wp-config.php

Configure Apache

echo "# BEGIN WordPress" >> .htaccess
echo "<IfModule mod_rewrite.c>" >> .htaccess
echo "RewriteEngine On" >> .htaccess
echo "RewriteBase /" >> .htaccess
echo "RewriteRule ^index\.php$ - [L]" >> .htaccess
echo "RewriteCond %{REQUEST_FILENAME} !-f" >> .htaccess
echo "RewriteCond %{REQUEST_FILENAME} !-d" >> .htaccess
echo "RewriteRule . /index.php [L]" >> .htaccess
echo "</IfModule>" >> .htaccess
echo "# END WordPress" >> .htaccess
chmod 666 .htaccess
chkconfig httpd on && service httpd start

Automated Process
Create a bash script to do all of the above tasks. Should only take a couple of minutes to get WordPress installed and running. Don't forget to change the username (optional/recommended), database name (optional/recommended), and password (highly recommended). Copy and paste the code below into a file, for example, install-wordpress.sh. use chmod +x install-wordpress.sh to make it executable. Then run ./install-wordpress.sh

#!/bin/bash
# install-wordpress.sh
#

yum -y install mysql-server httpd php php-mysql
rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm
yum --enablerepo=webtatic update php -y
chkconfig mysqld on && service mysqld start
echo 'CREATE DATABASE wordpress;' | mysql
echo "GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'password';" | mysql
echo "FLUSH PRIVILEGES;" | mysql
curl -O http://wordpress.org/latest.tar.gz
tar -C /var/www/html/ -zxvf latest.tar.gz && rm -f latest.tar.gz
cd /var/www/html
mv wordpress/* . && rmdir wordpress
mkdir wp-content/uploads wp-content/cache
chown apache:apache wp-content/uploads wp-content/cache
cp wp-config-sample.php wp-config.php
sed -ie 's@database_name_here@wordpress@' wp-config.php
sed -ie 's@username_here@wordpress@' wp-config.php
sed -ie 's@password_here@password@' wp-config.php
curl https://api.wordpress.org/secret-key/1.1/salt/ >> wp-config.php
echo "# BEGIN WordPress" >> .htaccess
echo "<IfModule mod_rewrite.c>" >> .htaccess
echo "RewriteEngine On" >> .htaccess
echo "RewriteBase /" >> .htaccess
echo "RewriteRule ^index\.php$ - [L]" >> .htaccess
echo "RewriteCond %{REQUEST_FILENAME} !-f" >> .htaccess
echo "RewriteCond %{REQUEST_FILENAME} !-d" >> .htaccess
echo "RewriteRule . /index.php [L]" >> .htaccess
echo "</IfModule>" >> .htaccess
echo "# END WordPress" >> .htaccess
chmod 666 /var/www/html/.htaccess
chkconfig httpd on && service httpd start

The automatic writing of the .htaccess and the chmod 666 may be redundant, as WordPress will create the .htaccess entries when making changes to the permalink settings. The chmod 666 ensures that WordPress can write to the .htaccess file. This example does both.

Manual Labor
To get the permalinks or pretty links working, edit the Apache configuration file.

gedit /etc/httpd/conf/httpd.conf

Look for AllowOverride None and change to AllowOverride All. There are many, so choose the one AllowOverride None directly after the following statement.

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#  Options FileInfo AuthConfig Limit
#

Sources

http://blog.adlibre.org/technology/how-to-install-wordpress-on-centos-5-in-five-minutes-flat.html
http://blog.fantasticmf.com/2011/01/28/install-wordpress-on-centosrhel-in-five-minutes-flat-remix/
http://www.e-romagnoli.com/2008/07/wordpress-permalink-on-centos-5-tutorial/
http://www.webhostingtalk.com/showthread.php?t=1178639
http://www.webtatic.com/projects/yum-repository/