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 full-size slide

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

    View full-size slide

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

    View full-size slide

  4. Deployment
    With the usual disclaimer

    View full-size slide

  5. It works
    Dus waarom zou ik iets veranderen?

    View full-size slide

  6. Kan je deployen wanneer
    je maar wilt?

    View full-size slide

  7. Ben je soms bang om te deployen?

    View full-size slide

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

    View full-size slide

  9. Merken gebruikers er iets van als je
    deployed?

    View full-size slide

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

    View full-size slide

  11. Deployments gaan
    soms mis ●
    Network issues

    Migraties

    Configuratie problemen

    View full-size slide

  12. Omzet mislopen

    View full-size slide

  13. Boze gebruikers

    View full-size slide

  14. Gebruikers verliezen hun
    vertrouwen

    View full-size slide

  15. Angst
    Om te deployen

    View full-size slide

  16. Deployments worden uitgesteld

    View full-size slide

  17. Speciaal tijd reserveren om te deployen

    View full-size slide

  18. Deployen buiten kantoortijden

    View full-size slide

  19. Oke, dus wat kunnen we
    verbeteren?

    View full-size slide

  20. Minder mensen

    View full-size slide

  21. Zonder angst

    View full-size slide

  22. Laten we beginnen

    View full-size slide

  23. Minder mensen Automatiseer je deployment naar een
    enkel commando

    View full-size slide

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

    View full-size slide

  25. Voorbeeld: ervoor

    View full-size slide

  26. Voorbeeld: er na

    View full-size slide

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

    View full-size slide

  28. Serieus! Test je code!

    View full-size slide

  29. Nieuwe code hoort tests te hebben

    View full-size slide

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

    View full-size slide

  31. Continuous Integration

    View full-size slide

  32. Kleinere wijzigingen

    View full-size slide

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

    View full-size slide

  34. Branches die maar kort bestaan

    Geeft mogelijkheid tot snel ontwikkelen

    Voorkomt grote merge conflicten

    Versnelt ontwikkeltijd over het algemeen

    View full-size slide

  35. Feature toggles

    View full-size slide

  36. Voorbeeld: recommendations

    View full-size slide

  37. Voorbeeld: recommendations

    View full-size slide

  38. Geef specifieke
    gebruikers toegang

    View full-size slide

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

    View full-size slide

  40. Voorbeeld: Conditionele toggle

    View full-size slide

  41. Example: Conditional toggle

    View full-size slide

  42. Example: Conditional toggle

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  45. Bereid je
    deployment voor

    View full-size slide

  46. Deployment
    Webserver
    Application - version 1

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  49. Deployment
    Webserver
    Application - version 1

    View full-size slide

  50. Deployment
    Webserver
    Application - version 1 Install code

    View full-size slide

  51. Deployment
    Webserver
    Application - version 1 Install code
    Migrations

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  55. 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 full-size slide

  56. Maak er een
    pakketje van

    View full-size slide

  57. Onafhankelijk van je
    omgeving

    View full-size slide

  58. Het pakket Op zijn simpelst: gewoon een zip

    View full-size slide

  59. Onafhankelijk

    View full-size slide

  60. Herbruikbaar
    On all environments

    View full-size slide

  61. Een aantal uitdagingen

    View full-size slide

  62. Configuratie

    View full-size slide

  63. En wat doen we met
    staging en acceptatie?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  66. Laad je environment waarden uit .env

    View full-size slide

  67. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

  70. 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 full-size slide

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

    View full-size slide