Awstats integration (Debian)
From VHCP Support
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:
