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.