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é
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 :-)
Apéro