16 Jan 2017, 17:30

Migration

Mon stock de crédits d'hébergement chez Gandi étant arrivé à sa fin il y a quelques mois, j'avais pris la décision de migrer chez Scaleway après une période de tests et aussi parce que c'est moins cher au regard de mes besoins. Faute de temps, j'ai renouvelé les crédits et reporté plusieurs fois la migration mais cette fois-ci elle est faite.

Plusieurs choses dans cette migration :

  • Migration de tous les sites (bouts de sites) vers des containers docker ; l'occasion d'améliorer ma connaissance de docker, docker-compose et de traefik comme reverse-proxy dynamique au dessus de ces containers et gestion automatique des certificats Let's Encrypt.
  • Utilisation d'Ansible pour piloter les déploiements, avec l'objectif de ne pas avoir à me connecter en ssh sur la machine pour gérer un déploiement ou piloter un composant.
  • Faire le ménage dans les différents services, logiciels, contenus & domaines existants.

Ce qui a bien marché :

  • La partie docker, docker-compose et traefik - pas de gros soucis ; quelques limitations parfois mais rien d'insurmontable : un container "cron" pour piloter ses sauvegardes, faut se faire à l'idée mais c'est plutôt pas mal ; traefik ne supporte pas encore la redirection https pour les containers docker ou la gestion des path pour des containers docker.
  • Faire le ménage :-)
  • Au passage, les contenus du blog Web Enthusiasts ont été migrés dans ce blog et sont disponibles avec le tag web-enthusiasts.
  • L'approche de bout en bout avec Ansible : lorsqu'un service est déployé, il l'est en lui-même mais aussi les scripts de backup & co. C'est rassurant de savoir que l'application est correctement déployée sans avoir à se poser de questions.

Ce qui a moins bien marché :

  • Le pilotage via Ansible : à vouloir tout mettre dans un seul playbook pour gérer 6 domaines et pas loin de 20 applications au final (une application peut être instanciée n fois par domaine), ce n'est clairement pas la bonne idée. Si les rôles unitairement tiennent la route, c'est plus la gestion des variables et la multi-instanciation d'un role qui pose problème à ce stade. La faute n'est pas à Ansible mais à ma façon, il faut "juste" remodulariser tout ça ; reste quand même la question de la multi-instanciation d'un service qui reste ouverte (sauf à faire un playbook par url ?)
  • Le pilotage des containers docker via Ansible. Outre les bugs sur le build mal géré et d'autres ici ou là suivant les versions d'Ansible utilisées, je pense que ce n'est juste pas la bonne façon de faire. Autant utiliser des templates Ansible pour gérer ses fichiers docker-compose et autres fichiers associés est plutôt une bonne idée. Autant pour exécuter ses containers, il vaut mieux partir sur un orchestrateur. Ce sera la prochaine itération de cette plateforme d'hébergement.

Ce qui reste à faire :

  • Redirections d'urls propres
  • Régler quelques bugs ici ou là
  • Finalisation des backups pour les derniers containers gérés hors Ansible
  • Arrêt et destruction du serveur précédent
  • Tester en profondeur Kubernetes, Rancher en plus de Swarm pour savoir quelle solution d'orchestration retenir :)

24 Feb 2016, 09:30

Around the Web - February 2016 - MySQL, Docker, Security & Webapps/API

MySQL

Docker

  • Official images are to move from Ubuntu to Alpine : main arguements are about disk space saving (and so bandwith and time to launch a container) and security (lower surface of attack).
    • "Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox" according to the site
    • First, I was sceptical as it requires the whole ecosystem to move from ubuntu to alpine ; indeed, wether you like it or not, people are used to ubuntu/debian and other mainstream distribution and all packages we are used to have are not yet available in alpinelinux also. To be honest, main packages are available.
    • Then, a debian or whatever base image will still exist, be safe with that ; however, if you want to "hack" / inherit from a docker base image, you'll have to switch to Alpine.
    • Third, we could consider that once your docker host has the base image in cache, the ~180M size of base image is not an issue. But starting from 5M may be a good argument however.
    • Starting testing it on ARM device and especially Raspberry Pi, I'm quite pleased with its reactivity and packages available.
  • Some tips to reduce the size of your docker image and also understand how size and layers impacts your docker image. Following the instructions, I could reduce my influxdb-chronograf docker image by 70M approx (from 360 to 290M if I'm correct)

Security & API/Web App

 

03 Dec 2015, 23:26

kubernetes on arm

Après mon billet sur Docker Swarm sur ARM et malgré les améliorations de Swarm, il manque un petit orchestrateur à tout ça pour s'assurer que les containers dockers soient "up & running". Du coup, je suis assez vite tombé sur Kubernetes. Ayant des Raspberry 1 et des Cubietruck à la maison, j'ai cherché à voir s'il était possible de tester kubernetes sur arm. Je suis tombé sur cet article et via une "issue" sur le projet associé, j'ai découvert le projet kubernetes-on-arm.

A l'heure ou je vous parle et avec la sortie de la version 0.6.0, je peux donc créer un cluster kubernetes composé de 2 cubietrucks et 2 RPi v1. Reste maintenant à me familiariser avec kubernetes...

Une version encore plus poussée serait d'aller vers OpenShift Origin ; un guide d'installation semble exister...

En route pour le IaaS/PaaS auto-hébergé :-)

