Piwik .onion? ()

Il existe pléthore de tutoriels pour installer Piwik sur Debian, je ne vais probablement rien inventer mais bon, on est sur le Internet, je fais quoi qu'il me plaît.

L'auto-hébergement et tout ce que cela implique en terme d’investissement personnel, d'acquis techniques et de faisabilité prend du temps, beaucoup de temps. Il y a nécessairement une transition qui s'opère petit-à-petit entre les services centralisés et l’auto-hébergement total, durant laquelle on se retrouve avec un gloubi-boulga plein de contradictions. Je ne tend pas à l'auto-hébergement total pour toutes les raisons citées ci-dessus, mais je m'efforce de m'affranchir des services tiers qui peuvent s'avérer nuisible pour moi comme mes visiteurs du fait de l'absence de propriété des données. Mon blog est le reflet de cette tentative.

J'ai un compte Google Drive alors même que je pourrai installer un Owncloud ou utiliser mon Lima, de même j'utilise Google Apps alors que je pourrai très opter pour une solution auto-hébergée.
Ces services peut-être bien que je m'en passerai tôt ou tard, mais ce n'est pas à l'ordre du jour. Non aujourd'hui, je vais m'affranchir de Google Analytics !

Piwik je l'ai déjà pratiqué par le passé sur un mutualisé OVH en 2010, il me servait surtout à suivre mon portfolio. Je l'avais trouvé très chouette cependant son installation avait fini par disparaître lors d'une migration serveur, à la faveur de Google Analytics. Je n'avais pas pris la peine de le réinstaller à ce moment là et depuis lors je me tâte à le réinstaller, seulement je ne voulais pas perdre les données récoltées sur GA. Etant donné qu'un outil d'importation est en cours de développement, autant prendre ses aises tout de suite et le réinstaller.

Prérequis

Pour ce tutoriel assurez-vous que soit installé sur votre serveur NGinx, WGet, MySQL et PHP.

La base de données MySQL

Avant d'installer Piwik, va falloir créer une base de données et un utilisateur dédié.

Vu qu'on est des fous, on va tout fait en ligne de commande. Pourquoi? parce que je n'utilise pas phpmyadmin et qu'il est plus direct/accessible d’utiliser le terminal qu'un client tiers. Par exemple chez moi j'utilise Sequel Pro, un client plutôt chouette et confortable à utiliser au quotidien. Si nous n'avez pas régulièrement besoin de taper dans vos db, un peu de lignes de commande devront suffire.

Créer une base de données

1 - Connectez-vous à Mysql avec l’utilisateur root en indiquant son mot de passe lorsqu'il vous sera demandé

mysql -u root  

2 - On créé la base de données piwik

CREATE DATABASE piwik CHARACTER SET 'utf8';  

Voilà.

Note: Vous pouvez passer cette étape en indiquant directement le mot de passe avec l'option -p de telle sorte: mysql -u root -pVOTREMOTDEPASSE

Créer un utilisateur

1 - On créé l’utilisateur en indiquant son nom, son mot de passe, ses privilèges et sur quelle base données ceux-ci s'appliquent. Remplacez les indications UTILISATEUR et MOTDEPASSE par vos propres données.

GRANT ALL PRIVILEGES ON piwik.* TO 'UTILISATEUR'@'localhost' IDENTIFIED BY 'MOTDEPASSE' WITH GRANT OPTION;  

4 - C'est ok ! Sortez du prompt Mysql

exit  

Tout est prêt, passons maintenant à l'installation de Piwik en lui-même.

Installation

Le tutoriel suivant a été réalisé sur Debian 8 Jessie avec NGinx et Piwik 2.16.1.

Il est possible d'installer Piwik de plusieurs façons, notamment en téléchargeant un zip, avec un installer ou en passant par apt-get grâce aux dépôts non-officiels mais reconnus de Piwik, maintenus par Aurélien Requiem.

Apt-get

On ne va pas se casser la tête, utilisons les dépôts d'autant plus que ces packages ont l'immense avantage de supporter Apache et NGinx, easy peasy.

1 - Téléchargez la clé GPG du dépôt de Piwik et vérifiez-là. Elle devrait correspondre à 0d7c880f6c838bba2d02817dcacfc97fc538b1ebcdb41c3106595265c0d371d4

cd /tmp  
wget https://debian.piwik.org/repository.gpg -qO piwik-repository.gpg  
sha256sum --binary piwik-repository.gpg  

2 - Si tout est ok, installez la clé de signature

cat piwik-repository.gpg | sudo apt-key add -  

3 - Déclarez maintenant les dépôts auprès de apt-get, mettez-les à jour et installez Piwik !

echo 'deb https://debian.piwik.org/ piwik main  
deb-src https://debian.piwik.org/ piwik main' >> /etc/apt/sources.list.d/piwik.list  
apt-get update  
apt-get install piwik  

C'est installé? Parfait. Vous trouverez les fichiers de configuration dans le répertoire /etc/piwik/.

Par contre si comme moi vous avez eu la magnifique erreur que voici ci-dessous, va falloir passer par le Web Installation Wizard. Diem perdidi.

Web Wizard

Allez qu'à cela ne tienne, j'utiliserai le Web Wizard comme le préconise Aurélien Requiem dans mon cas de figure.

1 - Je commence par désinstaller ce qui a été en partie installé par apt-get histoire de repartir au propre

apt-get remove piwik --purge  

