How to Setup WORDPRESS 3 on NGINX with Caching & FURLS: VPS BIBLE




new password?
login
X
wordpress for nginx logo image

This tutorial steps out the manual set up of a single WordPress 3 site or blog on a LEMP * server, configured for pretty links, caching and security.

* Linux-Nginx-MySQL-PHP

Mirroring the automated Single Site WP3 Stack, this guide may be used as an alternative installation method, for troubleshooting or to give a deeper understanding of the WordPress setup procedure.

The WordPress 3 Series: Choices Choices!

There are 4 options in the WP3 series:-

Single WP Sites

Just want the WordPress CMS?

WP MultiSites

Prefer a Community?

The stackscripts considerably fast-track the manual process but follow the same variable-driven code of their copy/paste alternatives. The manual install guides have more detail and provide a cracking cure for insomnia.

The multi-sites process opts for sub-domains, not sub-directories, and is a more involved process, but still noob-friendy.

Single sites can later be upgraded to multi-sites.

Setup Unmanaged VPS: The Ubuntu-Nginx Guide

Take your virtual private server from zero to hero

  .. from blank box to cute-as server ..  

with this easy-to-follow copy/paste guide.

22+ parts with video, here’s the index.

WordPress Single Site (manual or stack): Spec

This WordPress install results in a securely hosted blog. Here’s the deal:-

  • update and safe-upgrade your Linux distribution
  • setup pretty permalinks
  • setup caching for WP Super Cache
  • backup any site files & virtual host with a matching domain and path
  • setup your blog’s configuration file (virtual host)
  • .. linking that to Nginx with a symlink
  • setup the database
  • setup the website folder structure and log files
  • download and install WordPress
  • create the wp-config.php file
  • connect the database
  • assign least privilege file permissions
  • restart Nginx web server
  • restart either PHP-FPM or PHP-FastCGI

WordPress 3 Installation: Backup

Files

This process, whether manual or scripted, creates your new blog’s web directory structure but only after moving any existing site and its corresponding virtual host file. These will be found at:-

  • Old Site  /home/USER/public_html/YourDomain.tld_OLD
  • Old vhost  /usr/local/nginx/sites-available/YourDomain.tld_OLD

Note: if you run this process a second time for the same domain the secondary site and vhost backup will overwrite the initial backup. If in doubt, backup your web files yourself:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

Database

Don’t use an existing database, create a new one.

If you later wish to import data from an existing database you may find it easier to match the table prefix variable.

There are guides linked from the Admin section of the Ubuntu-Nginx index for how to export and import data.

WordPress 3 Installation Variables

To make life easier all the vpsBible WP3 installations utilise the same set of variables. They’re pretty self-explanatory but to shed any doubt ..

A typical variable entry reads:-

export USER=”vpsUsername”

Only change text inside “quotation marks”. Ie, only change vpsUsername.

Values must not be left blank.

Some special characters – &,/,!,(,),{,} AFAIK – disable script functionality unless commented with a backslash “” beforehand.


export DOMAIN=”yourblog.com”  The domain name.

export USER=”vpsUsername”  Your VPS username.

export MYSQLPASSWORD=”mysqlPassword”  Your root MySQL password.

export WPDB=”dbName”  Choose a WordPress database name.

export WPDBUSER=”dbUsername”  Choose a WordPress database username.

export WPDBPASS=”dbPassword”  Choose a WordPress database password.

export WPVER=”3.0?  The latest WordPress version.

export WPDBPREFIX=”somePrefix_”  It’s best to change the db table prefix from default wp.

Let’s go.

Add a New Domain Zone

If you’ve not already done so, register your domain to your IP by adding DNS records:-

Assume Super-User Privileges

Logged into the VPS via a terminal, elevate to root:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

Export the WordPress Variables

This is a massive time-saver. For instance, edit your username value once here, rather than the 38 times throughout the tutorial. ( Just send me whiskey :P )

Edit this lot locally in a plain text editor, referring to the notes above:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

