Passer au https avec letsencrypt

Si il était conseillé auparavant l’utilisation du protocole https est maintenant une nécessité.
Ce paramètre est même pris en compte par google pour l’indexation de votre site.

Pour ceux qui font tourner une boutique de taille raisonnable et qui ne souhaitent pas de garantie étendue ( ou qui n’ont tout simplement pas le budget ), il existe une possibilité d’obtenir des certificats https gratuitement via letsencrypt : https://letsencrypt.org/

Le seul point à prendre en compte est que le certificat est valide pour une durée de 3 mois, il sera donc nécessaire de le renouveler régulièrement.

L’installation et la génération des certificats sont très rapide et pratique , nous allons voir comment procéder pour installer ces certificats sur notre serveur dédié avec Ubuntu 14.04

(Un accès root ou sudo est nécessaire )

#Telechargement du robot de certification
wget https://dl.eff.org/certbot-auto
#Mise à jour des droits
chmod a+x certbot-auto

Pour un serveur avec apache2

#Execution avec la configuration apache
$ sudo ./certbot-auto --apache

Vous pouvez ensuite choisir les domaines pour lesquels vous souhaitez un certicat https

Certbot choisir domaine

Il faut ensuite choisir si vous souhaitez que https soit obligatoire ou optionnel ( laisser en optionnel par défaut )

Certbot apache mode
Les certificats sont ensuite générés, il vous suffit de recharger la configuration d’apache et tout fonctionne 😉

sudo service apache2 reload

Pour renouveler votre certificat vous pouvez par exemple mettre une tache cron tous les lundi comme ceci

0 10 * * 1 ./path/to/certbot-auto renew --quiet --no-self-upgrade

Pour un serveur avec nginx :

Pour nginx , c’est un peu plus « compliqué » car il n’existe pas d’installation automatique.
Mais ça reste tout de même très accessible.

Pour commencer il faut générer les certifications

$ sudo ./certbot-auto certonly --webroot -w /var/www/example -d example.com -d www.example.com

L’option -w correspond à l’emplacement du site sur le serveur
L’option -d correspond aux noms de domaines qui y sont associés ( 1 ou plusieurs )

Les certificats sont ensuite générés dans l’emplacement /etc/letsencrypt/live/example.com/

Il vous suffit ensuite de les rajouter dans la configuration nginx ( et de rajouter l’ecoute sur le port 443 )

server {
        listen 80;
        listen 443 ssl;
 
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
 
        root /var/www/example;
 
      #Your configuration
       ...
}

Pour finir reloader la configuration nginx :

sudo service nginx reload

Vos sites seront ensuite accessibles via le protocole https 🙂

Pas de commentaires

Magento : Personnaliser le template utilisé par la fonction getPriceHtml

Dans magento la gestion de l’affichage des prix est gérée via la fonction getPriceHtml.
Celle-ci est en général appelée de la manière suivante

<?php echo $this->getPriceHtml($_product, true) ?>

Elle est utilisée entre autre dans les templates suivants :

  • catalog/product/list.phtml
  • catalog/product/compare/list.phtml
  • checkout/cart/crossell.phtml

Cette fonction peut être appelée par tous les blocks qui héritent de la classe Mage_Catalog_Block_Product_Abstract

Par défaut cette fonction utilise le bloc « catalog/product/price.phtml »

Si vous souhaitez changer le template utilisé voici comment procéder.
Il faut utiliser la fonction suivante AVANT l’appel de la fonction getPriceHtml :

/**
 * Adding customized price template for product type
 *
 * @param string $type
 * @param string $block
 * @param string $template
 */
$this->addPriceBlockType($type, $block = '', $template = '');
 
//Exemple d'utilisation
$this->addPriceBlockType('configurable', '', 'catalog/product/price-custom.phtml'); //Produit configurable
$this->addPriceBlockType('simple', '', 'catalog/product/price-custom.phtml'); //Produit simple
$this->addPriceBlockType('bundle', '', 'catalog/product/price-custom.phtml'); //Produit bundle
Pas de commentaires

Tester la qualité des emails envoyés par votre serveur

Voici un outil pratique pour tester la qualité des emails qui sont envoyés par votre serveur : https://www.mail-tester.com/

Mail tester

Cet outil teste les différents paramètres dont :

  • SPF
  • Sender ID
  • DKIM
  • Blacklists les + connues

Et il donne également les solutions pour corriger les différents problèmes de manière rapide.
Pour ma part je suis passé de 2.1 à 9 🙂

Pas de commentaires

Prestahop console : nouvelle version

Je viens de sortir la nouvelle version de mon module console pour prestashop 🙂

