linux, Technology

The Final Guide to WordPress on your Ubuntu LAMP Server

I’ve gone over all the setup and nit-picky details of setting up my own web server. However, the one thing I could never get quite right was my WordPress install.  If you peruse the WordPress (and Ubuntu) user forums, you will see countless examples of people trying to get their permissions set right for one reason or another.  WordPress recommends, rather irresponsibly, CHMODing everying 777.  To compliment that, you should really find a theme with a large header saying “HACK ME.”  The problems range from being unable to upload pictures to having serious trouble with plugins, some of which won’t work at all without (again) CHMODing several parts of your WordPress Install to 777.

I’ve lived for several months with my blog like this…balancing usability with security, and totally unable to use the “Upgrade Automatically” feature in the plugins page.  If you’ve setup your own WordPress Server and worked with plugins much, you know how the process typically goes.  You Upload your plugin to the plugins folder.  Then via terminal, chown -R your new folder to www-data, perhaps chmod 777, depending on the plugin, and then go into your WordPress Admin page and activate.  Time for an update?  Same process.  Such a pain, with nary a solution in sight… at least that I could find on the forums.

The problem lies with this:  your files are uploaded (via ftp, or whatever) under your Ubuntu user name.  Apache owns web processes under the user name and group www-data.  So when WordPress tries to work on a folder owned by your username, it gets denied, because it is trying to work with it as www-data.  To fix this, I attempted to add my username to the www-data group, but that was unsuccessful.  And then I discovered the envvars file under /etc/apache2.  In this beautiful file, is the designated Apache username, www-data.  It looks something like this:

envvars – default environment variables for apache2ctl

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/

Just change the information to match your user name and group for Ubuntu, restart Apache, et voila!  Permissions and Ownership issues are resolved.  Now Apache is working with files under the same ownership and permissions set they were uploaded with.

One important caveat here:  I’m unsure about the security issues with this.  I’m going on the assumption that it is significantly more secure than CHMODing everything 777, and it certainly makes your Ubuntu/Wordpress Web Server much easier to use for upgrade purposes.  Plugins install and upgrade with no hassle now!

Hope this helps all of you with these issues.

linux, Technology

Server Headaches

Over the last… oh… 8 months or so, I’ve been casually putting together a LAMP server to host my blog and personal website on, and give myself access to files from work, etc.  Last week, I believed I had it reasonably prepared for entrance into the World Wide Web.  My CPU then jumped up, slapped me in the face, called me a B!%^#, and attempted to destroy my server.
I forwarded my ports, and nothing worked.  So I decided to go editing config files for Apache.  That was all well and good, until I really screwed something up . . . not sure what.  This led me to uninstall my server programs: Apache, MySQL, PHP, and supporting modules.  I attempted to reinstall, but the computer flipped out everytime.
Several reboots, and some manual file cleaning later, I just wiped the hard drive and resinstalled Ubuntu.  Their sudo tasksel command, which I learned during this process, made the reinstallation of the LAMP server super easy and quick.  I had a little trouble using phpMyAdmin, until I linked it to my /var/www folder, reinstalled WordPress, et voila!  Back where I started.  With ports forwarded, I was still unable to access the server from the web.  I noticed later that I was connected to the IP for my modem, not the USABLE IP assigned to me by my ISP.  I must be honest:  I have no idea what that means.  Hopefully I’ll get the opportunity to call tech support and have them walk me through what to do with those IP addresses.
Anyone know if Apache should be configured past its initial installtion?  Is the server ready to go as soon as the IP address route properly, or do I need to configure apache for my domain?
All of this has led me down a very interesting chain of ideas.  In the coming months, I have a new website that should be launching, and I’m pretty excited about the idea.  It will hopefully be different from other things you’ve been seeing.