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

Backing up with Laravel (PHPworld)

Backing up with Laravel (PHPworld)

Freek Van der Herten

November 14, 2016
Tweet

More Decks by Freek Van der Herten

Other Decks in Technology

Transcript

  1. Backing up 

    with 

    Laravel

    View full-size slide

  2. About me
    Freek Van der Herten
    Partner & developer at SPATIE
    @freekmurze
    https://murze.be

    View full-size slide

  3. About me
    phpantwerp.be
    Dries Vints
    @driesvints
    Frederick Vanbrabant
    @TheEdonian

    View full-size slide

  4. Since 2003
    Websites, applications and webshops
    Team
    4 developers, 1 manager
    Specialization
    Laravel development

    View full-size slide

  5. OPEN SOURCE SOFTWARE

    View full-size slide

  6. Open source software
    We use a lot of it
    Nginx, Laravel, Ubuntu, Elasticsearch, Memcached, Redis,
    Beanstalkd, MySQL, Composer, Glide, Homestead, Flysystem,
    Fractal, Carbon, PHPUnit, NPM, React, jQuery, Java, SSH, Sequel
    Pro, BackupPC …
    Basically everything listed in composer.json and package.json

    View full-size slide

  7. ± 90 packages on Packagist
    Laravel, Framework agnostic PHP
    + 1 200 000 downloads in total, growing 200 000 a
    month
    We create a lot of it
    Open source software

    View full-size slide

  8. http://github-awards.com/users?type=world&language=php
    Open source software

    View full-size slide

  9. learning
    forced to write documentation an tests
    showing the quality of our work
    eat our own dogfood
    Benefits
    Open source software

    View full-size slide

  10. Laravel Permission
    Laravel Analytics
    Laravel Reponsecache
    Laravel Medialibrary
    Laravel Fractal
    Open source software

    View full-size slide

  11. Associate users with roles and permissions
    Laravel Permission
    $role = Role::create(['name' => 'writer']);

    $role->givePermissionTo('edit articles');

    $user->assignRole('writer');

    $user->can('edit articles’);

    View full-size slide

  12. Retrieve data from Google Analytics
    Laravel Analytics
    Analytics::fetchMostVisitedPages();
    Analytics::fetchVisitorsAndPageViews();

    Analytics::getTopReferrers();

    View full-size slide

  13. Speed up your application 

    by caching the entire response
    Laravel Responsecache
    RESPONSE CACHE
    REQUESTS
    APP
    1
    2

    View full-size slide

  14. Associate files with Eloquent Models
    Laravel Medialibrary
    $newsItem->addMedia($file)
    ->toCollection('images');

    $newsItem->getMedia('images')->first()->getUrl();

    $newsItem->getMedia('images')->first()->getUrl('thumb');


    $newsItem->addMedia($bigFile)
    ->toCollectionOnDisk('downloads', 's3');

    View full-size slide

  15. https://spatie.be/opensource/laravel

    View full-size slide

  16. LET’S TALK BACKUPS

    View full-size slide

  17. There is no 

    one size fits all solution
    for backups

    View full-size slide

  18. Small sites
    Shared hosting
    Backups by hosting provider
    Did not do anything regarding backups ourselves
    Hosting
    Up until a few year ago

    View full-size slide

  19. Bigger applications
    Learned basic server management through
    resources like serversforhackers.com
    Digital Ocean
    Forge / Ansible
    Hosting
    How we are currently doing it

    View full-size slide

  20. HORROR STORIES

    View full-size slide

  21. Horror Story #1
    Earlier today, our Cloud Operations team was alerted to some
    performance issues affecting the physical server that hosts your droplet.
    … The damage was serious enough that this droplet was lost and not able
    to be restored.
    One fine morning I got this mail from Digital Ocean
    Full story: https://murze.be/2016/02/today-digitalocean-lost-our-entire-server/

    View full-size slide

  22. Horror Story #2
    This message is a follow-up to our previous emails. Despite the very best
    efforts of our engineering and datacenter operations teams, unfortunately
    the host machine that your cloud server resides on was not able to be
    recovered. At this point, there is complete data loss on the server.
    Horror can occur everywhere. A mail from Rackspace:
    Source: https://news.ycombinator.com/item?id=3982571

    View full-size slide

  23. Ok, I’ll just use

    the backup service 

    from my cloud provider

    View full-size slide

  24. Horror Story #3

    View full-size slide

  25. Horror Story #3

    View full-size slide

  26. Relying on DO backups 

    is not enough!
    Only weekly snapshots
    Potentially a lot of data could get lost
    All the backups in the same datacenter
    If data center is down backups can’t be accessed or restored

    View full-size slide

  27. DIY: A bash script
    Hosted service: https://ottomatik.io/
    Open source: BackupPC, Bacula
    Solutions
    Do not put your eggs in one basket

    View full-size slide

  28. https://serversforhackers.com/video/backup-to-s3 interface
    Dumps the database with mysqldump
    Uploads dump + files using was cli tool to S3
    Use cron to frequently run script
    Downside: no notifications when something goes wrong


    A bash script

    View full-size slide

  29. Backups as a service
    Not free
    Easy to use interface
    Bring your own storage
    Ottomatik.io

    View full-size slide

  30. Open source software
    Installed onto a control server
    SSH’s into servers to be backed up
    Uses hard links to save disk space
    Some system administration knowledge is required to setup up
    BackupPC SERVERS
    BackupPC
    SSH

    View full-size slide

  31. LARAVEL BACKUP

    View full-size slide

  32. Backup files and databases to one or more filesystems
    Cleanup old backups
    Sending notifications
    Easily installed into any Laravel application
    Laravel Backup

    View full-size slide

  33. Backup files & databases
    FILES
    DATABASE
    SERVER
    S3
    DROPBOX
    DB DUMP
    .ZIP
    .SQL

    View full-size slide

  34. Backups use a lot of storage
    Artisan task to clean up old backups
    Fully configurable
    Will never delete the youngest backup
    Grandfather-father-son rotation scheme
    Cleanup old backups

    View full-size slide

  35. Grandfather-father-son
    rotation scheme
    FEW TIMES
    A DAY
    DAILY (16)
    WEEKLY (8)
    MONTHLY (4)
    YEARLY(2)
    KEEP

    EVERYTHING
    KEEP DAILY BACKUPS
    KEEP WEEKLY BACKUPS
    KEEP MONTHLY BACKUPS
    KEEP YEARLY BACKUPS

    View full-size slide

  36. Detects when no backups were made in a certain amount of days
    Detects if there is too much storage used
    Fully configurable
    Monitor backups

    View full-size slide

  37. On (un)successful events (backup failed, youngest backup is too
    old, backup uses too much storage …)
    Fully configurable
    Mail, Slack, Telegram, Pushover, …
    https://github.com/laravel-notification-channels
    Sending notifications

    View full-size slide

  38. Your Laravel app may break
    Server may be down
    Install the package in a Laravel app on a separate server
    Monitor the backups of all your apps from there
    Monitoring best practices

    View full-size slide

  39. Monitoring best practices
    APPS
    BACKUPS
    MONITOR

    View full-size slide

  40. Install a Laravel app on the same server
    Point the configuration the the database/directories you which to
    backup
    Profit!
    Backing up a non Laravel app

    View full-size slide

  41. Backup to multiple filesystems
    Get notified when something goes wrong
    Cleans up older backups
    Easy installation
    Cost: one postcard
    Benefits

    View full-size slide

  42. Drawbacks
    Only use this for small to medium sized apps
    Can consume quite a bit a of disk space while backing up
    Application has credentials to access the backups
    No restore options

    View full-size slide

  43. https://docs.spatie.be/laravel-backup

    View full-size slide

  44. Version 4
    PHP 7.0 / Laravel 5.3
    Laravel 5.3’s native notification capabilities
    Version 3:
    PHP 5.6 / Laravel 5.1
    Custom notification system: Mail, Log, Slack, Pushover,
    Telegram
    Requirements

    View full-size slide

  45. Do not rely solely on backups of your service provider
    Take care of backups yourself as well
    Many options available both free and paid
    Laravel Backup can help you out (cost: one postcard)
    Summary

    View full-size slide

  46. Thank you!
    https://speakerdeck.com/freekmurze/backing-up-with-laravel-phpworld
    https://joind.in/talk/2acb6
    http://lanyrd.com/2016/phpworld/sfkfrg/
    https://spatie.be/opensource
    https://murze.be
    https://murze.be/newsletter/

    View full-size slide