Gandi, Nginx et SSL

Gandi, Nginx et SSL

Si vous avez votre domaine chez Gandhi et que vous avez configuré votre serveur Nginx pour pouvoir accéder à votre site en SSL, il se peut que vous obteniez le résultat suivant selon le navigateur utilisé :

firefox_untrusted_-connection

1- Création du certificat

Afin de pouvoir authentifier votre serveur, vous devez créer un certificat pour votre nom de domaine (ex. : www.toto.fr) ou pour plusieurs domaines via un certificat wildcard (ex. : *.toto.fr). Vous avez juste à rentrer la commande suivante dans votre terminal :

openssl req -nodes -newkey rsa:2048 -keyout www.toto.fr.key -out www.toto.fr.csr

Vous avez plusieurs questions de posées après la saisie de cette commande. Vous pouvez rentrer les valeurs que vous voulez sauf pour cette question particulière :

Common Name (eg, YOUR name) []: www.toto.fr

Voilà, votre certificat est créé. Nous pouvons passer à la suite.

2- Activation du certificat

Le certificat en lui-même ne suffit pas. Vous devez l’envoyer à Gandhi pour qu’il vous l’active et, ainsi, vous retourne le .crt permettant de pouvoir utiliser l’https:// pour votre site web.

Pour cela, vous devrez effectuer les étapes suivantes :

  • Vous rendre sur la page de gestion de vos domaines Gandhi
  • Sélectionnez votre domaine
  • Cliquez sur le certificat SSL puis sur gérer (toujours sur la page)
  • Cliquez sur Activer ce certificat puis copiez le contenu du .csr
  • Attendez le courrier de confirmation de gandhi avec le .crt
  • Placez le .crt sur votre serveur au même endroit que le .csr

Maintenant que vous avez ces deux-là, vous pouvez activer le SSL sur votre site, mais attention. Vous aurez certainement le message affiché en début d’article, car il manque une étape non présentée dans la documentation.

3- Le certificat intermédiaire

Voici donc notre bête noire : le certificat intermédiaire de gandhi qui permet de vérifier l’autorisation de votre certificat par Gandhi et qui permettra à tous les navigateurs de l’authentifier.

Pour le récupérer, rendez-vous sur cette page et sélectionnez le .pem en fonction de votre certificat. Ensuite, placez le côté serveur au même endroit que les deux autres certificats en le nommant GandiStandardSSLCA.pem (plus simple pour s’y retrouver) puis exécutez la commande suivante :

cat GandiStandardSSLCA.pem >> www.toto.fr.crt

Ceci va copier tout le contenu du fichier .pem à la fin de votre .crt, car dans nginx, on ne peut placer que le certificat et la clé.

4- Au tour de Nginx

Maintenant, dernière étape, modification de votre virtualhost sous nginx pour activer le SSL et lui indiquer le certificat et la clé SSL :

server {
    listen 443;
    server_name "www.toto.fr";
    root /var/www/your_website_root;

    ssl on;
    ssl_certificate     /etc/nginx/certificates/www.toto.fr.crt;
    ssl_certificate_key /etc/nginx/certificates/www.toto.fr.key;
}

Redémarrez Ngoinx et voilà. Votre certificat SSL est valide partout.

Source

Dev, Android et OsX

Dev, Android et OsX

by Throrïn 2 Comments

La semaine dernière, j’ai profité de la sortie d’OSX Maverick pour réinstaller proprement tout mon macbook. Et, venant tout juste de terminer l’installation de l’environnement de développement Android, je me suis dis que j’allais vous partager la bonne méthode pour mettre en place le votre.

Prérequis

  • Avoir une version d’OSX supportant Homebrew.
  • Un mac avec cette version d’OSX (le CD tout seul ou bien la clé ne vous aideront pas).
  • Un mug avec la boisson chaude de votre choix. (Petite préférence pour un thé de Noêl vu le temps).

Homebrew

Qu’est-ce qu’Homebrew? Pour répondre à cette question, je vous laisse lire directement ce qu’ils marquent sur leur site :

Homebrew installe ce dont vous avez besoin et qu’Apple n’a pas installé.

