Nom de l’auteur/autrice :yvonh

Magento désinstaller un module manuellement

Il existe peu d’information pour désinstaller un module dans Magento, or il est préférable de la faire proprement.

Désintaller un module consiste à désactiver dans un premier temps le module et ensuite effacer les fichiers php, et les tables qui sont créée s’il y en a.

Commencez par désactiver le module

Regardez s’il n’a pas un script de création de table (il existe alors un répertoire sql au même niveau que /Helper ou /controllers)

Enlevez donc les tables correspondantes

la table Magento native core_resource peut contenir des informations des modules.

Effacer les fichiers dans app/code et app/design, /skin, /js

 

Par rapport à Prestashop, c’est vraiment pas top, Prestashop permet de désinstaller programmatiquement, inutile de s’emmerder avec toutes ces manipulations.

Magento installer un module manuellement

Il y a deux façons d’installer un module magento, via la console d’aministration avec Magento Connect (il vous faudra créer un compte), copier l’url à coller dans votre console, et procéder à l’installation.

Mais si cela semble facile, en réalité on peut être confronté à beaucoup de cas d’échec.

Magento SSL Connector error

Ceci est du à une version de SSL sur certaine distributions de Linux. Vous êtes sans doute en sslv3 au lieu de tlsv1. vous ne pouvez donc pas tout simplement installer via la console. Mais pas de panique, il existe un site qui vous permet de télécharger le module sous forme zippée et de l’installer manuellement.

Aller sur http://freegento.com/ddl-magento-extension.php et collez-y la clé d’installation du module récupéré sur MagentoConnect.

 

Magento Downloader 1.9.2 unknown cipher list

Magento utilise Curl pour télécharger le module, il y a une ligne qui va setter le protocole de chiffrage, le fichier downloader/lib/Mage/HTTP/Client/Curl.php à la ligne 377 pour magento 1.9.2,

 //$this->curlOption(CURLOPT_SSL_CIPHER_LIST, 'TLSv1')

Commenter la ligne ci-dessus et c’est bon.

En fait vous allez voir cette erreur avant la première, qui résulte de la mise en commentaire de la ligne 377.

Magento module invisible après installation

Si vous n’avez pas désactivé les caches (il y en a plusieur dans Magneto), votre module peut être invisible, donc nettoyez les caches et reloadez la page d’administration. Pour activer/désactiver les modules allez dans Système / Configuration / Avancé en bas de la page.

magento

Magento : enlever le index.php de l’url

Par défaut, si lors de l’installation de Magento, vous n’avez pas coché l’option rewrite_url, vos urls auront « index.php » juste après le nom de domaine. Pour l’enlever, car ce n’est pas très beau, il faut au préalable que mod_rewrite (un module Apache pour réécrire les urls) soit installé.

Une fois ce prérequis rempli, vous allez dans System > Configuration, puis sous General > Web, dans la section Search Engine Optimization, pour la dropdown list mettez sur ‘Yes’. Rafraichissez votre page administration et frontend.

Les bloc statiques dans Magento

Les blocs statiques ne sont rien d’autre que des bout de code HTML qui sont utiles pour des bannières temporaires, des bloc promotion, politique de retoure, table de tailles entre autres.

 

Comment créer un bloc statique dans Magento

Dans l’onglet CMS > Static Blocks tous les blocs sont listés ici, mais les modules ou thèmes que vous installez peuvent en ajouter d’autres.

Donnez un nom évocateur, un identifiant qui doit respecter les guidelines de Magento nom_du_block, choisir la vue à laquelle le block appartient. Vous pouvez laisser l’association à toutes les vues. setter le statut à Enabled.

Dans l’éditeur WYSIWYG ou source, mettez votre code.

 

Comment faire fonctionner votre bloc statique méthode XML?

Coller le code d’insertion directement dans le fichier xml de thème. app > design > frontend > default > your_theme > layout ,

Magento Multiboutique et multidomaines

Magento c’est bien connu vous permet d’avoir plusieurs boutiques. Mais d’abord voyons la terminologie de Magento :

 

 

Global : c’est l’installation de votre logiciel Magento, il n’y en a qu’un.

Par défaut vous n’avez qu’un site. Dans le cas où vous avez plusieurs sites, comment pouvons nous différencier dans la barre d’adresse les différents sites web?

 

Magento méthode getModel()

La méthode getModel() est abondamment utilisée dans le code Magento, et surtout dans les modules customs.

Utiliser getModel pour lire des information d’entité

 

Elle est une des méthode statique de l’objet Mage, défini dans le fichier Mage.php, dans la classe Mage.

Elle est utile pour lire des données des entités telles customer, sales, catalog.

Par exemple, pour lire les données du client N° 88, on fera :

$customer = Mage->getModel(‘customer/customer’);

$result = $customer->load($id);

var_dump($result);

 

Différence entre getSingleton() et getModel()

 

getSingleton() regarde si un modèle est déjà créé; si oui il va retourner le modèle déjà instancié, sinon il va créer une nouvelle instance de la classe et le retourne.

getModel() va dans toutes les situation vous retouner une nouvelle instance.

Magento les thèmes de base,default et RWD c’est quoi?

Dans le répertoire Design de l’installation Magento, il ya 3 paquets de thèmes différents, à quoi servent-ils?

Terminologie des paquet de thème dans Magento

Un paquet (package en anglais) regroupe plusieurs thèmes, donc il ne représente pas un thème à lui tout seul, les thèmes sont dans dans un niveau en dessous.

