After several years of tinkering with my Drupal deployment stack, I’ve finally found one that I think is both stable and performant. There is usually a trade-off between the two, but not anymore.
Now, some people will only use packages from the stable repositories on Debian. If you’re one of those people, you can still follow the majority of this tutorial. However, you will need to skip the part about updating sources.list and you also won’t be able to install the php5-xcache package using apt (as of this post its still only available in test). You will still be able to download and build XCache from source, but I won’t be going over that here.
From my own experience, I’ve found that the packages in test are “stable enough”. Of the small bugs that do get into test, I haven’t ran into them, nor (as of this post) are there any bugs in test that effect the packages we’ll be installing here.
So, first thing we’ll do is edit our sources.list file to include the testing repository if you haven’t already done so.
Then add the following line to the bottom of the file:
deb http://http.us.debian.org/debian testing main contrib non-free
Save the file and then run:
sudo apt-get update
This will update your packages list to include the packages from test. Once that is complete we’re ready to begin installing the required packages needed to run Drupal with Lighttpd. Run the following:
sudo apt-get install lighttpd lighttpd-mod-magnet php5-cgi php5-curl php5-gd php5-mysql php5-xcache mysql-server
If you already have MySQL installed you can skip it in the package list above. Also, if you are not using the test repositories you will not be able to install php5-xcache, so omit it.
If you previously had Apache installed, its no longer needed, so we can remove it with:
sudo apt-get remove apache2
In order to use php5-cgi with lighttpd, we will need to modify one setting in the php.ini file.
Search for “cgi.fix_pathinfo” and change its value to 1. If its not there add it:
cgi.fix_pathinfo = 1
Before we configure lighttpd, let’s download the latest version of Drupal and get it ready to go.
curl -O http://ftp.drupal.org/files/projects/drupal-5.3.tar.gz
tar -xzvf drupal-5.3.tar.gz
mv drupal-5.3 drupal
chown www-data:www-data files
chown www-data:www-data sites/default/settings.php
You’ll notice in the last two lines of code we give the www-data user ownership of the files directory and the default settings.php. Drupal will change the permissions on the settings file back after installation is complete. Drupal needs write access to the files directory to handle uploads, so this setting stays.
Now you need to create the database for your drupal site.
mysql -u username -p
create database drupal;
GRANT ALL PRIVILEGES ON drupal.* TO someuser@localhost IDENTIFIED BY 'somepassword';
Replace “someuser” and “somepassword” with a username and password of your choice.
Now that Drupal is ready to be installed, lets finish configuring lighttpd. Download my lighty_conf tar to your /etc/lighttpd directory and extract it
curl -O http://joshhuckabee.com/files/lighty_conf.tar.gz
tar -xzvf lighty_conf.tar.gz
mv lighty_conf/drupal.lua .
mv lighty_conf/lighttpd.conf .
mkdir -R /var/tmp/lighttpd/cache/compress
The important things to note about lighttpd.conf are:
- Ensure mod_fastcgi and mod_magnet are enabled
- Make sure you set your document-root to /var/www/drupal (or wherever you extracted your drupal install too)
- You will need the magnet.attract line to make sure clean urls work with Drupal
- Ensure the compression directory is created - lighttpd will not start correctly if its not there
- Depending on the resources you have avilable to you, you may need to adjust fastcgi.server settings, specifically min-procs and max-procs to avoid swapping
At this point we’re ready to restart Lighty (make sure that if you haven’t uninstalled Apache, that you’ve at least stopped it)
Now you should be able to navigate to your site, install your Database and create the first user. Your site should be in a usable state.
XCache is a PHP opcode cacher that significantly boosts the performance of your PHP scripts by caching them in a pre-compiled state in your server’s memory.
If you installed the php5-xcache package above, all you need to do to enable it is edit /etc/php5/cgi/conf.d/xcache.ini. Change xcache.size to anything greater than zero. I’ve set mine at 64M. Also, if you have a multi-core processor, run
cat /proc/cpuinfo |grep -c processor and use that as the value for xcache.count. Once you’ve updated this file, restart Lighttpd and you’re all set.
You should now have a fast stable Drupal installation ready for loads of traffic!