26 Nov 2015, 23:59

Retour sur Codeurs en Seine 2015

Aujourd'hui se tenait l'édition 2015 de Codeurs en Seine ; petit résumé de la journée :

  • Test Drive Infrastructure avec Docker (slides ; code):
    • L'idée est d'appliqué les principes du TDD sur la partie infrastructure (versionning, tests, intégration continue, etc).
    • Différents niveaux de tests possibles
      • Tests unitaires : tests au niveau de la fabrication du container en lui même
      • Tests d'intégration : tests du bon fonctionnement des composants de l'infrastructure
      • Mais aussi tests d'acceptance, tests de sécurité, tests de performance, etc.
    • Développement de docker-unit qui permet de tester la bonne exécution d'un docker build en testant le résultat du Dockerfile à chaque étape.
    • Le projet est basé sur dockramp, il est encore jeune mais l'idée est intéressante. L'auteur du projet doit contacter l'équipe Docker pour voir s'il doit continuer ou si cette dernière a déjà des choses dans les cartons.
  • 5 facteurs clés pour l'auto-organisation : l'auteur revient sur l'organisation d'Agile France qui s'est fait dans un contexte particulier. Il en retient 5 clés :
    • Ownership : il a fallu dépasser sa conception "égocentrique" de l'événement pour en faire l'événement de la communauté pour fédérer tout le monde autour du projet
    • Dialogue : passage de la discussion (bruit++) au dialogue (signal++) ; seules les personnes ayant un intérêt sur un sujet donné ont le droit de donner leur avis et de travailler ensemble. Le bruit ambiant généré par les autres est supprimé en les "excluant" du sujet (ou du moins en ignorant leur "moi je pense que...")
    • Leadership ; en prologement du point précédent, plutôt que de chercher un consensus mou, que les personnes intéressées par le sujet prennent le leadership du sujet et avancent. A noter qu'il n'y a pas d'opposition entre auto-organisation et leadership, c'est le passage d'avis vers des intentions.
    • Artefacts : il s'agit de produire des choses visibles et de s'organiser autour de ces artefacts (réunions, etc)
    • Vision : il faut définir un cadre et communiquer autour de ce cadre.
    • En reprenant de bas en haut, un moyen de se rappeler du mot via le terme VALDO.
  • HTTP/2, les bonnes pratiques du web évoluent ; une présentation rapide de HTTP/1.1 et des apports de HTTP/2 avec les principaux apports (push server, multiplexage, priorité des ressources, compression des entêtes, flux binaire plutôt que textuel et https quasi requis de part le support de http/2 dans Chrome/Firefox) et impacts sur nos pratiques actuelles (plus besoin de domain sharding, de concaténation, de sprites CSS ou d'inlining). Par contre, les optimisations d'images, la compression, la minification et l'optimisation des fontes et la gestion du cache restent de mise.
  • Bidouillabilité à l'ère du numérique : Tristan Nitot qui nous parle
    • des débuts de l'ordinateur où ils étaient bidouillables vs les modèles de plus en plus fermés de nos jours
    • des débuts du web s'appuyant sur des formats ouverts vs des sdk "fermés" où en gros on doit demander l'autorisation de...
    • du cloud (dans le sens des offres SaaS) qui n'est rien d'autres que l'ordinateur de quelqu'un d'autre et sur lequel vous n'avez aucun contrôle, dont le code source n'est pas disponible et qui n'est pas bidouillable.
    • Dans le SaaS, le client est celui qui paye pour les données, pas celui qui les fournit (contre un service "gratuit")
    • Tristan Nitot propose le SIRCUS : Système d'Information Redonnant le Contrôle Aux UtilisateurS et ses 7 principes
      • Pas de publicité ciblée
      • Utiliser du matériel que l'on contrôle (Raspberry, CubieTruck, etc en auto hébergement ou à la rigueur chez un hébergeur)
      • Utiliser du logiciel libre (CozyCloud, Owncloud, YunoHost, etc)
      • Utiliser le chiffrement
      • Une UX à la hauteur
      • Interopérabilité
      • Une killer feature que les offres SaaS ne peuvent fournir
        • A ce sujet, Cozycloud réfléchit à croiser les données qui seraient centralisées dans l'instance (ex afficher les noms des contacts en lieu et place de leur numéros sur la facture téléphonique en croisant la facture avec les contacts)
    • Mes enseignements :
      • Même en étant relativement sensibilité à la gestion des données personnelles, cette conférence donne une claque et montre le chemin à parcourir et les enjeux.
      • Toutefois la question de l'auto-hébergement reste un problème ; comment demander et permettre à Mme Michu d'avoir ses données de façon sécurisée ?
      • Par ailleurs, si CozyCloud arrive à tout concentrer en un seul lieu et à croiser les données, quid en cas d'intrusion sur le systmèe (via un hacker ou un cambrioleur ou des forces de l'ordre à la rigueur ?). Qu'est-ce qui est mieux entre une analyse partielle mais permanente des données chez les GAFA vs un risque faible mais un impact très fort si mon instance CozyCloud par ex est récupérée par un tiers, celle-ci contenant nos données ?
      • Il y a peut être des choses intéressantes à faire dans un contexte CozyCloud + VRM.
  • Apache Drill, le SQL pour Hadoop et plus... :
    • Drill permet de manipuler en SQL tout types de données issues d'un cluster hadoop, d'une base de données SQL/NoSQL, de fichiers CSV, JSON,XML, etc. Il permet même au sein d'une même requête de requêter sur plusieurs sources de données.
    • C'est donc du "SQL on everything" avec une logique de schema à la volée en fonction de la requête. Cela peut être distribué notamment dans un cluster Hadoop.
    • A intégrer dans les outils rapidement...
  • AngularJS, the good, the bad and the transition to Angular 2 :
    • Un talk qui présente les bons et mauvais côtés d'Angular V1, une rapide présentation d'Angular V2 et comment migrer
    • Un livre sur Angular2 est en cours de rédaction ; celui sur Angular V1 est dispo => books.ninja-squad.com ; j'ai la V1 mais toujours pas lu ;-)
    • The Good
      • ngHint
      • eslint + plugin Angular
    • The Bad
      • $scope-soup
      • Eviter les conflits de scope parents/enfants via les "ControllerAs"
      • Performances
        • Utliser les bindOnce pour réduire le nombre de watchers
        • Ajouter des "track by" pour éviter de reconstruire le dom d'une vue sur l'autre si on manipule les mêmes objets
        • Utiliser judicieusement ngIf vs ngShow
          • ngIf : détruit le dom et le reconsruit
          • ngShow : cache le bloc mais si celui-ci contient des instructions qui sont calculées, alors elles le seront quand même
        • ng-model-options pour conditionner le déclenchement du cycle de digest/watcher
      • Fuites mémoire ; rajouter des $scope.on("$destroy" ...) pour faire le ménage
    • Angular2
      • Prévoir de l'écrire en ES2015 ou TypeScript
      • Tout est composant
      • Nouveu modèle de template
        • Web Components compatible
        • Web Workers compatible
      • angular-cli
    • Migration vers NG2 dans le cadre d'un projet NG1
      • Utiliser la syntaxe ControllerAs
      • Utiliser les directives pour initier une approche composant ; Angular 1.5 apportera un début de syntaxe "component"
      • Commencer à écrire en ES6
      • ngUpgrade permettra d'utiliser une syntaxe orientée composant et de les "downgrader" en syntaxe Angular 1.
  • Ionic, le framework mobile hybrid carrément addictif :
    • Application hybride = WebView embarqué dans une application native
    • Ionic = AngularJS + Cordova
    • Plugins ng-cordova pour accéder au matériel et fonctionnalités du périphérique
    • Ionic fournit un ensemble d'outil pour aider au développement et au déploiement des applications avec un modèle économique en cours de définition
    • solution manquant encore un peu de maturité ?

