Passage du blog en https

Après tous les articles récents publiés sur le https, il était temps de mettre la recommandation du passage en full https sur ce blog en application.
Pour le coup c’est plutôt facile à faire avec wordpress, et c’était en place en moins de 30 minutes 🙂

Voici les différentes étapes effectuées pour passer wordpress en https.

A savoir que le https est déjà géré et disponible sans configuration via les dns cloudflare que j’utilise ( c’est pareil pour tous les hébergements mutualisés via les dns ovh également )

Configuration de wordpress

Pour commencer , il suffit de changer les urls du site dans la configuration de wordpress en allant dans « Réglages / Généraux »

Correction du contenu mixte

Le site est à présent disponible en https, cependant si vous avez des images vous allez rapidement constater des avertissements de contenus mixtes.
C’est à dire que votre navigateur vous alerte que votre page charge des éléments non sécurisés ( protocole http ), sur une page sécurisée ( https )

Pour corriger cela il va être nécessaire de mettre à jour votre base de données pour remplacer les urls http par du https
(Attention à bien sauvegarder votre base avant )

Dans mon cas cela est passé par l’éxécution de la requête suivante

UPDATE wp_posts SET `post_content` = REPLACE (`post_content`, 'http://www.h-hennes.fr', 'https://www.h-hennes.fr')

Une fois cette requête exécutés tout vos liens vers des médias ou entre les différents articles sont mis à jours.

Correction du duplicate content

Pour finir afin d’éviter les contenus dupliqués nous allons rediriger l’ensemble des url http vers l’url similaire en https en 301 pour indiquer aux moteurs de recherche que celles-ci remplacent les anciennes urls.
Pour cela ajouter les lignes suivantes ( entre les commentaires) dans le fichier .htacess situé à la racine de votre blog

RewriteEngine On
#Redirection http vers https
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.h-hennes.fr/blog/$1 [R=301,L]
#Fin Redirection http vers https
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
Pas de commentaires

Générer un certificat SSL autosigné

Afin de pouvoir utiliser le protocole https lors de vos développements locaux, il est nécessaire de générer un certificat https.

Voici une commande rapide qui vous permettra de générer un certificat auto-signé qui aura une validité d’un an.

 openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/ssl/ssl.crt -keyout /etc/ssl/ssl.key

Dans le cas d’un site live, il est recommandé d’utiliser un vrai certificat ssl ( qu’il soit payant ou généré via LetsEncrypt cf. https://www.h-hennes.fr/blog/2016/10/11/passer-au-https-avec-letsencrypt/ )

Vous pouvez ensuite ajouter ce certificat facilement à votre configuration nginx ou apache :

Nginx :

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/ssl.crt
    ssl_certificate_key /etc/ssl/ssl.key;
 
    server_name local.dev;
    root /home/www;
}

 

Apache :

<VirtualHost *:443>
       
        ServerName local.dev
        DocumentRoot /home/www
        SSLEngine on
        SSLCertificateFile /etc/ssl/ssl.crt
        SSLCertificateKeyFile /etc/ssl/ssl.key
 
        <Directory "/home/www">
           Options Indexes FollowSymLinks MultiViews
           Order allow,deny
           Allow from all
           AllowOverride All
           # New directive needed in Apache 2.4.3:
           Require all granted
        </Directory>
 
 
</VirtualHost>

 

Pas de commentaires

Optimisation des exports de bases de données pour mise à jour d’environnement de développement

En tant que développeur il est souvent nécessaire de faire des dumps de base de données pour mettre à jour les environnements de développements ( qu’ils soient locaux ou sur le serveur ).
Cependant les tables de productions sont souvent très lourdes et comportent des données qui ne sont pas forcément nécessaire pour développer.

Voici un petit script qui va vous faire gagner du temps dans l’export / import de ces bases de données.
La logique est relativement simple .

Pour les tables dont les données ne sont pas importantes, on va exporter uniquement la structure.
Puis nous excluons ces tables de l’export global.

 #!/bin/bash
 
#Variables de la base de données
host="localhost"
user="root"
pass="root"
dbname="dbname"
 
#Stockage de ces tables à ignorer dans une variables ( separer les noms par un espace)
ignoreTables="table1 table2 "
 
#Dump de la structure de ces tables
echo "Export de la structure des tables ignorées"
mysqldump -d -h $host -u $user -p$pass $dbname $ignoreTables > backup-structure.sql
 
#Construction de la chaine d'exclusion
ignoreTablesString=""
for table in $ignoreTables
do
ignoreTablesString="$ignoreTablesString --ignore-table $dbname.$table "
done
 
#dump gzipé de la base sans ces tables
echo "Export des données de la bdd ( sans les tables à ignorer )"
mysqldump -h $host -u $user -p$pass $dbname $ignoreTablesString --single-transaction | gzip > backup-data.sql.gz

