Awstats integration (Debian)

From VHCP Support

Jump to: navigation, search

AWStats

Contents

Step 1: Installation

Install the Apache Mod Auth MySQL Module

apt-get install apache2-prefork-dev gcc libmysqlclient15-dev

wget http://superb-west.dl.sourceforge.net/sourceforge/modauthmysql/mod_auth_mysql-3.0.0.tar.gz
wget http://acet.rdg.ac.uk/~mjeg/resources/mod_auth_mysql/apache22.diff

tar xzf mod_auth_mysql-3.0.0.tar.gz

mv apache22.diff mod_auth_mysql-3.0.0/

cd mod_auth_mysql-3.0.0

patch -p0 < apache22.diff mod_auth_mysql.c

apxs2 -c -L/usr/lib/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c

apxs2 -i mod_auth_mysql.la

The module should now be available in /usr/lib/apache2/modules/ named mod_auth_mysql.so.

Now create the file "/etc/apache2/mods-available/auth_mysql.load" with the following line:

LoadModule mysql_auth_module /usr/lib/apache2/modules/mod_auth_mysql.so

Then you just have to enable this module and gracefully reload apache’s config:

a2enmod auth_mysql

apache2ctl graceful



Setup/configure awstats

Get awstats

apt-get install awstats

Copy model conf for awstats

cd /etc/awstats
wget http://support.vhcp.org/downloads/awstats/awstats.model.conf

Copy vhcp-awstats-mngr program

cd /var/www/webadmin/engine
wget http://support.vhcp.org/downloads/awstats/vhcp-awstats-mngr
chmod 0750 vhcp-awstats-mngr

Copy awstats_updateall.pl to correct place

cp /usr/share/doc/awstats/examples/awstats_updateall.pl /usr/sbin/awstats_updateall.pl

Edit apache's template file /etc/vhcp/apache/parts/dmn_entry.tpl

Add under of "Alias /errors {WWW_DIR}/{DMN_NAME}/errors/"

Redirect /stats http://{DMN_NAME}/awstats/awstats.pl

Edit files /etc/apache2/sites-available/vhcp.conf and /etc/vhcp/apache/working/vhcp.conf

Add before "# Default GUI." section following lines:

# awstats modifications
Alias /awstatscss "/usr/share/doc/awstats/examples/css/"
Alias /awstats-icon "/usr/share/awstats/icon/"
Alias /awstatsicons "/usr/share/awstats/icon/"
ScriptAlias /awstats/ "/usr/lib/cgi-bin/"

<Directory /usr/share/awstats>
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<Directory /usr/lib/cgi-bin>
Options None
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>


Use phpmyadmin to create user vhcp_awstats with select only access to vhcp -> admin

Set it's password to whatever you want. FOR SECURITY REASONS, YOU SHOULDN'T MAKE IT A BLANK PASSWORD. YOU'VE BEEN WARNED

Edit file /usr/lib/cgi-bin/.htaccess and add following lines:

AuthType Basic
AuthBasicAuthoritative Off
AuthName "Stats"
AuthGroupFile /dev/null
AuthUserFile /dev/null
AuthMySQLEnable On
AuthMySQLHost localhost
AuthMySQLUser vhcp_awstats
AuthMySQLPassword password
AuthMySQLDB vhcp
AuthMySQLUserTable admin
AuthMySQLNameField admin_name
AuthMySQLPasswordField admin_pass
AuthMySQLNoPasswd Off
AuthMySQLPwEncryption md5
AuthMySQLAuthoritative On
require valid-user


Regenerate Configs

Next to do is regenerate configs

It's not necessary to edit manually every domain config file. This can be done automatically by changing template files in /etc/vhcp/<service>/parts/ and then regenerating configs with these instructions.

/etc/init.d/vhcp_daemon stop
mysql -u root -p
***MYSQL_ROOT_PASSWORD***
USE vhcp
UPDATE `domain` SET `domain_status` = 'change' WHERE `domain_status` = 'ok';
UPDATE `domain_aliasses` SET `alias_status` = 'change' WHERE `alias_status` = 'ok';
UPDATE `subdomain` SET `subdomain_status` = 'change' WHERE `subdomain_status` = 'ok';
quit
/var/www/vhcp/engine/vhcp-rqst-mngr
/etc/init.d/vhcp_daemon start

Where ***MYSQL_ROOT_PASSWORD*** is the password for the root user in your mysql database


Now when everything is configured, vhcp-awstats-mngr program can be run.

/var/www/webadmin/engine/vhcp-awstats-mngr


