@genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production...

29
Réduire les risques Du stress à la tranquillité @genezys @gmonserand

Transcript of @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production...

Page 1: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Réduire les risquesDu stress à la tranquillité

@genezys @gmonserand

Page 2: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

L’apocalypse(avec un tout petit peu d’exagération)

Page 3: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

100% docker-compose : dev + test + production

Rails, builder android, gitlab, gitlab-ci, backup, vpn

Capistrano → docker-compose + custom script pour rails

Page 4: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

jwilder/nginx-proxy

Page 5: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

jwilder/nginx-proxy80, 443

www (jekyll+nginx)80

dlcenter (sinatra)80

jwilder/nginx-proxy

Page 6: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Un conteneur par domaine$ docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Ports}}"NAMES IMAGE PORTSwww_app_1 www_app 80/tcpdlcenter_app_1 dlcenter_app 80/tcpnginxproxy_app_1 nginxproxy_app 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp

Page 7: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Dockerfile “Site perso jekyll”from nginxADD _site /usr/share/nginx/html/

Page 8: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

docker-compose.ymlapp: restart: unless-stopped build: . environment:

VIRTUAL_HOST: simkim.net,www.simkim.net,www.localhost,www.${USER}.tns

Page 9: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

jwilder/nginx-proxy

bo.touch-sell.net web.touch-sell.net doc.cust.touch-sell.net

Serveur Production

jwilder/nginx-proxy

bo.server1.tns web.server1.tns appomatic.tns

Serveur Dev

jwilder/nginx-proxy

bo.localhostbo.vincent.tns

web.localhostweb.vincent.tns

appomatic.localhostappomatic.vincent.tns

Développeur

Chez Touch & Sell

Page 10: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Configuration DNSzone tns

*.gauthier CNAME gauthier

*.vincent CNAME vincent

*.armand CNAME armand

*.server1 CNAME server1

zone localhost

* A 127.0.0.1

D’autres services existent →

myapp.192.168.0.1.xip.io

Page 11: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

JrCs/docker-letsencrypt-nginx-proxy-companion

Page 12: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Let’s encrypt

Génération automatique et gratuite de certificats SSL reconnus par les navigateurs

=Plus aucune excuse

Page 13: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Let’s encrypt

Oui mais …

… j’ai plusieurs applications

… mon port est déjà bindé, le client lets encrypt ne fonctionne pas

Page 14: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Vous me faites répéter ...

PLUS AUCUNE EXCUSE !!

Page 15: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

docker-compose.ymlapp: restart: unless-stopped image: jwilder/nginx-proxy ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/tmp/docker.sock - nginxproxy_certs:/etc/nginx/certs - nginxproxy_vhosts:/etc/nginx/vhost.d - nginxproxy_html:/usr/share/nginx/htmlletsencrypt: restart: unless-stopped image: jrcs/letsencrypt-nginx-proxy-companion volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - nginxproxy_vhosts:/etc/nginx/vhost.d - nginxproxy_certs:/etc/nginx/certs:rw - nginxproxy_html:/usr/share/nginx/html environment: - NGINX_PROXY_CONTAINER=nginxproxy_app_1

Page 16: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

docker-compose.ymlapp: restart: unless-stopped build: . environment:

VIRTUAL_HOST: simkim.net,www.simkim.net,www.localhost,www.${USER}.tnsLETSENCRYPT_HOST: simkim.net,www.simkim.netLETSENCRYPT_EMAIL: ***@simkim.net

Page 17: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Tester sa configuration SSLhttps://www.ssllabs.com/ssltest/analyze.html?d=simkim.net&latest

Page 18: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

zero downtime deployment

Page 19: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

ImmutabilitéImmutabilité est incompatible avec le rechargement “In process”

État final = docker-compose up

Page 20: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Attention1 seul noeud

Nous sommes encore en train d’apprendre et d'expérimenter

L’écosystème évolue vite

Page 21: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

config/environments/staging.envvarsexport DOCKER_HOST=tcp://server1.tns:2376export DOCKER_TLS_VERIFY=1export COMPOSE_FILE=docker-compose.prod.ymlexport COMPOSE_PROJECT_NAME=stagingexport TASBO_HOST=staging.server1.tnsexport TASBO_PROTOCOL=httpexport PS1="$PS1\e[1;4;7;38;5;208m!!! STAGING !!!\e[0m \$ "

Page 22: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

bin/deploy-appdocker-compose builddocker-compose run --rm app sh -c "bin/bundle check || bin/bundle install"docker-compose run --rm app bin/rake assets:precompile

TIME="Down time: %E" time bash -c “docker-compose run --rm web touch maintenance/enabled # Activation de la page de maintenance sur le front

docker-compose up -d app… while+sleep+curl : Attente du lancement effectif

docker-compose run --rm web rm maintenance/enabled # Suppression de la page de maintenance

“ → 19 secondes de downtime

Legacy → Ancienne application android wipe les données si json non valide (ex: page maintenance)

Page 23: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

bin/deploy-fast-appdocker-compose builddocker-compose run --rm app rake db:abort_if_pending_migrations # On stoppe s’il y a des migrationsdocker-compose run --rm app sh -c "bin/bundle check || bin/bundle install"docker-compose run --rm app bin/rake assets:precompile

docker-compose run … une nouvelle instance temporaire de l’app… while+sleep+curl : Attente du lancement effectifdocker-compose exec … sed + nginx -s reload pour pointer sur la nouvelle instance temporaire

docker-compose up … pour recréer une nouvelle instance de l’application… while+sleep+curl : Attente du lancement effectifdocker-compose exec … sed + nginx -s reload pour pointer sur la nouvelle instance

… Arrêt de l’instance temporaire

Page 24: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

simkim/tcpdam

Page 25: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Objectifs

Retenir pendant quelque temps les connexions tcp entrantes

Indépendant de la stack technique

Indépendant du protocole

Page 26: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

docker-compose.yml

tcpdam -d # Lance le barrage

Ctrl-C # Ouvre le barrage, attend qu’il se vide

dam:image: simkim/tcpdamports:- "9999:9999"environment:

TCPDAM_REMOTE_ADDRESS: "localhost:80"TCPDAM_DEBUG: "1"

Page 27: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

démo !

Page 28: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Encore jeuneDémarré il y a deux semaines

Intégré à notre process de déploiement rails d’ici la fin de l’été

Juste entre le premier switch de serveur nginx : tcpdam + rake db:migrate

Page 29: @genezys @gmonserand Du stress à la tranquillité · 100% docker-compose : dev + test + production Rails, builder android, gitlab, gitlab-ci, backup, vpn Capistrano → docker-compose

Disponible sur githubTester

Remonter les problèmes

Challenger la scalabilité

Demander des fonctionnalités