D’ailleurs dans le panneau d’administration, il y a la page Design, le premier block est Package et en dessous il y a le bloc Thème, il vous faut changer un des deux ou les deux pour changer de thème.

Le thème Magento Base

Ce thème est vriament le Core, il ne faut pas y toucher.

 

Le package Magento Default

C’est le thème par défaut de Magento non responsif.

Le package Magento RWD

C’est aussi le thème par défaut de Magento mais il est plus récent historiquement, il est responsif (Responsive Web Design).

 

Magento charger des données du client

Charger les données du client (customer) avec getSingleton()

$customer = Mage::getSingleton(‘customer/customer’)->load($idclient);

Lire l’email du client :

getData() permet de lire une propriété d’un objet.

$email = $customer->getData(’email’)

 

Méthode magique (en utilisant __call de Php)

 

$email = $customer->getEmail();

$entity_id = $customer->getEntityId();

dans les méthodes magiques, on passe en CamelCase pour le nom du getter.

 

Charger les données du client (customer) avec getModel()

 

$customer = Mage::getModel(‘customer/customer’)->load($idclient);

Ensuite même topo avec getData() que ci-dessus.

Optimiser Mysql avec Mysqltuner

Une installation de base de Mysql n’est pas optimisé pour votre ou vos sites web.

Aussi après un certains temps de fonctionnement, une heure par exemple, vous devez commencer à régler les paramètres de Mysql pour que Mysql aille plus vite.

Nous allons nous aider d’un programme en Perl Mysqltuner, que vous allez télécharger depuis votre shell via la commande suivante :

$ wget http://mysqltuner.pl/ -O mysqltuner.pl

$ perl mysqltuner.pl

Au bout de quelques instants Mysqltuner va vous sortir un rapport avec des recommandation. Ce sont de réglages à faire dans votre fichier my.cnf qui est le fichier de configuration de Mysql.

Voici un exemple de rapport généré :

[!!] User ‘@localhost’ is an anonymous account.
[!!] User ‘@ns35.ovh.net’ is an anonymous account.
[!!] User ‘@localhost’ has no password set.
[!!] User ‘@ns35.ovh.net’ has no password set.
[!!] User ‘root@127.0.0.1’ has no password set.
[!!] User ‘root@ns35.ovh.net’ has no password set.
[!!] User ‘@localhost’ has user name as password.
[!!] User ‘@ns35.ovh.net’ has user name as password.
[!!] There is no basic password file list!

——– CVE Security Recommendations ————————————————————–
[–] Skipped due to –cvefile option undefined