Au final, globalement une bonne journée avec une bonne organisation. La diversité des tracks (agile, technologies, web et Java) permettent de trouver son bonheur et d'avoir un programme à la carte. Une bonne formule en somme.

25 Nov 2015, 09:30

Around the Web - November 2015 - Docker 1.9 & Microsoft Edge

Docker

As docker powers more and more website due to containerisation, I thought it was worth speaking about Docker 1.9 release.

  • Docker 1.9 is released and related products are bringing a lot of interesting features :
    • Regarding Docker by itself, I quite like the "build-time arguments for Dockerfile" to pass some arguments that will apply to your container when it runs (think about proxy & so on). There seems also to be some interesting things around distributed volume management to ease data persistence management.
    • Multi-host docker networking is ready for production : you can now create your own networks and attach containers to them. Seems more powerful than links and not limited to a given hosts (if you have a swarm cluster, your network is available over your nodes)
    • Swarm 1.0 is also released with the support of the distributed persistent storage and new networking (see above)
    • Docker Compose is now supported on Windows and can better manage environment (dev vs prod for ex). You will define a common base file for compose and aside more environment oriented files which will override the base file and give you more flexiblity about the container that will be built for a given environment.
    • Let's hope Docker Toolbox will have a better corportate proxy management even if a decent solution has been found.
    • A concrete example from RethinkDB about the switch from the old networking model to the new one.