Homebrew va donc nous permettre d’installer tout ce dont nous avons besoin. Il s’agit dun gestionnaire de paquets (en gros), dans le genre d’apt-get sur Ubuntu, permettant d’installer donc facilement certaines librairies, logiciels, … simplement (mongodb, …).

Pour l’installer, rien de plus simple. Il vous suffit de rentrer la ligne suivante dans votre terminal avec un utilisateur disposant des droits d’administration :

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

MAJ, installation du SDK, …

Avant de continuer, il est requis de mettre à jour homebrew grâce à la commande suivante :

brew update

Quand la commande est terminée, nous allons installer tout le nécessaire (et même plus) pour le développement Android :

brew install android ant maven gradle

Cette commande va nous installer :

  • Ant
  • Maven
  • Gradle
  • Android SDK

Une fois que tout est terminé, vous aurez juste à lancer android dans votre terminal pour vous retrouver avec le gestionnaire d’installation des versions, extras, …

Un petit coup de GenyMotion ?

Maintenant, nous allons installer VirtualBox et GenyMotion afin de pouvoir tester nos applications directement sur notre mac sans avoir à jouer à Hearthstone le temps que le simulateur de base ne réagisse à notre action.

Bref, pour revenir sur Genymotion, il faut savoir qu’il permet de simuler, via une machine virtuelle, un device Android du type de votre choix (tablette, phablette, smartphone, nexus 4, 5, 7, …). Donc, je vous conseille fortement de l’installer de de travailler avec pour vos développements.

Pensez aussi à prendre l’intégration de Genymotion pour Eclipse ou Android Studio selon l’IDE que vous utilisez.

Et l’IDE ?

Comme je viens de vous le dire, c’est à vous de choisir entre Eclipse, IntelliJ et Android Studio. Je vous conseillerai quand même de prendre Android Studio ou IntelliJ car Eclipse commence à se faire lourd pour rien et dès qu’un projet devient trop important, il se met à planter trop souvent.

De plus Android Studio et IntelliJ gèrent nativement les projets gradle et possèdent même une intégration avec GitHub.

Migrer ses projets SVN vers GIT

Migrer ses projets SVN vers GIT

Nous allons voir aujourd’hui comment migrer un projet SVN existant vers un repository Git existant (GitHub, GitLab ou autre) en gardant toutes les branches et les tags. Cette migration va se dérouler en 6 étapes.

1. Récupérer la liste des utilisateurs

Pour pouvoir migrer convenablement votre projet SVN, nous devons mapper les utilisateurs SVN avec les utilisateurs GIT afin de pouvoir convertir l’historique de commit convenablement. Pour cela, placez vous dans le répertoire racine de votre checkout SVN et lancez la commande suivante :

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); \ 
sub(" $", "", $2); print $2" = "$2" <"$2">"}' | \
sort -u > authors.txt
Le caractère ‘\’ en fin de ligne permet juste de taper la commande sur plusieurs lignes afin d’avoir une meilleure visibilité du code sur le blog.

Attention cependant, les utilisateurs retournés ne correspondent qu’aux utilisateurs SVN. Pas aux utilisateurs GIT. Vous devrez donc remplacer chaque ligne :

jwilkins = jwilkins <jwilkins>

Par ceci :

jwilkins = John Albin Wilkins <johnalbin@example.com>

2. Cloner votre projet SVN avec git-svn

Maintenant, la conversion SVN vers GIT commence. Vous avez juste à lancer la commande suivante :

git svn clone [SVN repo URL] --no-metadata -A authors.txt --stdlayout ~/temp

Cette commande va convertir votre checkout SVN en repository GIT tout en effectuant un mappage des utilisateurs par rapport au fichier authors.txt généré tout à l’heure. Le checkout sera effectué dans le répertoire ~/temp.

3. Push vers un dépôt .git vide

Votre repository GIT est effectué mais il est lié à aucun dépôt. Nous allons donc créer notre dépôt vide comme ceci :

git init --bare ~/new-bare.git
cd ~/new-bare.git
git symbolic-ref HEAD refs/heads/trunk

Maintenant, vous n’avez plus qu’à envoyer votre repository vers le dépôt fraichement créé :

cd ~/temp
git remote add bare ~/new-bare.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare
Maintenant, vous pouvez supprimer ~/temp en toute sécurité.

4. Remplacement de trunk par master