——– Performance Metrics ———————————————————————–
[–] Up for: 4d 12h 12m 30s (89M q [228.694 qps], 20M conn, TX: 582G, RX: 4G)
[–] Reads / Writes: 78% / 22%
[–] Binary logging is disabled
[–] Physical Memory     : 1.9G
[–] Max MySQL memory    : 449.2M
[–] Other process memory: 518.0M
[–] Total buffers: 34.0M global + 2.7M per thread (151 max threads)
[–] P_S Max memory usage: 0B
[–] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 141.2M (7.12% of installed RAM)
[OK] Maximum possible memory usage: 449.2M (22.64% of installed RAM)
[OK] Overall possible memory usage with other process is compatible with memory available
[OK] Slow queries: 0% (22/89M)
[OK] Highest usage of available connections: 25% (39/151)
[OK] Aborted connections: 0.00%  (65/20403660)
[!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance
[!!] Query cache is disabled
[OK] Sorts requiring temporary tables: 0% (1K temp sorts / 4M sorts)
[!!] Joins performed without indexes: 296569
[OK] Temporary tables created on disk: 9% (90K on disk / 958K total)
[!!] Thread cache is disabled
[!!] Table cache hit rate: 0% (64 open / 299K opened)
[OK] Open file limit used: 12% (127/1K)
[OK] Table locks acquired immediately: 99% (32M immediate / 32M locks)

 

Remove Anonymous User accounts – there are 2 anonymous accounts.
Set up a Password for user with the following SQL statement ( SET PASSWORD FOR ‘user’@’SpecificDNSorIp’ = PASSWORD(‘secure_password’); )
Set up a Secure Password for user@host ( SET PASSWORD FOR ‘user’@’SpecificDNSorIp’ = PASSWORD(‘secure_password’); )
Enable the slow query log to troubleshoot bad queries
Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
Adjust your join queries to always utilize indexes
Set thread_cache_size to 4 as a starting value
Increase table_open_cache gradually to avoid file descriptor limits
Read this before increasing table_open_cache over 64: http://bit.ly/1mi7c4C
Beware that open_files_limit (1024) variable
should be greater than table_open_cache (64)
Variables to adjust:
query_cache_size (>= 8M)
join_buffer_size (> 128.0K, or always use indexes with joins)
thread_cache_size (start at 4)
table_open_cache (> 64)
innodb_file_per_table=ON
innodb_log_file_size should be equals to 1/4 of buffer pool size (=2M) if possible.

Regardez les point d’exclamations, ce sont les point à travailler ! Mais tous les point n’ont pa s la même importance selon ce que vous recherchez. Moi je cherche la performance, voici ce que je regarde de ce rapport :

Ce qui saute aux yeux c’est query cache qui n’est pas activé !! Le cache stocke les requêtes qui sont les plus utilisée, afin de ne pas taper dans le moteur de base de données Mysql, mais sur un résultat déjà calculé donc on gagne du temps.

Voyons comment on peut soigner ce point :

Vous aurez remarqué qu’une des recommandations est de logger les requêtes lents via le slow query log. Pour ce faire, on va mettre en action le slow query log .

Ensuite nous allons donner une taille au cache de 8 Mo comme suggéré.

D’abord il faut se connecter à Mysql en ligne de commande.

Ensuite pour connaitre l’existence d’un query cache :

mysql > SHOW VARIABLES LIKE ‘have_query_cache’;

+——————+——-+
| Variable_name    | Value |
+——————+——-+
| have_query_cache | YES   |
+——————+——-+

Selon la documentation officielle ce n’est pas parce que c’est à YES qu’il existe !

mysql> SHOW VARIABLES LIKE ‘query_cache_size’;

+——————+——-+
| Variable_name    | Value |
+——————+——-+
| query_cache_size | 0     |
+——————+——-+

Enfin il existe mais est à zéro. Donnons lui une taille :

mysql> SET GLOBAL query_cache_size = 8000000;

 

+——————+———+
| Variable_name    | Value   |
+——————+———+
| query_cache_size | 7999488 |
+——————+———+

voilà c’est en place ! Attendre un petit peu suivant le traffic de votre site web.

 

Attention ! ceci est à faire dans le fichier my.cnf, sinon quand vous allez redémarrer mysql, ça va disparaitre. Voilci quelques valeur recommandées :

query_cache_type = 1 // pour activer le cache
query_cache_size = 256M
query_cache_limit = 2M
query_cache_strip_comments =1

 

 

 

 

logo git

Les sous modules dans Git

UPDATE :

N’utilisez pas les sous module GIT, ils sont d’un usage délicat, googlez le sujet, vous verrez des blogs qui votent contre. Préférez cloner dans un sous répertoire et ignorer ce sous-répertoire.

 

Lorsque vous développez un module pour Prestashop ou Magento, les fichiers se logent dans un sous répertoire de la solution. Si en même temps vous devez versionner la solution globale, et le module, mais que vous voulez gérer deux dépôts Git différent, pour pouvoir par exemple distribuer le module indépendamment plus tard, la solution qui s’offre est la gestion des sous-modules de git.

 

Vous avez votre module dans une répertoire quelconque, et vous avez déjà versionné les scripts.

Vous allez dans un sous-répertoire de la solution globale, et vous clonez le dépôt du module :

$ git clone git@github.com:gituser/module.git

 

Apache logs, et Logrotate

Qu’est ce que c’est que les logs Apache?

 

Les logs ou fichiers de journalisation en français sont des fichiers texte qui enregistrentent des événements d’une application. On enregistre les événement de type erreur dans les errors log, les événement de démarrage (bootlog), et d’autres dans des fichiers plus spécifiques.

Dans le cas de notre serveur Apache, nous avons les logs des visites sur notre site web.

Qu’est ce qu’on enregistre comme information dans les visites sur Apache?

Il y a deux types de visiteurs,  les visiteurs humains et les robots des moteurs de recherche (et parfois d’autres robots de services plus spécifique).

Vous pouvez paramétrer ce que vous enregistrez dans les logs, dans le dossier de configuration httpd.conf, deux types de logs sont proposés, combined et common.

Voici un extrait :

LogFormat « %h %l %u %t \ »%r\ » %>s %b \ »%{Referer}i\ » \ »%{User-Agent}i\ » » combined
LogFormat « %h %l %u %t \ »%r\ » %>s %b » common

Une fois que les logs sont paramétrés, il faut indiquer lequel vous voulez utiliser, le combined ou le common.

C’est avec la direective CustomLog :

CustomLog « c:/wamp/logs/access.log » combined

 

Pour les sites web en général, on utilise la combined, ce dernier a la particularité d’enregistrer le Refere (qui est le site web d’origine de la visite juste avant sur votre site web), et le user agent qui donne le type de logiciel qui vous rend visite (un navigateur classique comme Firefox, Chrome pour un humain, et si c’est un moteur de recherche, vous aurez un nom de bot).

Attention aux fichiers de logs Apache qui grossissent !

Chaque visite sur votre site génère une ou plusieurs lignes de texte, et le fichiers peut grossir très vite en fonction de  l’audience de votre site web. Et quand le fichier atteint plusieurs giga octets, c’est problématique.  La solution c’est de générer un  nouveau fichier régulièrement pour éviter ce problème. Par exemple on peut généer un nouveau fichier toutes les semaine, ou tous les jours, afin d’avoir des fichiers d’une taille raisonnable.

Pour ce faire on déclarer une « rotation » des logs, avec le programme logrotate. Si vous développez sous WAMP sous Windows, le programme s’appelle toujours logrotate (rotatelogs.exe plus exactement).

Voici un exemple de configuration pour WAMP de logrotate :

ErrorLog « |bin/rotatelogs.exe -l C:/Wamp/www/votresite.com/errorlog.%Y-%m-%d.txt 86400 »
CustomLog « |bin/rotatelogs.exe -l C:/Wamp/www/votresite.com/accesslog.%Y-%m-%d.txt 86400 » combined
CustomLog « |bin/rotatelogs.exe -l C:/Wamp/www/votresite.com/deflatelog.%Y-%m-%d.txt 86400 » deflate

 

 

 

Configurer les log de mysql sous linux

Pour connaitre les performances de votre base de données Mysql, il vous faut connaitres ses logs. Il y a trois fichiers log qui peuvent être généré avec Mysql:

Error log : le log des erreurs de mysql, utile souvent en développement

Query log : le log de toutes les requêtes SQL qui sont exécutée, utile lorsque vous êtes en production, pour pouvoir détecter où se produit un événement à problème.

Slow query log : le plus intéressant en situation normale, dans ce fichier sont loggées les requêtes non optimisées. C’est là que vous découvrirez sans doute qu’il faudra un index sur une colonne pour qu’une jointure se fasse plus rapidement.

Voir aussi : Retrouver le dernier id de la ligne insérée dans Mysql

Quel fichier éditer pour pouvoir logger ces informations? par défaut l’installation de Mysql ne configure pas ces fichiers de log.

Nous allons donc éditer le fichier my.cnf sous Linux.

Sous une distribution Debian, le fichier se trouve dans etc.

Pour le query log (general query log) :

Pour mysql version 5.1.29 et plus :

general_log_file = /path/to/query.log
general_log      = 1  # ne marche pas si ON au lieu de 1

Généralement vous pouvez mettre le query.log à /var/log/mysql/query.log

Pour le slow query log :

log_slow_queries = 1
slow_query_log_file = /path/to/slow-query-query.log

long_query_time = 2

log-queries-not-using-indexes = 1

Attention, ci-dessus log-queries-not-using-indexes va faire en sorte que les requêtes n’utilisant pas d’index seront loggées, par conséquent vous aurez des requêtes prenant moins de 2 secondes présentes dans le fichier, ce n’est peut être pas ce que vous recherchez, dans ce cas mettez à 0 cette valeur.

 

Apache mise en place d’un nouveau serveur virtuel (vhost)

Ce qui suit est ma méthode pour mettre en place un nouveau serveur virtuel pour un site web.

Il existe les panels (cPanel, Wenmin, Plesk, ISPConfig) web pour créer automatiquement tout ce qui suit, mais au cas où vous n’avez pas d’autre choix (comme l’absence d’une panel par exemple), vous passerez par cette méthode. Et puis cela ne fait pas de mal de connaître ce qui se passe sous le capot, afin d’être lus confiant quand vous rencontrerez des difficultés dans la gestion d’un serveur dédié.

Créer le répertoire qui va contenir les fichiers de votre site web:

Connecté en tant que user root

> useradd username

>passwd username

ensuite configurer le mot de passe.

Cette commande va créer (sous Centos et Debian) un répertoire pour le nouvel ustilisateur que vous venez de créer sous le répertoire home/.

 

Déclarer l’hôte virtuel (vhost) :

Tout se passe dans le fichier de configuration httpd.conf (ou apache2.conf selon les distributions de Linux). Dans ce fichier vous allez dire dans quel répertoire se trouve la racine du site web. Sous Debian c’est public_html qui est la racine. Sous CentOS, c’est www.

Utilisation de SuPHP:

SuPHP permet une gestion plus fine de qui a accès à la lecture d’un fichier php. Il est nécessaire car chaque sit web appartient à un user Linux différent. Ce qser n’est pas Apache qui a le droit d’exécuter des script php. Par contre nous allon smettre une directive dans le ficheir de configuration du vhost qui va permettre à ce user d’exécuter

En principe seul l’user apache peut exécuter les script php, le username que vous venez de créer ne peut pas exécuter el script PHP car SuPHP l’en empêche. C’est pour ça que vous devez ajouter une directive dans votre configuration du vhost pour indiquer explicitement à Apache d’exécuter à leur place.

Configurer les logs:

Ici il y a deux aspects, il y a les logs Apaches access_log et error_log, puis il y a la fréquence de journalisation. Si vous avez un site avec beaucoup de trafic, il faut un fichier de log par jour par exemple, pour les sites moins importants, c’est un par semaine.

Il est important de créer des nouveaux fichiers périodiquement, sinon le fichier risque d’être trop gros, et difficile à exploiter.

Autre chose, il y a deux écoles concernant le nombre de fichiers par site, soit un fichier pour tous les vhost, soit un fichier par vhost.

Pour ma part je préfère un fichier par vhost afin d’être plus clair et de pouvoir exploiter plus facilement les logs avec un logiciel si besoin.

 

 

 

Configurer le type de log Apache :

Typiquement dans un ficheir de configuration de log vous verrez la directive LogFormat.

Vous avec 4 à 5 type de log:

Logformat

Logformat

Logformat

Logformat

Logformat

Générer un nouveau fichier de log régulièrement se fait avec LogRotate.

 

 

Mettre en place un certificat SSL pour avoir https

Sécuriser son site web avec SSL

Vous voulez avoir un site web plus sécurisé ? vous espérez avec ça que votre site soit mieux classé? Il faut mettre en place un certificat SSL !

Je ne peux vous garantir la requête numéro une mais il est clair que votre site sera plus sécurisé. Il y a bien d’autres aspects que le paraitre plus sécurisé,  comme le fait de vouloir mettre en place le moyen de paiement Stripe, qui exige que votre site soit sécurisé SSL.

il y a plusieurs niveaux de certificat SSL

Pour faire simple il y en a 3, pas au même prix bien sûr.

Certificat à validation de domaine

pour un nom de domaine, installation rapide, Niveau d’entrée.

Certificat à validation d’organisation

Délivré lorsque votre société est enregistré à la chambr de commerce, donc c’est plutôt destiné aux entreprise, les individuels ne sont pas concernés.

Certificat à validation étendue : le must mais le plus cher

prend 5 à 8 jours, contrôle de l’existence de l’entreprise à la chambre de commerce,contrôle Whois, 2 validations téléphonique (service administratif et service du personnel, c’est le seul certificat qui vous permet la belle barre verte (exemole : mozilla, paypal)

SSL EV

Procédure de mise en place d’un certificat SSL pour votre site web.

La validité d’un certificat SSL est en général de 1 an, mais vous pouvez renouveler pour des durée différente. Par exemple Let’sEncrypt (fournisseur de certificats SSL de niveau Domaine) fournit des certificat qui expirent au bout de 90 jours.

Ce qui suit suppose que vous ayez un accès SSH sur votre serveur.

Créez sur un CSR certificate Signing Request).

 

Avant qu vous puissiez acheter un certificat SSL, il vous faut créer un CSR pour votre serveur. C’est la clé privée qui va être générée et porte l’extension KEY, et aussi une requête de certificat que vous allez envoyer au vendeur de certificat SSL.

Que contient le CSR : c’est un fichier encodé qui contient les informations sur le type de chiffrage,ce fichier vous allez l’envoyer chez le vendeur de certificat SSL, qui après paiement va vous envoyer un jeu de fichier qui sont des clé d’encryption.

On crée un CSR par certificat SSL.

Commande pour générer un CSR :

openssl req -newkey rsa:2048 -nodes -sha256 -keyout www.votre-domaine.fr.key -out www.votre-domaine.fr.csr

Il faut répondre à quelques questions :

Country Name : code ISO, pour la France c’est FR, c’est l’adresse du siège de l’entreprise qui décide du code, pas l’extension de domaine

State or Province Name : Département pour la France

Locality Name : Ville

Organization Name : Nom de l’entreprise ou votre Nom si pour site personnel

Organization Unit Name : Département (Informatique, Marketing etc)

Common Name : (server host name) www.monsite.com

Challenge password : Ne rentrer rien pas de mot de passe

Optional Company Name : ne rien mettre sauf si besoin

B/ Installez les certificats SSL d’encryption

Prérequis : activer le module SSL d’Apache si ce n’est déjà fait, pour ce faire allez dans le fichier de configuration httpd.conf, cherchez la section LoadModule, décomemnter au besoin. Une méthode alternative est une commande shell :

$ a2enmod ssl

Les certificats SSL sont simplement des fichiers texte, avec une longue chaine de caractères. Elles peuvent avoir l’extension cer. Il y en a trois, un certificat SSL racine, un certificat SSL intermédiaire, et un certificat pour votre domaine.

Ensuite, il faut éditer votre fichier de configuration de serveur virtuel, sous Apache sous Debian, c’est httpd.conf qui doit inclure entre autre les fichiers default.conf et defaultSSL.conf, ces deux derniers fichiers doivent contenir les mêmes vhost (virtual host ou serveur virtuel), à la différence que dans defaultSSL.conf, ce sont les vhost qui écoutent sur les port 443, qui est de facto les port d’écoute des requêtes https.

Dans un premier temps vous allez recopier les vhost de default.conf vers defautlSSL.conf, et remplacer le port 80 par le port 443.

Apache doit écouter le prot 443, la directive se trouve dans httpd.conf :

Listen 443

Ensuite après la balise ouvrante VirtualHost, ajoutez les lignes suivantes :

# Activation du SSL
SSLEngine On

# Activation de tous les protocoles sécurisés (TLS v1.0, TLS v1.1 et TLS v1.2) tout en désactivant les protocoles non sécurisés (SSL v2 et v3)
SSLProtocol All -SSLv3 -SSLv2

# On active les méthodes de chiffrement, et on désactive les méthodes de chiffrement non sécurisés (par la présente d'un !)
SSLCipherSuite HIGH:!aNULL:!MD5:!ADH:!RC4:!DH

# Le navigateur devra choisir une méthode de chiffrement en respectant l'ordre indiquée dans SSLCipherSuite
SSLHonorCipherOrder on

# Chemin vers le certificat SSL de votre nom de domaine
SSLCertificateFile "/etc/ssl/www-nom-domaine-fr/www-nom-domaine-fr.cer"

# Chemin vers la clé privée du certificat SSL de votre nom de domaine
SSLCertificateKeyFile "/etc/ssl/www-nom-domaine-fr/www-nom-domaine-fr.key"

# Chemin vers le certificat SSL racine, puis vers le certificat SSL intermédiaire. Attention : L'ordre est important.
SSLCACertificateFile "/etc/ssl/www-nom-domaine-fr/certificat-racine.cer"
SSLCACertificateFile "/etc/ssl/www-nom-domaine-fr/certificat-intermediaire.cer"

Indiquez le chemin vers les certificats SSL, respectez scrupuleusement l’ordre.

Pour aller plus loin : activer le HSTS

Pour obtenir une note A+ sur le benchmark de SSLLabs il faut activer le HSTS. Pour ce faire il faut activer le module header d’Apache avec la commande suivant ou dans le fichier httpd.conf :

$ a2enmod headers

Testez votre site en SSL !

Installer SSL sur son site n’est que le début, une fois le cerficaton en route, redémarrez le serveur, testez votre site web pour vous assurer que tout va bien. Le problème avec certains sites web est que les liens sont codés en « dur » en http, ceci ne vous offre pas la flexibilité de switcher de http en https. Dans ce cas il vous faudra remplacer un par un les http en https !

Magento Rendre visible un produit dans le front

venant de Prestashop, je suis toujours perturbé par la lourdeur de Magento, et la difficulté à faire la moindre tâche, comme rendre un produit visible sur la homepage de Magento. C’est pas automatique et c’est bien dommage.

 

Sachez que dans une installation tout fraiche de Magento avec aucune extension installé, il vous faut créer d’abord une catégorie. Et là

 

 

Chaque fois que vous ajoutez un produit il faut vider le cache sinon vous ne verrez pas votre produit.

De plus (et heureusement vous etes averti dans le back office, il faut régénérer l’index des produits !

Pour être visible un produit doit :

-être marqué Instock

-ne pas être hors stock quantité différent de 0

-être marqué Enabled

 

Création de produit configurable (produits à déclinaison)

Ce genre de produit est un peu touchy à configurer. Imaginons que vous ayez à ajouter des produits Tshirt avec 3 tailles : small, medium, et large, pour simplifier une seule couleur.

Concrètement vous aurez dans votre stock ces  » types de produits.

Dans le backend vous allez en fait ajouter un quatrième produit (qui n’est pas un produit concret), que j’appelle meta produit, qui sera en liaison avec les 3 produits concrets que vous allez ajouter (les 3 tailles de tshirt).

Nous avons une déclinaison sur la taille du produit, que nous allons appeler « Size ». Il vous faudra créer un attribut Size, qui a les propriété suivante pour pouvoir être éligible à la liaison vers un meta produit.

En efffet lorsque ous allez créer le meta produit, vous allez choisir les attributs qui vont le caractériser (Size), je dis « les » car vous pouvez créer un produti configurable selon plusieur attribut (size,color) par exemple.

Donc cet attribut doit avoir une portée globale, input type = dropdown (une liste déroulante avec les différentes déclinaisons), et être éligible à la création de produit configurable (Use To Create Configurable Product = Yes). Vous aurez une erreur lors de la création de produit configurable si l’attribut sélectionné ne correspond pas à ces 3 critères.

 

Ce qui est important à retenir :

-un meta produit en liaison avec les 3 produits concrets

-les 3 produits concrets à ajouter

-avoir un attribut éligible à la création de produit configurable

Chacun des 3 produits concret ne doit pas être visible individuellement !

Création du meta produit :

Par contre le meta produit a une visibilité normale (catalog, search),

le meta produit doit être Instock, en ce qui concerne l’inventaire

Une fois le meta produit créé, il vous faudra créer les produits concrets ! Si vous imaginiez que créer un produit à déclinaison était simple c’est raté. En fait créer un produit configurable est plus compliquéque la création d’un produit simple quoique plus rapide.

Création des produits concrets :

Maintenant que vous avez un produit meta, créer les produits concrets est plus rapide, vous rester dans l’édition du meta produit, dans l’onglet « Produits associés », il y a une section création de produit rapide.

 

C’est après que ça va devenir pratique, car les déclinaisons du produit configurable, sont très liées programmatiquement. Vous vous en apercevrez dans la création de produit rapide. En effet vous pouvez moduler le prix en fonction de la déclinaison individuellement pour chaque produit. Dans l’onglet produit associés, mette 1 dans la taille medium et 2 dans la taille large, n’oubliez pas de toujours vider le cache, voire réindexer les produits, puis allez sur le front de la boutique, et jouez avec la drop down liste.

Cette structuration a une influence directe sur la façon dont les produits s’affichent et se cherchent dans la boutique.

 

 

 

MySQL exporter une base en ligne de commande

mysqldump -u root -p nomdelabase, après vous aurez à renseigner le mot de passe (ici l’user est root).

Pour importer une base voir cet article.

Je vous recommande de savoir importer exporter une base en ligne de commande, car phpmyadmin n’est vraiment pas performant avec les grosses base de donnée (à partir de 4mégo ça rame).

Mysql commandes avancées pêle mêle

Connaître sa version de Mysql :

SELECT @@version;

Connaitres les variables globales

SHOW VARIABLES

SHOW VARIABLES LIKE ‘%log%’;

 

Permettre les 3 types de log depuis mysql:

general log

slow queries log

error log

il ne suffit pas de mettre ces directives de log dans my.cnf (my.ini dans Windows), il faut aussi les paramétrer dans les variables globales de Mysql.

Memento Linux

Forcer à utililser un user

Pafois la commande su nom_du_user ne marche pas vous avez le message « This account is currently not available. », regardez dans le fichier /etc/passwd, souvent ce user est posté à nologin, ce qui veut dire que vous ne pouvez pas vous logger en son nom.

apache:x:48:48:Apache:/var/www:/sbin/nologin
changer en 
apache:x:48:48:Apache:/var/www:/sbin/bash

La seconde méthode est de forcer temporairement le login:

su -l apache -s /bin/bash

vv

Liste les utilisateurs :

cut -d: -f1 /etc/passwd

dd

Notes aide mémoire pour Magento

Afficher les message d’erreur de Mgento.

Par défaut lorsque Magento vous affiche une erreur, il vous donne un nombre, mais vous pouvez fficher le message d’erreur sur la page web en spécifiant un paramètre.

 

 

Modifier le chemin dans la table core_config_data :

Trouver les enregistrements

select * from core_config_data where path like ‘%base%url%’;

inspiré de cette page :

 

updater les enregistrements :

update core_config_data set value = 'http://domainname/' where path = 'web/unsecure/base_url'; update core_config_data set value = 'http://domainname/' where path = 'web/secure/base_url';



Si Magento refait une redirection vers un vieux site Magento et ce malgré reboot serveur et changement url dans core_config_data, penser à nettoyer le cache dans var/cache !

logo git

Git : Pull automatique du dernier push

Lorsque vous avez pratiqué suffisamment Git, à savoir pusher vos modifications et ensuite puller sur votre serveur de production, vous aurez un peu marre de ces manipulations répétitives que vous faites peut être une centaine de fois dans la journée.

La solution à votre problème si vous utilisez Github.com c’est d’utiliser les webhooks. Un prérequis à cette méthode est d’être en mode SSH pour pusher en ssh.

C’est quoi un webhook?

Un webhook est une page web (donc une url bien spécifique) qui sera appelée par Github. Elle sera appelée quand un événement se produit, en ce qui nous concerne c’est lorsqu’on push une branche vers Github, en ce qui  nous concerne c’est la branche master.

Comme cette page web est chargée, le script qu’il contient sera également exécuté, un peu comme les CRON job. Que doit contenir cette page? Je prends comme exemple un workflow où vous développez en php sous Windows, et que votre serveur de production est Linux. Ce que j’ai l’habitude de faire c’est quand j’ai mergé en local une branche feature avec ma branche master, je pousse la branche master vers Github. Ensuite je vais sur le serveur de production, je me connecte en tant que propriétaire du vhost en question (pas en root), et je fait un git pull pour avoir la dernière version du master.

Créer le webhook

C’est cette dernière étape qu’on va coder en php sur une page webhook que je vais appeler git.php, voici le code à l’intérieur:

<?php `git pull` ?>

Enregistrez votre fichier à la racine de votre serveur web de sorte qu’elle soit accessible de l’extérieur.

Les backticks (apostrophe inversés) servent à exécuter une commande shell dans un fichier php. Le fait d’appeler ce fichier php est équivalent à exécuter en mode console un git pull.

Configurer Github pour appeler cette page php

Allez sur votre répository sur Github.com, ensuite cliquez « Seeting », et puis sur la barre latérale « webhook ». L’exemple ci-dessous s’appuiera sur un événement de type push, c’est à dire que lorsque vous pusher vers votre repository, Github va envoyer une requête de type GET vers la page php que vous lui indiquez.

webhook avec Github

Bienb sûr vous pouvez faire plus de paramétrage, en cochant le dernier radio button, vous verrez tout un tas d’options, ce sont des choses plus sophistiquées que vous utiliserez sans doute avec un orchestrateur comme Jenkins.

logo git

Commentaire multiligne dans vos commits sous Windows

Pour aller au-delà d’une seule ligne de commentaire voici la syntaxe :

git commit -m « ligne 1″^

Plus?

Plus? « Ligne 2″^

Plus?

Plus ? « Ligne 3 »

Fin.

 

Syntaxe alternative :

git commit -m « blabla » -m « blabla »

La première ligne sera le titre et les suivante le corps de texte.

Monitorez l’exécution de votre code PHP avec XDEBUG Trace Log

PHP Avancé : Profilez l’exécution de votre page  Php.

 

Quand vous avez un certains niveau de Php ou quand vous travaillez avec des solutions open source comme Magento, et que tout rame, vous aurez envie de monitorer (on dit profiler) les performance de chaque script php.

XDEBUG est le programme souvent installé par défaut avec WAMP qui permet de profiler l’exécution d’un script.

Il génère un fichier texte avec les noms des fonctions et le temps d’exécution. Pour interpréter de façon plus lisible ces données, il faut sous Windows utiliser le programme Wincachegrind, et sous Linux c’est KCachegrind.

 

Pour télécharger Wincachegrind, attention ne plus aller le télécharger sur sourceforge, cette version pose problème car elle date. Voici le lien du fichier qui est compatible avec la dernière version des fichiers générés par XDEBUG.

 

Télécharger WincacheGrind

Procédure à suivre, tout d’abord il vous faut paramétrer le fichier php.ini, dans la section xdebug (faites CTRL + F pour le trouver).

[xdebug]

zend_extension =”c:/wamp64/bin/php/php5.6.25/zend_ext/php_xdebug-2.4.1-5.6-vc11-x86_64.dll”
xdebug.remote_enable = 0
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_name = cachegrind.out.%u.%H_%R
xdebug.profiler_output_dir =”c:/wamp64/tmp”
xdebug.show_local_vars=0

 

la ligne importante à vérifier est xdebug.profile_enable_trigger = 1

donc allez sur votre page web que vous voulez profiler et ajoutez un paramètre dans l’url :

http://votresite.com/index.php?XDEBUG_PROFILE

chargez votre page et un fichier sera généré dans le répertoire c:/wamp64/tmp

Ouvrez votre programme Wincachegrind, et ouvrez le fichier généré, vous devriez avoir une fenêtre de ce style :

x

Vous pouvez naviguer dans la hiérarchie et regarder le temps d’exécution de chaque fonction. Cet outil est vraiment génial et vous permet de connaitre de manière intime le temps d’exécution de chaque script de régler les problèmes de lenteur.

sublimet text

Personnaliser Sublime Text pour plus de productivité

Raccourcis personnalisés dans SublimeText

[
 { "keys": ["f1"], "command": "reindent" },
 { "keys": ["shift+space"], "command": "move", "args": {"by": "characters", "forward": true} },
 { "keys": ["ctrl+space"], "command": "move", "args": {"by": "lines", "forward": true} },
 { "keys": ["shift+alt+space"], "command": "move", "args": {"by": "characters", "forward": false} },
 ]

Package Controller de SublimetText

Le package Controller est le point d’entrée à vos besoins de personnalisation de SublimetText, et je vous promets que pour augmenter cet IDE qui bien que performant, n’est pas un IDE intégré.

Lorsque vous avez installé SublimeText 2, la première chose à faire est de customiser le logiciel, non pas qu’il lui manque des fonctions cool, mais vous allez le trouver encore plus puissant !

Installer le package manager

Un peu comme Firefox, Sublimet Text accepte des plugins ou package. Pour faciliter la gestion de l’installation des package, il faut installer le Package Manager. Pour ce faire aller sur cette page de développement de ce package manager, et copier coller le bout de code fourni dans la ligne de commande. Pour faire apparaitre le prompt de la ligne de commande il faut aller dans View > Show Console.

Coller le texte dans le champs texte du bas (et non dans la fenêtre de log) et appuyez sur ENTREE, vous devez avoir un message qui vous invite à redémarrer SublimeText.

Pour faire apparaitre les packages dorénavant disponibles à l’installation (il y en a des tonnes) faite la commande CTRL + SHIFT + P dans Windows. Note : il faut fermer tous les fichier pour que ça marche et cliquer Discover PAackage.

Installer un package

C’est le but de cet article ! Il existe une multitude de package, pour ce faire faites apparaitre la fenêtre du Package Manager CTRL + SHIFT + P, et sélectionnez Install Package, une fenêtre à la Google Suggest fait apparaître des package, avec l’autocomplétion tapez le nom du package voulue, par exemple je vais installer le commenteur de fonction et classes pour PHP DocBlokr. (devant function tapez /** et ENTREE !)

Chaque package est souvent dans un repository Github, mais vous pouvez installer facilement en tapant une commande dans le champ commande de Discover PAckage et cliquer sur le nom du package. Utiliser un git clone permet d’avoir la toute dernière version.

C’est fait ! je vous invite à explorer les autres packages sur cette page (obtenue en cliquant sur Discover PAckage) :

Pour aller plus loin avec SublimeText:

Configurez SublimeText 2 (ST2 pour les intimes) pour développer en PHP.

Emmet pour le CSS et les tags HTML

Le meilleur plugin pour les développeur intégrteur front-end, il permet d’entrer les codes html et css beaucoup plus rapidement et vous pouvez faire vos raccourcis personnalisés.

Mettre à jour de vers php5.6 sous debian 7.x

Sur ce post j’avais décris comment installer Composer, mais les récentes version de composer ne marchent pas avec la version 5.4 de php, d’ou le besoin de mettre à jour vers php5.6

 

Lorsque vous faites une commande apt-get, l’OS va chercher dans une liste de dépôt sur Internet. Cette liste de sites de dépôt se trouve dna sun fichier sources.list, localisé dans /etc/apt/

Vous êtes connecté en tant qu’utilisateur root

Il vous faut renseigner ces deux lignes dans ce fichier en utilisant nano pour le plus simple:

deb http://packages.dotdeb.org wheezy-php56 all
deb-src http://packages.dotdeb.org wheezy-php56 all

$ nano /etc/apt/sources.list

ensuite il vous faut ajouter la clé du dépôt :

$ wget http://www.dotdeb.org/dotdeb.gpg
$ apt-key add dotdeb.gpg

 

Ensuite la procédure de mise à jour proprement dite:

$ apt-get update
$ apt-get install php5

N’oubliez pas de redémarrer Apache

$ service apache2 restart

$ php -v

cette dernière commande affiche la version de php, sans que vous ayez à faire un fichier php avec phpinfo()

Exit Mandrill voici Mailgun !

Mandrill a donc décidé de basculer Mandrill en payant après une période d’expérimentation,

mon compte a été désactivé. Mandrill ne propose pas de plan tarifaire adapté à mes usages

personnels.

J’ai vu sur Twitter que Mailgun était l’alternative freemium idéale pour remplacer Mandrill.

J’ai donc créé un compte, sur Mailgun.com, et j’ai paramétré mon domaine pour pouvoir envoyer des emails de façoon programmatique.

Attention ici je ne parle pas d’envois massifs d’email, mais d’envois d’email individuel, qu’on appelle email transactionnel. Mon utilisation consiste en l’envoi d’un mot de passe sur demande.

Pourquoi ne pas utilise la fonction mail() de php me direz vous? He bien pour des raison de délivrabilité tout simplement. Avec mail(), vous avez de grandes chances de voir votre email se retrouver dans la boite de SPAM.

Donc à partir de maintenant, je vous en conjure, procédez avec une méthode beaucoup plus professionnelle pour l’envoi de vos email que ce soit massif ou transactionnel.

Paramétrage de Mailgun

Après la créationd e votre compte, vous ajoutez votre nom de domaine à partir duquel vous indiquez

envoyer vos emails, car bien sûr c’est Mailgun qui envoit vos email et non votre domaine. Il faut donc entrer quelques informations indiquant que votre onm de domaine et Mailgun sont liés.

 

  1. Entrez votre nom de domaine
  2. paramétrer les deux DNS type TXT pour activer l’envoi d’email
  3. (optionnel) paramétrer le CNAME pour tracker les ouvertures de email, click et désinscription
  4. (optionnel) paramétrer les champs MX pour recevoir les email, mais là c’est vraiment optionnel

 

Il vous faudra attendre un moment (heures ou jours) pour que Mailgun prennen en compte ce paramétrage s’il est bien fait), voussserez prévenus par email.

En ce qui me concernent c’est chez mon registrar que j’ai rentré tous ces champs.

Envoi d’un email

Envoyer avec Mailgun un mail transactionnel se fait en quelques lignes, voici le tuto ici, ce qu’il faut faire c’est installer avec Composer (le gestionnaire de packages de Php) les librairies pour faire aussi simple.

Il y a deux façons d’envoyer un email, soit via l’API de Mailgun, soit en SMTP, ce dernier étant plus rapide et pour l’envoi en volume mensuel plus grand. L’API me convient car je n’ai pas de gros volumes.

Retour en haut