Microsoft Edge

  • With Edge 13, new HTML5, JS, CSS features are supported.
  • Protecting Microsoft Edge against binary injection :  Edge dropped ActiveX but not only. The post review that only signed DLL will be authorised to be loaded. It may prevent third party tools to be installed which is good if malware oriented, but which may block or slow the deployment of some plugins too.

30 Sep 2015, 20:32

Un cluster docker avec Swam sur plateforme ARM

Docker est connu pour fonctionner sur un environnement 64 bits ; toutefois, il est possible de faire des choses avec la plateforme ARM (Raspberry,Cubietruck, etc). C'est moins immédiat et direct que la méthode 64 bits mais c'est faisable. La preuve ci-après.

Matériel en présence :

  • 1 Raspberry, utilisant l'image fournie par Hypriot ; il serait certes possible de récuperer docker des backports debian (ie jessie-backports) mais c'est une vieille version à l'échelle de docker (1.6.2 vs 1.8.2 à date)
  • 2 CubieTrucks, utilisant l'image d'armbian (compatible avec pleins de boards ARM) mais en récupérerant le paquet debian fournit par Hypriot pour avoir également une version de Docker à jour.

D'un point de vue réseau, tout ce petit monde est dans le même LAN.

Maintenant que chaque machine est sur le réseau, que docker est installé sur chacune d'entre elle en version 1.8.2, on peut commencer à bâtir notre cluster.