And paste the lot into the remotely connected terminal.

Upgrade the System

Probably as good a time as any, especially as we want the latest version of Subversion, the application versioning system we use to install WordPress, next.


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

That Code Looks Weird

I’m playing with a new system, a central code repository for the Bible. There are a few reasons:-

    easy maintenance  vpsB is resolute about keeping tutorials up-to-date but code needs a babysitter. Wading through dozens of tutorials to change a package version is a waste of time. Better to change at most a few snippets in a single location, to keep everything up-to-date and error-free.

    uniform code  There’s more than one way to sling a string. Probably though it is more helpful to Linux noobs to have some specificity.

    more tutorials  Time = tutz. What’s more, as can be seen with the WordPress 3 guides and stacks for example, there are different angles to approach a solution. Recycling code makes that far easier.

    code discussion  Now, if you have a question or a suggestion, don’t just mention some vague tutorial, pinpoint the code and we’ll thrash it out.

But It Makes Copy-Paste Difficult?

Not at all. See here ..

#
#inc_scriptUpdateDebianSimple
aptitude update && aptitude -y safe-upgrade

The third line is clearly the command. The first 2 lines, respectively, are for stackscript spacing and the snippet’s include_reference: they are #commented out.

.. Ignore these comments if you like, Linux will. When you copy and paste any line that’s proceeded by a #hash it is not parsed. Copy and paste as usual, it makes no difference.

Sure, these comments could be hidden, parsed out. Then again, I’m interested to see if folks find them useful for more than just updates and output, both for discussion and to discuss script compilation .. and there’s gonna be a whole lot more scripting to discuss around here.

Let me know your thoughts.

Install Subversion

We’ll use Subversion to install WordPress because it’s easier than messing about copying files via sftp or whatever and can also be used later to batch-install or update plugins (which you’ll have to Google about).


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

Setup WP Super Cache & Pretty Links

Paste this lot to create the caching and FURL functionality. We’ll reference it from the virtual host in a mo. If you already have this file you can ignore this step or else, in any case, it will be overwritten properly:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

WordPress 3 Domain Virtual Host

Paste this lot and your virtual host – your site’s Nginx configuration file – will be configured with the above variables.

Any vhost for your domain will be backed up first. If that throws an error, fine, you had no vhost for that domain.


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

You can check your virtual host file if you like. Good to get acquainted:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

Setup the Database

Paste this and your database variables will be hooked in:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

Hit ENTER.

Setup Webs Directory Structure

See the Who Owns What notes below. Copy-paste:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

Who Owns What?

Permissions are important. Here’s some help. What we have done is this:-

  • backed up any possible blog or site with the same domain name, rather than overwrite it
  • created the directory tree for the new domain
  • ensured there is a group called webmasters
  • added Nginx to the webmasters group
  • given you user-ownership of the web files
  • given webmasters the group-ownership of the web files (and hence to the Nginx www-data user)
  • allowed webmasters read and write access but not the power to execute files *

* We’re being mean. Permissions should be. Get hacked and tell me different! However, this is not always convenient as we shall see. We’ll be adding a handy permissions switch to this system in the section WP Upgrades and Plugin Installs Assistance.

Otherwise, the permissions structure we have created here will not affect any existing sites, although I recommend you to reconsider the strength of your permissions structure for those.

Install WordPress

Subversion will download the WordPress files, we’ll connect your database in the wp-config.php file, set a preferred prefix and reaffirm permissions. Paste:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

Restart Nginx & PHP

Register the changes:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

You won’t have both FastCGI and PHP-FPM .. fine. Linux may sulk but co-operates anyway.

Logging into your WordPress Blog

Browse to your site, add a site title, choose a WordPress username (not the same as the db username), choose a WordPress password (not the same as the db password) and an email address. Click through to the login page.

Pretty Permalinks for WordPress Sites

Setup a FURL structure here:-

  • Dashboard > Settings > Permalinks