Celle-ci simplifie encore les choses puisqu’il suffit de télécharger un seul fichier phar à la racine de votre site pour bénéficier des fonctionnalités de la console 🙂
Pour rappel le précédent article : Console prestashop

Télécharger la console

wget https://github.com/nenes25/prestashop_console/raw/master/bin/prestashopConsole.phar

Ajouter les droits d’éxécution au fichier

chmod +x prestashopConsole.phar

Lancer la console

./prestashopConsole.phar
Pas de commentaires

Optimisez vos connaissances en serveurs dédiés avec AWS

Un petit post rapide pour parler de l’offre actuellement en cours chez Amazon Web Services ( AWS ) qui offre des ressources gratuites pendant un an.
L’offre est disponible pendant un an : https://aws.amazon.com/fr/free/

Ce n’est certes pas suffisant pour héberger gratuitement un site internet, mais en revanche c’est vraiment pratique si vous souhaitez parfaire vos connaissances en administration serveur, et mettre un pied dans le cloud.

Cette offre comprends entre autre un accès aux services suivants :

  • Amazon EC2
  • Amazon S3
  • Amazon RDS

J’ai souscris à cette offre il y’a quelques jours , j’essayerais de faire quelques retours si je rencontre des problématiques intéressantes.

Pas de commentaires

Alternative à wampserver : windows bash

La sortie de la mise à jour Anniversary pour windows 10 au début du mois d’aout, apporte une nouveauté majeure pour les développeur webs ( sous windows bien sur ^^), à savoir l’apparition d’un sous-système linux directement intégré dans windows.

Je ne vais pas vous détailler comment l’activer vous pouvez trouver comment faire cela sur google.

La distribution proposée est Ubuntu 14.04.

Pour pouvoir développer en local il est donc nécessaire d’installer le stack lamp (Apache/Mysql,Php) , les instructions sont donc exactement les mêmes que sur un ubuntu classique, je vous renvoie donc
vers mon article sur le sujet : Ubuntu Server 14.04 « Trusty Tahr » : Installation d’apache, php et mysql ( lamp)

L’unique point à retenir est que les partitions windows sont montées dans /mnt/x/votre-dossier ( ou x correspond à la lettre de votre disque dur)
Il faut donc faire pointer vos vhosts apache vers ces dossiers.

A noter également que j’ai voulu installer nginx sans succès, pour l’instant cela ne fonctionne pas.

Console :
La console windows, reste relativement basique, voici comment utiliser cmder plutôt.
Créer un type de console « Bash windows » avec le script de démarrage suivant « cmd /k bash »

 

Questions performances alors ?

Pour l’instant je développais essentiellement dans des machines virtuelles vagrant, basées  sur l’image scotchbox

On va donc comparer les temps de chargement sur les plateformes e-commerce Prestashop et Magento
( Si quelqu’un à l’occasion de comparer avec wampserver, n’hésitez pas à donner vos impressions )

Comparaison Vagrant scotchbox (V) Vs lamp windows bash(W) :

Prestashop : ( version 1.6.1.6 cache désactive, rafraichissement des templates modifiés uniquement)

  • homepage
    V 4.05s / W 2.74s
  • categorie « Femmes »
    V 5.16s / W 2.62
  • fiche produit
    V 3.45s / W : 1.67s

Magento : (version 1.9.2.4 tous les caches désactivés)

  • homepage
    V 7.05s/ W 3.15s
  • catégorie standard avec 5 produits
    V 5.06s / W 4.04s
  • fiche produit :
    V 5.84s / W 3.51s

Verdict :
Je suis relativement satisfait de cette solution pour mes développements locaux, et je pense remplacer l’utilisation des vms vagrant par ce stack.
Les temps de chargements sont légèrement plus rapides qu’avec une machine virtuelle.
Pour l’instant je n’ai pas encore fait face à des problèmes bloquants ou a des cas particuliers, mais il y en aura surement.

Je vous ferais certainement des retours plus complets d’ici quelques mois après une utilisation plus intensive.

Pas de commentaires

Serveur dédiés : Créer un disque réseau via un tunnel ssh

Nous allons voir ensemble comment mettre en place un disque dur réseau sur votre serveur dédié.
C’est à dire monter un dossier d’un serveur distant (SD) , vers notre serveur de travail (ST)
Ceci peut être pratique si vous souhaitez partager facilement des informations entre plusieurs serveurs, ou pour ajouter facilement de l’espace de stockage sur des serveur VPS.

Au préalable pour faciliter les échanges il sera nécessaire de mettre en place un accès via une clé ssh du serveur de travail vers le serveur, ceci évitera la saisie de mots de passe.

Pour rappel vous pouvez générer la clé via la commande suivante