L'outil proposé par Docker pour gérer un cluster Docker se nomme Swarm. Sur un environnement 64 bits, l'installation est assez évidente et on peut même s'appuyer sur Docker-Machine. Pour autant, sur ARM, c'est un peu plus compliqué même si légèrement décrit dans le cadre de l'installation manuelle. Comme indiqué sur le dépot de swarm, il est possible de compiler swarm et d'utiliser alors directementle binaire swarm plutôt que de faire un docker run swarm (qui rappelons le ne fonctionne qu'en environnement 64 bits).

Installation de swarm

Cela consiste à :

  1. Installer Go 1.5 via GVM
  2. Installer Godep
  3. Compiler Swarm
$ wget https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer
$ chmod +x gvm-installer
$ ./gvm-installer
Cloning from https://github.com/moovweb/gvm.git to /home/pi/.gvm
No existing Go versions detected
Installed GVM v1.0.22
Please restart your terminal session or to get started right away run
`source /home/pi/.gvm/scripts/gvm`
$ source /home/pi/.gvm/scripts/gvm
$ sudo apt-get install bison
# To install Go 1.5, you need first to install Go 1.4 ; cf https://github.com/moovweb/gvm/issues/155
$ gvm install go1.4
Downloading Go source...
Installing go1.4...
* Compiling...
$ gvm use go1.4
Now using version go1.4
$ export GOROOT_BOOTSTRAP=$GOROOT
$ gvm install go1.5
Installing go1.5...
* Compiling...
$ gvm use go1.5 --default
Now using version go1.5
$ go get github.com/tools/godep
$ go get github.com/docker/swarm
$ swarm -v
swarm version 0.5.0-dev (HEAD)

A ce stade, vous obtiendrez une version 0.5.0-dev de Swarm ; si vous voulez une version 0.4, il faudra se référer à la partie détaillée de la compilation de Swarm pour ne récupérer que la version voulue.

Docker, en mode j'écoute sur le réseau

Pour que les nodes de votre cluster communiquent entre elles, il faut ouvrir le port 2375 sur le réseau. Pour ce faire, il suffit d'éditer /etc/default/docker et rajouter -H tcp://0.0.0.0:2375 à DOCKER_OPTS comme ci-dessous :

DOCKER_OPTS="--storage-driver=overlay -D -H tcp://0.0.0.0:2375"

Puis redémarrer le service docker :

systemctl restart docker
systemctl restart docker.socket

Vous pouvez le vérifier ensuite avec nmap :

$ nmap <node_ip> -p 2375
Starting Nmap 6.00 ( http://nmap.org ) at 2015-09-30 21:03 CEST
Nmap scan report for 192.168.8.102
Host is up (-890s latency).
PORT     STATE SERVICE
2375/tcp open  unknown
Nmap done: 1 IP address (1 host up) scanned in 1.11 seconds

Ton utilisateur, au groupe docker, il appartiendra

Pour éviter des erreurs débiles, il faut absolument que l'utilisateur qui lancera la commande docker fasse partie du groupe docker

$ sudo gpasswd -a <user> docker

Ton cluster tu initialisera

Sur une des nodes (peu importe laquelle) : il faut créer le token de référence pour notre cluster en utilisant swarm create qui va vous retourner un token.

$ swarm create
<token_id>

Sur chaque node, il faut lancer une commande swarm pour indiquer au démon docker qui tourne sur votre node (donc en "local" mais en utilisant l'ip associée à eth0) le token du cluster :

swarm join --addr=<node_lan_ip>:2375 token://<token_id>

Cela vous donne quelque chose comme (chaque node doit voir son ip dans l'argument addr):

INFO[79212] Registering on the discovery service every 20s...  addr=192.168.8.102:2375 discovery=token://03ac974de5db2791b4c3cfe89c307655

Depuis une des nodes, vous pouvez essayer de lister les nodes de votre cluster :

swarm l token://<token_id>
<node1_lan_ip>:2375
<node2_lan_ip>:2375
<node3_lan_ip>:2375

Promouvoir un manager de cluster

Option 1 : Depuis un poste distant

Là, c'est facile et comme indiqué dans la documentation officielle ; par ex depuis mon laptop.

Lancer swarm via docker en mode "daemon" et en précisant le token de votre cluster:

docker run -d -p 2375:2375 swarm manage token://03ac974de5db2791b4c3cfe89c307655

Vous pouvez vérifier que votre process docker tourne bien :

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
34c3456e0cb9        swarm               "/swarm manage token:"   22 hours ago        Up 22 hours         0.0.0.0:2375->2375/tcp   clever_feynman

Et pour avoir le statut de votre cluster :

docker -H tcp://<laptop_ip_ou_meme_localhost>:2375 info
Containers: 0
Images: 0
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 3
 black-pearl: 192.168.8.102:2375
  └ Containers: 0
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 456 MiB
  └ Labels: executiondriver=native-0.2, kernelversion=3.18.11-hypriotos+, operatingsystem=Raspbian GNU/Linux 7 (wheezy), storagedriver=overlay
 or-azur: 192.168.8.101:2375
  └ Containers: 0
  └ Reserved CPUs: 0 / 2
  └ Reserved Memory: 0 B / 2.067 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.2.0-sunxi, operatingsystem=Debian GNU/Linux 8 (jessie), storagedriver=overlay
 thanos: 192.168.8.100:2375
  └ Containers: 0
  └ Reserved CPUs: 0 / 2
  └ Reserved Memory: 0 B / 2.065 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.2.0-sunxi, operatingsystem=Debian GNU/Linux 8 (jessie), storagedriver=overlay
CPUs: 5
Total Memory: 4.577 GiB
Name: 34c3456e0cb9

Option 2 : lancement du manager depuis la node

Depuis une node de votre choix :

swarm manage -H <node_ip>:<port_de_votre_choix> token://<token_id>

Vous pouvez ensuite vous connecter depuis la node :

docker -H tcp://<node_ip>:<port_de_votre_choix> info

Et ensuite...

Il suffit d'utiliser docker en ligne de commande comme normalement :

docker -H tcp://<manager_ip:manager_port> info
docker -H tcp://<manager_ip:manager_port> run ...
docker -H tcp://<manager_ip:manager_port> ps
docker -H tcp://<manager_ip:manager_port> search ...
docker -H tcp://<manager_ip:manager_port> logs ...

Exemple :

docker -H tcp://localhost:2375 ps
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS               NAMES
e79fd7deb1c6        armv7/armhf-ubuntu   "/bin/bash"         7 minutes ago       Up 7 minutes                            <node_name>/adoring_jang

Vous pouvez aussi interagir directement avec une de vos nodes :

docker -H tcp://<node_ip>:2375 ps
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS               NAMES
e79fd7deb1c6        armv7/armhf-ubuntu   "/bin/bash"         3 minutes ago       Up 3 minutes                            adoring_jang

Mais, ce n'est pas tout à fait fini en fait

Les commandes swarm join ou swarm manage ont été lancées en ligne de commande ; donc si vous fermez vos consoles, c'en est fini. Il faut donc automatiser tout ça ; personnellement, j'aime bien supervisord.

apt(-get) install python-setuptools
easy_install supervisor
echo_supervisord_conf > /etc/supervisord.conf

A la fin de ce fichier, changer :

[include]
files = /etc/supervisor.d/*.conf

Ensuite :

Pour le premier fichier qui permet de rejoindre le cluster :

$ cat /etc/supervisor.d/docker-swarm-join.conf 
[program:docker-swarm-join]
directory=/tmp/
command=/root/.gvm/pkgsets/go1.5/global/bin/swarm join --addr=<node_lan_ip>:2375 token://<token_id>
user=root
umask=022
autostart=True
autorestart=True
redirect_stderr=True

Et le second fichier qui permet de lancer le manager (à ne faire qu'une fois) :

$ cat /etc/supervisor.d/docker-swarm-manage.conf 
[program:docker-swarm-manage]
directory=/tmp/
command=/root/.gvm/pkgsets/go1.5/global/bin/swarm manage -H <node_lan_ip>:<port_de_votre_choix> token://<token_id>
user=root
umask=022
autostart=True
autorestart=True
redirect_stderr=True

Il reste ensuite à récupérer un script d'init pour Debian ou sa version pour systemd.

Et voilà, un joli cluster Docker basé sur Swarm avec vos machines ARM.

Source : Github Docker/Swarm #1245

28 Sep 2015, 23:24

Docker, InfluxDB & Chronograf

Je me suis amusé à créer un Dockerfile permettant d'installer InfluxDB et Chronograf sur un socle Debian 8 64 bits en attendant de pouvoir faire l'équivalent sur mes cubietruck/raspberri en ARM.

Le dockerfile est disponible et sauf erreur, vous devriez pouvoir faire suite à la publication sur le Docker Hub:

docker run -d -t -p 8083:8083 -p 8086:8086 -p 10000:10000  nsteinmetz/influxdb-chronograf

Les ports exposés sont les ports par défaut :

  • 8083 et 8086 pour InfluxDB
  • 10000 pour Chronograf

Vu que c'est mon premier Dockerfile, s'il y a des pistes d'améliorations, n'hésitez pas à le signaler.

 

29 Apr 2015, 09:30

Around the Web - April 2015

Ergonomy / User Experience

  • The best icon is a text label : a reminder that icon must be meaningful, with some examples of do's/don'ts and at the end that a text label may be more accurate than an icon.

Mobile

Over the 4 years we have slowly moved away from device specific breakpoints in favour of content specific breakpoints, i.e. adding a breakpoint when the content is no longer easy to consume (whatever the device is).

Backend

Frontend

  • M6Web Tech team published an article (English version ; French version) on how they mocked a backend application while they were building the frontend one and til the backend is fianlised. Beyond the tool involved, the most important point is the "interface agreement" in which backend and frontend teams agreed on how the coming API would work and be used to avoid bad surprises as much as possible at the end.
  • A visual guide to CSS3 Flexbox properties : title is self explainatory about what it is !
  • Introduction to Service Workers : Service Worker will allow offline experiences, periodic background syncs, push notifications and other things that would normally require a native application. Atricle introduce on how service workers are working and some current limitations ; if you are not familar with Javascript promises syntax, have a look at this article "Javascript Promises".

Responsive Web Design

Tests

Virtualisation (Docker)

[Edit 18/5, 21/5, 28/5,19/6,10/7 - Update docker tutorial list]

25 Mar 2015, 09:30

Around the Web - March 2015

Browser

Responsive Web Design (RWD)

HTML5/CSS/Javascript

  • This API is so Fetching : fetch API is to be used for asynchronous actions and is to be more resilient than a XHR (ie ajax) call. Some exemples are given in the blog post ; it can be used from Firefox 39 and Chrome 42 (currently in dev status) but a Fetch Polyfill exists to start using this API from now.
  • CSS Reference which introduces itself as an extensive CSS reference with all the important properties and info to learn CSS from the basics ; this article gives a more introduction on its purpose and how to use it.
  • Meteor, develop faster than a rocket (in French) : an introduction to Meteor  a full stack and isomorphic javascript framework in which you use Javascript both on client and server side. It also uses MongoDB (NoSQL Document Oriented database & schemaless) to store data and it's based on Node.JS. A second article will show how you can create a mobile app easily.

Thoughts

  • Your job is not to write code : Engineers' job is not to write code, Project Managers' job is not to manage project and so on. Our job is to make a better product.
  • A Bug Hero to fight against bug invasion (in French): in an agile team, in each sprint, a developper is commited to do the 1st level support, fix bug and manage incident to avoid disturbing the whole team and sacrifice the sprint. If no bugs, developer is aimed to fix small tasks that are not on the critical path for the sprint dlivery. Interesting both for the disturbing management effect and as it enforces developpers to have a global knowledge of the system, not only his own part.  

SQL

  • Understanding SQL's null : because querying null is not as easy as it may be and also null may not mean null in the way you expect.
  • PoWa (Postgresql Workload Analyser), released as a 2.0 version, provides a better (from what it is said, not tested) monitoring and performance tools on your Postgres 9.4 cluster.

Virtualisation

Compose is a way of defining and running multi-container distributed applications with Docker. Back in December we opened up its design to the community. Based on the feedback from that, Compose will be based on Fig, a tool for running development environments with Docker.

Machine takes you from “zero-to-Docker” with a single command. It lets you easily deploy Docker Engines on your computer, on cloud providers, and in your own data center

Swarm is native clustering for Docker containers. It pools together several Docker Engines into a single, virtual host. Point a Docker client or third party tool (e.g., Compose, Dokku, Shipyard, Jenkins, the Docker client, etc.) at Swarm and it will transparently scale to multiple hosts. A beta version of Swarm is now available, and we’re working on integrations with Amazon Web Services, IBM Bluemix, Joyent, Kubernetes, Mesos, and Microsoft Azure.

  • so now you can orchestrate all your process from zero to production using docker (based) solutions. Even if some products are still in beta so far, a very interesting move !

 

25 Feb 2015, 09:30

Around the Web - February 2015

UX

  • The Fold manifesto : why the page fold still matters ; even if we get used to scroll, we need to be encourage to do it. Thus the fold is strategic to convince the user to make the effort to go beyond this limit ; whatever the size of the device is (RWD included).

API

Javascript

  • OCTO was at DotJS and try to sum up what is the status of frontend frameworks (in French) mentionning Web Components, Isomorphic javascript (ie both in frontend and backend side) and some ideas around the announcement of the AngularJS 2.0 which generated a lot of noise.

CoreOS, Docker & co

  • Discover Docker; another blog from OCTO, about CoreOS. So if you don't know about CoreOS, Etcd and Fleet, the article is for you so that you have an overview of what is CoreOS.
  • Nuxeo made a summary of their use of CoreOS (including Fleet & Etcd), Docker and the tools they build for Nuxeo.io platform. Very interesting summary.
  • If you are interested in minimalist OS, this post on Docker blog mentions "of course" CoreOS but also Ubuntu Snappy Core (Ubuntu based) or Project Atomic (closed to RedHat/CentOS/Fedora system).

Responsive Webdesign

ReactJS, Flux

HTML5

  • Making a complete polyfill for the HTML5 details element : if you were to bridge the gap by providing a feature a browser does not include, it is very interesting to see the how it is done from a methodological point of view.
  • Improve your lists with style ! Now that counters are "stylable", you can do a lot of things to improve the rendering of your lists (no more bullet points but some shiny icon ?, manage padding, etc). HAve a look at the demo (requires a modern browser)