For example, check the Custom Structure and type /%category%/%postname%/.

WP Super Cache for WordPress Multi-Sites

Grab the plugin in the regular way:-

  • Dashboard > Plugins > Add New

Enter Super Cache in the search box, hit return and from the search results click Install next to WP Super Cache.

When WordPress freaks out that’s because of our tight permissions. You’ll either have to enter S/FTP details or else elevate Nginx privileges. Here’s my preferred method:-

WP Upgrades and Plugin Installs Assistance

Optionally, add a couple of command line shortcuts ..

If you haven’t set up SFTP, don’t like FTP but subscribe to this post’s use of least privilege permissions you will have problems upgrading or updating from within the WP Dashboard.

This happens because Nginx doesn’t have sufficient access to the WordPress application. For security reasons this is good.

.. But it is a problem when you want to do things like add or upgrade plugins.

No longer!

The chunk of code below adds two super-handy bashrc alias shortcuts that replace the equivalent commands that are hard to remember.

Now, when you want to upgrade WordPress or plugins, install stuff, upload stuff, type this first in your terminal:-

wpupgrade

That does NOT change permissions, but makes Nginx the owner of your WordPress wp-admin & wp-content files ONLY.

When you are done it is important to revert this.

wpsafe

Cool.

If you’re a vpsBible veteran you may already have the code. Check by opening the file:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

Scroll to the bottom and look for code identical to that below. The aliases wpupgrade and wpsafe are good clues.

Like bashrc? Find out more.

Enough spiel. If you want this easy permissions switch, crunch the code. To make sure they are still exporting, edit the two variables first to match your above values, then paste the lot:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

So, elevate your permissions with wpupgrade and, once the plugin is downloaded and installed, activate it before resetting your permissions with wpsafe.

Quit Root

Good idea:-


Please sign up for automatic premium content access.

Just $15/year* will save you hours, maybe days!

Alternatively, the vpsBible forum is free and you are welcome.

Setting up More Standalone WordPress Sites

If you want more individual .com WordPress domains, change the variables, rinse and repeat.

If you want to enable sub-domains later on you can by following Setup WordPress 3 for Sub-Sites on LEMP, filling in this tutorial’s blanks to enable a network.

Setup Unmanaged VPS: The Ubuntu-Nginx Guide

Take your virtual private server from zero to hero

with this easy-to-follow copy/paste guide.

“My local PC runs Windows” Show me for Linux/Mac

22+ parts with video, here’s the index ..

Manage Unmanaged VPS: Ubuntu-Nginx Administration

Already set it up? We’d best maintain it then.

Toggle to the ..  Ubuntu-Nginx Admin Index

Manage Unmanaged VPS: Ubuntu-Nginx Administration

Maintain your virtual private server with ..

.. cheatsheets, tutorials, tips & guides.

Head back to the ..  Ubuntu-Nginx Installation Index

Nginx Admin: In the Works ..

This lot’s marked for addition already:-

  • Setup or Edit DNS using Bind
  • Network Tools Troubleshooting Guide
  • The Comprehensive Permissions Guide
  • Configuring Nginx Rewrites
  • Custom Website Error Page
  • Setting up Cron Jobs
  • Rsync for Incremental Remote-to-Local Backup
  • Cron & Rsync for Automatic Backup
  • Cron & mysqldump for Auto DB Backup
  • Safeguard Bandwidth with Hotlink Protection
  • Block Access with Nginx’ IP Deny



Responses are currently closed, but you can trackback from your own site.

Got a Question? Want to Comment?

This site has no comments system. We've got a better system!

Please use the link at the top of the post and goto this topic's forum thread:-

  • to help build community
  • for a superior knowledge base
  • to keep info in one place, not diluted between forum & comments.

For those posts ported from Guvnr.com (pre-Feb/2010), archive comments remain.

Handy info from these comments is in the process of being ported to the forum and attributed to the original author.

If you think this idea sucks, let me know.

Thank you.