Notre env. de dév. n’est plus un
bizutage !

Appuyez sur [s] pour ouvrir les notes présentateur dans une nouvelle fenêtre.

Qui sommes-nous ?

Julien FUSCO

http://koin.github.io
@PKoin

#MarioKart8 #montagne #pasDeFootPitié

Qui sommes-nous ?

Pascal MARTIN

http://blog.pascal-martin.fr
pmartin@php.net
@pascal_martin

#éléphpantarque #chatons #14h00

TEA, The Ebook Alternative

Notre équipe

Ce qui est fixé

(pour le moment)

  • Git, Github
  • (Portable) Linux, Mac
  • HipChat <3

Notre production

  • Linux, Apache, PHP, Ruby
  • MySQL, MongoDB, Redis
  • Silex, Symfony 1.4, Rails 3, Rails 4, Magento, …
  • Outils propriétaires
  • Déploiement : capistrano
« Bienvenue ! Tu vas prendre en gros la semaine pour installer ton poste. (sic) »

Moué…

« Comme ils ont dû te dire, tu vas en avoir pour à peu près deux semaines à installer ton poste »

WAT?

Mais pourquoi ? …

  • + de 20 projets
  • ~ 13 serveurs
  • 10 technos
  • Applications très liées

… en moins de 3 ans

… À l’image de la prod ?

  • Architecture
  • Isolation des services
  • Droits d’accès (fichiers, ressources)

Pas d’automatisation

2012 - 2013

Au départ

Doc peu (pas ?) à jour sur un wiki

VirtualBox

Installation manuelle

Collègue, pendant une semaine, a pris son PC (fixe) et est venue en pair avec moi

Automatisation

Depuis 2014

Quelques outils

  • Vagrant provision
  • Cookbooks Chef

Cookbook chef


include_recipe "php"
include_recipe "php::module_mysql"

package "php5-xdebug" do
  action :install
end

service "apache2" do
  action [ :restart ]
end
                    

Vagrantfile


# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.define "tea-phptour" do |test|
    test.vm.box = "tea-wheezy-amd64"
    test.vm.hostname = "tea-phptour"

    test.omnibus.chef_version = :latest

    test.vm.provision "chef_solo" do |chef|
      chef.cookbooks_path = "#{my_ws}/cookbooks"
      chef.add_recipe "tea-phptour"
    end
  end

end
                    

vagrant up tea-phptour

Pour les données ? Scripts !

  • (bash) Import depuis la prod
  • (SQL) Nettoyage des données sensibles

Malgré cela…

  • Cloner le repo git
  • Créer la VM
  • composer install
  • Les tests passent…
  • ou pas !

Configuration

Très chronophage

  • Avant : fichiers .dist
  • Maintenant : stow

Stow

Arborescence extraite de git

$ tree
.
|-- app
|   `-- config
|-- config
`-- config-dist
    `-- local
        |-- app
        |   `-- config
        |       `-- specifique-appli.txt
        `-- config
            `-- test.yml

Stow

$ stow --dir=config-dist --target=. local

Stow

Arborescence avec les symlinks

$ tree
.
|-- app
|   `-- config
|       `-- specifique-appli.txt
            -> ../../config-dist/local/app/config/specifique-appli.txt
|-- config
|   `-- test.yml -> ../config-dist/local/config/test.yml
`-- config-dist
    `-- local
        |-- app
        |   `-- config
        |       `-- specifique-appli.txt
        `-- config
            `-- test.yml

dnsmasq

Serveur DNS utilisé par toutes les machines

Sur le poste de dev.

# /etc/dnsmasq.conf
bind-interfaces
conf-dir=/etc/dnsmasq.d
# /etc/dnsmasq.d/ecommerce.local
address=/ecommerce.local/192.168.3.13
# /etc/dnsmasq.d/database.local
address=/database.local/192.168.3.10
sudo /etc/init.d/dnsmasq restart

Sur les VMs

apt-get install resolvconf
# /etc/resolvconf/resolv.conf.d/head
nameserver 192.168.3.1

Objectif atteint !

Objectif atteint !

                        
$ git clone mon-projet.git
$ vagrant up ma-vm
$ composer install
$ stow --dir=config-dist local

$ bin/atoum && bin/behat
                        
                    

\o/

Boîte à outils

  • Initialisation de l’env de dev
  • Connexion serveurs dev, preprod, prod
  • Déploiement clefs SSH

tea-sub


#!/usr/bin/env bash
# Summary: (tea) development server
# Usage: tea dev [actions] [user]
# Help:
#   Possible actions:
#   warehouse   Users: tea (default), warehouse
#   db          Users: tea (default)
#   acs         Users: tea (default), acs
set -e

DIRNAME=`dirname $0`

connect() {
  set_color FFFFFF 7A4B0C
  ssh "$1"@tea-"$2"-pp.teaebook
  set_color FFFFFF 000000
}

# ...
                    

tea-sub

Connexion à la pre-prod

$ tea preprod db

tea-sub

Connexion à la prod

$ tea prod db

Chacun son poste de dev

  • Linux, Mac
  • IDE, Sublime Text, vim
  • VirtualBox, Docker

En plus !

  • Facilite la montée de versions
  • Mise en place d’une PIC

WIP constant

  • Correction
  • Amélioration
  • Création

Expérimenter !

  • Docker
  • PHP 5.6
  • Ruby 2.1
  • Apache → Nginx

Pas toujours parfait

L’important, c’est d’avancer

Notre env. de dév. n’est (presque)
plus un bizutage :-)

Questions ?

http://koin.github.io
@PKoin

http://blog.pascal-martin.fr
@pascal_martin

Apéro