Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deploy je applicatie als een pakketje

Deploy je applicatie als een pakketje

Mensen beweren vaak dat PHP zo makkelijk is, omdat het deployen van je applicatie zo eenvoudig is. Dat klinkt alsof het nooit mis gaat, helaas weten we wel anders. Iedereen heeft wel eens een gebroken deployment meegemaakt.

In deze talk ga ik in op de problemen die je mogelijk tegenkomt tijdens het deployen van een applicatie. Uiteindelijk kijken we hoe je een applicatie als een postpakket zou kunnen verpakken en deployen.

C347affc11bc313dc3da2398936d305a?s=128

Willem-Jan Zijderveld

October 15, 2016
Tweet

Transcript

  1. Deploy je applicatie als een pakketje @willemjanz joind.in/talk/ddef8

  2. Willem-Jan Zijderveld @willemjanz github.com/wjzijderveld

  3. Vragen stellen mag altijd, niet alleen op het eind!

  4. Deployment With the usual disclaimer

  5. It works Dus waarom zou ik iets veranderen?

  6. Kan je deployen wanneer je maar wilt?

  7. Ben je soms bang om te deployen?

  8. "We kunnen niet deployen, want Jeroen is er niet!"

  9. Merken gebruikers er iets van als je deployed?

  10. Stuff breaks Of je het nu leuk vindt of niet

  11. Deployments gaan soms mis • Network issues • Migraties •

    Configuratie problemen
  12. Downtime

  13. Omzet mislopen

  14. Boze gebruikers

  15. Gebruikers verliezen hun vertrouwen

  16. Angst Om te deployen

  17. Deployments worden uitgesteld

  18. Speciaal tijd reserveren om te deployen

  19. Deployen buiten kantoortijden

  20. Oke, dus wat kunnen we verbeteren?

  21. Minder mensen

  22. Zonder angst

  23. Vaker

  24. 0 downtime

  25. Herhaalbaar

  26. Laten we beginnen

  27. Minder mensen Automatiseer je deployment naar een enkel commando

  28. Mogelijk process Migrate database Update code on server (FTP, SSH)

    Update code dependencies (composer,npm,bower) Clear cache Reload webserver
  29. Voorbeeld: ervoor

  30. Voorbeeld: er na

  31. Zonder angst Zorg dat je niet bang bent om te

    deployen
  32. Testen

  33. Serieus! Test je code!

  34. Nieuwe code hoort tests te hebben

  35. Legacy code? Test de belangrijkste onderdelen - Unit tests voor

    domein logica - Functionele tests - Monitor productie
  36. Continuous Integration

  37. Vaker

  38. Kleinere wijzigingen

  39. Projecten die 6 maanden duren Elke week iets opleveren Niet

    wachten om iets te deployen totdat alles afgerond en klaar is
  40. Branches die maar kort bestaan • Geeft mogelijkheid tot snel

    ontwikkelen • Voorkomt grote merge conflicten • Versnelt ontwikkeltijd over het algemeen
  41. Feature toggles

  42. Voorbeeld: recommendations

  43. Voorbeeld: recommendations

  44. Geef specifieke gebruikers toegang

  45. Conditionele toggle Gebruik de huidige context om de te controleren

    of de toggle actief is
  46. Voorbeeld: Conditionele toggle

  47. Example: Conditional toggle

  48. Example: Conditional toggle

  49. Feature management GUI API Redis http://labs.qandidate.com/blog/2014/08/19/open-sourcing-our-feature-toggle-api-and-ui/

  50. Vaker - Kleinere wijzigingen - Niet wachten tot alles volledig

    af is - Gebruik feature toggles
  51. 0 downtime

  52. Bereid je deployment voor

  53. Deployment Webserver Application - version 1

  54. Deployment Webserver Application - version 1 Application - version 2

  55. Deployment Webserver Application - version 1 Application - version 2

  56. Deployment Webserver Application - version 1

  57. Deployment Webserver Application - version 1 Install code

  58. Deployment Webserver Application - version 1 Install code Migrations

  59. Deployment Webserver Application - version 1 Install code Migrations Warmup

    cache
  60. Deployment Webserver Application - version 1 Install code Migrations Warmup

    cache Application - version 2
  61. Deployment Webserver Application - version 1 Install code Migrations Warmup

    cache Application - version 2
  62. Voorbeeld

  63. 0 downtime - Raak de huidige versie niet aan -

    Stop als er iets misgaat tijdens deployen van de nieuwe versie - Maak je migratie backwards compatible
  64. Maak er een pakketje van

  65. Herhaalbaar

  66. Onafhankelijk van je omgeving

  67. Het pakket Op zijn simpelst: gewoon een zip

  68. Onafhankelijk

  69. Herbruikbaar On all environments

  70. Een aantal uitdagingen

  71. Configuratie

  72. None
  73. En wat doen we met staging en acceptatie?

  74. Geef de controle aan de omgeving waar de applicatie draait

  75. None
  76. None
  77. None
  78. None
  79. PHP dot env https://github.com/vlucas/phpdotenv

  80. Laad je environment waarden uit .env

  81. Filesystem

  82. None
  83. Flysystem Abstract the filesystem - Makes it easier to test

    - Makes your code independent of the filesystem, f.e.: - Production uses S3 - Development uses local files
  84. None
  85. None
  86. None
  87. None
  88. None
  89. Het bestand staat nu op S3: bucket/avatars/filename.ext

  90. Het bouwen van het pakket - Herbruikbaar - Vermijd afhankelijkheden

    details van externe bronnen - Geef controle aan de applicatie omgeving
  91. Samenvatting - Minder handmatige stappen, vermijd mensen waar mogelijk -

    Niet bang zijn: test je code! - Vaker deployen, niet meer uitstellen! - Geen downtime meer tijdens deployment - Een deployment moet herhaalbaar zijn
  92. Nog meer vragen? @willemjanz Feedback altijd welkom! joind.in/talk/ddef8