WordPress Setup & Updates from the Command Line
This how-to guide uses Subversion to download & install standalone WordPress blogs & their plugins, quickly and easily from your Linux command line interface, with simple updates thereafter. It also details the WordPress MySQL database setup process.
OK, I admit, I am biased towards WordPress! And this guide is a perfect fit for those wanting to launch their WP blog from a VPS in the quickest time and designed for future-proofing.
That said, if you’re using one of the thousands of other platforms that can be installed using Subversion, the installation process is not disimilar. If you have specific questions, on whatever platform, leave a comment and I’ll try to help. Who knows, I may even write a specific tutorial.
WordPressers – prepare to save bundles of time.
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.
Essential Web Server Preparation for WordPress
In PHP5, MySQL and Xcache (for Platforms like WordPress), amongst other things, we installed Subversion. In Nginx (better than Apache) Web Server we set up Nginx. In Serve Multiple Sites & Blogs with Virtual Hosts we enhanced the Nginx file structure and allowed for multi-site hosting. In Set up WordPress on Nginx with Pretty URLs & WP Super Cache, we tweaked Nginx to optimise its serving of WordPress. If you missed any of those, retrace.
By the end of this tutorial, we’ll have WordPress working. Sweetly.
Here are your requirements:-
- create database
- install WordPress
- add preferred plugins
- import your theme
- relocate data
If you want a brand new blog, you will carry out the first four of those stages.
Open up your terminal CLI thing. If you’re using Windows locally and haven’t already done so, create remote server access, securely and to ease the logon process hugely. For that, read Set Up Command Line Interface (CLI) using PuTTY & Encrypt Data with OpenSSH & Auto-Login with PuTTY.
…While I’m nagging, if you’ve not already, you should also carry out Harden the Secure Shell (SSH) & Create a Firewall.
Just one last note. I example my Linux/MySQL username guvnr and my website waywiderweb.com throughout this guide. Replace those values with your own
Right. Ready to roll.
Create a MySQL Database for WordPress from the Command Line
Login to MySQL with:-
Add your password, or the password we created when we installed MySQL in PHP5, MySQL and Xcache (for Platforms like WordPress).
Now paste this lot, replacing your_wordpress_username, your_wordpress_password and wp_database_name with yours, and leaving the quote marks I’ve included for the password:-
Install WordPress on your Linux VPS Using Subversion
Let’s go to the directory in which to install WordPress. I’m installing to my root directory, /home/public_html/waywiderweb.com/public, which I created in Serve Multiple Sites & Blogs with Virtual Hosts (the directory structure is explained most comprehensively in the video in that tutorial.) If you want your blog to appear in a sub-directory, such as waywiderweb.com/blog, then use /home/public_html/waywiderweb.com/public/blog. Of course, change waywiderweb.com for your domain:-
If you created a test index.html file in Serve Multiple Sites & Blogs with Virtual Hosts, let’s bin it:-
Now we’ll use the subversion command to install the latest version of WordPress. Ammend this version with any newer one. Leave the dot at the end, it’s not a typo:-
And create the WordPress config file:-
Now let’s connect the database. Open the WP config file:-
…and add the details you entered above into your new MySQL database. So, in the wp_config file, swap putyourdbnamehere, usernamehere and yourpasswordhere. Here’s the original wp-config, before you change it:-
While you’re in there, for added security, find:-
…and swap wp_ to something unique.
Save and quit (CTRL-X, ‘y’ to confirm and hit Return.)
Run WordPress Install & Connect the MySQL Database
Open your blog in a browser, so for me, for instance, that’s www.waywiderweb.com. Enter a few details, log in and change the password the WP installer gave the newly created Admin user. You should really delete Admin entirely and replace with another user, but that’s another story.
Hack-Proof Your Blog
For complete WP security tips, read Video How-to: 10 Tips To Make WordPress Hack-Proof – from a really rather splendid site by the name of Guvnr, ‘hem – but ignore the bit about htaccess as that’s an Apache thing, not Nginx.
Hmmn, if anyone’s got any specific Nginx blog security tips, lemme know please. I’ll write it up.
Batch-install WordPress Plugins using Subversion
This bit really rocks my roger. If you’ve got a bunch of blogs with pretty much the same plugins, you may just save a month of Sundays here.
Back at the CLI, goto the plugin directory:-
Let’s edit our plugin list. Keep that dot:-
OK, so there’s only Akismet in there. Let’s add some more. Go to the WordPress Subversion plugin repository and take your pick. For each plugin you have 2 download choices:-
- tags – stable releases by version, so choose generally the latest
- trunk – latest version, bleeding edge, occasionally buggy
Personally, I run the trunk versions, for the simple reason that I can install or upgrade all plugins by issuing a simple command, thereafter. If a plugin gives me any gip, I simply delete it and its reference in my svn WP plugins list, else I replace its trunk with a tag. Of course, if you use the tags option, you have to keep editing your plugins file, which largely negates having it in the first place.
So, here’s an example externals file that I’ve thrown together. Note the name of each plugin before the link, ‘cos you must have that identifier. If you followed Set up WordPress on Nginx with Pretty URLs & WP Super Cache, you’ll notice I’ve included the WP Super Cache plugin:-
TIDY TIP: If you’re happy with trunks, in the WP Sub Vers Repos, look down the list and right mouse click > Copy Link Location, then paste it to a text file, adding the name of the plugin before the link. Do that to as many plugins as you want, then simply paste /trunk at the end of each link. Then paste the lot to your svn plugins file. Much quicker. If you want tagged versions, it’s the long way round, ‘cos the tags differ. Then again, for some plugins, there is no svn listing at all, so those have to be included the old-fashioned way.
Right, with your plugins file edited, saved and closed, now type:-
Take tea.
Import Your WordPress Theme
Set Linux Folder Permissions
If you didn’t in Serve Multiple Sites & Blogs with Virtual Hosts, set your folder permissions, allowing SFTP access, substituting guvnr with your user name:-
Add the theme
If you are using a regular theme, add it in the usual WordPress way.
Alternatively, if you want to use a previous, adapted theme:-
Open an SFTP client like FileZilla or WinSCP, browse to your remote themes directory – something like /home/public_html/waywiderweb.com/public/wp-content/themes/ – and upload your bespoke theme.
Either way, you can now enable the theme in the regular way, at http://your_blog.com/wp-admin/themes.php.
Relocate Your Existing WP Blog Data
…If you’ve got any to relocate! For new blogs, skip this bit.
You can do this by exporting from the old and importing into the new database. In my experience it’s far easier to use WP’s export/import tools, which also optimises the data.
Surf to your original blog:-
http://www.your_ORIGINAL_blog.com/wp-admin/export.php
…or Dashboard > Tools > Export.
And Download export file.
Now goto your new blog:-
http://www.your_ORIGINAL_blog.com/wp-admin/import.php
…or Dashboard > Tools > Import.
Click the WordPress option, choose the exported file and Upload file and import. Prompted, check the box Download and import file attachments.
If you receive any errors, that’s probably a permissions problem. For example, I got this:-
…So we’ll take ownership of the directory:-
And now have another go with Upload file and import, opting for our user imports and checking the box Download and import file attachments.
If you’d prefer to relocate select data, there’s always phpMyAdmin.
Activating WP Super Cache
Activate in the usual WordPress way, and cash in on the groundwork of Serve Multiple Sites & Blogs with Virtual Hosts. Cash in, geddit! Sorry.
Updating WordPress Plugins
While 2.7 brought in some top functionality with the WordPress auto-updating, pretty much negating using Subversion to update the platform or plugins, there will be occasions when it’s still faster to upgrade plugins this way.
Particularly this will be the case after a platform upgrade, when plugins race to bring out updates, they can be upgraded together using Subversion:-
Sending Live a Relocated WordPress Blog
Refer to Part 19: Moving Day! How to Move Your Blog or Site for the best way to do this, with the least downtime or other sticky problems.
Rinse & Repeat
Follow this process for your entire blog farm.
Just Round the Corner
For WordPress, that’s all the specifics taken care of, I think. You tell me, what have I forgotten? Lemme know and I’ll write it up.
More generally, I’ll wrap up the Ubuntu-Nginx Unmanaged VPS Bible series by showing how and why to setup Google Apps in Google Apps for Domain-Specific Email, which keeps our VPS server resources focussing jealously on our sites and blogs, before running down the all-important moving day checklist mentioned above. Then, well, I suppose we’d best try to move a site without completely buggering it up (I think ’seamless’ is the word .. Ed.)
Er, guess what…
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
“My local PC runs Linux” Show me for Windows
22+ parts with video, here’s the index ..
-
Setup Unmanaged VPS: The Ubuntu-Nginx Guide
Introducing vpsBible’s how-to guide for setting up a super-charged unmanaged VPS featuring Ubuntu and Nginx.
-
VPS (Virtual Private Server) vs Shared vs Dedicated
Before getting stuck in, let’s compare the web host types in detail and weigh up the differences between managed & unmanaged VPS.
-
Set Up a VPS Linux Distribution
Opening a VPS hosting account, we’ll choose, configure & launch a Linux server ‘distribution’.
-
Set Up Command Line Interface (CLI) using PuTTY
Now we’ve got a server to play with, we’ll connect to it, using the ’ssh’ protocol for a super-secure link.
-
Create a Linux User & Set Permissions
Initially you’ve logged into your remote Linux machine as ‘root’. We’ll add you as a user now, with root or SuperUser permissions.
-
Encrypt Data with OpenSSH & Auto-Login with PuTTY
Now we can use ‘authentication keys’ to shore up our connection while simplifying login to an automated, password-free yet secure process.
-
Harden the Secure Shell (SSH) & Create a Firewall
The final security step: galvanizing the OpenSSH protocol and setting up an ‘iptables’ firewall. Now the server is rock ruddy solid.
-
Edit bashrc for User-Friendly Linux, plus System Updates
We use the terminal a whole lot so let’s cut ourselves a break and create some command shortcuts, then update the server.
-
PHP5, MySQL and Xcache (for Platforms like WordPress)
We have our foundation, let’s lay some bricks: PHP for server-side web applications, Xcache to speed things up & MySQL for databases.
-
Add a Domain Zone to Your VPS
To make your server aware of yourDomain.com you’ll need a few ‘DNS’ records. Damn this is simple I’m practically asleep!
-
Prepare Linux Server for Email with Postfix
In order to send and receive email from our web applications we’ll install some software and tweak the ‘RDNS’ record.
-
Nginx (better than Apache) Web Server
OK I woke up .. let’s install this supersonic web server, tweaking its file structure & adding default configuration files.
-
Setup FileZilla for Secure FTP (SFTP)
There’s FTP, and then there’s ‘Secure FTP’. We’ll set up FileZilla using SFTP – and those authentication keys – for secure file transfers.
-
Serve Multiple Sites & Blogs with Virtual Hosts
We want a website folder structure, some permissions, some site-specific configuration files and, hey, we’ll hook up ‘FastCGI’.
-
Adding Sub-Domains with Nginx
Need a sub-domain? Here’s how to add www.sub.domain.com with an ‘A record’ and a configuration file. (I’ll allow you to skip this bit.)
-
Integrate A CMS Like WordPress, WP MU, Drupal etc
For those of you wanting to use a specific content framework, such as a CMS, blogging or forum software, pop in here and we’ll sort that out.
-
Configure phpMyAdmin for Nginx to Maintain MySQL
Rather than have to crunch databases via the command line, we can make life easier by adding this splendid tool to manage them.
-
Google Apps for Domain-Specific Email
GA’s free Standard Edition for catchall webmail – POP-ping or IMAP-ped to your desktop client – saves precious server resources for your webs.
-
Moving Day! How to Move Your Blog or Site
Nearly there. Here’s the web site or blog migration guide, relocating to your VPS with minimal or no downtime.
-
Appendix 1a: Nginx Control Panel
You’re migrating shared-to-VPS and want a GUI like cPanel? No you don’t, not after you read this! What’s more, you don’t need one either.
-
Appendix 1b: Nginx Control Panel Workarounds
For every control panel module there’s an equivalent terminal command. They’re all linked from here so, hey, no excuses!
-
Appendix 2: Add Web Sites Nginx Cheatsheet
Once you’ve set up your first site, adding more gets easier. Especially when you can refer to this. (Let’s face it, I’m just too good to you.)
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.





















