WP3 Stack: Setup WordPress 3 for Sub-Sites on LEMP
Choose a few simple variables, run the script, paste a few commands & start adding sites within MINUTES! This WP3 sub-domain LEMP * guide automates setting up the database, the cache, the FURLs, the wp-config.php, the network, THE LOT.
* Linux-Nginx-MySQL-PHP
Setting up WP MultiSites is a 2-part no-brainer process:-
- The script enables everything from download to db setup and connection, sites/Nginx/permalinks/WP Super Cache configurations, secured WP install and network capability.
- Now we can login to click the all-important network Install button and are free to copy/paste some chunky commands to configure the wp-config for sub-domains.
We finish off with some trim in the Dashboard plus a handy permissions switch and you’re ready to start building your WordPress community.
If that sounds a little bewildering, don’t sweat it. With this how-to it’s peas and cake
The WordPress 3 Series: Choices Choices!
There are 4 options in the WP3 series:-
Single WP Sites
Just want the WordPress CMS?
- Setup WordPress 3 for Single Sites on LEMP
(copy/paste install) - WP3 Stack: Add WordPress 3 Single Sites on LEMP
(super-fast script)
WP MultiSites
Prefer a Community?
- Setup WordPress 3 for Sub-Sites on LEMP
(copy/paste install) - WP3 Stack: Setup WordPress 3 for Sub-Sites on LEMP # YOU ARE HERE!
(super-fast script + copy/paste)
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 Multi-Sites, 2 Types
WP3 has options for two types of multi-sites:-
- sub.domain.com
- domain.com/another
Personally, I think the latter looks a bit crummy. Therefore the virtual host below is configured for the former, the sub-domain option.
WordPress Multi-Sites (manual or stack): Spec
This install results in a secure blog network foundation. 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 WordPress network configuration file (virtual host)
- .. linking that to Nginx with a symlink
- setup the database
- setup the domain and network folder structure with log files
- download and install WordPress
- create the wp-config.php file with all required network directives
- 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:-
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:-
Setup DNS Wildcard
These WordPress sub-sites need a further DNS tweak, a wildcard record.
Go back into your VPS provider’s DNS Manager and click on your new domain zone. Scroll down the page to the section to the A/AAAA Records, clicking on something like Add a new A/AAAA Record. Provide the following:-
Hostname *.domain.com. (including the final period)
IP Address the same IP address you used to set up the domain zone
TTL leave as default
.. and save the resource record. Bear in mind that, as with the new domain zone, it can take a while for the record to resolve.
WordPress MultiSites Stackscript: How to Execute
Firstly, copy the script to a plain text editor and edit the values:-
Assume Super-User Privileges
Logged into the VPS via a terminal, elevate to root:-
Run the WP Network Stack
Open a new file:-
In there paste CTRL-SHIFT-v the entire contents of the script with your variables.
Save and close the file .. CTRL-x > y > ENTER
Give root permissions to execute the file:-
Chocks away:-
After a couple of minutes (more like 1 on my Linode 512) the script runs out of things to do and you’ll see its completion message.
Browse to your site before someone else does.
Logging into your WordPress Blog
Just add your 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.
Create a Network of WordPress Sites
We’ve already added the network option to your wp-config.php file but the network itself has to be installed separately. Here’s the easy way. Goto:-
- http://mysite.com/wp-admin > Dashboard > Tools > Network
Check the radio box for:-
- Sub-domains
Ignore everything else for now and click Install.
You’re directed to a network settings page. You have two options.
- Do as it says Create the Nginx-writeable ‘blogs.dir’ folder and adding the wp-config.php directives. (Ignore step 3 as we have set the Nginx equivalent to the mentioned Apache rewrite rules in our virtual host.)
- Ignore the lot Be lazy like me and, adding once again your domain and username, paste this cunning clutch of commands instead, directly into the terminal:-
Leave Root
We’re done with superuser privileges:-
Setup Multiple WordPress Sub-Sites
Refresh the WordPress page and you’ll be prompted to log back in. May as well.
Now there’s a shiny new button at the top of the Dashboard menu called Super Admin.
Super-duper.
Pretty Permalinks for WordPress Sites
Aah, nearly forgot. 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:-
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:-
So, elevate your permissions now:-
Now grab the plugin.
Once the plugin is downloaded and installed you have three optional actions:-
- Activate Plugin
- Network Activate
- Return to Plugin Installer
Most likely you will want to activate for your entire network.
Play safe and revert to tight permissions:-
Setting up More WordPress Sites
If you want sub-sites on this domain, click on Create a New Site in Super-duper-Admin-land.
If you want other domain-specific WordPress 3 sub-domain hippy commune thingies, just change the variables, rinse and repeat.
Or if you want a traditional apple pie WordPress 3 domain instead, follow Setup WordPress 3 for Single Sites on LEMP or, for speed-freaks, WP3 Stack: Add WordPress 3 Single Sites on LEMP.
Thassit. Have fun, pulp Facebook (please) and make a mint.
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.
-
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.
-
Install PHP5 & MySQL – The One-Stop FastCGI Index Page
Add PHP5 & MySQL, but which FastCGI method is best? Here’s the benchmarking, 4 ways to install/compile, add caching modules & more.
-
Nginx (better than Apache) Web Server
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? If you do, here’s how to add subDomain.yourSite.com with an ‘A record’ and a configuration file.
-
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.
-
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.
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 Control Panel: Here’s the Deal
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.
-
Nginx Control Panel Workarounds
For every control panel module there’s an equivalent (and faster) terminal command. Let’s compare these.
-
Upgrade to Nginx Latest Version with ZERO Downtime
Keep Nginx up-to-date – and optimized for security. This guide shows precisely how *with no missed server requests*.
-
Compile an Advanced Nginx Module Configuration
Need special web server functions? Here’s how to install or upgrade Nginx with bespoke required modules & parameters.
-
Add Web Sites Nginx Cheatsheet
Once you’ve set up your first site, adding more gets easier. Especially when you refer to this. (Let’s face it, I’m just too good to you.)
-
Adding Sub-Domains with Nginx
Rather than add somesite.tld, maybe you want some.subsite.tld? Here’s how to set your A record using a DNS manager and the vhost file for Nginx.
-
Add/Delete MySQL Database from Command Line
Need a database? Want to bin an old db? This tutorial shows you how using the terminal command line console whatnot.
-
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.
-
Backup/Export MySQL DB with CLI & mysqldump
Here’s how to backup a database from the command line using the handy mysqldump utility.
-
Import MySQL Database using Command Line
Import data to a new database with this simple mysqldump guide .. great for reinstating an old backed-up db, for instance.
-
Batch Replace/Delete Data in MySQL Database
Change repetitive db data with a single command. Rather than manually find & alter each instance, isolate the lot & update multiple content.
-
LOST a MySQL Password? How to RESET it
Lost your MySQL password? That’s a bit of a bummer .. or it would be if you didn’t have this new password setup guide, huh.
-
Backup or Upload with Secure Copy SCP (Linux to Linux)
Never mind FTP m8! Save time and download/upload your files using encrypted SCP (secure copy), the #1 Linux-Linux file transfer solution.
-
Backup or Upload with PuTTY PSFTP (Windows/Linux)
Equivalent to the above, how to transfer your files if you’re unlucky enough to be running Windows for your local PC. Not that I’m biased.
-
*USEFULLY* Park A Spare Domain with Nginx
Got a spare domain name sat around doing nothing? Put it to some use, have it point its traffic at your primary domain. Here’s the deal ..
-
Password Protect Nginx Web Files/Directories
Maybe you want a hidden website directory, say, for projects, or are developing a site and want it off-limits ’till launch day. Top tip ..
-
Redirect Web Pages with Nginx Rewrite Rule
Here’s the syntax to point a site or blog to another domain. That way, for instance, traffic from a passive site benefits an active one.
-
Nginx Error & Access Logs
Need to troubleshoot some error, or want to find out who’s trying to hack your site? Here’s a start .. those tell-tale logs.
-
Subversion for Easy CMS Updates ie WordPress/Drupal/etc
A brief introduction to install and know about the power of Subversion, the version control system to keep scripts and platforms up-to-date.
-
You Tell Me …
Something missing? Probably. Let me know what you’d like included. And if it’s listed below, shout out anyhow and I’ll try to bump it.
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























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:-
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.