Il vous suffit ensuite d’importer les 2 fichiers.
Sur certaines bases de données magento ce script fait économiser des gigas de données 🙂

Pas de commentaires

Monitorer et optimiser son application web avec New Relic

A la suite de mon précédent article qui présentait uptime Robots, voici un outil très pratique dans la gestion de votre site web.

New Relic est un service hébergé en saas qui vous permets de monitorer votre application web.
Il est en revanche destiné uniquement aux possesseur de serveurs dédiés, et les droits root sont nécessaires pour installer les agents de monitoring. ( Je ne vous détaille pas l’installation , leurs documentations sont très complètes )

Mais de mon point de vue sa grande plus-value est la possibilité de suivre, et de déboguer votre code, en analysant l’ensemble des transactions effectués sur votre serveur.

Comme vous pouvez le voir sur la capture suivant, lors de l’affichage d’une page, l’ensemble des appels à la base de données sont listés, et le temps de chacun est affiché.

Ex transaction new relic

Ceci m’a déjà notamment permis d’identifier le code qui ralentissait l’application.

Je ferais sans doute des articles plus détaillés dans les prochaines semaines pour détailler l’utilisation de ce service 😉

Pour toutes les infos ça se passe par ici : https://newrelic.com/

Pas de commentaires

Suivez l’état de vos sites avec Uptime Robot

Voici un service très utile pour monitorer vos sites webs : uptime robots.
https://uptimerobot.com/

Celui-ci va tester toutes les 5 minutes que celui-ci répond bien , et vous envoie un email en cas de problème.
C’est basique mais très pratique ! :-), et gratuit !

Uptime robot
Pour ceux pour qui l’intervalle de 5 minutes est trop important il est possible de prendre des formules payantes.
Pour tout ceux qui n’ont pas de serveur dédié, c’est une solution hébergée très pratique.

Pour ceux qui ont un serveur dédié, j’avais fait un article sur nagios, qui permet de suivre plus finement : https://www.h-hennes.fr/blog/2015/08/04/monitorer-sites-mutualises-avec-nagios/

Pas de commentaires

Prestashop : Ne pas afficher la colonne de droite ou de gauche sur un controller

Un petit tip rapide si vous ne souhaitez pas afficher la colonne de gauche et/ou la colonne de droite dans un controller prestashop.

Pour cela rendez-vous dans la fonction initContent() du controller souhaité et ajoutez les lignes suivantes.

$this->display_column_left = false;
$this->display_column_right = false;

Les colonnes ne seront ainsi plus affichées 🙂

Attention je précise tout de même que pour les controllers du coeur de Prestashop faites cette modification via une surcharge et non directement dans les fichiers !

Pas de commentaires

Utiliser plusieurs version de php avec Apache

Un petit article pour présenter comment installer plusieurs versions de php en simultané sur votre serveur dédié.
Ceci peut notamment être utile si vous hébergez plusieurs sites sur votre serveur dédié et qu’ils n’ont pas les mêmes prérequis techniques.

En utilisant apache et php-fpm et c’est très facile et rapide à mettre en place.
Pour notre exemple je souhaite installer php 5.6 et php 7.0 en simultané.

#Pour commencer installer apache
apt-get install apache2 libapache2-mod-fastcgi
 
#Activativation des mode actions fastcgi et alias pour apache2
a2enmod actions fastcgi alias
 
#Ajouter le ppa Ondrej
add-apt-repository ppa:ondrej/php
 
#Update des packet
apt-get update
 
#Installer PHP 7 + extensions de base
apt-get install php7.0-fpm php7-xml php7-gd php7-mcrypt php7-mysql php7-pdo
 
#Installer PHP 5.6 + extensions de base
apt-get install php5.6-fpm php5.6-xml php5.6-gd php5.6-mcrypt php5.6-mysql php5.6-pdo

Partant du principe que la version par défaut sera php 7.0,
On va ensuite configurer phpfpm 5.6 pour une exécution à la demande en éditant son fichier de configuration

vim /etc/php/5.6/fpm/pool.d/www.conf

changer la ligne pm comme ceci :

pm = ondemand

La base est à présent installée, maintenant vous pouvez éditer vos fichiers de configuration de la manière suivante.

#Editer le fichier de configuration pour tester le fonctionnement
<VirtualHost *:80>
 
ServerName www.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/html
 
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
#PHP7 ( Actif )
<IfModule mod_fastcgi.c>
        AddHandler php7-fcgi .php
        Action php7-fcgi /php7-fcgi virtual
        Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
        FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
</IfModule>
 
#Décommenter pour activer PHP 5.6
#<IfModule mod_fastcgi.c>
#AddHandler php5.6-fcgi .php
#Action php5.6-fcgi /php5.6-fcgi virtual
#Alias /php5.6-fcgi /usr/lib/cgi-bin/php5.6-fcgi
#FastCgiExternalServer /usr/lib/cgi-bin/php5.6-fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization
#</IfModule>
 
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
 