ssh-keygen -t rsa -b 4096 -C "Cle disque reseau"

Insérez ensuite le contenu de votre clé publique dans le fichier authorized_keys sur le SD.

Installer sshfs ensuite sur le serveur sur lequel vous souhaitez monter le disque reseau

sudo apt-get install sshfs

Puis créer le dossier de votre point de montage , nous l’appellerons ici « share »

sudo mkdir /mnt/share

Puis créer le point de montage :

sudo sshfs -o allow_other,,IdentityFile=~/.ssh/id_rsa user@xxx.xxx.xxx.xxx:/ /mnt/share

Et voila votre disque réseau est en place ( jusqu’au prochain redémarrage)

Si vous souhaitez arrêter le partage réseau il faut saisir la commande suivante :

 

Monter le disque de manière permanente

Si vous souhaitez ajouter ce montage de manière permanente, il faut éditer le fichier /etc/fstab et rajouter la ligne suivante :

[email protected]:/ /mnt/share

Le changement sera pris en compte lors du prochain redémarrage de votre serveur.

Pas de commentaires

Sortie de mantis bugtracker 1.3 : Mise à jour de mes plugins

La version 1.3.0 de mantis bugtracker est sortie depuis le 9 juillet dernier.

Cette version apporte de nombreux changements, dont certains impactent les plugins développés comme :

  • L’intégration native de Jquery et de Jquery Ui
  • Le passage au html 5
  • Nouvelle politique des Content-Security-Policy (CSP) qui interdit l’utilisation de css ou de javascript inline
  • Interdiction de l’appel des pages php des plugins via leur url directe

Pour l’occasion j’ai donc remis à jour l’ensemble de mes plugins mantis avec les nouveaux prérequis.

Voici la liste exhaustive :

Upload File :
Permets de rajouter plusieurs pièces jointes à la fois à un bug en drag & drop
https://github.com/nenes25/mantisbt_uploadfiles

Agenda :
Affichage des dates d’échéances, et du temps passé sur les bugs dans un calendrier.
https://github.com/nenes25/mantisbt_agenda

Email File :
Ajout de pièces jointes à un bug via l’envoi d’un email
https://github.com/nenes25/mantisbt_EmailFile

Reminder :
Envoi d’un email récapitulatif à chaque développeur avec les bug à traiter les X prochains jours
https://github.com/nenes25/mantisbt_reminder

AutoChange Status :
Changement automatique du statut d’un bug après X jours.
https://github.com/nenes25/mantisbt_autochangestatus

Multiple File Download :
Possibilité de télécharger toutes les pièces jointes d’un bug dans une archive en un clic
https://github.com/nenes25/mantisbt_MultipleFileDownload

AutoSuggest :
Suggestion automatique des utilisateurs ou des bugs mantis dans les relations
https://github.com/nenes25/mantisbt_autosuggest

 

2 commentaires

Optimisation des performances Magento : configuration des sessions et du cache

Afin d’optimiser les performances de notre site magento, nous allons mettre en place les optimisations suivantes :

  • stockage des sessions dans memcache
  • stockage du cache dans redis

Cette solution  est modulable et applicable à une configuration multi-serveurs.( En centralisant les sessions sur un serveur spécifique, dans ce cas il suffit de replacer l’ip 127.0.0.1, par l’ip du serveur )

Pour commencer il faut installer les services memcached et redis sur votre serveur si ce n’est pas déjà fait

sudo apt-get install redis-server
sudo apt-get install memcached

installer également les librairies memcache pour php

sudo apt-get install php5-memcached php5-memcache

vous pouvez ensuite configurer le fichier local.xml avec les informations suivantes :

Pour la gestion des sessions dans memcache :

