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

Craft CMS: Beyond the Small Business; Advanced tools and configurationsCraft CMS: Beyond the Small Business; Advanced tools and configurations

Nate Iler
September 27, 2018

Craft CMS: Beyond the Small Business; Advanced tools and configurationsCraft CMS: Beyond the Small Business; Advanced tools and configurations

A high level look at DevOps with Craft CMS. We cover infrastructure architectures, local development with Docker containers, and continuous integration / delivery.

Nate Iler

September 27, 2018
Tweet

Other Decks in Technology

Transcript

  1. Beyond the Small Business;
    Advanced tools and configurations
    Nate Iler
    Flipbox Digital

    View Slide

  2. Security
    Performance
    Cost
    Reliability
    Infrastructure

    View Slide

  3. ● We owe it to our clients
    ● Protect data in transit and at rest
    ○ SSL
    ○ Encryption
    ● Managing access/policies
    ● Omit sensitive data in plain text
    Security

    View Slide

  4. ● Automate scaling
    ○ Up for high demand
    ○ Down for low demand
    ● Automate recovery
    ● Loosely coupling resources
    ● Monitoring
    Reliability

    View Slide

  5. ● Experiment
    ● Decouple with growth
    ○ Database
    ○ App
    ● Appropriate Type / Size
    ● Tune
    Performance

    View Slide

  6. ● Evaluate providers
    ● Leverage efficient services
    ● Automation
    ○ Last project as starting point
    ○ Autoscale
    ● Build -vs- Buy
    Cost

    View Slide

  7. Infrastructures of Today
    ● Expensive
    ● Physical Hardware
    ● Maintenance Staff
    ● Single point of failure
    Datacenter
    On Premise
    Cloud / Iaas
    Infrastructure as
    Code

    View Slide

  8. Traditional Development Flow
    local dev
    development
    staging
    UAT / ... production

    View Slide

  9. Infrastructure as Code Flow
    local dev development / staging / production

    View Slide

  10. Evolution of Local Development
    Cowboy
    Native / MAMP
    Virtualization
    Containers

    View Slide

  11. ● Consistency
    ● Disposable
    ● Configurable
    ● Lightweight
    docker-compose.yml
    Developing (locally) with Docker

    View Slide

  12. Evolution of your Infrastructure

    View Slide

  13. only for you

    View Slide

  14. under 1,000 users

    View Slide

  15. 1,000s to less than 10,000 users

    View Slide

  16. 10,000s to 500,000k users

    View Slide

  17. > 500,000 users

    View Slide

  18. Auto-scaling

    View Slide

  19. Impact on Craft
    Sessions
    Logging Assets
    Queue Cache

    View Slide

  20. Centralized Logging
    Email / SMS
    Analysis
    Log Services

    View Slide

  21. Assets
    Amazon S3, Google Cloud
    Storage, Rackspace Cloud
    Files, DigitalOcean Spaces,
    fortrabbit Object Storage
    Storage Volume Providers
    $bucketBaseName = 'assets.bucket';
    $baseS3Url = 'https://s3.amazonaws.com/';
    $baseCDNUrl = 'https://cdn.your-site.com/';
    $cloudFrontId = 'XXXXXXX';
    return [
    '*' => [
    'gallery' => [
    'bucket' => 'test.' . $bucketBaseName
    ,
    'hasUrls' => true,
    'url' => $baseS3Url . 'test.' . $bucketBaseName . '/',
    'subfolder' => 'gallery',
    'region' => 'us-east-1',
    'expires' => '1 months'
    ]
    ],
    'production' => [
    'gallery' => [
    'bucket' => $bucketBaseName
    ,
    'url' => $baseCDNUrl . '/',
    'cfDistributionId' => $cloudFrontId
    ]
    ]
    ];
    config/volumes.php

    View Slide

  22. Session Management
    config/app.php
    return [
    'components' => [
    'redis' => [
    'class' => yii\redis\Connection::class,
    'hostname' => getenv('REDIS_HOSTNAME')
    ],
    'session' => [
    'class' => flipbox\craft\session\Redis::class,
    'keyPrefix' => 'session_'
    ]
    ]
    ];
    composer require flipboxfactory/craft-session-redis
    2)
    1)

    View Slide

  23. Cache
    config/app.php
    return [
    'components' => [
    'redis' => [
    'class' => yii\redis\Connection::class,
    'hostname' => getenv('REDIS_HOSTNAME')
    ],
    'cache' => [
    'class' => yii\redis\Cache::class
    ]
    ]
    ];
    ApcCache, ArrayCache, DbCache,
    DummyCache, FileCache, MemCache,
    WinCache, XCache, ZendDataCache
    Native Cache Providers

    View Slide

  24. Queues
    File, Db, Redis, RabbitMQ, AMQP Interop,
    Beanstalk, Gearman, AWS SQS
    config/app.php
    Native Queue Providers
    return [
    'components' => [
    'queue' => [
    'class' => yii\queue\sqs\Queue::class,
    'url' => getenv('SQS_URL'),
    'region' => getenv('SQS_REGION')
    ]
    ]
    ];

    View Slide

  25. View Slide

  26. View Slide

  27. Pipeline: Project
    PASS FAIL
    artifact
    Only perform deployment from
    master/develop branches
    git push
    via webhook
    Continuous
    Integration
    Continuous
    Delivery
    deployment provider

    View Slide

  28. Pipeline: Plugin
    PASS FAIL
    /docs
    Only deploy docs
    from master branch
    git push
    via webhook
    Continuous
    Integration
    Continuous
    Delivery

    View Slide

  29. View Slide

  30. 4)
    3)
    2)
    1) Install Docker: https://docs.docker.com/install/
    composer create-project flipboxlabs/craft
    make craft-setup
    make test
    Example Project Testing
    starts container, begins craft setup
    run all tests (via codeception)
    create new project (forked craftcms/craft)

    View Slide

  31. Thank You!
    We know; this topic is vast.
    Join us as we take a closer look at the topics covered in this presentation.
    (click to view this series)
    DevOps with Craft CMS

    View Slide

  32. Resources
    ● 1Password
    ● LastPass
    ● Let’s Encrypt
    ● AWS Certificate Manager
    ● OpenVPN
    ● AWS Auto Scaling
    ● AWS Auto Recovery
    ● Service-oriented architecture

    View Slide

  33. Resources
    ● Terraform (IaC)
    ● CloudFormation (IaC)
    ● Docker
    ● Docker for Craft (our starter project)
    ● Scaling Up to Your First 10 Million Users
    ● Shootout at the Local Dev Corral
    ● Containers on AWS
    ● AWS Well-Architected Framework

    View Slide

  34. Resources
    ● Codeception Testing
    ● AWS Instance Types
    ● Splunk
    ● Papertrail
    ● Elastic (Beats, Logstash / Kibana / Elasticsearch)
    ● Travis CI
    ● Scrutinizer CI
    ● Jenkins

    View Slide