$30 off During Our Annual Pro Sale. View Details »

Zero to Hero [en]

Zero to Hero [en]

Fully Automated Web App Setups (using Ansible and Phing) - @bephpug 2014-11-04

Christoph Lühr

November 04, 2014
Tweet

More Decks by Christoph Lühr

Other Decks in Programming

Transcript

  1. Christoph Lühr
    @chluehr / bephpug 2014-11
    Case study / Demo
    Zero to Hero
    "Fully Automated Web App Setups"

    View Slide

  2. "Automated server
    install process ==
    administrator bliss"

    View Slide

  3. "Automated server
    install process ==
    developer bliss"

    View Slide

  4. View Slide

  5. basilicom

    View Slide

  6. basilicom
    SIN
    CE
    2000

    View Slide

  7. Image source: http://www.flickr.com/photos/robby_van_moor/5702589201/ CC BY-ND 2.0

    View Slide

  8. View Slide

  9. View Slide

  10. (#)
    Internet

    View Slide

  11. (#80)
    PPY

    View Slide

  12. View Slide

  13. ?

    View Slide

  14. Project

    View Slide

  15. INSTALL.TXT

    View Slide

  16. INSTALL.md

    View Slide

  17. ➊ ➋ ➌ ➍ ➎ ➏

    View Slide

  18. View Slide

  19. FAQ

    View Slide

  20. PHP Code

    View Slide

  21. PHP-Code DB-SQL

    View Slide

  22. Code DB
    FS

    View Slide

  23. Code DB
    FS
    ...

    View Slide

  24. View Slide

  25. View Slide

  26. View Slide

  27. Code
    REQUIREMENTS

    View Slide

  28. Code
    OS + Server + Tools

    View Slide

  29. Code
    OS + Server + Tools
    ... Settings ... Versions ...

    View Slide

  30. ?

    View Slide

  31. REQUIRE.TXT

    View Slide

  32. ➊ ➋ ➌ ➍ ➎ ➏

    View Slide

  33. View Slide

  34. FAQ

    View Slide

  35. FFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFUUUU
    UUUUUUUUUUUUUUUUU
    UUUUUUUUUUUUUUUUU
    UUUUUUUUUUUUUUUUU
    UUUUUUUUUUUUUUUUU
    UU.......

    View Slide

  36. Code
    OS

    View Slide

  37. Code
    OS
    Hardware

    View Slide

  38. Code
    OS
    VM

    View Slide

  39. Services
    Code
    OS
    VM

    View Slide

  40. DNS / SMTP / ...
    Code
    OS
    VM

    View Slide

  41. ?

    View Slide

  42. View Slide

  43. FAQ
    ➊ ➋ ➌ ➍ ➎ ➏

    View Slide

  44. CODE

    View Slide

  45. Code >

    View Slide

  46. API >

    View Slide

  47. $cli >

    View Slide

  48. OneGet

    View Slide

  49. Services
    Code
    OS
    Hardware

    View Slide

  50. VM

    View Slide

  51. OS + Tools

    View Slide

  52. OS + Tools

    View Slide

  53. OS + Tools

    View Slide

  54. Project

    View Slide

  55. Services
    Google Cloud DNS

    View Slide

  56. View Slide

  57. Kassandra

    View Slide

  58. "META API"

    View Slide

  59. REST
    ...
    LOG
    APIs
    ACL

    View Slide

  60. Demo

    View Slide

  61. Demo

    View Slide

  62. $ git clone [email protected]....
    $ phing setup

    View Slide

  63. $ git clone [email protected]....
    $ phing serversetup

    View Slide

  64. $ phing serversetup
    Buildfile:build.xml
    project > serversetup:
    Create JiffyBox automatically via API (Y,N) [Y]? Y
    Enter your Kassandra-API token: 5e#XhF8tHGr9^dWffq2pDT5Q
    [echo] Generating root password
    [echo] Root password is: 2baf4503a861448ca109
    [echo] Creating JiffyBox via Kassandra API (ID/IP) - please wait ...
    [echo] JiffyBox is created, ID: 105754 IP: 134.119.20.131
    [echo] Retrieving project repository url and name via git
    [exec] [email protected]:basilicom-de/bas-test.git
    [echo] Updating ansible inventory-production file
    [echo] Updating local ssh known_hosts file

    View Slide

  65. [echo] Setting up remote host os/software via ansible,
    this will take a couple of minutes, please wait ...
    [exec] PLAY [Install LAMP Stack with PHP 5.5 and MySQL]
    [exec] TASK: [upgrade | Running apt-get update]
    [exec] TASK: [upgrade | Running apt-get upgrade]
    [exec] TASK: [common | Common software]
    [exec] changed: [134.119.20.131] => (item=python-software-properties,
    build-essential,curl,screen,vim,ntp,jpegoptim,
    pngcrush,git-core,ufw)

    View Slide

  66. [exec] TASK: [common | Set default locale]
    [exec] TASK: [ffmpeg | Download static FFMPEG binaries]
    [exec] TASK: [ffmpeg | Extract static FFMPEG binaries]
    [exec] TASK: [apache | Install Apache]
    [exec] TASK: [apache | Enable Apache2 rewrite module]
    ...
    [exec] TASK: [apache | Disable server signature]
    [exec] TASK: [apache | Disable server tokens]
    [exec] TASK: [apache | Set max request workers to 60]
    [exec] TASK: [pagespeed | Download mod_pagespeed]
    [exec] TASK: [pagespeed | Install mod_pagespeed]
    [exec] TASK: [mysql | Install MySQL server]
    [exec] TASK: [memcached | Memcached]
    [exec] TASK: [mongodb | MongoDB]

    View Slide

  67. [exec] TASK: [php | Install PHP5]
    [exec] changed: [134.119.20.131] => (item=php5-common,php5-mysqlnd,
    php5-xmlrpc,php5-mcrypt,php5-curl,php5-gd,php5-cli,
    php-pear,php5-dev,php5-imap,php5-imagick,php5-memcache,
    php5-mongo,libapache2-mod-php5)
    [exec] TASK: [php | Enable PHP5 opcode cache]
    [exec] TASK: [php | Enable PHP5 mcrypt]
    [exec] TASK: [php | Raise PHP memory Limit for Apache]
    [exec] TASK: [php | Allow short open tags for Apache PHP]
    [exec] TASK: [php | 8MB max upload size]
    [exec] TASK: [composer | Add Composer PPA]
    [exec] TASK: [composer | Install Composer]

    View Slide

  68. [exec] TASK: [shell-access | Set the hostname]
    [exec] TASK: [shell-access | Set IP in hosts file for hostname]
    [exec] TASK: [shell-access | SSH Key-Pair for www-data]
    [exec] TASK: [shell-access | Create authorized_keys file]
    [exec] TASK: [shell-access | Create ssh config file]
    [exec] NOTIFIED: [apache | restart apache2]
    [exec] NOTIFIED: [beanstalkd | restart beanstalkd]
    [exec]
    [exec] PLAY RECAP
    ********************************************************************
    [exec] 134.119.20.131 ok=59 changed=53 unreachable=0 failed=0

    View Slide

  69. [echo] Retrieving remote ssh-key for deployment
    [echo] Adding deployment ssh-key to bitbucket
    repository via Kassandra API
    [echo] Installing project on remote host via ansible/phing,
    this will take a couple of minutes, please wait ...
    [exec] TASK: [clone-git | clone Project]

    View Slide

  70. [exec] TASK: [pimcore | Pimcore setup]
    [exec] ok: [134.119.20.131] => {
    [exec] "pimcoresetup.stdout_lines": [
    [exec] "project > setup:",
    [exec] " [echo] PHING PROJECT SETUP - installing on: local "
    [exec] "project > dbcreate:",
    [exec] " [echo] Creating Database / Access - [dbcreate]",
    [exec] "project > pimcoremerge:",
    [exec] " [echo] Download and unpack pimcore distribution ",
    [exec] "project > pimcoreinstall:",
    [exec] " [echo] Installing Pimcore - [pimcoreinstall]",
    [exec] "project > configcreate:",
    [exec] " [echo] Creating set of configs in var/build",
    [exec] "project > apacheconfig:",
    [exec] " [echo] Configure Apache - [apacheconfig]",
    [exec] " [exec] Enabling site bas_pimtest.",
    [exec] " [exec] service apache2 reload",
    [exec] "project > installcron:",
    [exec] " [echo] Installing pimcore maintenance cron job",
    [exec] "BUILD FINISHED",
    [exec] ]
    [exec] }

    View Slide

  71. [echo] Creating DNS Record via
    Kassandra API:
    A bas-test.appr.info
    134.119.20.131 TTL 300
    [echo] Finally rebooting remote host
    [echo] ----------------------------------------------------------
    [echo] PHING SERVER PROJECT SETUP - DONE
    [echo] ==========================================================
    BUILD FINISHED
    Total time: 7 minutes 2.14 seconds

    View Slide

  72. Fully Automated Server Setup
    BENEFITS

    View Slide


  73. Fast

    View Slide


  74. Repeatable

    View Slide


  75. Documented

    View Slide


  76. Re-usable

    View Slide

  77. "App setup should be
    defined as code and
    needs to be alive."

    View Slide

  78. Image source: http://www.flickr.com/photos/rietje/76566707/ CC BY 2.0

    View Slide

  79. Unicode Character 'HAPPY PERSON RAISING ONE HAND' (U+1F64B)

    View Slide

  80. Thanks!
    Questions?
    Christoph Lühr
    [email protected] [email protected] @chluehr
    Slides license Attribution-NonCommercial-ShareAlike 3.0 http://creativecommons.org/licenses/by-nc-sa/3.0/

    View Slide

  81. ● Phing
    http://www.phing.info/
    ● Ansible
    http://www.ansible.com/
    ● Sample Vagrant, Phing & Ansible project setup
    http://bit.ly/basilicom-pimcore-setup-blog

    View Slide