Edit Crontab

vhcp-awstats-mngr program should be run as a cronjob.

Edit crontab with command crontab -e and add following line:

30 */2 * * * /var/www/webadmin/engine/vhcp-awstats-mngr


Viewing statistics

Point your browser to http://<yourdomain.tld>/stats/

Username and password are same as in VHCP Control Panel.




Step 2: Configuration

1. Edit the "/etc/awstats/awstats.model.conf" file.

nano -w /etc/awstats/awstats.model.conf
DirData="/var/lib/awstats"
DirCgi="/cgi-bin"
DirIcons="/awstatsicon"


2. Setup awstats in VHCP

mkdir /etc/vhcp/awstats
cp /etc/awstats/awstats.model.conf /etc/vhcp/awstats/awstats.vhcp_tpl.conf
chmod 600 /etc/vhcp/awstats/awstats.vhcp_tpl.conf


3. Edit the template file "/etc/vhcp/awstats/awstats.vhcp_tpl.conf"

Logfilename, Domainname und Domainalias eintragen.

LogFile="/var/log/apache2/{DOMAIN_NAME}-combined.log"
SiteDomain="{DOMAIN_NAME}"
HostAliases="www.{DOMAIN_NAME}"
IncludeInternalLinksInOriginSection=1

(Optional)

DNSLookup=1

(Optional)

DefaultFile="index.html index.php index.htm"


---

Step 3: modern_blue Theme

1. Edit /var/www/webadmin/gui/client/domain_statistics.php

Find this section and insert modification

$tpl -> assign(array('TR_DOMAIN_STATISTICS' => tr('Domain statistics'),
                     //-- AWStats Mod Start --//
                     'DOMAIN_URL' => 'http://'.$_SESSION['user_logged'].'/stats/',
                     'TR_AWSTATS' => tr('Web Stats'),
                     //-- AWStats Mod End --//
                     'TR_MONTH' => tr('Month'),
                     'TR_YEAR' => tr('Year'),
                     'TR_SHOW' => tr('Show'),
                     'TR_DATE' => tr('Date'),
                     'TR_WEB_TRAFF' => tr('WEB'),
                     'TR_FTP_TRAFF' => tr('FTP'),
                     'TR_SMTP_TRAFF' => tr('SMTP'),
                     'TR_POP_TRAFF' => tr('POP/IMAP'),
                     'TR_SUM' => tr('Sum'),
                     'TR_ALL' => tr('Total')));


2. Edit /var/www/webadmin/gui/themes/modern_blue/client/domain_statistics.tpl

Find this section and insert modification


    <tr>
     <td background="{THEME_COLOR_PATH}/images/menu/button_background.jpg" class="menu">
      <a href="domain_statistics.php" onMouseOver="MM_swapImage('statistics','',
'{THEME_COLOR_PATH}/images/icons/statistics_a.gif',1)" onMouseOut="MM_swapImgRestore()">
       <img src="{THEME_COLOR_PATH}/images/menu/open_pointer.jpg" width="28" height="36" border="0"></a>
     </td>
     <td background="{THEME_COLOR_PATH}/images/menu/open_background.gif" class="menu">
      <a href="domain_statistics.php" class="menu_active" onMouseOver="MM_swapImage('statistics','',
'{THEME_COLOR_PATH}/images/icons/statistics_a.gif',1)" onMouseOut="MM_swapImgRestore()">
       {TR_MENU_DOMAIN_STATISTICS}</a>
     </td>
     <td align="right" background="{THEME_COLOR_PATH}/images/menu/open_icon_bcgr.jpg" class="menu">
      <a href="domain_statistics.php" onMouseOver="MM_swapImage('statistics','',
