Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Step by Step: Install WordPress Blog #PHP #MySQL #Nginx #phpMyAdmin #WordPress #Markdown #Ubuntu

Finishing this guide you'll get:

  • A running WordPress installation
  • Nginx proxy with PHP and Fast CGI
  • MySQL server accessible with phpMyAdmin

Specification of latest running installation:

  • Date: 03.03.2014
  • OS: Ubuntu 64 bit - 12.04.4 LTS
  • Provider: Amazon EC2
  • Browser: Google Chrome - 33.0.1750.117
  • WordPress: 3.8.1
  • Nginx: 1.1.19
  • MySQL: 5.5.35
  • PHP: 5.3.10
  • phpMyAdmin: 3.4.10.1

Requirements

  • Server is behind a firewall, that only allows http, https and ssh
  • The server is accessed with ssh keys (user password authentication must be disabled)
  • Server is not accessed with the root user
  • You're able to edit files with VI

Ubuntu

Update Ubuntu

sudo apt-get update && sudo apt-get upgrade

Install additional packages

sudo aptitude install build-essential zip git

MySQL

Install MySQL server and php5 MySQL module

sudo apt-get install mysql-server php5-mysql

Set the mysql root user password during the installation

Install the default MySQL databases

sudo mysql_install_db

Run the finisher script and respond every prompt with yes to get a secure MySQL installation

sudo /usr/bin/mysql_secure_installation

Connect to your new MySQL server

mysql -uroot -p

Enter the root password

And run this command to get the MySQL version

SHOW variables LIKE "%version%";

Nginx

Install Nginx

sudo apt-get install nginx

Create a Nginx site configuration file

sudo touch /etc/nginx/sites-available/wordpress.conf
sudo vi /etc/nginx/sites-available/wordpress.conf

Paste this config

server {    
listen   80;

	root /var/www/wordpress;
	index index.php index.html index.htm;

	server_name [example.com];

	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}

	error_page 404 /404.html;

	error_page 500 502 503 504 /50x.html;
	location = /50x.html {
		root /usr/share/nginx/www;
	}
    
    client_max_body_size 10M;

	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	location ~ \.php$ {
		try_files $uri = 404;
		#fastcgi_pass 127.0.0.1:9000;
		# With php5-fpm:
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
	}
}

Optionally you can rewrite false urls to a specified canonical url

server {
    listen       80;
    server_name  www.example.com  example.com;
    if ($http_host = www.example.org) {
        rewrite  (.*)  http://[example.com]$1;
    }
    ...
}

Create a symlink to the config file

sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/wordpress.conf

Restart Ngnix

sudo service nginx restart

Check Nginx version

nginx -v

PHP

Install PHP with FastCGI support

sudo apt-get install php5-fpm

configure PHP installaton

 sudo vi /etc/php5/fpm/php.ini

Find the line cgi.fix_pathinfo=1 by pressing ESC and enter

/;cgi.fix_pathinfo=1

Uncomment this line and change value to 0

cgi.fix_pathinfo=0

If this number is kept as 1, the php interpreter will do its best to process the file that is as near to the requested file as possible. This is a possible security risk. If this number is set to 0, conversely, the interpreter will only process the exact file path—a much safer alternative.

Find the line ; default extension directory. and insert below

extension=mcrypt.so

Update the listening port for the php fpm

sudo vi /etc/php5/fpm/pool.d/www.conf
Set listen = /var/run/php5-fpm.sock

Restart the service

sudo service php5-fpm restart

Create the website folder

sudo mkdir /var/www/wordpress

Add a PHP info file

sudo vi /var/www/wordpress/info.php

Set content

<?php
phpinfo();
?>

Open your browser on http://example.com/info.php

Delete this file if everything works

phpMyAdmin

Install phpMyAdmin

sudo apt-get install phpmyadmin

When phpMyAdmin prompts you to choose a server (either apache or lighttpd)hit tab, and select neither one.

