Piwik sous Apache

De EjnTricks

Piwik étant une application écrite en php, cet article présente la mise à disposition sous Apache.

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Attention, l'exposition peut nécessiter l'ajout du domaine par la liste des sites de confiances, comme décrit dans l'article suivant.


Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Déploiement site sécurisé

La procédure décrite ci dessous permet de mettre à disposition l'application avec un accès sécurisé HTTPS avec utilisation d'un certificat fourni par Let's Encrypt et un tutoriel très bien réalisé.

L'application sera rendue disponible depuis un sous domaine du domaine principal.

Pour rappel, l'application est déployée dans le répertoire /var/opt/piwik/installed.

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Préparation environnement

Certbot sera utilisé pour demander et renouveler le certificat du site. Dans son fonctionnement, le process essaye d'accéder à un .well-known à la racine du site. De plus, une bonne pratique consiste à fournir un répertoire racine pour les sites déployés sous Apache. Le répertoire /var/www/piwik est alors créé, ainsi que le sous répertoire .well-known.

#sudo mkdir -p /var/www/piwik/.well-known

Pour cette application, il n'est pas nécessaire de placer un fichier index.html, avec un contenu vide, dans le répertoire racine, soit /var/www/piwik, car la racine sera sur l'instance qui possède déjà un fichier index.php.

Un fichier robots.txt y est placé avec les directives indiquant aux moteurs de recherche de ne rien indexer.

User-agent: *
Disallow: /

Les permissions mises en place donnent un accès uniquement aux compte du serveur, soit www-data.

#sudo find /var/www/piwik -type f -exec chmod 0600 {} \;
#sudo find /var/www/piwik -type d -exec chmod 0700 {} \;
#sudo chown -R www-data:www-data /var/www/piwik

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Configuration HTTP

Dans un premier temps, une configuration est mise en place pour accéder de façon non sécurisé. Un fichier piwik est créé dans le répertoire /etc/apache2/sites-available avec le contenu suivant.

<VirtualHost *:80>
    ServerAdmin contact-email@dummy.net
    ServerName www.piwik.dummy.net
    DocumentRoot /var/opt/piwik/installed
    DirectoryIndex index.php

    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/piwik_error.log
    CustomLog ${APACHE_LOG_DIR}/piwik_access.log combined

    Alias /.well-known "/var/www/piwik/.well-known"
    <Directory "/var/www/piwik/.well-known">
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    Alias /robots.txt "/var/www/piwik/robots.txt"

    <Directory /var/opt/piwik/installed>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

Les directives sur l'accès à /.well-known et robots.txt permettent de servir les éléments depuis la racine /var/www/piwik.

Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled.

#sudo ln -s /etc/apache2/sites-available/piwik /etc/apache2/sites-enabled/008-piwik.conf

Le nom du lien, à savoir 008-piwik.conf, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide pour Apache.

Il suffit de relancer la configuration d'Apache pour qu'elle soit prise en compte.

#sudo apache2ctl graceful

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Certificat

L'application est à présent disponible avec l'URL http://www.piwik.dummy.net. Un certificat va être demandé à l'aide de Certbot.

#sudo certbot certonly --webroot -w /var/www/piwik -d www.piwik.dummy.net --email contact-email@dummy.net
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.piwik.dummy.net
Using the webroot path /var/www/piwik for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www.piwik.dummy.net/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www.piwik.dummy.net/privkey.pem
   Your cert will expire on 2018-05-06. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Le certificat est stocké dans le répertoire /etc/letsencrypt/live/www.piwik.dummy.net/.

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Configuration HTTPS

Le certificat étant disponible, la configuration HTTPS peut être mise en place. Un fichier piwik-dummy-ssl est créé dans le répertoire /etc/apache2/sites-available avec le contenu suivant.

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin contact-email@dummy.net
    ServerName www.piwik.dummy.net
    DocumentRoot /var/opt/piwik/installed
    DirectoryIndex index.php

    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/piwik_ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/piwik_ssl_access.log combined

    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    SSLEngine on
    SSLCertificateFile         /etc/letsencrypt/live/www.piwik.dummy.net/cert.pem
    SSLCertificateKeyFile      /etc/letsencrypt/live/www.piwik.dummy.net/privkey.pem
    SSLCertificateChainFile    /etc/letsencrypt/live/www.piwik.dummy.net/chain.pem
    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCompression off
    SSLOptions +StrictRequire
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

    Alias /.well-known "/var/www/piwik/.well-known"
    <Directory "/var/www/piwik/.well-known">
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    Alias /robots.txt "/var/www/piwik/robots.txt"

    <Directory /var/opt/piwik/installed>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
