English (change)
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.
In 20 copy/paste steps .. from zero to hero, blank box to cute-as Linux server.
Scroll down for the full series index.
So, hey, shed shared & viva virtual! Hope it helps. the_guv
In Part 8: FASTER VPS! Set Up PHP, MySQL & Xcache, amongst other things, we installed Subversion. In Part 11: Install NGINX (better than Apache or Lighttpd) we set up Nginx. In Part 13: Configure NGINX Multi-Site Virtual Hosts we enhanced the Nginx file structure and allowed for multi-site hosting. In Part 14: Setup WordPress on NGINX (FURLs & 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:-
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 Part 3: Set up a Remote Encrypted Connection & Part 4: Hide Data & Simple Login - SSH & PuTTY.
...While I'm nagging, if you've not already, you should also carry out Part 6: LOCK LINUX - SSH & an iptables 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.
Login to MySQL with:-
mysql -u root -p
Add your password, or the password we created when we installed MySQL in Part 8: FASTER VPS! Set Up PHP, MySQL & Xcache.
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:-
grant all privileges on *.* to your_wordpress_username@localhost identified by "your_wordpress_password"; create database wp_database_name; quit
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 Part 13: Configure NGINX Multi-Site Virtual Hosts (the directory structure is explained most comprehensively in the video in Part 13.) 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:-
cd /home/public_html/waywiderweb.com/public
If you created a test index.html file in Part 13: Configure NGINX Multi-Site Virtual Hosts, let's bin it:-
sudo rm index.html
Now we'll use the subversion command to install the latest version of WordPress. Amend this version with any newer one* (which will be the last link down that linked repository page.)
* Edit: As of 20th January 2010, 2.9.1 is the latest version.
Leave the dot at the end, it's not a typo:-
sudo svn co http://svn.automattic.com/wordpress/tags/2.9.1 .
And create the WordPress config file:-
sudo mv wp-config-sample.php wp-config.php
Now let's connect the database. Open the WP config file:-
sudo nano wp-config.php...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:-
/** The name of the database for WordPress */
define('DB_NAME', 'putyourdbnamehere');
/** MySQL database username */
define('DB_USER', 'usernamehere');
/** MySQL database password */
define('DB_PASSWORD', 'yourpasswordhere');
While you're in there, for added security, find:-
$table_prefix = 'wp_';
...and swap wp_ to something unique.
Save and quit (CTRL-X, 'y' to confirm and hit Return.)
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.
For complete WP security tips, read Video How-to: 10 Tips To Make WordPress Hack-Proof 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.
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:-
cd /home/public_html/waywiderweb.com/public/wp-content/plugins
Let's edit our plugin list. Keep that dot:-
sudo svn propedit svn:externals .
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:-
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 Part 14: Setup WordPress on NGINX (FURLs & Cache), you'll notice I've included the WP Super Cache plugin:-
akismet http://plugins.svn.wordpress.org/akismet/trunk/ wp-phpmyadmin http://svn.wp-plugins.org/wp-phpmyadmin/ wp-super-cache http://svn.wp-plugins.org/wp-super-cache/trunk/
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:-
sudo svn update
Take tea.
If you didn't in Part 13: Configure NGINX Multi-Site Virtual Hosts, set your folder permissions, allowing SFTP access, substituting guvnr with your user name:-
sudo chown -R guvnr:webmasters /home/public_html
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.
...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:-
Unable to create directory /home/public_html/waywiderweb.com/public/wp-content/uploads/2009/04. Is its parent directory writable by the server?
...So we'll take ownership of the directory:-
sudo chown -R guvnr:webmasters /home/public_html/waywiderweb.com sudo chmod -R g+w /home/public_html/waywiderweb.com
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 wp-phpmyadmin.
Activate in the usual WordPress way, and cash in on the groundwork of Part 13: Configure NGINX Multi-Site Virtual Hosts. Cash in, geddit! Sorry.
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:-
sudo svn update
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.
Follow this process for your entire blog farm.
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 series - Set Up Unmanaged VPS (4 Newbies) .. The VPS Bible - by showing how and why to setup Google Apps in Part 17: Google Apps for Domain-Specific Email, which keeps our VPS server resources jealously focussed on our sites and blogs, before running down the all-important moving day checklist mentioned above. Then there'll be a handy backup guide before linking a heap of top resources for Linux newbies in Part 20: Blogroll, Links, Credits, Resources.
Guess what...
Serve multi sites & blogs on a budget .. at the fastest possible speed .. with the least downtime .. in the most secure environment .. and future-proofed for easy admin.
That's what the VPS Bible is about, stepped out in simple copy & paste guides.
From high traffic WordPress blogs to startup web hosts, here's what you need.
Set it up? Click here for the 21 part follow-up .. V-P-S Admin
» 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. [...]
Andy Symonds January 22nd, 2010 at 12:34 pm
George Smith you are a legend - thanks for thise chown commands!!!
Also will say it again - thank you the_guv for this great guide.
Lastly any reason why you didn't use spawn-fcgi for this series as this seems to be recommended everywhere currently?
the_guv January 22nd, 2010 at 6:55 pm
@Andy .. you thinking of spawn-fcgi for MU, per chance? Actually not reqd if the vhost rewrite is OK*. Have written an MU guide now and will be pubbing that on vpsBible.
* With MU and, therefore, BuddyPress, basically, the virtual host, the site's server-specific config file (or is that the server's site-specific config file
) needs to allow for sub-domains now, ie, not just the main site like mydomain.com, but also stuff like someSubSite.mydomain.com
.. so that needs a new wildcard A record (*.mydomain.com. - including last period) as well as the rewrite.
Have written an MU/BP guide now and will be pubbing that on vpsBible.com
Johnny February 2nd, 2010 at 9:03 am
Guv,
Regarding the '[space] + .' that you mention for everyone to keep at the end of their svn checkout commands it would be nice to explain what that dot actually means.
To all that are not aware, the '[space] + .' after your checkout tells subversion(svn) to place the files your checking out into the current directory. You may also, after the space, choose another directory of your choice to checkout into given you have the proper permissions to do so.
More importantly, great work Guvnr. I look forward to seeing your new site vpsbible.com. Honestly, I am a bit surprised it was available! If you need any help, suggestions, design or development please don't hesitate to ask. My friends and I have tried similar things before but I think your hitting a nerve. Good on 'ya.! Aloha.
the_guv February 3rd, 2010 at 9:26 am
@Johnny .. thank you. will add that into the post .. nice tip .. i had no idea.