</VirtualHost>

Vous pouvez ensuite en fonction de vos besoins spécifier la version de php à utiliser sur chacun de vos vhosts.

Redémarrer apache2 pour prendre en compte la configuration

service apache2 restart
1 commentaire

Magento : Sécuriser l’accès à l’administration

Les attaques sont de plus en plus nombreuses sur la plateforme magento, pour éviter les accès non autorisés à votre administration voici comment la sécuriser :

  • Changer le chemin par défaut de l’administration.

Dans le fichier app/etc/local.xml , définissez un nom d’administration personnalisé, par exemple mycustomadmin

 <routers>
 <adminhtml>
 <args>
 <frontName><![CDATA[mycustomadmin]]></frontName>
 </args>
 </adminhtml>
 </routers>
  • Restreindre l’accès à l’administration par adresse ip

Avec apache : rajouter la ligne suivante entre les balises

RewriteCond %{REMOTE_ADDR} !^xx.xx.xx.xx
RewriteRule ^(index.php/)?mycustomadmin/ - [L,R=403]

Avec nginx :

location ~ ^/mycustomadmin/ {
    allow xx.xx.xx.xx;
    deny all;
    try_files $uri $uri/ /index.php;
}
location ~ ^/index.php/?mycustomadmin/ {
    allow xx.xx.xx.xx;
    deny all;
    try_files $uri $uri/ /index.php;
}

Une fois ces restrictions en place, l’administration de votre site magento sera plus sécurisée 🙂

Pas de commentaires

6 ans pour le blog :-)

Un petit article non technique pour une fois pour signaler ce jour les 6 ans de ce blog 🙂
Conformément à mes prévisions de l’époque ( cf. article https://www.h-hennes.fr/blog/2010/11/04/bienvenue-sur-mon-blog/ ) les audiences n’ont pas été très importantes lors de mes débuts… mais au fil des années j’ai tout de même continué à écrire des articles qui intéressent un public de niche orienté développement web.
Essentiellement sur les plateformes Prestashop et Magento sur lesquelles je me suis spécialisé.

A ce jour vous êtes prêt de 60 000 personnes à avoir visité ce blog et consulté près de 100 000 pages pour les 214 articles que compte ce blog ^^ 🙂
Merci à tous ! Ceci a été l’occasion de nombreux échanges techniques !

Pour l’instant j’ai toujours la motivation pour écrire des articles et faire vivre ce blog, je croise donc les doigts pour que cela continue encore pour quelques années.

De nouveaux articles viendront dans les prochains temps, toujours sur Prestashop et Magento pour lesquels je vais également m’orienter vers les nouvelles versions majeures ( PS 1.7 et magento 2 )

 

Pas de commentaires

Magento : Gérer les balises meta Robots

Pour optimiser le référencement de votre site Magento, il sera sans doute nécessaire de jouer avec les balises meta robots.

Ceci vous permettra de choisir les pages qui devront être indexées et/ou suivies, ainsi que celles qui ne le seront pas.
La bonne nouvelle est que ceci est géré nativement dans magento, et que cela ne demande aucun développement.

Configuration générale

Dans la configuration de magento, il est possible de définir directement les balises qui seront appliquées à l’ensemble des pages.
Pour cela rendez-vous dans  » Système / Configuration / Design / Entête HTML  »
Vous pouvez ensuite configurer les meta robots à mettre en place par défaut :

Balise meta robots

( Il est possible de le configurer pour chaque boutique de votre site )

Le fonctionnement est le même pour un produit ou une catégorie : (cf. mon article précédent :
Magento : Empêcher l’indexation d’une catégorie ou d’un produit )

Changer la balise meta d’une page CMS

Si vous souhaitez passer une page cms en No-Index, c’est très facile, il vous suffit de copier le code suivant dans le champ « XML de mise à jour d’agencement » de l’onglet design, et puis d’enregistrer votre page.

<reference name="head">
 <action method="setRobots"><value>noindex, nofollow</value><name>robots</name></action>
</reference>

 

Changer la balise meta d’un controller particulier

Si vous souhaitez faire de même pour un controller particulier, ce ne sera pas possible de le faire directement dans l’administration. il est nécessaire d’utiliser les fichiers de layout de votre thème.
Par exemple si vous souhaitez passer le formulaire de contact en no index, vous pouvez rajouter les lignes suivantes dans le fichier local.xml de votre thème

<contacts_index_index>
<reference name="head">
 <action method="setRobots"><value>noindex, nofollow</value><name>robots</name></action>
</reference>
</contacts_index_index>
Pas de commentaires
Magento certified developper
Modules Prestashop
Compte Github