</IfModule>

Les configurations mises en place dans le précédent paragraphe sont reprises et complétées avec la déclaration du certificat et l'alias. De plus, une directive sur le Header est mise en place afin de forcer l'accès au maximum l'accès sur le site sécurisé.

Cette configuration doit être mise à disposition en plaçant un lien dans /etc/apache2/sites-enabled.

#sudo ln -s /etc/apache2/sites-available/piwik-dummy-ssl /etc/apache2/sites-enabled/009-piwik-ssl.conf

Le nom du lien, à savoir 009-piwik-ssl.conf, respecte une incrémentation sur la machine utilisée, il peut être remplacé pour tout autre nom valide pour Apache.

La configuration HTTP, sur le port 80, n'est pas modifiée pour laisser un accès en non sécurisé. En effet, les appels à l'enregistrement des statistiques peuvent s'effectuer via du code Javascript qui peut tester le protocole, comme c'est le cas pour le plugin d'intégration dans MediaWiki

<script type="text/javascript">
  var _paq = _paq || [];{$disableCookiesStr}{$customJs}
  _paq.push(["trackPageView"]);
  _paq.push(["enableLinkTracking"]);

  (function() {
    var u=(("https:" == document.location.protocol) ? "https" : "http") + "://{$wgPiwikURL}/";
    _paq.push(["setTrackerUrl", u+"piwik.php"]);
    _paq.push(["setSiteId", "{$wgPiwikIDSite}"]);
    var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
    g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
  })();
</script>


Il suffit de relancer la configuration d'Apache pour que les modifications soient prises en compte.

#sudo apache2ctl graceful


Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Configuration simple

Ce mode de configuration permet de mettre à disposition l'application dans une configuration de site existant, en s'inspirant de celle de Mediawiki par exemple.

Par contre, les modes présentés ne mettent pas en évidence l'utilisation de certificat et sont effectué sur des accès HTTP simple.

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Apache 2.2.X

La configuration ci dessous montre un déploiement sur le site www.stats.dummy.net.

<VirtualHost *:80>
        ServerAdmin contact-email@dummy.net
        ServerName www.stats.dummy.net
        DocumentRoot /var/www/stats
        DirectoryIndex index.php index.htm index.html

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/stats>
                Options Indexes FollowSymLinks Multiviews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error_stats.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access_stats.log combined

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -Multiviews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        Alias /piwik /var/opt/piwik/installed
        <Directory /var/opt/piwik/installed>
                Options +FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>

</VirtualHost>


Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Apache 2.4.6

Lors d'une mise à jour du serveur Ubuntu, Apache a été mis à jour en version 2.4.6. Cependant, l'impact est assez conséquent, car il y a eu une refonte de la gestion des droits d'accès.

les messages d'erreurs étant constatés dans les logs de Apache:

[Thu Dec 26 13:42:39.040047 2013] [authz_core:error] [pid 8487] [client 82.230.154.123:55568] AH01630: client denied by server configuration: /var/opt/phpLdapPasswd/

La configuration a donc été modifiée afin d'être de nouveau opérationnelle:

<VirtualHost *:80>
        ServerAdmin contact-email@dummy.net
        ServerName www.stats.dummy.net
        DocumentRoot /var/www/stats
        DirectoryIndex index.php index.htm index.html

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/stats>
                Options Indexes FollowSymLinks Multiviews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error_stats.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access_stats.log combined

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -Multiviews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        Alias /piwik /var/opt/piwik/installed
        <Directory /var/opt/piwik/installed>
                Options +FollowSymLinks
                AllowOverride All
                # Old configuration for APACHE 2.2
                # Order allow,deny
                # Allow from all
                Require all granted
        </Directory>

</VirtualHost>