'{THEME_COLOR_PATH}/images/icons/statistics_a.gif',1)" onMouseOut="MM_swapImgRestore()">
       <img src="{THEME_COLOR_PATH}/images/icons/statistics_a.gif" name="statistics"
 width="36" height="36" border="0" id="statistics"></a>
     </td>
    </tr>

    <!-- AWStats Mod Start -->
    <tr background="{THEME_COLOR_PATH}/images/menu/open_background.jpg">
     <td colspan="3" class="menu" background="{THEME_COLOR_PATH}/images/menu/open_background.jpg">
      <table width="100%" border="0" cellspacing="0" cellpadding="0">
       <tr>
        <td width="5" rowspan="6" background="{THEME_COLOR_PATH}/images/menu/open_background_left.gif">
         <img src="{THEME_COLOR_PATH}/images/trans.gif" width="12" height="1">
        </td>
        <td>
         <img src="{THEME_COLOR_PATH}/images/icons/document.gif" width="12" height="15">
        </td>
        <td>
         <a href="domain_statistics.php" class="submenu">{TR_MENU_OVERVIEW}</a>
        </td>
        <td width="5" rowspan="6" background="{THEME_COLOR_PATH}/images/menu/open_background_right.gif">
         <img src="{THEME_COLOR_PATH}/images/trans.gif" width="5" height="1">
        </td>
       </tr>
       <tr>
        <td colspan="2">
         <img src="{THEME_COLOR_PATH}/images/trans.gif" width="30" height="4">
        </td>
       </tr>
       <tr>
        <td width="15">
         <img src="{THEME_COLOR_PATH}/images/icons/document.gif" width="12" height="15">
        </td>
        <td>
         <a href="{DOMAIN_URL}" target="awstats" class="submenu">{TR_AWSTATS}</a>
        </td>
       </tr>
       <tr>
        <td colspan="2">
         <img src="{THEME_COLOR_PATH}/images/trans.gif" width="30" height="4">
        </td>
       </tr>
      </table>
     </td>
    </tr>
    <!-- AWStats Mod End -->


    <!-- BDP: support_system -->
    <tr>
     <td colspan="3"><img src="{THEME_COLOR_PATH}/images/trans.gif" width="30" height="4"></td>
    </tr>
    <tr>


3. Language variables (Do this for each language)

INSERT INTO `lang_English` ( `id` , `msgid` , `msgstr` , `msg_row` , `msg_column` , `msg_file_dest` , `msg_name` ) VALUES (, 'Web Stats', 'Web Statistics', NULL , NULL , NULL , NULL);


4. Add AWStats to /etc/vhcp/vhcp.conf configuration file:

#
# AWStats
#

AWSTATS_DIR = /etc/awstats


---

Step 4: VHCP Automation

1. The only file we need to edit is /var/www/webadmin/engine/vhcp-dmn-mngr.

nano -w /var/www/webadmin/engine/vhcp-dmn-mngr

