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.

Willem-Jan Zijderveld

October 15, 2016
Tweet

More Decks by Willem-Jan Zijderveld

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. Deployment
    With the usual disclaimer

    View Slide

  5. It works
    Dus waarom zou ik iets veranderen?

    View Slide

  6. Kan je deployen wanneer
    je maar wilt?

    View Slide

  7. Ben je soms bang om te deployen?

    View Slide

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

    View Slide

  9. Merken gebruikers er iets van als je
    deployed?

    View Slide

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

    View Slide

  11. Deployments gaan
    soms mis ●
    Network issues

    Migraties

    Configuratie problemen

    View Slide

  12. Downtime

    View Slide

  13. Omzet mislopen

    View Slide

  14. Boze gebruikers

    View Slide

  15. Gebruikers verliezen hun
    vertrouwen

    View Slide

  16. Angst
    Om te deployen

    View Slide

  17. Deployments worden uitgesteld

    View Slide

  18. Speciaal tijd reserveren om te deployen

    View Slide

  19. Deployen buiten kantoortijden

    View Slide

  20. Oke, dus wat kunnen we
    verbeteren?

    View Slide

  21. Minder mensen

    View Slide

  22. Zonder angst

    View Slide

  23. Vaker

    View Slide

  24. 0 downtime

    View Slide

  25. Herhaalbaar

    View Slide

  26. Laten we beginnen

    View Slide

  27. Minder mensen Automatiseer je deployment naar een
    enkel commando

    View Slide

  28. Mogelijk process
    Migrate database
    Update code on
    server (FTP, SSH)
    Update code
    dependencies
    (composer,npm,bower)
    Clear cache Reload webserver

    View Slide

  29. Voorbeeld: ervoor

    View Slide

  30. Voorbeeld: er na

    View Slide

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

    View Slide

  32. Testen

    View Slide

  33. Serieus! Test je code!

    View Slide

  34. Nieuwe code hoort tests te hebben

    View Slide

  35. Legacy code?
    Test de belangrijkste onderdelen
    - Unit tests voor domein logica
    - Functionele tests
    - Monitor productie

    View Slide

  36. Continuous Integration

    View Slide

  37. Vaker

    View Slide

  38. Kleinere wijzigingen

    View Slide

  39. Projecten die 6
    maanden duren
    Elke week iets opleveren
    Niet wachten om iets te deployen
    totdat alles afgerond en klaar is

    View Slide

  40. Branches die maar kort bestaan

    Geeft mogelijkheid tot snel ontwikkelen

    Voorkomt grote merge conflicten

    Versnelt ontwikkeltijd over het algemeen

    View Slide

  41. Feature toggles

    View Slide

  42. Voorbeeld: recommendations

    View Slide

  43. Voorbeeld: recommendations

    View Slide

  44. Geef specifieke
    gebruikers toegang

    View Slide

  45. Conditionele
    toggle
    Gebruik de huidige context om de
    te controleren of de toggle actief
    is

    View Slide

  46. Voorbeeld: Conditionele toggle

    View Slide

  47. Example: Conditional toggle

    View Slide

  48. Example: Conditional toggle

    View Slide

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

    View Slide

  50. Vaker - Kleinere wijzigingen
    - Niet wachten tot alles
    volledig af is
    - Gebruik feature toggles

    View Slide

  51. 0 downtime

    View Slide

  52. Bereid je
    deployment voor

    View Slide

  53. Deployment
    Webserver
    Application - version 1

    View Slide

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

    View Slide

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

    View Slide

  56. Deployment
    Webserver
    Application - version 1

    View Slide

  57. Deployment
    Webserver
    Application - version 1 Install code

    View Slide

  58. Deployment
    Webserver
    Application - version 1 Install code
    Migrations

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  62. Voorbeeld

    View Slide

  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

    View Slide

  64. Maak er een
    pakketje van

    View Slide

  65. Herhaalbaar

    View Slide

  66. Onafhankelijk van je
    omgeving

    View Slide

  67. Het pakket Op zijn simpelst: gewoon een zip

    View Slide

  68. Onafhankelijk

    View Slide

  69. Herbruikbaar
    On all environments

    View Slide

  70. Een aantal uitdagingen

    View Slide

  71. Configuratie

    View Slide

  72. View Slide

  73. En wat doen we met
    staging en acceptatie?

    View Slide

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

    View Slide

  75. View Slide

  76. View Slide

  77. View Slide

  78. View Slide

  79. PHP dot env
    https://github.com/vlucas/phpdotenv

    View Slide

  80. Laad je environment waarden uit .env

    View Slide

  81. Filesystem

    View Slide

  82. View Slide

  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

    View Slide

  84. View Slide

  85. View Slide

  86. View Slide

  87. View Slide

  88. View Slide

  89. Het bestand staat nu op S3:
    bucket/avatars/filename.ext

    View Slide

  90. Het bouwen van
    het pakket
    - Herbruikbaar
    - Vermijd afhankelijkheden details
    van externe bronnen
    - Geef controle aan de
    applicatie omgeving

    View Slide

  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

    View Slide

  92. Nog meer vragen?
    @willemjanz
    Feedback altijd welkom! joind.in/talk/ddef8

    View Slide