» bInstall/b/Upgrade bWORDPRESS/b with SUBVERSION - VPS Bible #15 - GUVNR Wordpress UK: Wordpress UK, taking it further… June 9th, 2009 at 2:04 am
[...] View original here: bInstall/b/Upgrade bWORDPRESS/b with SUBVERSION – VPS Bible #15 – GUVNR [...]
10 Tips To Make WordPress Hack-Proof. The Ultimate Guide. - GUVNR June 9th, 2009 at 11:37 am
[...] Set Up Unmanaged VPS BIBLE (4 Newbies) – Part 15: WordPress Setup & Updates from the Command L… This how-to guide uses Subversion to download & install standalone WordPress blogs & their plugins, quickly and easily from your Linux command line interface, with simple updates thereafter. It also [...] [...]
Chris Foster June 9th, 2009 at 5:49 pm
“Create a MySQL Database for WordPress from the Command Line”
Unfortunately this section of the bible has errors in the form of html tags in the commands.
I’m now stuck with “Error establishing a database connection”, got confused and had to go searching for the correct commands..and stuffed something up.
I couldn’t see any PHPAdmin advice in the bible, I would think this would be required to sort out the database issue..I’ll go digging.
Cheers,
Chris
the_guv June 9th, 2009 at 6:38 pm
apologies Chris – have ammended that now.
will be writing a newbie mySQL tutorial to accompany this guide, with some basic CLI commands to manage dbs.
Poutletuh June 25th, 2009 at 12:32 am
Newbie here, I wanted to advise you of the malwarebyte that is going around the net. This might be a bit off topic but hopefully it will help folks get that crapy spyware off their PC. Thanks, Newbie
the_guv June 26th, 2009 at 6:30 am
@Poutletuh – aah yes, thank you, jolly good. you’re absolutely right, of course .. that’s completely off-topic! but it’s just nice to know you care.
Jeff July 1st, 2009 at 6:42 pm
Perhaps the most thorough tutorial I’ve come across, for setting up a linode with Nginx.
I do have one question however. I opted for the newer versions of Nginx and WordPress than the ones in your tutorial and the clean urls aren’t working in WP. I’m guessing that it has something to do with the rewrite… And also, the alias n2r that restarts Nginx breaks on the start.
Other than that my linode flys. Can’t believe WP is running this fast.
the_guv July 7th, 2009 at 5:20 am
@Jeff .. post up some more detail. is there an error msg when Nginx doesn’t n2r properly?
trav 19 August 5th, 2009 at 9:05 am
Hi Guv! Will it work the same for WordPress Mu with the BuddyPress extension? Thanks very much.
the_guv August 5th, 2009 at 12:09 pm
Hey Trav .. I’ve not tried installing MU using subversion, but it should, and I would be very surprised if if didn’t.
However, I can tell you, WP MU works great with BuddyPress on my Nginx’ed VPS .. Funnily enough I copied an example across a couple of weeks ago, for this comunity thing I’m working on.
BP is cool, huh.
You know, pretty soon the WP folks are gonna be combining WP and WP MU together.
trav 19 August 9th, 2009 at 9:18 am
Hi Guv, I am getting a “502 Bad Gateway” message when i tried to install wordpress mu
i followed everything here, what happened?
trav 19 August 9th, 2009 at 9:19 am
here’s the error log: http://pastebin.com/m12dcf215
(((
could you kindly diagnose it?
trav 19 August 9th, 2009 at 9:29 pm
hey guvnr! it’s all good now, we forgot to install spawn-fcgi… Did we do it? I don’t think it was covered in this series.
http://redmine.lighttpd.net/projects/spawn-fcgi/wiki/Build
hope this could be of help for future Mu enthusiasts.
The only difference with making mu is create a wildcard * to your resource records for subdomains, and DO NOT EDIT WP-CONFIG pre install. Just create a db beforehand, and enable 777 chmod permissions to /wp-content.
the_guv August 10th, 2009 at 11:11 pm
hey Trav, sorry, been travellin’, duckin’, divin’.
Sir, thank you, cracking tips. I’ll document that as soon as I get into MU proper, and am sure there’s a few others too that are mighty pleased with your input.
Really darn fine of you.
Let us know how you get on. In fact, spam a link when you’re pleased enough to publicise. It’ll be good to stay in touch.
PS .. we took a different approach with fastCGI for the php in Part 13: Serve Multiple Sites & Blogs with Virtual Hosts
Henry August 25th, 2009 at 10:44 am
Not sure if this will help anyone in a similar position, and it’s pretty minor, but under the ‘Import your Wordpress Theme’ section, I had to include ’sudo’ at the beginning of the command to give the requisite level of administrative power to change permissions:
i.e. chown -R guvnr:webmasters /home/public_html
should be
sudo chown -R guvnr:webmasters /home/public_html
Nit-picking possibly, but may help prevent someone getting lots of ‘Operation not permitted’ errors
Love your tutorials though, super props Guv!
the_guv September 16th, 2009 at 8:44 pm
@Henry .. Sorry to be so long coming back to you, been out and about.
God’s Teeth! You are absolutely correct and, no, that is not nit-picking at all. Appreciate that, properly updated.
Many thanks to you for your kind words too.
juanel October 12th, 2009 at 6:12 am
i have followed to the letter the instructions from this vps bible but i am having a major headache with Wordpress file uploads even when i changed permissions to 777. it still won’t work. even in wp, miscellaneous, wp-content/upload, no can do.
What’s wrong??
the_guv October 12th, 2009 at 11:09 am
@juanel .. tell me, what’s your procedure .. you using WordPress’ file uploader? (generally I don’t, but just did to test and it worked.) what’s the output of :-
ls -l /path/to/the/uploads/PARENT/folder .. as standard, that’s your wp-content folder
.. just give me the line referring to the uploads folder.
some permissions issue here. tell you what, AFTER noting the above from teh list (ls) command, do this:-
sudo chown -R www-data:www-data /path/to/the/uploads/PARENT/folder
.. then try upload again. please lemme know.
George Smith October 20th, 2009 at 1:08 am
Guv, I’m having some problems with Wordpress having followed the tutorials here. My site’s up and running, and I can upload themes and plugins using an FTP client, but I’d also like to be able to do so using the Wordpress admin panel, and at the moment that’s proving impossible – whenever I try, it prompts for connection information (hostname, username etc.), but nothing I enter seems to suffice. I’ve tried a couple of things (modifying the permissions of the wp-content folder, modifying its group etc.) but to no avail. Any advice you could give on fixing this would be very much appreciated.
George Smith October 21st, 2009 at 12:15 pm
Sorry, I just noticed someone posted a similar comment to my previous one above. After a little research, I was able to solve my WordPress uploads problem by changing the owner and group of -both- wp-content and wp-admin (and their contents) to ‘www-data’.
So that’s:
sudo chown -R www-data:www-data /path/to/wordpress/wp-admin
sudo chown -R www-data:www-data /path/to/wordpress/wp-content
the_guv October 23rd, 2009 at 8:43 am
@George .. no worries, pleased you’re sorted, Sir.
SOLUTION! "No Control Panel for NGINX?" - VPS BIBLE Pt 17 - GUVNR November 30th, 2009 at 9:03 pm
[...] db client/CLI guide to do Pt 15: Setup WordPress for key CLI [...]
Set up an Unmanaged VPS for Newbies - The 20 Part Bible! - GUVNR November 30th, 2009 at 9:06 pm
[...] Part 15: WordPress Setup & Updates from the Command Line Part 15: Setup/update WordPress on your server. This copy/paste how-to guide steps out the process, setting up a MySQL database and using Subversion. [...]
Configure Nginx with Your Content Management System - vpsBible February 10th, 2010 at 4:59 pm
[...] WordPress Setup & Updates from the Command Line [...]
Setup WordPress on NGINX (FURLs & Cache): VPS BIBLE - vpsBible February 10th, 2010 at 4:59 pm
[...] the WP Super Cache plugin. First, we’d best install WordPress itself in the how-to guide WordPress Setup & Updates from the Command Line. That’ll be using super-duper Subversion to simplify the WordPress installation [...]