<!-- Stockage des sessions dans memcache -->
<session_save><![CDATA[memcache]]></session_save>
<session_save_path><![CDATA[tcp://127.0.0.1:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path>

Les avantages du stockage dans memcache des sessions sont les suivants :

  • accès très rapide aux informations car stockées dans la mémoire vive
  • partage des sessions facile entre plusieurs serveurs

Puis pour la gestion du cache dans Redis :

<!-- Stockage du cache dans redis -->
<cache>
<backend>Mage_Cache_Backend_Redis</backend>
<backend_options>
<server>127.0.0.1</server>              <!-- or absolute path to unix socket or ip -->
<port>6379</port>
<persistent></persistent>               <!-- Specify a unique string like "cache-db0" to enable persistent connections. -->
<database>0</database>
<password></password>
<force_standalone>0</force_standalone>  <!-- 0 for phpredis, 1 for standalone PHP -->
<connect_retries>1</connect_retries>    <!-- Reduces errors due to random connection failures -->
<read_timeout>10</read_timeout>         <!-- Set read timeout duration -->
<automatic_cleaning_factor>0</automatic_cleaning_factor> <!-- Disabled by default -->
<compress_data>1</compress_data>        <!-- 0-9 for compression level, recommended: 0 or 1 -->
<compress_tags>1</compress_tags>        <!-- 0-9 for compression level, recommended: 0 or 1 -->
<compress_threshold>20480</compress_threshold>  <!-- Strings below this size will not be compressed -->
<compression_lib>gzip</compression_lib> <!-- Supports gzip, lzf and snappy -->
</backend_options>
</cache>

Redis vous permets également de gagner en performances par rapport à un stockage standard du cache dans les fichiers.

Une fois ces solutions en place, votre instance de magento devrait tourner plus rapidement 🙂

Pas de commentaires

EicmsLinks : nouvelles fonctionnalités.

Une nouvelle version de mon module prestashop « EicmsLinks » est disponible.
Pour rappel ce module rajoute des liens dynamiques dans l’éditeur de texte tinyMce pour les contenus cms ( pages cms, descriptions produits, descriptions catégories)

  • pages cms
  • catégories
  • produit ( lien produit, ou ajout au panier)

Pour la description complète vous pouvez lire la page suivante : http://www.h-hennes.fr/blog/prestashop-liens-dynamiques-dans-lediteur-tinymce/

Cette nouvelle version instaure une nouvelle notion de « widgets » qui peuvent également être inséré directement dans la page cms.

Pour l’instant les widgets implémentés sont les suivants :

formulaire de login : permets d’afficher le formulaire de login dans n’importe quelle page cms

Widget login

liste de produits : permets d’afficher une liste de produits dynamique

Widget produits

Plusieurs options sont disponibles pour ce widget :
-type (new|category|price_drop) : Type de produits à afficher
-nb_products : nombre de produits à afficher
-id_category : dans le cas d’un affichage de produit d’une catégorie, identifiant prestashop de la catégorie.

L’ajout de cette fonctionnalité a été réalisée de manière à pouvoir rajouter très facilement des nouveaux widgets.
Nous allons voir ensemble comment procéder.

1) Exemple minimal : sans variables spécifiques

Pour commencer il faut créer une nouvelle classe WidgetName.php dans le dossier « classes » avec le contenu suivant

class WidgetName extends Widget{
 
//Nom du fichier template à utiliser pour l'affichage ( à créer dans view/widgets)
public $template = 'template.tpl';
 
//Fonction nécessaire uniquement si vous souhaitez assigner des variables smarty
/**
* Préparation du contenu
*/
public function initContent() {
parent::initContent();
 
$this->context->smarty->assign('test_var','contenu de ma var de test');
}
}

Créer ensuite votre fichier de template ( view/widgets/template.tpl)

<p>Affichage de mon widget de test</p>
<p>{$test_var}</p>

Votre widget est ensuite bien listé, et lors de son insertion votre contenu est intégré 🙂

2) Exemple plus complet : Utilisation de variables

Les widgets permettent également de définir des variables personnalisées.
Celle-ci doivent être intégrée manuellement dans le code.

Voici quelques exemples pour le widget des produits :

{{widget name="WidgetProducts" nb_products="8" bad_attribute="test"}}
{{widget name="WidgetProducts" nb_products="3" type="price_drop"}}
{{widget name="WidgetProducts" nb_products="6" type="category" id_category="8"}}

Dans le code voici comment gérer ces options,( en partant du meme exemple que précédement)

class WidgetName extends Widget{
 
//Listes des paramètres autorisés pour votre widget, les options non autorisées ne seront pas traitées.
protected static $_allowed_params = array('option1','option2');
 
//Nom du fichier template à utiliser pour l'affichage ( à créer dans view/widgets)
public $template = 'template.tpl';
 
//Fonction nécessaire uniquement si vous souhaitez assigner des variables smarty
/**
* Préparation du contenu
*/
public function initContent() {
parent::initContent();
 
//Les options du widget sont automatiquement disponibles dans la variable de classe $_datas;
//Vous pouvez faire tous les traitements souhaités
if ( $this->_datas['option1']){
//Faire traitement spécifique
}
 
$this->context->smarty->assign('test_var','contenu de ma var de test');
}
}

Voici comment appeller ce widget :

{{widget name="WidgetName" option1="maVar" option2="test"}}
{{widget name="WidgetName" option1="maVar" option2="test" option3="test"}} <!-- Dans ce cas option3 ne sera pas traitée car pas authorisée -->

Le module est toujours dispo sur github : https://github.com/nenes25/prestashop_eicmslinks

Pas de commentaires
Modules Prestashop
Compte Github