wiki:PiwikServerInstall
Last modified 4 years ago Last modified on 02/27/13 11:11:02

Piwik Apache Install Notes

The following documentation is outdated, we are now using Nginx, see the PiwikServer page for current information.

Quince Server

The live install at https://stats.transitionnetwork.org/ on the NewLiveServer, the install was done on ticket:160.

Install

cd /web
cd stats.transitionnetwork.org/
wget http://piwik.org/latest.zip
unzip latest.zip
cd piwik
chown -R www-data:www-data tmp/
chown -R www-data:www-data config/
chown -R www-data:www-data themes/
Apache

Create stats.transitionnetwork.org.conf in cd /etc/apache2/sites-available/:

<VirtualHost *:80>
  ServerName stats.transitionnetwork.org
  ServerAlias stats.transitionnetwork.org.webarch.net
  ServerSignature Off
  UseCanonicalName On

  ErrorLog /var/log/apache2/stats.transitionnetwork.org_error.log
  ErrorLog /var/log/apache2/error.log
  SetEnvIf Remote_Addr "127\.0\.0\.1" loopback
  SetEnvIf Remote_Addr "kiwi\.transitionnetwork\.org" loopback
  CustomLog /var/log/apache2/stats.transitionnetwork.org_access.log combined env=!loopback
  CustomLog /var/log/apache2/access.log combined env=!loopback

  Redirect / https://stats.transitionnetwork.org/
</VirtualHost>

<VirtualHost *:443>
  ServerName stats.transitionnetwork.org
  ServerAlias stats.transitionnetwork.org.webarch.net
  ServerSignature Off
  UseCanonicalName On

  LogLevel warn
  ErrorLog /var/log/apache2/stats.transitionnetwork.org_ssl_error.log
  ErrorLog /var/log/apache2/error.log
  SetEnvIf Remote_Addr "127\.0\.0\.1" loopback
  SetEnvIf Remote_Addr "kiwi\.transitionnetwork\.org" loopback
  CustomLog /var/log/apache2/stats.transitionnetwork.org_ssl_access.log combined env=!loopback
  CustomLog /var/log/apache2/access.log combined env=!loopback

  SSLEngine on
  SSLCipherSuite HIGH
  SSLProtocol all -SSLv2
  SSLCertificateFile      /etc/ssl/transitionnetwork.org/transitionnetwork.org.pem
  SSLCertificateChainFile /etc/ssl/transitionnetwork.org/gandi.pem

  DocumentRoot "/web/stats.transitionnetwork.org/piwik"
  <Directory "/web/stats.transitionnetwork.org/piwik">
    DirectoryIndex index.php
    Options -Indexes
    AddType 'image/x-icon' .ico
    AddHandler php5-script .php
    AddType text/html .php
    SSLOptions +StdEnvVars
    AllowOverride None
    order allow,deny
    allow from all
  </Directory>
  <Directory "/web/stats.transitionnetwork.org/piwik/tmp">
    Options Indexes
    RemoveHandler .php
    AllowOverride None
    order allow,deny
    allow from all
  </Directory>
  <Location /config>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
  </Location>

  <FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory /usr/lib/cgi-bin>
    SSLOptions +StdEnvVars
  </Directory>

</VirtualHost>

Enable it and restart:

/etc/apache2/sites-enabled
ln -s ../sites-available/stats.transitionnetwork.org.conf 35-stats.transitionnetwork.org.conf
apache2ctl configtest
apache2ctl restart
MySQL

As MySQL root user:

CREATE USER 'stats'@'localhost' IDENTIFIED BY '********';
GRANT USAGE ON * . * TO 'stats'@'localhost' IDENTIFIED BY '********' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `stats` ;
GRANT ALL PRIVILEGES ON `stats` . * TO 'stats'@'localhost';
FLUSH PRIVILEGES;
Web Install