Dans les dépôts subversion, la branche de développement s’appelle trunk. Dans GIT, il s’agit de la branche master. Nous allons donc renommer notre branche trunk en master.

cd ~/new-bare.git
git branch -m trunk master

5. Nettoyage des tags et des branches

git-svn rend le nommage des branches et des tags très courts, de la forme tags/name, alors que GIT utilise des noms plus longs que ça pour s’y retrouver. Nous allons donc lancer une commande pour arranger tout ça.

cd ~/new-bare.git
git for-each-ref --format='%(refname)' refs/heads/tags |
cut -d / -f 4 | 
while read ref
do
    git tag "$ref" "refs/heads/tags/$ref";
    git branch -D "tags/$ref";
done

6. Copie du dépôt vers votre serveur GIT

Dernière étape : L’envoie du dépôt GIT vers votre dépôt GitHub, GitLab ou autres. Cette étape est relativement simple à effectuer. Voyez plutôt :

cd ~/new-bare.git
git remote add origin [GIT repo URL]
git push -f --tags origin refs/heads/*:refs/heads/*

Conclusion

Voilà. Votre repository SVN a été pleinement migré et converti sur GIT. J’ai oublié une étape vue dans mes sources. Il s’agit de renseigner tous les fichiers ignorés de SVN dans le .gitignore. Sauf que la commande en question n’a pas marchée chez moi sur mes différents postes (ubuntu 12.10 et OSX).

Sources :

Mon retour sur le passage de PHP à Node.js

Mon retour sur le passage de PHP à Node.js

Cela fait maintenant depuis le mois de mai (si je me rappelle bien) que je travaille sur un projet Node.JS en lieu et place du PHP. Et cela fait un bout de temps que je me dis que je dois faire un article sur les différences entre ces deux technologies WEB. Ainsi que mon retour sur cette dernière.

Avant d’aller plus en avant, je tiens à préciser à quoi nous sert Node.JS au travail : Créer une API complète (comme l’api twitter). Nous ne nous servons donc pas du tout de Node.JS pour la partie templating.

PHP, Node.JS, qu’est-ce que c’est ?

PHP

PHP est arrivé comme une technologie novatrice au début des années 2000 comme étant le langage dans le vent grâce aux choses suivantes :

  • C’est un langage interprété à la différence du C++ ou du JAVA qui nécessitent de compiler les sources pour fonctionner.
  • Il a la particularité d’être utilisé directement au sein des pages HTML grâce aux balises <?php ?>.
  • Il utilise la programmation procédurale qui est plus facile à apprendre que la programmation orientée objet.
  • Il n’est pas typé et il n’y a pas besoin de déclarer les variables avant de s’en servir.

Depuis, le langage PHP a fait son petit bout de chemin:

  • On peut installer des packages au sein de ses projets avec Composer (compatible PHP 5.3.2+).
  • On peut développer en Objet et utiliser des Designs Patterns comme le Pattern MVC grâce à différents Frameworks (Zend, CakePHP, Laravel, …).

Malgré toutes ces améliorations et l’engouement assez fort, PHP est sujet à de nombreuses vulnérabilités (Injections SQL, …) et il n’a pas de réel gestionnaire de paquets (Composer est un projet indépendant et a été inspiré par le gestionnaire NPM de Node.JS). Il n’y a pas une réelle API au sein de PHP et les performances ne sont pas toujours au rendez-vous.

De plus, de meilleures alternatives ont fait leur apparition pour le web :

  • Ruby on Rails
  • Django
  • Node.JS

Node.JS

Cette technologie est assez jeune (environ 2 ans si je ne me trompe pas), et apporte des choses innovantes (comme pour PHP à l’époque)’

  • Il permet d’exécuter du JavaScript côté serveur en utilisant le moteur de Google : Google Chrome V8 engine.
  • Il intègre nativement un gestionnaire de packages : NPM. Ce gestionnaire permet d’installer des modules soit en global, soit dans un projet.
  • Les modules Node.JS globaux apportent le plus souvent des commandes système supplémentaires. Par exemple : lancer la conversion du Less vers le CSS ou la création d’un projet express directement hiérarchisé.
  • Vous pouvez créer vos modules en code natif (C/C++) et en JavaScript.
  • Il peut faire office de serveur web sans passer par Apache ou Nginx. Mais ces derniers peuvent être nécessaires si vous voulez accéder à différents projets Node.JS sur le même port (80 et 443 par exemple) ou pour utiliser les noms de domaine.
  • Il ne bloque pas les entrées/sorties grâce à l’asynchrone du JavaScript (je n’arrive pas à mieux tourner cette phrase). Ce qui permet un gain notable des performances.

J’ai oublié certainement d’autres points importants, mais ici, je ne cherche pas à montrer tout ce qu’apporte Node.JS, mais quelles sont les choses les plus notables qu’il apporte.

C’est une technologie assez récente et bas niveau. Est-ce que dans 10 ans une autre technologie va aussi le supplanter? Possible, mais nous n’y sommes pas encore.

Comparatifs

Certains d’entre vous sont friands de comparatifs en tout genre, voici les principaux listés ici:

Mon retour

Contexte

Il faut savoir que, comme dit en introduction, j’utilise Node.js uniquement comme API RESTFul. Pourquoi ce choix? Car une API permet d’avoir différents points d’entrée et permet un plus grand large choix de technologies pour ce qui va « consommer » l’API.

Dans mon cas, je n’utilise pas du tout le moteur de templating fourni par NodeJS. Je laisse cette partie au projet de frontend. Node.js permet, grâce à express, d’effectuer des retours JSON avec une facilité enfantine.

Ensuite, notre API est RESTFul. Malheureusement, express ne suffit pas pour répondre à ce besoin. De plus, nous préférons utiliser un pattern structuré tels que le pattern MVC pour nos projets. Locomotive.js est parfait pour répondre à ce besoin.

Et pour finir, le passage à Node.JS seul ne suffit pas, un petit passage de MySQL vers MongoDB s’est avéré utile. Ça répondait à nos besoins puis les résultats de MongoDB sont directement utilisables par Node.JS vu que ce sont des objets/tableaux JSON.

Retour d’expériences

Le plus dur je trouve avec le passage de PHP à Node.js est ce principe d’asynchrone. Dès que vous appelez une fonction avec un callback, il faut bien penser à chaque cas de retour sans en omettre un seul sous peine de se retrouver avec la requête bloquée en attente d’une réponse.

De base, Node.js met en cache tout votre projet avant de l’exécuter. Vous devrez donc penser à bien le relancer après chaque modification de votre code. J’ai eu l’air fin à chercher pendant 15 minutes pourquoi mes modifications n’étaient pas prises en compte.

Sinon, en soi, Node.js est vraiment un plaisir à utiliser. Bien entendu, c’est du JavaScript et sans rigueur, on peut très très vite se retrouver avec du code sale.

Dernier point. Pour les développeurs sous Windows : changez d’OS. La plupart des modules utilisant des librairies natives ne fonctionnent pas chez vous et la ligne de commande étant quand même assez utilisée et aux vues de votre console assez préhistorique, je vous conseille de développer sous Linux ou Mac.

Patterns CSS en base64

Patterns CSS en base64

Bonjour à tous. Par cette journée de vacances, je vais vous faire partager une ressource pour créer des patterns CSS basiques le tout encodés en base64.

Les images encodées en base64 sont directement ajoutées dans votre fichier CSS en texte. Ceci permet de n’avoir aucun chargement supplémentaires en plus de votre fichier CSS.

Mais qu’est-ce qu’un pattern ?

Un pattern en CSS, ou du moins dans notre exemple, correspond à une portion d’image répétée en X et en Y permettant de générer un motif comme, par exemple, un motif écossais, des stripes, …

Bien entendu, dans la ressource d’aujourd’hui, il va nous permettre de générer des motifs allant de 1px par 1px jusqu’à 10px par 10px. Ce qui restera assez limité si vous voulez reproduire un motif très complexe. Si vous êtes curieux, sachez que les stripes du header et du footer ont été générés avec cet outil.

L’outil en question s’appelle Patternify. Il s’agit d’un service web entièrement gratuit et permettant d’éditer pixel par pixel votre motif. Pour y accéder : http://www.patternify.com/

Maintenant vous pourrez créer des motifs sympas ne nécessitant aucun script JS ou autre image extérieure.