Installing Jawstats for a Webhost
Introduction
JAWStats is a free, open-source website statistics and analytics package. It runs in conjunction with AWStats and produces clear and informative charts, graphs and tables about your website visitors.
Jawstats presents a user friendly interface that is easily naviagable for end users. Below is a sample screen shot of the stats for this site:
Installation>
Installation on FreeBSD is somewhat interesting. Instead of using the port, I ended up downloading the source code and installing it by hand which proved much easier as the instructions fit this setup much better. To begin, you need a working copy of awstats installed:
cd /usr/ports/www/awstats sudo make install clean
That will install a working copy of awstats. You still need to configure it before it will do anything. You need to create a configuration file in /usr/local/etc/awstats/ for each website you have. You can use the configuration program (run as root) to setup each as such:
sudo /usr/local/www/awstats/tools/awstats_configure.pl
After that, it is actually quicker and easier to copy the files and edit them by hand using your favorite editor but whichever you choose, you should end up with a pile of configs.
Now you need to setup awstats to run periodically to parse your weblogs. I run this hourly and have created a perl script to handle this task for me:
#! /usr/local/bin/perl chdir "/usr/local/etc/awstats/"; my @files = <*>; foreach $file (@files) { $file=~ s/\.conf$//g; $file=~ s/^awstats\.//g; system "/usr/bin/nice /usr/local/www/awstats/wwwroot/cgi-bin/awstats.pl -config=$file"; sleep 1; }
This simple program simply iterates through the files and is much simpler than adding a line for each domain to your crontab. I found it difficult to space them and remember each spot I had to add a new domain whenever I set one up. I added the following line to my crontab file:
5 * * * * root /home/rnejdl/Scripts/awstats.pl
At this point, you are ready to download and setup jawstats. You can download the latest version at http://www.jawstats.com/src/jawstats-0.7beta.tar.gz. Download that to your home directory and uncompress it as such:
tethys:/home/rnejdl>mkdir jawstats tethys:/home/rnejdl>cd jawstats/ tethys:/home/rnejdl/jawstats>wget http://www.jawstats.com/src/jawstats-0.7beta.tar.gz --2009-09-21 22:56:13-- http://www.jawstats.com/src/jawstats-0.7beta.tar.gz Resolving www.jawstats.com... 208.97.180.79 Connecting to www.jawstats.com|208.97.180.79|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 256622 (251K) [application/x-tar] Saving to: `jawstats-0.7beta.tar.gz' 100%[======================================>] 256,622 622K/s in 0.4s 2009-09-21 22:56:13 (622 KB/s) - `jawstats-0.7beta.tar.gz' saved [256622/256622] tethys:/home/rnejdl/jawstats>tar -xvzf jawstats-0.7beta.tar.gz x clsAWStats.php x config.dist.php x index.php x js/ x js/constants.js x js/jawstats.js x js/jquery.js x js/jquery.tablesorter.js ... x themes/default/style.js x xml_history.php x xml_pages.php x xml_stats.php x xml_update.php tethys:/home/rnejdl/jawstats>rm -Rf jawstats-0.7beta.tar.gz tethys:/home/rnejdl/jawstats>
Now, move the jawstats directory over to /usr/local/www. You now need to configre jawstats to pick up your awstats configuration. Copy the config.dist.php file to config.php and edit it. It should look something like the following:
<?php // core config parameters $sConfigDefaultView = "thismonth.all"; $bConfigChangeSites = false; $bConfigUpdateSites = true; $sUpdateSiteFilename = "xml_update.php"; // individual site configuration $aConfig["www.ringofsaturn.com"] = array( "statspath" => "/var/lib/awstats/", "updatepath" => "/usr/local/www/awstats/wwwroot/cgi-bin/awstats.pl", "siteurl" => "http://www.ringofsaturn.com", "theme" => "default", "fadespeed" => 250, "password" => "letm31n", "includes" => "" ); ?&rt;
You need to add those 9 lines for each domain you want jawstats to work for. Once you have that, you only need to update your apache configuration. I added the following lines to my http.conf:
# # Directives to allow use of AWStats as a CGI # Alias /awstatsclasses "/usr/local/www/awstats/wwwroot/classes/" Alias /awstatscss "/usr/local/www/awstats/wwwroot/css/" Alias /awstatsicons "/usr/local/www/awstats/wwwroot/icon/" ScriptAlias /awstats "/usr/local/www/awstats/wwwroot/cgi-bin" Alias /jawstats "/usr/local/www/jawstats/" Alias /weblogs "/usr/local/www/jawstats/"Options None AllowOverride None Order allow,deny Allow from all Options None AllowOverride All Order allow,deny Allow from all
I also added awstats.pl to the DirectoryIndex definition:
DirectoryIndex index.php index.cgi index.htm index.html index.html.var index. pl awstats.pl
In order for a bit of magic to happen where the right stats shows up, I had to modify clsAWStats.php and add a line at line 319:
$sConfig = $_SERVER['SERVER_NAME'];
That tells Jawstats to pull the config for whatever hostname you are calling such that http://www.myhost.com/weblogs shows stats for http://www.myhost.com instead of the first item in your config file.
Restart apache and you should now be able to go to any of your websites /weblogs/ and see jawstats for that individual domain show up.