MySQL settings:

  • database server: 127.0.0.1
  • login: stats
  • password:
  • database name: stats
  • table prefix: (blank - we don't need one, the default is piwik_)
  • adapter: PDO_MYSQL

Super User settings:

  • super user login: webproject
  • password:
  • email: webproject (at) transitionnetwork.org

Suggested JS code:

<!-- Piwik -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.transitionnetwork.org/" : "http://stats.transitionnetwork.org/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://stats.transitionnetwork.org/piwik.php?idsite=1" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->

Suggested image code:

<!-- Piwik Image Tracker -->
<img src="https://stats.transitionnetwork.org/piwik.php?idsite=1&rec=1" style="border:0" alt="" />
<!-- End Piwik -->
Configure

In the General Settings page:

  • Allow Piwik archiving to trigger when reports are viewed from the browser: no
  • Reports for today (or any other Date Range including today) will be processed at most every: 1800

Set up cron:

crontab -u www-data -e

5 * * * * /web/stats.transitionnetwork.org/piwik/misc/cron/archive.sh > /dev/null

Test it:

su www-data -c "sh /web/stats.transitionnetwork.org/piwik/misc/cron/archive.sh"

This generated this error:

ALERT - script tried to increase memory_limit to 134217728 bytes which is above the allowed value (attacker 'REMOTE_ADDR not set', file '/web/stats.transitionnetwork.org/piwik/core/Piwik.php', line 947)

Which can be ignored because in /etc/php5/apache2/php.ini it's set to double that already, 256M, so I don't understand why it tried to raise it.

Things added to /web/stats.transitionnetwork.org/piwik/config/config.ini.php, taken from global.ini.php:

[General]
force_ssl_login = 1
feedback_email_address = "webproject (at) transitionnetwork.org"
assume_secure_protocol = 1
GA Import

First install Python 2.6 from source:

aptitude build-dep python2.5 
cd /usr/local/src
wget http://www.python.org/ftp/python/2.6.7/Python-2.6.7.tgz
tar -zxvf Python-2.6.7.tgz
cd Python-2.6.7
./configure --with-threads --enable-shared
make
make install 
ln -s /usr/local/lib/libpython2.6.so* /usr/lib/
cd /usr/local/src
wget 'http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e'
tar zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py install
cd /usr/local/src
wget "https://gdata-python-client.googlecode.com/files/gdata-2.0.14.tar.gz" --no-check-certificate
tar -zxvf gdata-2.0.14.tar.gz
cd gdata-2.0.14
python setup.py install
cd /usr/local/src
aptitude purge python-mysqldb
wget "http://downloads.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz"
tar -zxvf MySQL-python-1.2.3.tar.gz 
cd MySQL-python-1.2.3
vim site.cfg
 mysql_config = /usr/bin/mysql_config
aptitude install libmysqlclient-dev
python setup.py build
python setup.py install

Then the GA code and import:

cd /web/stats.transitionnetwork.org/
wget http://clearcode.cc/google2piwik-1.2.5.tgz
tar -zxvf google2piwik-1.2.5.tgz
cd google2piwik-1.2.5
cp google2piwik.conf.sample google2piwik.conf

Edit google2piwik.conf:

## Google Account Credentials
# If you don't know your site table_id type:
#                       ./google2piwik.py -p
[google]
user_login = transitiontownsnetwork [at] gmail.com
user_pass  = XXX
table_id   = ga:XXX

# MySQL Piwik Database configuration
[mysql]
db = stats
host = localhost
port = 3306
user = stats
passwd = XXX
table_prefix =

# Set export date range
[export]
start = 2008-01-01
end   = 2011-06-29

## Piwik configuration of site.
# For default Piwik installation with one website, site_id should be set to 1
[piwik]
site_id  = 1
site_url = http://transitionnetwork.org

Test and backup db:

./google2piwik.py -p
./google2piwik.py -c
mysql_backup

Then change the timezone to UTC for the site on https://stats.transitionnetwork.org/ run it in screen:

screen
./google2piwik.py --verbose=2

Kiwi Server

The Piwik server that is to be installed on the DevelopmentServer, the install was done on ticket:160

Config

In /web/piwik.transitionnetwork.org/piwik/config

assume_secure_protocol = 1

Install

Site: https://piwik.transitionnetwork.org/

Download
cd /web/
mkdir piwik.transitionnetwork.org
cd piwik.transitionnetwork.org/
wget http://piwik.org/latest.zip
unzip latest.zip
Apache

Then set up apache, see /etc/apache2/sites-available/piwik.transitionnetwork.org and run the web installer and:

cd /web/piwik.transitionnetwork.org/piwik/
chown -R www-data:www-data tmp/
chown -R www-data:www-data config/
MySQL

Then a MySQL user and database was added using phpMyAdmin which ran the following SQL:

CREATE USER 'piwik'@'localhost' IDENTIFIED BY '********';
GRANT USAGE ON * . * TO 'piwik'@'localhost' IDENTIFIED BY '********' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `piwik` ;
GRANT ALL PRIVILEGES ON `piwik` . * TO 'piwik'@'localhost';
Tracking code

The installer suggested this JS tracking code, see the docs at http://piwik.org/docs/javascript-tracking/ :

<!-- Piwik -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://piwik.transitionnetwork.org.webarch.net/" : "http://piwik.transitionnetwork.org.webarch.net/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://piwik.transitionnetwork.org.webarch.net/piwik.php?idsite=1" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->

And this image tracking code:

<!-- Piwik Image Tracker -->
<img src="https://piwik.transitionnetwork.org.webarch.net/piwik.php?idsite=1&rec=1" style="border:0" alt="" />
<!-- End Piwik -->

The following parameters can also be passed to the image URL:

  • rec - (required) The parameter &rec=1 is required to force the request to be recorded
  • idsite - (required) Defines the Website ID being tracked
  • action_name - Defines the custom Page Title for this page view
  • idgoal - The request will trigger the given Goal
  • urlref - The Referrer URL: must be set to the referrer URL used before landing on the page containing the Image tracker. For example, in PHP this value is accessible via

$_SERVER['HTTP_REFERER']

  • revenue - Used with idgoal, defines the custom revenue for this conversion

Customise the logo:

cd /web/piwik.transitionnetwork.org/piwik
chown -R www-data:www-data themes/
Cron

Set up the crontab to automatically archive the reports:

crontab -u www-data -e

5 * * * * /web/piwik.transitionnetwork.org/piwik/misc/cron/archive.sh > /dev/null
Python

For the Google Analytics data import we need Python 2.6 and we are running with Python 2.5.2, so following this a source compile was done on the dev server:

aptitude build-dep python2.5 
cd /usr/local/src
wget http://www.python.org/ftp/python/2.6.7/Python-2.6.7.tgz
tar -zxvf Python-2.6.7.tgz
cd Python-2.6.7
./configure --with-threads --enable-shared
make
make install 
ln -s /usr/local/lib/libpython2.6.so* /usr/lib/
cd /usr/local/src
wget 'http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e'
tar zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py install
cd /usr/local/src
wget "https://gdata-python-client.googlecode.com/files/gdata-2.0.14.tar.gz" --no-check-certificate
tar -zxvf gdata-2.0.14.tar.gz
cd gdata-2.0.14
python setup.py install
aptitude purge python-mysqldb
wget "http://downloads.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz"
tar -zxvf MySQL-python-1.2.3.tar.gz 
cd MySQL-python-1.2.3
vim site.cfg
 mysql_config = /usr/bin/mysql_config
aptitude install libmysqlclient-dev
python setup.py build
python setup.py install
GA Import

See python notes above and Google2Piwik.

cd /web/piwik.transitionnetwork.org/
wget http://clearcode.cc/google2piwik-1.2.5.tgz
tar -zxvf google2piwik-1.2.5.tgz
cd google2piwik-1.2.5
cp google2piwik.conf.sample google2piwik.conf

Edit google2piwik.conf:

## Google Account Credentials
# If you don't know your site table_id type:
#                       ./google2piwik.py -p
[google]
user_login = XXX@gmail.com
user_pass  = XXX
table_id   = ga:XXX

# MySQL Piwik Database configuration
[mysql]
db = piwik
host = localhost
port = 3306
user = piwik
passwd = XXX
table_prefix = 

# Set export date range
[export]
start = 2011-05-01
end   = 2011-06-29

## Piwik configuration of site.
# For default Piwik installation with one website, site_id should be set to 1
[piwik]
site_id  = 1
site_url = http://www.transitionnetwork.org

Get the table_id and test and backup db:

./google2piwik.py -p
./google2piwik.py -c
mysql_backup

Piwik, for the website you are importing data to, change the timezone to UTC and run the script:

./google2piwik.py --verbose=2

Requirements

The requirements are:

  • PHP version 5.1.3 or greater, We highly recommend using at least PHP 5.3 as it is much more memory efficient than previous PHP versions, we have: PHP 5.2.6-1+lenny10 with Suhosin-Patch 0.9.6.2 (cli), when the server is migrated to squeeze we will get a new php, it can wait till then.
  • MySQL version 4.1 or greater, we have 5.0.51a-24+lenny5-log
  • (enabled by default) PHP extension pdo and pdo_mysql, weh have these already installed and they are configured via /etc/php5/apache2/conf.d/pdo.ini and /etc/php5/apache2/conf.d/pdo_mysql.ini
  • PHP GD extension, installed already
  • Increase your PHP memory_limit value in your php.ini config file to be at least memory_limit = 128M, we have 256M already in /etc/php5/apache2/php.ini