Drupal 8 et React : block dynamique ou headless

2 tuto en 1, nous allons voir comment coupler Drupal avec react.js en headless et … avec Drupal lui même (pour rajouter un bloc react temps-réel).

D’abord nous activons les modules RESTful Web Services et Serialization.

Ensuite nous allons créer une vue sur les derniers commentaires postés avec un display REST export (j’ai mis plain text dans le format de display des champs par soucis de simplicité) :

Nous allons maintenant nous appuyer dessus pour faire des appels du webservice JSON via React.…

Read more

Tester l’envoi d’emails avec behat pour Drupal

Behat ne permet pas à priori de tester l’envoi d’email, ni de vérifier leur contenu. Mais, il est possible de rajouter cette fonctionnalité.

1ère étape on va rajouter un système de collecte des emails dans une variable qu’on pourra ensuite interroger. Il y a peu de nettoyage à faire car seul le title, send-to, send-from, et body nous intéressent vraiment :

<?php 

/** 
 * A mail sending implementation that captures sent messages to a variable. 
 * 
 * This class is for running tests or for development.
Read more

Surveiller les performances d’un serveur Drupal avec le stack TICK d’influxDB et grafana

Il existe toute une palette d’outils de monitoring de serveurs, mais dans le cas présent, c’est du monitoring de site, ce qui est un peu moins commun. Il est possible de s’acquitter de cette tâche avec cacti, munin, nagios, zabbix (qui permet de configurer des scénarios de scan) mais j’ai choisis un outil dédié à cette tâche : le stack TICK (telegraf, influxdb, chronograf, kapacitor), quoi que dans la pratique, c’est surtout telegraf, influxdb et grafana que j’utilises.

Une autre possibilité aurait été le stack ELK (Elastick Search, Logstash, Kibana) qui font presque la même chose à une différence près : alors que ELK est orienté « log », c’est une base de donnée non structurée, c’est à dire analyse de fichier de log (desquels on peut remonter les informations de performance sans problème), TICK est une base de donnée temporelle, qui intègre directement les mécanismes de gestion des séries temporelles (notamment le stockage des données lissées sur une longue durée) ainsi que les outils de visualisation qui vont bien.…

Read more

Performance monitoring avec ELK / Grafana – test de base

Vous avez un site en production, avec le temps, il accumule de plus en plus de données, et le nombre de visiteurs augmente. Généralement les sysadmins ont tout un ensemble d’outils de surveillance et d’alertes mais peu de prophylactique (préventif).

Afin d’éviter que les performances ne s’effondrent ou ne s’érodent, il peu être intéressant sur certains projets d’anticiper en mettant en place des métriques. Généralement on va utiliser un outil de test de charge qui permet de déterminer combien d’utilisateurs simultanés un site peut supporter.…

Read more

Tests de scalabilité avec Locust et Taurus

jMeter est lourd à mettre en œuvre et complexe. A la place j’ai trouvé des petits outils plus simples, mais très puissants et scriptables en ligne de commande.

Locust.io qui permet de faire des tests de performances et Taurus qui permet d’aller plus loin avec des tests de scalabilité.

Installation de Locust

apt-get install python-pip python-dev && pip install locustio

Création du fichier locustfile.py qui indique les scénarios à tester. Ici on teste la HP, puis le login, puis l’accès à la page /node/add/request qui est un formulaire important sur ce site :

from locust import HttpLocust, TaskSet

def login(l):
    l.client.post("/user", {"name":"admin", "pass":"admin", "form_id":"user_login"})

def index(l):
    l.client.get("/")

def create_request(l):
    l.client.get("/node/add/request")

class UserBehavior(TaskSet):
    tasks = {index:2, create_request:1}

    def on_start(self):
        login(self)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 5000
    max_wait = 9000

Ensuite on lance le serveur :

locust --host=http://10.0.2.2:8088/emh/www/

Les résultats donnent quelque chose comme ceci :

Screenshot of Locust web UI

On peut grâce au lien « Edit » en dessous de status faire facilement varier le nombre de clients et le nombre de répétitions des tests pour simuler une montée en charge.…

Read more

behat & drupal 8 : exemple complet et simple

Addendum : behat sera entièrement installé dans drupal 8.3 (5 avril 2017)

Une fois drupal et le composer installés correctement, dans /var/www/d8 avec un compte admin/admin

Le tuto officiel n’est pas vraiment complet/utilisatble tel quel (le behat.yml par défaut n’est pas complet).

Pour installer, j’utilises le composer installé globalement :

composer require drupal/drupal-extension='~3.0'

Ensuite behat est rajouté automatiquement dans « vendor » ou il y avait déjà un répertoire behat, mais pas complet.

vendor/behat/behat/bin/behat --init

Maintenant on créer le behat.yml minimaliste pour pouvoir lancer les tests :

default:
  suites:
    default:
      contexts:
        - Drupal\DrupalExtension\Context\DrupalContext
        - Drupal\DrupalExtension\Context\MinkContext
  extensions:
    Behat\MinkExtension:
      goutte: ~
      base_url: http://localhost/d8
    Drupal\DrupalExtension:
      api_driver: "drupal"
      blackbox: ~
      drupal:
        drupal_root: "/var/www/d8"

Premier test basique dans features/navigate.feature

  Everything from the site.
Read more

Liste des librairies de Drupal8 (répertoire vendor)

  • asm89/stack-cors : Cross-origin resource sharing library and stack middleware.
  • behat : Behat is an open source Behavior Driven Development framework for PHP 5.3+.
  • composer : Dependency Manager for PHP.
  • doctrine : The Doctrine Project is the home to several PHP libraries primarily focused on database storage and object mapping.
  • easyrdf : A PHP library designed to make it easy to consume and produce RDF.
  • egulias/email-validator : EmailValidator – PHP Email validator library inspired in @dominicsayers isemail
  • fabpot/goutte : Goutte is a screen scraping and web crawling library for PHP.
Read more

Import d’un site existant dans aegir depuis un dépôt git

Petit préambule pour bien comprendre le vocabulaire d’aegir.

Imaginons que vous ayez un site sur monurl.fr qui pointe sur /var/www/monsite (la plateforme) dans votre vhost avec un sous-répertoire /sites/monurl.fr (le site), le tout géré par votre dépôt git sous gitlab.

Pour faire simple aegir appelle un drupal sans base de donnée une plateforme et un drupal avec sa base de donné un site :

  • une plateforme au sens aegir, c’est le dépôt git d’un répetoire drupal avec sa branche courante (qu’on ne peut plus changer à postériori)
  • une site au sens aegir c’est : à l’intérieur d’une plateforme, un répertoire dans sites avec le settings.php (généré par aegir, il ne faut pas y toucher), une base de donnée, un alias, et un vhost

Etape 1 : créer la plateforme à partir du dépôt git

Une plateforme, c’est un répertoire PHP avec un drupal installé dedans, mais sans base de donnée associée (une plateforme peut contenir plusieurs sites).…

Read more

Installation d’aegir pour gérer un parc de sites Drupal

aegir est un outil web qui permet de piloter un parc de sites Drupal. Ce qu’on fait en général via des commandes drush (drush updb, drush fra, etc…) on peut le faire via un site web directement. C’est un site Drupal, qui pilote la gestion d’autres sites Drupal. Bien sûr, on pourrait faire tout ça et même plus via des scripts ou quelques outils de supervision.

L’intérêt c’est de donner à l’utilisateur (le client) la possibilité de créer des sites à la volé par exemple, ou de lancer des opérations sur plusieurs sites à la fois, sans « mettre les mains dans le cambouis ».…

Read more

Retex : sécurisation Drupal

Je me suis fait hacker sur l’un de mes sites Drupal en production, sur le serveur qui était mal protégé.

L’alerte

Tout commence par OVH qui bloque l’envoies d’email parce que le serveur est repéré comme spammeur :

Bonjour,

Notre protection Anti-Spam a détecté un envoi important de spam à partir d'une de vos IP: 
92.XX.XX.XXX

Afin d'assurer la sécurité de notre réseau le trafic sortant de votre serveur vers les
ports 25 a été suspendu.

Afin que vous puissiez effectuer les vérifications voici un échantillon des emails bloqués:

Destination IP: 217.69.139.150 - Message-ID: <span id="OBJ_PREFIX_DWT169_com_zimbra_email" class="Object"><span id="OBJ_PREFIX_DWT170_com_zimbra_email" class="Object">20160325090323.E07981XXXXX@vpsXXXXX.ovh.net</span></span> - Spam score: 9999
Destination IP: 66.102.1.27 - Message-ID: <span id="OBJ_PREFIX_DWT171_com_zimbra_email" class="Object"><span id="OBJ_PREFIX_DWT172_com_zimbra_email" class="Object">20160325090402.E91EE1XXXXX@vpsXXXXX.ovh.net</span></span> - Spam score: 9999
Destination IP: 194.186.47.93 - Message-ID: <span id="OBJ_PREFIX_DWT173_com_zimbra_email" class="Object"><span id="OBJ_PREFIX_DWT174_com_zimbra_email" class="Object">20160325090343.81C801XXXXX@vpsXXXXX.ovh.net</span></span> - Spam score: 9999
Destination IP: 94.100.180.150 - Message-ID: <span id="OBJ_PREFIX_DWT175_com_zimbra_email" class="Object"><span id="OBJ_PREFIX_DWT176_com_zimbra_email" class="Object">20160325090422.973121XXXXX@vpsXXXXX.ovh.net</span></span> - Spam score: 9999
Destination IP: 94.100.180.150 - Message-ID: <span id="OBJ_PREFIX_DWT177_com_zimbra_email" class="Object"><span id="OBJ_PREFIX_DWT178_com_zimbra_email" class="Object">20160325090441.E3F061XXXXX@vpsXXXXX.ovh.net</span></span> - Spam score: 9999

Merci de consulter attentivement ce guide:

    <span id="OBJ_PREFIX_DWT179_com_zimbra_url" class="Object"><span id="OBJ_PREFIX_DWT180_com_zimbra_url" class="Object"><a href="http://guide.ovh.net/AntiSpamBestPratice" target="_blank">http://guide.ovh.net/AntiSpamBestPratice</a></span></span>

Si vous avez identifié et résolu la cause du blocage, vous pouvez débloquer votre IP
depuis le manager, en vous rendant à cette adresse :

    <span id="OBJ_PREFIX_DWT181_com_zimbra_url" class="Object"><span id="OBJ_PREFIX_DWT182_com_zimbra_url" class="Object"><a href="https://www.ovh.com/manager/#/configuration/ip?action=antispam&amp;ip=92.XX.XX.XX&amp;ipSpamming=92.XX.XX.XX" target="_blank">https://www.ovh.com/manager/#/configuration/ip?action=antispam&amp;ip=92.XX.XX.XX&amp;ipSpamming=92.XX.XX.XX</a></span></span>

C’est une IP Russe qui envoies des emails (probablement du SPAM) vers les Chinois.…

Read more