2 - On installe. Rendez-vous dans le répertoire souhaité, téléchargé la dernière version de Piwik, décompressez l'archive et faites le ménache ! Le tout avec un sudoer.

cd /var/www/  
sudo wget http://builds.piwik.org/piwik.tar.gz  
sudo  tar zxvf piwik.tar.gz  
sudo rm piwik.tar.gz  
sudo rm How\ to\ install\ Piwik.html  

3 - On applique les propriétés et les permissions adéquates

sudo mkdir /var/www/piwik/tmp  
sudo mkdir /var/www/piwik/tmp/assets/  
sudo mkdir /var/www/piwik/tmp/cache/  
sudo mkdir /var/www/piwik/tmp/logs/  
sudo mkdir /var/www/piwik/tmp/tcpdf/  
sudo mkdir /var/www/piwik/tmp/templates_c/  
sudo chmod  -R 0755 /var/www/piwik/tmp/  
sudo chown - R www-data:www-data /var/www/piwik  

Piwik est installé! Enfin presque, les fichiers sont là, va falloir faire place nette pour lui en configuration tout d'abord NGinx.

Configuration

NGinx

Voilà. Configurons maintenant NGinx afin d'utiliser piwik en sous-domaine avec un reverse-proxy.

1 - Créez le fichier de configuration pour NGinx

sudo nano /etc/sites-available/piwik  

2 - Copiez-collez ce qui suit en l'adaptant à vos besoins. Je vous explique ci-après les détails de cette configuration (FastCGI et HTTPS).

server {  
        listen 80;
        server_name piwik.domaine.ext;

        return 301 https://$server_name$request_uri;
}

server {  
    listen 443 ssl;
    server_name piwik.domaine.ext;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/domaine.ext/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domaine.ext/privkey.pem;
    ssl_session_timeout 5m;

    root /var/www/piwik;
    index index.php;

    access_log /var/log/nginx/piwik.domaine.ext_access.log;
    error_log /var/log/nginx/piwik.domaine.ext_error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            # php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
        location ~ \.php5$ {
            include snippets/fastcgi-php.conf;
            # php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
}

3 - Faites un lien symbolique et testez votre configuration

ln -s /etc/nginx/sites-available/piwik /etc/nginx/sites-enabled/piwik  
nginx -t  

Tout fonctionne? Relancez NGinx

service nginx restart  

FastCGI

Comme vous pouvez le voir j'inclus une configuration tierce (snippet) pour l'utilisation de php-fpm, afin d'avoir la même configuration pour tous mes sites qui le nécessite. JE le fais avec les lignes:

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            # php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
        location ~ \.php5$ {
            include snippets/fastcgi-php.conf;
            # php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }

Elles appellent un fichier baptisé snippets/fastcgi-php.conf et contenant la configuration suivante:

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;  
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;  
include fastcgi.conf;  

HTTPS / Let's Encrypt

J'ai rédigé un article à propos de l'autorité de certification Let'sEncrypt. Bonne lecture !

Aussi j'en profite pour faire passer tout ça en HTTPS avec un certificat signé par Let's Encrypt.

Je redirige le trafic entrant sur le port 80 vers le port 443

server {  
        listen 80;
        server_name piwik.domaine.ext;

        return 301 https://$server_name$request_uri;
}

server {  
    listen 443 ssl;
    server_name piwik.domaine.ext;
[...]

Et je déclare mes certificats:

    ssl on;
    ssl_certificate /etc/letsencrypt/live/domaine.ext/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domaine.ext/privkey.pem;
    ssl_session_timeout 5m;

PHP.ini

Veillez à activer dans votre configuration php la ligne always_populate_raw_post_data = -1 en la dé-commentant.

1 - Ouvrez le fichier php.ini

sudo nano /etc/php5/fpm/php.ini  

2 - Recherchez et remplacez la ligne (709?)

;always_populate_raw_post_data = -1

..par

always_populate_raw_post_data = -1  

3 - Relancez php et nginx

service php5-fpm restart  
service nginx restart  

Finalisation et utilisation

Ah! On ne va pas trop s'étendre là-dessus, c'est assez intuitif.
Si vous en êtes arrivé à vous intéresser à Piwik, il y a fort à parier que vous serez tout à fait capable de faire le reste par vous-même. Quoiqu'il en soit, j'en parle ici brièvement, il vous suffit juste de rapporter les données pêchées en amont au Wizard afin de finaliser l'installation de Piwik!

1 - Rendez-vous maintenant à l'adresse utilisée dans votre configuration, dans mon exemple il s'agissait de piwik.domaine.ext. Vous devriez alors tomber sur le Web Wizard:

2 - Suivez ses instructions en cliquant sur le bouton Suivant >> et laissez-le tester votre système. A priori vous ne devriez pas rencontrer de difficultés mais on sait jamais. Croisez les doigts.

3 - Configuration de la base de données. Reportez tout simplement les accès créés dans le chapitre Base de données. Piwik créera alors les tables.

4 - Dernière étape, on créé un super utilisateur et on ajoute un Site Web !

Il ne vous reste plus qu'à ajouter le code de suivi à votre site web.
Piwik est installé et prêt à l'emploi. À vous de faire le tour du propriétaire!

Vous remarquerez l'une des grande différence avec Google Analytics, c'est la transparence des données et la mise en avant (l'humanisation?) de chacun de vos visiteurs. On se sent un peu comme à la maison. :)

Liens / sources

Pour formater votre commentaire, vous pouvez utiliser le Markdown