When phpMyAdmin asks you wether to configure database for phpmyadmin with dbconfig-common. Chose and enter the MySQL root user password

Hit on the MySQL application password for phpmyadmin prompt.

Create a symbolic link for the phpMyAdmin website

sudo ln -s /usr/share/phpmyadmin/ /usr/share/nginx/www

Create a Nginx configuration file

sudo touch /etc/nginx/sites-available/phpmyadmin.conf
sudo vi /etc/nginx/sites-available/phpmyadmin.conf

Paste this config

server{
	listen 80;
	
	server_name [Your Public IP];
	root /var/www/;
	
	index index.php index.html index.htm;
	
    client_max_body_size 10M;
    
	location ~ .php$ {
		try_files $uri = 404;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		include /etc/nginx/fastcgi_params;
	}
}

Create a symlink to the config file

sudo ln -s /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/phpmyadmin.conf

Restart Ngnix

sudo service nginx restart

Open the browser on http://[YourPublicIP]/phpmyadmin/

WordPress

Open the WordPress site directory

cd /var/www/wordpress/

Download latest WordPress package and untar it

sudo wget http://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz

Copy the untared files to the current folder and delete the other files

sudo cp -r ./wordpress/* ./
sudo rm -r wordpress
sudo rm latest.tar.gz

Let's create the MySQL WordPress user

mysql -u root -p

Enter the MySQL root user password

Create the WordPress database

CREATE DATABASE wordpress;

Create the WordPress database user

CREATE USER wordpress@localhost;

Set the password for the WordPress database user

SET PASSWORD FOR wordpress@localhost = PASSWORD("[password]");

Grant WordPress user full access on WordPress database

GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY '[password]';

Refresh MySQL and exit

FLUSH PRIVILEGES;
exit

Copy the WordPress example config file

sudo cp wp-config-sample.php wp-config.php

Edit the config file

sudo vi wp-config.php

Set database, database user and his password

define('DB_NAME', 'wordpress');

define('DB_USER', 'wordpress');

define('DB_PASSWORD', '[password]');

Update permissions for Nginx user

sudo chown www-data:www-data * -R 
sudo usermod -a -G www-data www-data

Open the browser on http://example.com and install you WordPress blog

Source

Install MySQL
How To Install Linux, nginx, MySQL, PHP (LEMP) stack on Ubuntu 12.04 by Digital Ocean
How To Install phpMyAdmin on a LEMP server by Digi
How To Install Wordpress with nginx on Ubuntu 12.04 by Digital Ocean
Nginx rewrite rules
Get MySQL version

@davirosa

This comment has been minimized.

Copy link

commented Jan 9, 2015

To install wordpress I used the browser:
PUBLIC DNS /wordpress
Got stucked in that step. Maybe could be useful information for some newby as me! :DDD

@davirosa

This comment has been minimized.

Copy link

commented Jan 11, 2015

Funny that I installed one time - I did some adjusts and as I sayd for me the installation was kind of different.
I guess is cause the command "tar -xzvf latest.tar.gz" is missing the "sudo".
So I was not able to install by your way because I did not realize that "sudo" missing...
I did my way and done. But after that I did some mistakes trying to move wp... I did not did the backup, so... I tryed my onw way and lost that server, but now I tryed I don´t know how many times, but I cant do it right. :(
I guess also because of the Ubuntu update, something about the html default... I read something about...
As you see I´m a complete newbuy! I´m just a designer/photgrafer, not web guy! :D

@umarpahat

This comment has been minimized.

Copy link

commented Jul 2, 2016

This is awesome blog. Really helpful for new user.

@BartlebyScribner

This comment has been minimized.

Copy link

commented Sep 8, 2017

sudo aptitude? Damn you, autocorrect.
Shouldn't it be "sudo aptitude install build-essential zip git"?

Or at least that's what I yelled at my mom when she got me the wrong hot pockets.

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.