Find the following line in sub dmn_add_data { add the following code between (between #-- AWStats Mod Start --# and #-- AWStats Mod End --#)


sub dmn_add_data {

    [...]

    $rs = dmn_add_named_data($dmn_data);

    return $rs if ($rs != 0);

    $rs = dmn_add_httpd_data($dmn_data);

    return $rs if ($rs != 0);

    $rs = dmn_add_mta_data($dmn_data);

    return $rs if ($rs != 0);

    #-- AWStats Mod Start --#

    $rs = dmn_add_awstats_data($dmn_data);

    return $rs if ($rs != 0);

    #-- AWStats Mod End --#

#     $rs = dmn_add_crontab_data($dmn_data);
#
#     return $rs if ($rs != 0);

    push_el(\@main::el, 'dmn_add_data()', 'Ending...');

    return 0;

}


sub dmn_change_data {

    [...]

    $rs = dmn_change_named_data($dmn_data);

    return $rs if ($rs != 0);

    $rs = dmn_change_httpd_data($dmn_data);

    return $rs if ($rs != 0);

    $rs = dmn_change_mta_data($dmn_data);

    return $rs if ($rs != 0);

    #-- AWStats Mod Start --#

    $rs = dmn_change_awstats_data($dmn_data);

    return $rs if ($rs != 0);

    #-- AWStats Mod End --#

    push_el(\@main::el, 'dmn_change_data()', 'Ending...');

    return 0;

}



sub dmn_del_data {

    [...]

    $rs = dmn_del_named_data($dmn_data);

    return $rs if ($rs != 0);

    $rs = dmn_del_httpd_data($dmn_data);

    return $rs if ($rs != 0);

    $rs = dmn_del_mta_data($dmn_data);

    return $rs if ($rs != 0);

    #-- AWStats Mod Start --#

    $rs = dmn_del_awstats_data($dmn_data);

    return $rs if ($rs != 0);

    #-- AWStats Mod Start End --#

#     $rs = dmn_del_crontab_data($dmn_data);
#
#     return $rs if ($rs != 0);

    push_el(\@main::el, 'dmn_del_data()', 'Ending...');

    return 0;

}


2. Now you just need to add the AWStats Engine to the end of the file.


#
# domain awstats data management
#

sub dmn_add_awstats_data {

    my ($dmn_data) = @_;

    my $rs = undef;

    push_el(\@main::el, 'dmn_add_awstats_data()', 'Starting...');

    if (!defined($dmn_data) || $dmn_data eq '') {

        push_el(\@main::el, 'dmn_add_awstats_data()', 'ERROR: Undefined Input Data...');

        return -1;

    }

    $rs = dmn_add_awstats_cfg_data($dmn_data);

    return $rs if ($rs != 0);

    push_el(\@main::el, 'dmn_add_awstats_data()', 'Ending...');

    return 0;
}

sub dmn_add_awstats_cfg_data {

    my ($dmn_data) = @_;

    my ($rs, $rdata) = (undef, undef);

    push_el(\@main::el, 'dmn_add_awstats_cfg_data()', 'Starting...');

    if (!defined($dmn_data) || $dmn_data eq '') {

        push_el(\@main::el, 'dmn_add_awstats_cfg_data()', 'ERROR: Undefined Input Data...');

        return -1;

    }

    #
    # Initial data we need;
    #

    my $dmn_name = @$dmn_data[1];

    my $conf_dir = $main::cfg{'CONF_DIR'};

    my $awstats_dir = $main::cfg{'AWSTATS_DIR'};

    my $tpl_dir = "$conf_dir/awstats";

    my $awstats_fname = "awstats.$dmn_name.conf";

    my $sys_cfg = "$awstats_dir/$awstats_fname";

    #
    # Let's get needed tags and templates;
    #

    my $entry = '';

    ($rs, $entry) = get_tpl(
                            $tpl_dir,
                            'awstats.vhcp_tpl.conf'
                           );

    return $rs if ($rs != 0);

    #
    # Let's prepare them;
    #

    my %tag_hash = (
                    '{DOMAIN_NAME}' => $dmn_name
                   );

    ($rs, $entry) = prep_tpl(
                             \%tag_hash,
                             $entry
                            );

    return $rs if ($rs != 0);

    #
    # Let's store generated data;
    #

    $rs = store_file($sys_cfg, $entry, 'root', 'root', 0644);

    return $rs if ($rs != 0);

    push_el(\@main::el, 'dmn_add_awstats_cfg_data()', 'Ending...');

    return 0;
}

sub dmn_change_awstats_data {

    my ($dmn_data) = @_;

    my $rs = undef;

    push_el(\@main::el, 'dmn_change_awstats_data()', 'Starting...');

    if (!defined($dmn_data) || $dmn_data eq '') {

        push_el(\@main::el, 'dmn_change_awstats_data()', 'ERROR: Undefined Input Data...');

        return -1;

    }

    $rs = dmn_add_awstats_cfg_data($dmn_data);

    return $rs if ($rs != 0);

    push_el(\@main::el, 'dmn_change_awstats_data()', 'Ending...');

    return 0;
}

sub dmn_del_awstats_data {

    my ($dmn_data) = @_;

    my $rs = undef;

    push_el(\@main::el, 'dmn_del_awstats_data()', 'Starting...');

    if (!defined($dmn_data) || $dmn_data eq '') {

        push_el(\@main::el, 'dmn_del_awstats_data()', 'ERROR: Undefined Input Data...');

        return -1;

    }

    $rs = dmn_del_awstats_cfg_data($dmn_data);

    return $rs if ($rs != 0);

    push_el(\@main::el, 'dmn_del_awstats_data()', 'Ending...');

    return 0;
}

sub dmn_del_awstats_cfg_data {

    my ($dmn_data) = @_;

    my ($rs, $rdata) = (undef, undef);

    push_el(\@main::el, 'dmn_del_awstats_cfg_data()', 'Starting...');

    if (!defined($dmn_data) || $dmn_data eq '') {

        push_el(\@main::el, 'dmn_del_awstats_cfg_data()', 'ERROR: Undefined Input Data...');

        return -1;

    }

    #
    # Initial data we need;
    #

    my $dmn_name = @$dmn_data[1];

    my $conf_dir = $main::cfg{'CONF_DIR'};

    my $awstats_dir = $main::cfg{'AWSTATS_DIR'};

    my $tpl_dir = "$conf_dir/awstats";

    my $awstats_fname = "awstats.$dmn_name.conf";

    my $sys_cfg = "$awstats_dir/$awstats_fname";

    #
    # Let's delete file;
    #

    $rs = del_file($sys_cfg);

    return $rs if ($rs != 0);


    push_el(\@main::el, 'dmn_del_awstats_cfg_data()', 'Ending...');

    return 0;
}


That's it, your done! Everything should now be working.



References:

Personal tools