WordCamp Cologne - WordPress auf SPEED

Jan Löffler
Jan LöfflerCTO at WebPros (cPanel, Plesk, WHMCS)
WordPress auf
SPEED
WordCamp Cologne, November 18th 2017 Jan Löffler, CTO Plesk
Sebastian Vettel
WordCamp Cologne - WordPress auf SPEED
WordCamp Cologne - WordPress auf SPEED
Kann
WordPress
auch schnell?
Usain Bolt Katy Perry Snoop Dogg LL Cool J
Kim Kardashian The Rolling Stones Sylvester Stallone Mötley Crüe
Beyoncé Justin Bieber Justin Timberlake Alanis Morissette
Usain Bolt Katy Perry Snoop Dogg LL Cool J
Kim Kardashian The Rolling Stones Sylvester Stallone Mötley Crüe
Beyoncé Alanis MorissetteJustin Bieber
TechCrunch Metro The New Yorker BBC America
MTV News The Official Star Wars Blog Sony Music Facebook Newsroom
Time.com CNN UPS Mozilla Blog
High Traffic Sites???
#SPEE
D
NEED
FOR
SPEED
WordCamp Cologne - WordPress auf SPEED
jan-loeffler.de
jan-loeffler.de
MYSQL
Server
Load-
Balancer
jan-loeffler.de
MYSQL
Server
Load-
Balancer
File
Storage
jan-loeffler.de
MYSQL
Server
Load-
Balancer
File
Storage
CDN
MYSQL
Server
Easy-peasy, oder?
DEPLOYMEN
T
WordCamp Cologne - WordPress auf SPEED
doubled to 30%
http://www.rightscale.com/blog/cloud-industry-insights/cloud-computing-trends-2016-state-cloud-survey
jan-loeffler.de
Modern
Web-Development
2017
IMMUTABLE
INFRASTRUCTUR
E
IMMUTABLE STACKS
ELB myapp-v1
jan-loeffler.de
EC2
+ Docker
EC2
+ Docker
EC2
+ Docker
100%
IMMUTABLE STACKS
ELB myapp-v1
EC2
+ Docker
EC2
+ Docker
EC2
+ Docker
ELB myapp-v2
EC2
+ Docker
EC2
+ Docker
jan-loeffler.de
90% 10%
IMMUTABLE STACKS
ELB myapp-v1
EC2
+ Docker
EC2
+ Docker
EC2
+ Docker
ELB myapp-v2
EC2
+ Docker
EC2
+ Docker
jan-loeffler.de
0% 100%
APP INSTANCE
VM (EC2)
Basis Image (AMI)
Docker Container
Application
✓ VPC
✓ Security
Groups
✓ AutoScaling
✓ CloudWatch
✓ CloudFront
✓ Route53
✓ Docker Runtime
✓ Logging
✓ Monitoring
✓ Security config
✓ Debian
✓ Nginx
✓ php7-fpm
✓ NewRelic
Website
WordCamp Cologne - WordPress auf SPEED
WordCamp Cologne - WordPress auf SPEED
AWS
API
Docker
Registry
docker pull
docker push
AMI
THE WISH
THE REALITY
$ accept-vpc-peering-connection$
$ allocate-address$
$ allocate-hosts$
$ assign-private-ip-addresses$
$ associate-address$
$ associate-dhcp-options$
$ associate-route-table$
$ attach-classic-link-vpc$
$ attach-internet-gateway$
$ attach-network-interface$
$ attach-volume$
$ attach-vpn-gateway$
$ authorize-security-group-egress$
$ authorize-security-group-ingress$
$ bundle-instance$
$ cancel-bundle-task$
$ cancel-conversion-task$
$ cancel-export-task$
$ cancel-import-task$
$ cancel-reserved-instances-listing$
$ cancel-spot-fleet-requests$
$ cancel-spot-instance-requests$
$ confirm-product-instance$
$ copy-image$
$ copy-snapshot$
$ create-customer-gateway$
$ create-dhcp-options$
$ create-flow-logs$
$ create-image$
$ create-instance-export-task$
$ create-internet-gateway$
$ create-key-pair$
$ create-nat-gateway$
$ create-network-acl$
$ create-network-acl-entry$
$ create-network-interface
$ create-reserved-instances-listing$
$ create-route$
$ create-route-table$
$ create-security-group$
$ create-snapshot$
$ create-spot-datafeed-subscription$
$ create-subnet$
$ create-tags$
$ create-volume$
$ create-vpc$
$ create-vpc-endpoint$
$ create-vpc-peering-connection$
$ create-vpn-connection$
$ create-vpn-connection-route$
$ create-vpn-gateway$
$ delete-customer-gateway$
$ delete-dhcp-options$
$ delete-flow-logs$
$ delete-internet-gateway$
$ delete-key-pair$
$ delete-nat-gateway$
$ delete-network-acl$
$ delete-network-acl-entry$
$ delete-network-interface$
$ delete-placement-group$
$ delete-route$
$ delete-route-table$
$ delete-security-group$
$ delete-snapshot$
$ delete-spot-datafeed-subscription$
$ delete-subnet$
$ delete-tags$
$ delete-volume$
$ delete-vpc$
$ delete-vpc-endpoints$
$ delete-vpc-peering-connection$
$ delete-vpn-connection$
$ delete-vpn-connection-route$
$ delete-vpn-gateway$
$ deregister-image$
$ describe-account-attributes$
$ describe-addresses$
$ describe-availability-zones$
$ describe-bundle-tasks$
$ describe-classic-link-instances$
$ describe-conversion-tasks$
$ describe-customer-gateways$
$ describe-dhcp-options$
$ describe-export-tasks$
$ describe-flow-logs$
$ describe-host-reservation-offerings$
$ describe-host-reservations$
$ describe-hosts$
$ describe-id-format$
$ describe-identity-id-format$
$ describe-image-attribute$
$ describe-images$
$ describe-import-image-tasks$
$ describe-import-snapshot-tasks$
$ describe-instance-attribute$
$ describe-instance-status$
$ describe-instances$
$ describe-internet-gateways$
$ describe-key-pairs$
$ describe-moving-addresses$
$ describe-nat-gateways$
$ describe-network-acls$
$ describe-network-interface-attribute$
$ describe-network-interfaces$
$ describe-placement-groups$
$ describe-prefix-lists$
$ describe-regions$
$ describe-reserved-
$ describe-reserved-
$ describe-reserved-
modifications$
$ describe-reserved-
$ describe-route-tab
$ describe-scheduled
$ describe-scheduled
$ describe-security-
$ describe-security-
$ describe-snapshot-
$ describe-snapshots
$ describe-spot-data
$ describe-spot-flee
$ describe-spot-flee
$ describe-spot-flee
$ describe-spot-inst
$ describe-spot-pric
$ describe-stale-sec
$ describe-subnets$
$ describe-tags$
$ describe-volume-at
$ describe-volume-st
$ describe-volumes$
$ describe-vpc-attri
$ describe-vpc-class
$ describe-vpc-class
$ describe-vpc-endpo
$ describe-vpc-endpo
$ describe-vpc-peeri
$ describe-vpcs$
$ describe-vpn-conne
$ describe-vpn-gatew
$ detach-classic-lin
$ detach-internet-ga
$ detach-network-int
$ detach-volume$
210 calls for EC2 only
$ accept-vpc-peering-connection$
$ allocate-address$
$ allocate-hosts$
$ assign-private-ip-addresses$
$ associate-address$
$ associate-dhcp-options$
$ associate-route-table$
$ attach-classic-link-vpc$
$ attach-internet-gateway$
$ attach-network-interface$
$ attach-volume$
$ attach-vpn-gateway$
$ authorize-security-group-egress$
$ authorize-security-group-ingress$
$ bundle-instance$
$ cancel-bundle-task$
$ cancel-conversion-task$
$ cancel-export-task$
$ cancel-import-task$
$ cancel-reserved-instances-listing$
$ cancel-spot-fleet-requests$
$ cancel-spot-instance-requests$
$ confirm-product-instance$
$ copy-image$
$ copy-snapshot$
$ create-customer-gateway$
$ create-dhcp-options$
$ create-flow-logs$
$ create-image$
$ create-instance-export-task$
$ create-internet-gateway$
$ create-key-pair$
$ create-nat-gateway$
$ create-network-acl$
$ create-network-acl-entry$
$ create-network-interface
$ create-reserved-instances-listing$
$ create-route$
$ create-route-table$
$ create-security-group$
$ create-snapshot$
$ create-spot-datafeed-subscription$
$ create-subnet$
$ create-tags$
$ create-volume$
$ create-vpc$
$ create-vpc-endpoint$
$ create-vpc-peering-connection$
$ create-vpn-connection$
$ create-vpn-connection-route$
$ create-vpn-gateway$
$ delete-customer-gateway$
$ delete-dhcp-options$
$ delete-flow-logs$
$ delete-internet-gateway$
$ delete-key-pair$
$ delete-nat-gateway$
$ delete-network-acl$
$ delete-network-acl-entry$
$ delete-network-interface$
$ delete-placement-group$
$ delete-route$
$ delete-route-table$
$ delete-security-group$
$ delete-snapshot$
$ delete-spot-datafeed-subscription$
$ delete-subnet$
$ delete-tags$
$ delete-volume$
$ delete-vpc$
$ delete-vpc-endpoints$
$ delete-vpc-peering-connection$
$ delete-vpn-connection$
$ delete-vpn-connection-route$
$ delete-vpn-gateway$
$ deregister-image$
$ describe-account-attributes$
$ describe-addresses$
$ describe-availability-zones$
$ describe-bundle-tasks$
$ describe-classic-link-instances$
$ describe-conversion-tasks$
$ describe-customer-gateways$
$ describe-dhcp-options$
$ describe-export-tasks$
$ describe-flow-logs$
$ describe-host-reservation-offerings$
$ describe-host-reservations$
$ describe-hosts$
$ describe-id-format$
$ describe-identity-id-format$
$ describe-image-attribute$
$ describe-images$
$ describe-import-image-tasks$
$ describe-import-snapshot-tasks$
$ describe-instance-attribute$
$ describe-instance-status$
$ describe-instances$
$ describe-internet-gateways$
$ describe-key-pairs$
$ describe-moving-addresses$
$ describe-nat-gateways$
$ describe-network-acls$
$ describe-network-interface-attribute$
$ describe-network-interfaces$
$ describe-placement-groups$
$ describe-prefix-lists$
$ describe-regions$
$ describe-reserved-
$ describe-reserved-
$ describe-reserved-
modifications$
$ describe-reserved-
$ describe-route-tab
$ describe-scheduled
$ describe-scheduled
$ describe-security-
$ describe-security-
$ describe-snapshot-
$ describe-snapshots
$ describe-spot-data
$ describe-spot-flee
$ describe-spot-flee
$ describe-spot-flee
$ describe-spot-inst
$ describe-spot-pric
$ describe-stale-sec
$ describe-subnets$
$ describe-tags$
$ describe-volume-at
$ describe-volume-st
$ describe-volumes$
$ describe-vpc-attri
$ describe-vpc-class
$ describe-vpc-class
$ describe-vpc-endpo
$ describe-vpc-endpo
$ describe-vpc-peeri
$ describe-vpcs$
$ describe-vpn-conne
$ describe-vpn-gatew
$ detach-classic-lin
$ detach-internet-ga
$ detach-network-int
$ detach-volume$
210 calls for EC2 only
S3
ELB
RDS
CloudFrontCloudWatch
AutoScaling
Route53
Events
IAM
S3api
SNS
PLESK WORDPRESS AWS
https://github.com/plesk/wordpress-aws-scaler
AWS
manage-
wordpress.sh
Docker
Registry
docker pull
docker push
AMI
PLESK WORDPRESS AWS SCALER
manage-wordpress.sh create
Too quick? How does it work internally?
Install AWS CLI (https://docs.aws.amazon.com/cli/latest/userguide/installing.html)
$ sudo pip install awscli
$ aws configure
$ aws --version
Clone WordPress AWS Scaler git repo (https://github.com/plesk/wordpress-aws-scaler)
$ git clone https://github.com/plesk/wordpress-aws-scaler.git
$ cd wordpress-aws-scaler
Build Docker Image and Upload to Docker Hub (https://hub.docker.com/explore/)
$ docker build -t janloeffler/wordpress-aws-scaler:0.1 .
$ docker push janloeffler/wordpress-aws-scaler:0.1
FROM debian:testing
# PHP
RUN apt-get update && apt-get -y install 
php7.0 ...
# nginx site conf
COPY docker/nginx.conf /etc/nginx/nginx.conf
# Install WP-CLI from GitHub ...
# Download WordPress from wordpress.org
RUN wp core download --path=/usr/src/wordpress --allow-root
# Integrate user data
COPY content /usr/src/wordpress/wp-content
COPY docker/php-opcache.ini /etc/php/7.0/fpm/conf.d/10-opcache.ini
VOLUME ['/usr/src/wordpress/wp-content']
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
List existing AWS resources
List existing AWS Resources
$ aws ec2 describe-vps
$ aws ec2 describe-security-groups
$ aws ec2 describe-instances
$ aws rds describe-db-instances
[...]
Do this for all AWS components
$ aws autoscaling
$ aws ec2
$ aws cloudfront
$ aws cloudwatch
$ aws elb
$ aws rds
$ aws s3
$ aws route53
$ aws events
Create new resources
Create new AWS Resources
$ aws ec2 create-vpc
$ aws ec2 create-security-group
[...]
Do this for all AWS components
$ aws autoscaling
$ aws ec2
$ aws cloudfront
$ aws cloudwatch
$ aws elb
$ aws rds
$ aws s3
$ aws route53
$ aws events
Create new Launch Configuration
Generate EC2-User-Data Script to run directly after booting EC2 VM
$ cat >ec2-user-data.sh <<EOL
#!/bin/bash
docker pull janloeffler/wordpress-aws-scaler:0.1
docker run -d -p 80:80 -p 443:443 -e WORDPRESS_DB_HOST='${DB}' -e
WORDPRESS_DB_USER='${DB_USERNAME}' -e WORDPRESS_DB_PASSWORD='${DB_PASSWORD}' -e
WORDPRESS_DB_NAME='${DB_NAME}' -e WORDPRESS_DB_PREFIX='${WORDPRESS_DB_PREFIX}' -e
WORDPRESS_URL='http://${ELB}' -e WORDPRESS_TITLE='${WORDPRESS_TITLE}' -e
WORDPRESS_USER_EMAIL='${WORDPRESS_USER_EMAIL}' -e NEWRELIC_KEY='${NEWRELIC_KEY}'
-e NEWRELIC_NAME='${NEWRELIC_NAME}' -e S3_KEY='${IAM_USER_KEY}' -e
S3_SECRET='${IAM_USER_SECRET}' -e S3_BUCKET='${S3_BUCKET_NAME}' -e
S3_BUCKET_URL='${S3_URL}' -it janloeffler/wordpress-aws-scaler:0.1
EOL
Create new Launch Configuration for AutoScaling
$ aws autoscaling create-launch-configuration --launch-configuration-name
$LC_NAME --image-id $AMI --instance-type $INSTANCE_TYPE --key-name $KEYNAME --
You must love JSON !!! ;-)
{
"Reservations": [
{
"OwnerId": "699328319947",
"ReservationId": "r-041ac13209e0d4eef",
"Groups": [],
"RequesterId": "226008221399",
"Instances": [
{
"Monitoring": {
"State": "enabled"
},
"PublicDnsName": "ec2-52-210-200-157.eu-west-1.compute.amazonaws.com",
"State": {
"Code": 16,
"Name": "running"
},
"EbsOptimized": false,
"LaunchTime": "2016-09-05T12:19:54.000Z",
"PublicIpAddress": "52.210.200.157",
"PrivateIpAddress": "172.31.25.83",
"ProductCodes": [
{
"ProductCodeId": "4jvb72q6a56js2x7jzd24jar5",
"ProductCodeType": "marketplace"
}
],
"VpcId": "vpc-fffbe19a",
"StateTransitionReason": "",
"InstanceId": "i-0ea3384a24a3c6aba",
"ImageId": "ami-64385917",
"PrivateDnsName": "ip-172-31-25-83.eu-west-1.compute.internal",
"KeyName": "Marko Heijnen",
"SecurityGroups": [
{
"GroupName": "WordPress-Docker-Test",
"GroupId": "sg-1b8dde7c"
}
],
"ClientToken": "70aa81e1-10a3-4b83-acc7-62702015d06e_subnet-cff90cb9_1",
"SubnetId": "subnet-cff90cb9",
"InstanceType": "m3.medium",
"NetworkInterfaces": [
{
"Status": "in-use",
"MacAddress": "06:c0:22:65:b4:ed",
"SourceDestCheck": true,
"VpcId": "vpc-fffbe19a",
"Description": "",
"Association": {
"PublicIp": "52.210.200.157",
"PublicDnsName": "ec2-52-210-200-157.eu-west-1.compute.amazonaws.com",
"IpOwnerId": "amazon"
},
"NetworkInterfaceId": "eni-2f4efa63",
"PrivateIpAddresses": [
{
"PrivateDnsName": "ip-172-31-25-83.eu-west-1.compute.internal",
"Association": {
"PublicIp": "52.210.200.157",
"PublicDnsName": "ec2-52-210-200-157.eu-west-1.compute.amazonaws.com",
"IpOwnerId": "amazon"
},
"Primary": true,
"PrivateIpAddress": "172.31.25.83"
}
],
"PrivateDnsName": "ip-172-31-25-83.eu-west-1.compute.internal",
"Attachment": {
"Status": "attached",
"DeviceIndex": 0,
"DeleteOnTermination": true,
"AttachmentId": "eni-attach-7f9031a0",
"AttachTime": "2016-09-05T12:19:54.000Z"
},
[…]
WordCamp Cologne - WordPress auf SPEED
#SPEE
D
#SPEE
D
WordCamp Cologne - WordPress auf SPEED
CACHING
docker run -d 
--link web-app:backend-host 
--volumes-from web-app 
--env 'VCL_CONFIG=/data/path/to/varnish.vcl' 
million12/varnish
Create new Varnish Cache Server as Docker Container
PERFORMANCE
TESTING
blitz.io StormForger.com
JMeter bees with
machine
guns
Loadstorm.com
250 users
→ 3 sec
420 users
→ crash!!!
Overheating a Fiat Uno without Turbo (Varnish)
500 users
→ <2,5 sec
Overheating a Fiat Uno with Turbo (Varnish)
“There are only two hard
things in Computer Science:
cache invalidation and
naming things.”
https://martinfowler.com/bliki/TwoHardThings.html
Martin Fowler
Jan Löffler
CTO Plesk
● @jlsoft2
● jan@plesk.com
● http://www.slideshare.net/jlsoft/
● https://www.jan-loeffler.de
BUILD
SECUR
E
RUN
377.000+
SERVERS
11.000.000+
DOMAINS
19.000.000+
MAILBOXES
2.500+
HOSTERS
WordPress
Management
Free SSL
everywhere
http2 80+
extensions
CLI
Automatic Updates
Site Migration
Free support
32+
languages
Server
Security
DNS
MESSAGE?
WordCamp Cologne - WordPress auf SPEED
WordCamp Cologne - WordPress auf SPEED
WordCamp Cologne - WordPress auf SPEED
WordCamp Cologne - WordPress auf SPEED
“When you walk through your website architecture and you wonder
who could be so stupid to test it with 20.000 parallel requests per
second. But if you want to be successful and play in the first league, it
is important to think about it before your traffic increases”
Jan Löffler @jlsoft2
https://github.com/plesk/wordpress-aws-scaler
1 of 65

Recommended

Forget the Web by
Forget the WebForget the Web
Forget the WebRemy Sharp
1.5K views78 slides
Vagrant file samples for various Hadoop distributions by
Vagrant file samples for various Hadoop distributionsVagrant file samples for various Hadoop distributions
Vagrant file samples for various Hadoop distributionsAkshay Gore
144 views10 slides
AnyMQ, Hippie, and the real-time web by
AnyMQ, Hippie, and the real-time webAnyMQ, Hippie, and the real-time web
AnyMQ, Hippie, and the real-time webclkao
2.7K views41 slides
Building Real-Time Web Applications with Vortex-Web by
Building Real-Time Web Applications with Vortex-WebBuilding Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebAngelo Corsaro
1.8K views33 slides
Triple Blitz Strike by
Triple Blitz StrikeTriple Blitz Strike
Triple Blitz StrikeDenis Zhdanov
4.8K views25 slides
Byte Sized Rust by
Byte Sized RustByte Sized Rust
Byte Sized RustSteve Hoffman
175 views75 slides

More Related Content

Viewers also liked

WordCamp Cologne - Web Trends in Zahlen und wie sich Hosting verändert by
WordCamp Cologne - Web Trends in Zahlen und wie sich Hosting verändertWordCamp Cologne - Web Trends in Zahlen und wie sich Hosting verändert
WordCamp Cologne - Web Trends in Zahlen und wie sich Hosting verändertJan Löffler
1.4K views63 slides
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac... by
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...Jan Löffler
1.6K views82 slides
Basic Wordpress PPT by
Basic Wordpress PPT Basic Wordpress PPT
Basic Wordpress PPT mayur akabari
48.4K views16 slides
Introduction to WordPress by
Introduction to WordPressIntroduction to WordPress
Introduction to WordPressLumosTech
7K views144 slides
WordPress & User Experience - WordCamp London by
WordPress & User Experience - WordCamp LondonWordPress & User Experience - WordCamp London
WordPress & User Experience - WordCamp LondonSara Cannon
30.3K views68 slides
Designing WordPress - Heart&Sole2011 by
Designing WordPress - Heart&Sole2011Designing WordPress - Heart&Sole2011
Designing WordPress - Heart&Sole2011John O'Nolan
39K views100 slides

Viewers also liked(6)

WordCamp Cologne - Web Trends in Zahlen und wie sich Hosting verändert by Jan Löffler
WordCamp Cologne - Web Trends in Zahlen und wie sich Hosting verändertWordCamp Cologne - Web Trends in Zahlen und wie sich Hosting verändert
WordCamp Cologne - Web Trends in Zahlen und wie sich Hosting verändert
Jan Löffler1.4K views
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac... by Jan Löffler
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...
Jan Löffler1.6K views
Basic Wordpress PPT by mayur akabari
Basic Wordpress PPT Basic Wordpress PPT
Basic Wordpress PPT
mayur akabari48.4K views
Introduction to WordPress by LumosTech
Introduction to WordPressIntroduction to WordPress
Introduction to WordPress
LumosTech7K views
WordPress & User Experience - WordCamp London by Sara Cannon
WordPress & User Experience - WordCamp LondonWordPress & User Experience - WordCamp London
WordPress & User Experience - WordCamp London
Sara Cannon30.3K views
Designing WordPress - Heart&Sole2011 by John O'Nolan
Designing WordPress - Heart&Sole2011Designing WordPress - Heart&Sole2011
Designing WordPress - Heart&Sole2011
John O'Nolan39K views

Similar to WordCamp Cologne - WordPress auf SPEED

Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra... by
 Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra... Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...Plesk
464 views82 slides
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b... by
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...Jan Löffler
948 views61 slides
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b... by
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...Plesk
8.8K views61 slides
AutoScaling WordPress with Docker & AWS - WordPress Meetup Karlsruhe - Plesk by
AutoScaling WordPress with Docker & AWS - WordPress Meetup Karlsruhe - PleskAutoScaling WordPress with Docker & AWS - WordPress Meetup Karlsruhe - Plesk
AutoScaling WordPress with Docker & AWS - WordPress Meetup Karlsruhe - PleskJan Löffler
828 views49 slides
(GAM304) How Riot Games re:Invented Their AWS Model | AWS re:Invent 2014 by
(GAM304) How Riot Games re:Invented Their AWS Model | AWS re:Invent 2014(GAM304) How Riot Games re:Invented Their AWS Model | AWS re:Invent 2014
(GAM304) How Riot Games re:Invented Their AWS Model | AWS re:Invent 2014Amazon Web Services
6.8K views157 slides
High-Quality JavaScript by
High-Quality JavaScriptHigh-Quality JavaScript
High-Quality JavaScriptMarc Bächinger
1.2K views57 slides

Similar to WordCamp Cologne - WordPress auf SPEED(20)

Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra... by Plesk
 Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra... Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...
Plesk464 views
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b... by Jan Löffler
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...
Jan Löffler948 views
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b... by Plesk
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...
code.talks 2016 Hamburg - Plesk - AutoScaling WordPress with Docker & AWS - b...
Plesk8.8K views
AutoScaling WordPress with Docker & AWS - WordPress Meetup Karlsruhe - Plesk by Jan Löffler
AutoScaling WordPress with Docker & AWS - WordPress Meetup Karlsruhe - PleskAutoScaling WordPress with Docker & AWS - WordPress Meetup Karlsruhe - Plesk
AutoScaling WordPress with Docker & AWS - WordPress Meetup Karlsruhe - Plesk
Jan Löffler828 views
(GAM304) How Riot Games re:Invented Their AWS Model | AWS re:Invent 2014 by Amazon Web Services
(GAM304) How Riot Games re:Invented Their AWS Model | AWS re:Invent 2014(GAM304) How Riot Games re:Invented Their AWS Model | AWS re:Invent 2014
(GAM304) How Riot Games re:Invented Their AWS Model | AWS re:Invent 2014
Amazon Web Services6.8K views
Atmosphere Conference 2015: Taming the Modern Datacenter by PROIDEA
Atmosphere Conference 2015: Taming the Modern DatacenterAtmosphere Conference 2015: Taming the Modern Datacenter
Atmosphere Conference 2015: Taming the Modern Datacenter
PROIDEA164 views
From One to Many: Diving Deeper into Evolving VPC Design (ARC310-R2) - AWS re... by Amazon Web Services
From One to Many: Diving Deeper into Evolving VPC Design (ARC310-R2) - AWS re...From One to Many: Diving Deeper into Evolving VPC Design (ARC310-R2) - AWS re...
From One to Many: Diving Deeper into Evolving VPC Design (ARC310-R2) - AWS re...
Keep it simple web development stack by Eric Ahn
Keep it simple web development stackKeep it simple web development stack
Keep it simple web development stack
Eric Ahn916 views
Cassandra Summit 2014: Apache Cassandra on Pivotal CloudFoundry by DataStax Academy
Cassandra Summit 2014: Apache Cassandra on Pivotal CloudFoundryCassandra Summit 2014: Apache Cassandra on Pivotal CloudFoundry
Cassandra Summit 2014: Apache Cassandra on Pivotal CloudFoundry
DataStax Academy1.5K views
OSDC 2017 - Seth Vargo - Taming the modern data center by NETWAYS
OSDC 2017 - Seth Vargo - Taming the modern data centerOSDC 2017 - Seth Vargo - Taming the modern data center
OSDC 2017 - Seth Vargo - Taming the modern data center
NETWAYS82 views
OSDC 2017 | Taming the Modern Data Center by Seth Vargo by NETWAYS
OSDC 2017 | Taming the Modern Data Center by Seth VargoOSDC 2017 | Taming the Modern Data Center by Seth Vargo
OSDC 2017 | Taming the Modern Data Center by Seth Vargo
NETWAYS14 views
OSDC 2017 | Modern Secrets Management with Vault by Seth Vargo by NETWAYS
OSDC 2017 | Modern Secrets Management with Vault by Seth VargoOSDC 2017 | Modern Secrets Management with Vault by Seth Vargo
OSDC 2017 | Modern Secrets Management with Vault by Seth Vargo
NETWAYS21 views
Py conkr 20150829_docker-python by Eric Ahn
Py conkr 20150829_docker-pythonPy conkr 20150829_docker-python
Py conkr 20150829_docker-python
Eric Ahn3K views
Py conkr 20150829_docker-python by Eric Ahn
Py conkr 20150829_docker-pythonPy conkr 20150829_docker-python
Py conkr 20150829_docker-python
Eric Ahn619 views
Kube-AWS by CoreOS
Kube-AWSKube-AWS
Kube-AWS
CoreOS1.1K views
Socket applications by João Moura
Socket applicationsSocket applications
Socket applications
João Moura601 views
점진적인 레거시 웹 애플리케이션 개선 과정 by Arawn Park
점진적인 레거시 웹 애플리케이션 개선 과정점진적인 레거시 웹 애플리케이션 개선 과정
점진적인 레거시 웹 애플리케이션 개선 과정
Arawn Park5K views
Burn down the silos! Helping dev and ops gel on high availability websites by Lindsay Holmwood
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood1.6K views

More from Jan Löffler

CloudFest US 2023 - Building a Connected Future for Your Business - Jan Loeff... by
CloudFest US 2023 - Building a Connected Future for Your Business - Jan Loeff...CloudFest US 2023 - Building a Connected Future for Your Business - Jan Loeff...
CloudFest US 2023 - Building a Connected Future for Your Business - Jan Loeff...Jan Löffler
57 views83 slides
CloudFest 2023 - Unleashing the Power of Innovation: A Game Changer for Your ... by
CloudFest 2023 - Unleashing the Power of Innovation: A Game Changer for Your ...CloudFest 2023 - Unleashing the Power of Innovation: A Game Changer for Your ...
CloudFest 2023 - Unleashing the Power of Innovation: A Game Changer for Your ...Jan Löffler
8 views48 slides
CloudFest 2023 - WordPress by the numbers - Jan Loeffler (CTO, WebPros) by
CloudFest 2023 - WordPress by the numbers - Jan Loeffler (CTO, WebPros)CloudFest 2023 - WordPress by the numbers - Jan Loeffler (CTO, WebPros)
CloudFest 2023 - WordPress by the numbers - Jan Loeffler (CTO, WebPros)Jan Löffler
35 views27 slides
WebPros at CloudFest 2022 - Walk the New Revenue Avenues of Server Management by
WebPros at CloudFest 2022 - Walk the New Revenue Avenues of Server ManagementWebPros at CloudFest 2022 - Walk the New Revenue Avenues of Server Management
WebPros at CloudFest 2022 - Walk the New Revenue Avenues of Server ManagementJan Löffler
182 views46 slides
A Platform for Builders - How to win Web Developers? by
A Platform for Builders - How to win Web Developers?A Platform for Builders - How to win Web Developers?
A Platform for Builders - How to win Web Developers?Jan Löffler
107 views24 slides
The WordPress Hosting experience - Bought cheaply and paid dearly? - Jan Löf... by
The WordPress Hosting experience - Bought cheaply and paid dearly? - Jan Löf...The WordPress Hosting experience - Bought cheaply and paid dearly? - Jan Löf...
The WordPress Hosting experience - Bought cheaply and paid dearly? - Jan Löf...Jan Löffler
1.3K views58 slides

More from Jan Löffler(16)

CloudFest US 2023 - Building a Connected Future for Your Business - Jan Loeff... by Jan Löffler
CloudFest US 2023 - Building a Connected Future for Your Business - Jan Loeff...CloudFest US 2023 - Building a Connected Future for Your Business - Jan Loeff...
CloudFest US 2023 - Building a Connected Future for Your Business - Jan Loeff...
Jan Löffler57 views
CloudFest 2023 - Unleashing the Power of Innovation: A Game Changer for Your ... by Jan Löffler
CloudFest 2023 - Unleashing the Power of Innovation: A Game Changer for Your ...CloudFest 2023 - Unleashing the Power of Innovation: A Game Changer for Your ...
CloudFest 2023 - Unleashing the Power of Innovation: A Game Changer for Your ...
Jan Löffler8 views
CloudFest 2023 - WordPress by the numbers - Jan Loeffler (CTO, WebPros) by Jan Löffler
CloudFest 2023 - WordPress by the numbers - Jan Loeffler (CTO, WebPros)CloudFest 2023 - WordPress by the numbers - Jan Loeffler (CTO, WebPros)
CloudFest 2023 - WordPress by the numbers - Jan Loeffler (CTO, WebPros)
Jan Löffler35 views
WebPros at CloudFest 2022 - Walk the New Revenue Avenues of Server Management by Jan Löffler
WebPros at CloudFest 2022 - Walk the New Revenue Avenues of Server ManagementWebPros at CloudFest 2022 - Walk the New Revenue Avenues of Server Management
WebPros at CloudFest 2022 - Walk the New Revenue Avenues of Server Management
Jan Löffler182 views
A Platform for Builders - How to win Web Developers? by Jan Löffler
A Platform for Builders - How to win Web Developers?A Platform for Builders - How to win Web Developers?
A Platform for Builders - How to win Web Developers?
Jan Löffler107 views
The WordPress Hosting experience - Bought cheaply and paid dearly? - Jan Löf... by Jan Löffler
The WordPress Hosting experience - Bought cheaply and paid dearly? - Jan Löf...The WordPress Hosting experience - Bought cheaply and paid dearly? - Jan Löf...
The WordPress Hosting experience - Bought cheaply and paid dearly? - Jan Löf...
Jan Löffler1.3K views
World Cloud Summit 2017 - How Service Providers can offer a Ready to Code and... by Jan Löffler
World Cloud Summit 2017 - How Service Providers can offer a Ready to Code and...World Cloud Summit 2017 - How Service Providers can offer a Ready to Code and...
World Cloud Summit 2017 - How Service Providers can offer a Ready to Code and...
Jan Löffler565 views
WordPress Meetup Karlsruhe Plesk 2016 - Die Veränderung der Web Entwicklung -... by Jan Löffler
WordPress Meetup Karlsruhe Plesk 2016 - Die Veränderung der Web Entwicklung -...WordPress Meetup Karlsruhe Plesk 2016 - Die Veränderung der Web Entwicklung -...
WordPress Meetup Karlsruhe Plesk 2016 - Die Veränderung der Web Entwicklung -...
Jan Löffler601 views
Container Days Conference Plesk 2016 - How AWS, Docker and Microservices infl... by Jan Löffler
Container Days Conference Plesk 2016 - How AWS, Docker and Microservices infl...Container Days Conference Plesk 2016 - How AWS, Docker and Microservices infl...
Container Days Conference Plesk 2016 - How AWS, Docker and Microservices infl...
Jan Löffler5.4K views
WHD.usa - Plesk - more than just a control panel - reveal the power of web op... by Jan Löffler
WHD.usa - Plesk - more than just a control panel - reveal the power of web op...WHD.usa - Plesk - more than just a control panel - reveal the power of web op...
WHD.usa - Plesk - more than just a control panel - reveal the power of web op...
Jan Löffler1K views
Hosting Service Provider Summit - Was haben AWS, Docker und co mit kommerziel... by Jan Löffler
Hosting Service Provider Summit - Was haben AWS, Docker und co mit kommerziel...Hosting Service Provider Summit - Was haben AWS, Docker und co mit kommerziel...
Hosting Service Provider Summit - Was haben AWS, Docker und co mit kommerziel...
Jan Löffler452 views
World Hosting Days - More than just a control panel - reveal the power of Web... by Jan Löffler
World Hosting Days - More than just a control panel - reveal the power of Web...World Hosting Days - More than just a control panel - reveal the power of Web...
World Hosting Days - More than just a control panel - reveal the power of Web...
Jan Löffler496 views
Stups.io - an Open Source Cloud Framework for AWS by Jan Löffler
Stups.io - an Open Source Cloud Framework for AWSStups.io - an Open Source Cloud Framework for AWS
Stups.io - an Open Source Cloud Framework for AWS
Jan Löffler1.2K views
GOTO Copenhagen - Radical Agility with Autonomous Teams and Microservices in ... by Jan Löffler
GOTO Copenhagen - Radical Agility with Autonomous Teams and Microservices in ...GOTO Copenhagen - Radical Agility with Autonomous Teams and Microservices in ...
GOTO Copenhagen - Radical Agility with Autonomous Teams and Microservices in ...
Jan Löffler709 views
Dev ops con 2015 radical agility with autonomous teams and microservices in... by Jan Löffler
Dev ops con 2015   radical agility with autonomous teams and microservices in...Dev ops con 2015   radical agility with autonomous teams and microservices in...
Dev ops con 2015 radical agility with autonomous teams and microservices in...
Jan Löffler1.6K views
Zalando - The Big Switch - ForgeRock Identity Summit 2015 by Jan Löffler
Zalando - The Big Switch - ForgeRock Identity Summit 2015Zalando - The Big Switch - ForgeRock Identity Summit 2015
Zalando - The Big Switch - ForgeRock Identity Summit 2015
Jan Löffler1.8K views

Recently uploaded

How to think like a threat actor for Kubernetes.pptx by
How to think like a threat actor for Kubernetes.pptxHow to think like a threat actor for Kubernetes.pptx
How to think like a threat actor for Kubernetes.pptxLibbySchulze1
7 views33 slides
cis5-Project-11a-Harry Lai by
cis5-Project-11a-Harry Laicis5-Project-11a-Harry Lai
cis5-Project-11a-Harry Laiharrylai126
9 views11 slides
WITS Deck by
WITS DeckWITS Deck
WITS DeckW.I.T.S.
27 views22 slides
The Dark Web : Hidden Services by
The Dark Web : Hidden ServicesThe Dark Web : Hidden Services
The Dark Web : Hidden ServicesAnshu Singh
19 views24 slides
ARNAB12.pdf by
ARNAB12.pdfARNAB12.pdf
ARNAB12.pdfArnabChakraborty499766
5 views83 slides
hamro digital logics.pptx by
hamro digital logics.pptxhamro digital logics.pptx
hamro digital logics.pptxtupeshghimire
11 views36 slides

Recently uploaded(10)

WordCamp Cologne - WordPress auf SPEED

  • 1. WordPress auf SPEED WordCamp Cologne, November 18th 2017 Jan Löffler, CTO Plesk
  • 6. Usain Bolt Katy Perry Snoop Dogg LL Cool J Kim Kardashian The Rolling Stones Sylvester Stallone Mötley Crüe Beyoncé Justin Bieber Justin Timberlake Alanis Morissette
  • 7. Usain Bolt Katy Perry Snoop Dogg LL Cool J Kim Kardashian The Rolling Stones Sylvester Stallone Mötley Crüe Beyoncé Alanis MorissetteJustin Bieber
  • 8. TechCrunch Metro The New Yorker BBC America MTV News The Official Star Wars Blog Sony Music Facebook Newsroom Time.com CNN UPS Mozilla Blog
  • 24. IMMUTABLE STACKS ELB myapp-v1 jan-loeffler.de EC2 + Docker EC2 + Docker EC2 + Docker 100%
  • 25. IMMUTABLE STACKS ELB myapp-v1 EC2 + Docker EC2 + Docker EC2 + Docker ELB myapp-v2 EC2 + Docker EC2 + Docker jan-loeffler.de 90% 10%
  • 26. IMMUTABLE STACKS ELB myapp-v1 EC2 + Docker EC2 + Docker EC2 + Docker ELB myapp-v2 EC2 + Docker EC2 + Docker jan-loeffler.de 0% 100%
  • 27. APP INSTANCE VM (EC2) Basis Image (AMI) Docker Container Application ✓ VPC ✓ Security Groups ✓ AutoScaling ✓ CloudWatch ✓ CloudFront ✓ Route53 ✓ Docker Runtime ✓ Logging ✓ Monitoring ✓ Security config ✓ Debian ✓ Nginx ✓ php7-fpm ✓ NewRelic Website
  • 32. $ accept-vpc-peering-connection$ $ allocate-address$ $ allocate-hosts$ $ assign-private-ip-addresses$ $ associate-address$ $ associate-dhcp-options$ $ associate-route-table$ $ attach-classic-link-vpc$ $ attach-internet-gateway$ $ attach-network-interface$ $ attach-volume$ $ attach-vpn-gateway$ $ authorize-security-group-egress$ $ authorize-security-group-ingress$ $ bundle-instance$ $ cancel-bundle-task$ $ cancel-conversion-task$ $ cancel-export-task$ $ cancel-import-task$ $ cancel-reserved-instances-listing$ $ cancel-spot-fleet-requests$ $ cancel-spot-instance-requests$ $ confirm-product-instance$ $ copy-image$ $ copy-snapshot$ $ create-customer-gateway$ $ create-dhcp-options$ $ create-flow-logs$ $ create-image$ $ create-instance-export-task$ $ create-internet-gateway$ $ create-key-pair$ $ create-nat-gateway$ $ create-network-acl$ $ create-network-acl-entry$ $ create-network-interface $ create-reserved-instances-listing$ $ create-route$ $ create-route-table$ $ create-security-group$ $ create-snapshot$ $ create-spot-datafeed-subscription$ $ create-subnet$ $ create-tags$ $ create-volume$ $ create-vpc$ $ create-vpc-endpoint$ $ create-vpc-peering-connection$ $ create-vpn-connection$ $ create-vpn-connection-route$ $ create-vpn-gateway$ $ delete-customer-gateway$ $ delete-dhcp-options$ $ delete-flow-logs$ $ delete-internet-gateway$ $ delete-key-pair$ $ delete-nat-gateway$ $ delete-network-acl$ $ delete-network-acl-entry$ $ delete-network-interface$ $ delete-placement-group$ $ delete-route$ $ delete-route-table$ $ delete-security-group$ $ delete-snapshot$ $ delete-spot-datafeed-subscription$ $ delete-subnet$ $ delete-tags$ $ delete-volume$ $ delete-vpc$ $ delete-vpc-endpoints$ $ delete-vpc-peering-connection$ $ delete-vpn-connection$ $ delete-vpn-connection-route$ $ delete-vpn-gateway$ $ deregister-image$ $ describe-account-attributes$ $ describe-addresses$ $ describe-availability-zones$ $ describe-bundle-tasks$ $ describe-classic-link-instances$ $ describe-conversion-tasks$ $ describe-customer-gateways$ $ describe-dhcp-options$ $ describe-export-tasks$ $ describe-flow-logs$ $ describe-host-reservation-offerings$ $ describe-host-reservations$ $ describe-hosts$ $ describe-id-format$ $ describe-identity-id-format$ $ describe-image-attribute$ $ describe-images$ $ describe-import-image-tasks$ $ describe-import-snapshot-tasks$ $ describe-instance-attribute$ $ describe-instance-status$ $ describe-instances$ $ describe-internet-gateways$ $ describe-key-pairs$ $ describe-moving-addresses$ $ describe-nat-gateways$ $ describe-network-acls$ $ describe-network-interface-attribute$ $ describe-network-interfaces$ $ describe-placement-groups$ $ describe-prefix-lists$ $ describe-regions$ $ describe-reserved- $ describe-reserved- $ describe-reserved- modifications$ $ describe-reserved- $ describe-route-tab $ describe-scheduled $ describe-scheduled $ describe-security- $ describe-security- $ describe-snapshot- $ describe-snapshots $ describe-spot-data $ describe-spot-flee $ describe-spot-flee $ describe-spot-flee $ describe-spot-inst $ describe-spot-pric $ describe-stale-sec $ describe-subnets$ $ describe-tags$ $ describe-volume-at $ describe-volume-st $ describe-volumes$ $ describe-vpc-attri $ describe-vpc-class $ describe-vpc-class $ describe-vpc-endpo $ describe-vpc-endpo $ describe-vpc-peeri $ describe-vpcs$ $ describe-vpn-conne $ describe-vpn-gatew $ detach-classic-lin $ detach-internet-ga $ detach-network-int $ detach-volume$ 210 calls for EC2 only
  • 33. $ accept-vpc-peering-connection$ $ allocate-address$ $ allocate-hosts$ $ assign-private-ip-addresses$ $ associate-address$ $ associate-dhcp-options$ $ associate-route-table$ $ attach-classic-link-vpc$ $ attach-internet-gateway$ $ attach-network-interface$ $ attach-volume$ $ attach-vpn-gateway$ $ authorize-security-group-egress$ $ authorize-security-group-ingress$ $ bundle-instance$ $ cancel-bundle-task$ $ cancel-conversion-task$ $ cancel-export-task$ $ cancel-import-task$ $ cancel-reserved-instances-listing$ $ cancel-spot-fleet-requests$ $ cancel-spot-instance-requests$ $ confirm-product-instance$ $ copy-image$ $ copy-snapshot$ $ create-customer-gateway$ $ create-dhcp-options$ $ create-flow-logs$ $ create-image$ $ create-instance-export-task$ $ create-internet-gateway$ $ create-key-pair$ $ create-nat-gateway$ $ create-network-acl$ $ create-network-acl-entry$ $ create-network-interface $ create-reserved-instances-listing$ $ create-route$ $ create-route-table$ $ create-security-group$ $ create-snapshot$ $ create-spot-datafeed-subscription$ $ create-subnet$ $ create-tags$ $ create-volume$ $ create-vpc$ $ create-vpc-endpoint$ $ create-vpc-peering-connection$ $ create-vpn-connection$ $ create-vpn-connection-route$ $ create-vpn-gateway$ $ delete-customer-gateway$ $ delete-dhcp-options$ $ delete-flow-logs$ $ delete-internet-gateway$ $ delete-key-pair$ $ delete-nat-gateway$ $ delete-network-acl$ $ delete-network-acl-entry$ $ delete-network-interface$ $ delete-placement-group$ $ delete-route$ $ delete-route-table$ $ delete-security-group$ $ delete-snapshot$ $ delete-spot-datafeed-subscription$ $ delete-subnet$ $ delete-tags$ $ delete-volume$ $ delete-vpc$ $ delete-vpc-endpoints$ $ delete-vpc-peering-connection$ $ delete-vpn-connection$ $ delete-vpn-connection-route$ $ delete-vpn-gateway$ $ deregister-image$ $ describe-account-attributes$ $ describe-addresses$ $ describe-availability-zones$ $ describe-bundle-tasks$ $ describe-classic-link-instances$ $ describe-conversion-tasks$ $ describe-customer-gateways$ $ describe-dhcp-options$ $ describe-export-tasks$ $ describe-flow-logs$ $ describe-host-reservation-offerings$ $ describe-host-reservations$ $ describe-hosts$ $ describe-id-format$ $ describe-identity-id-format$ $ describe-image-attribute$ $ describe-images$ $ describe-import-image-tasks$ $ describe-import-snapshot-tasks$ $ describe-instance-attribute$ $ describe-instance-status$ $ describe-instances$ $ describe-internet-gateways$ $ describe-key-pairs$ $ describe-moving-addresses$ $ describe-nat-gateways$ $ describe-network-acls$ $ describe-network-interface-attribute$ $ describe-network-interfaces$ $ describe-placement-groups$ $ describe-prefix-lists$ $ describe-regions$ $ describe-reserved- $ describe-reserved- $ describe-reserved- modifications$ $ describe-reserved- $ describe-route-tab $ describe-scheduled $ describe-scheduled $ describe-security- $ describe-security- $ describe-snapshot- $ describe-snapshots $ describe-spot-data $ describe-spot-flee $ describe-spot-flee $ describe-spot-flee $ describe-spot-inst $ describe-spot-pric $ describe-stale-sec $ describe-subnets$ $ describe-tags$ $ describe-volume-at $ describe-volume-st $ describe-volumes$ $ describe-vpc-attri $ describe-vpc-class $ describe-vpc-class $ describe-vpc-endpo $ describe-vpc-endpo $ describe-vpc-peeri $ describe-vpcs$ $ describe-vpn-conne $ describe-vpn-gatew $ detach-classic-lin $ detach-internet-ga $ detach-network-int $ detach-volume$ 210 calls for EC2 only S3 ELB RDS CloudFrontCloudWatch AutoScaling Route53 Events IAM S3api SNS
  • 39. Too quick? How does it work internally? Install AWS CLI (https://docs.aws.amazon.com/cli/latest/userguide/installing.html) $ sudo pip install awscli $ aws configure $ aws --version Clone WordPress AWS Scaler git repo (https://github.com/plesk/wordpress-aws-scaler) $ git clone https://github.com/plesk/wordpress-aws-scaler.git $ cd wordpress-aws-scaler Build Docker Image and Upload to Docker Hub (https://hub.docker.com/explore/) $ docker build -t janloeffler/wordpress-aws-scaler:0.1 . $ docker push janloeffler/wordpress-aws-scaler:0.1
  • 40. FROM debian:testing # PHP RUN apt-get update && apt-get -y install php7.0 ... # nginx site conf COPY docker/nginx.conf /etc/nginx/nginx.conf # Install WP-CLI from GitHub ... # Download WordPress from wordpress.org RUN wp core download --path=/usr/src/wordpress --allow-root # Integrate user data COPY content /usr/src/wordpress/wp-content COPY docker/php-opcache.ini /etc/php/7.0/fpm/conf.d/10-opcache.ini VOLUME ['/usr/src/wordpress/wp-content'] EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
  • 41. List existing AWS resources List existing AWS Resources $ aws ec2 describe-vps $ aws ec2 describe-security-groups $ aws ec2 describe-instances $ aws rds describe-db-instances [...] Do this for all AWS components $ aws autoscaling $ aws ec2 $ aws cloudfront $ aws cloudwatch $ aws elb $ aws rds $ aws s3 $ aws route53 $ aws events
  • 42. Create new resources Create new AWS Resources $ aws ec2 create-vpc $ aws ec2 create-security-group [...] Do this for all AWS components $ aws autoscaling $ aws ec2 $ aws cloudfront $ aws cloudwatch $ aws elb $ aws rds $ aws s3 $ aws route53 $ aws events
  • 43. Create new Launch Configuration Generate EC2-User-Data Script to run directly after booting EC2 VM $ cat >ec2-user-data.sh <<EOL #!/bin/bash docker pull janloeffler/wordpress-aws-scaler:0.1 docker run -d -p 80:80 -p 443:443 -e WORDPRESS_DB_HOST='${DB}' -e WORDPRESS_DB_USER='${DB_USERNAME}' -e WORDPRESS_DB_PASSWORD='${DB_PASSWORD}' -e WORDPRESS_DB_NAME='${DB_NAME}' -e WORDPRESS_DB_PREFIX='${WORDPRESS_DB_PREFIX}' -e WORDPRESS_URL='http://${ELB}' -e WORDPRESS_TITLE='${WORDPRESS_TITLE}' -e WORDPRESS_USER_EMAIL='${WORDPRESS_USER_EMAIL}' -e NEWRELIC_KEY='${NEWRELIC_KEY}' -e NEWRELIC_NAME='${NEWRELIC_NAME}' -e S3_KEY='${IAM_USER_KEY}' -e S3_SECRET='${IAM_USER_SECRET}' -e S3_BUCKET='${S3_BUCKET_NAME}' -e S3_BUCKET_URL='${S3_URL}' -it janloeffler/wordpress-aws-scaler:0.1 EOL Create new Launch Configuration for AutoScaling $ aws autoscaling create-launch-configuration --launch-configuration-name $LC_NAME --image-id $AMI --instance-type $INSTANCE_TYPE --key-name $KEYNAME --
  • 44. You must love JSON !!! ;-) { "Reservations": [ { "OwnerId": "699328319947", "ReservationId": "r-041ac13209e0d4eef", "Groups": [], "RequesterId": "226008221399", "Instances": [ { "Monitoring": { "State": "enabled" }, "PublicDnsName": "ec2-52-210-200-157.eu-west-1.compute.amazonaws.com", "State": { "Code": 16, "Name": "running" }, "EbsOptimized": false, "LaunchTime": "2016-09-05T12:19:54.000Z", "PublicIpAddress": "52.210.200.157", "PrivateIpAddress": "172.31.25.83", "ProductCodes": [ { "ProductCodeId": "4jvb72q6a56js2x7jzd24jar5", "ProductCodeType": "marketplace" } ], "VpcId": "vpc-fffbe19a", "StateTransitionReason": "", "InstanceId": "i-0ea3384a24a3c6aba", "ImageId": "ami-64385917", "PrivateDnsName": "ip-172-31-25-83.eu-west-1.compute.internal", "KeyName": "Marko Heijnen", "SecurityGroups": [ { "GroupName": "WordPress-Docker-Test", "GroupId": "sg-1b8dde7c" } ], "ClientToken": "70aa81e1-10a3-4b83-acc7-62702015d06e_subnet-cff90cb9_1", "SubnetId": "subnet-cff90cb9", "InstanceType": "m3.medium", "NetworkInterfaces": [ { "Status": "in-use", "MacAddress": "06:c0:22:65:b4:ed", "SourceDestCheck": true, "VpcId": "vpc-fffbe19a", "Description": "", "Association": { "PublicIp": "52.210.200.157", "PublicDnsName": "ec2-52-210-200-157.eu-west-1.compute.amazonaws.com", "IpOwnerId": "amazon" }, "NetworkInterfaceId": "eni-2f4efa63", "PrivateIpAddresses": [ { "PrivateDnsName": "ip-172-31-25-83.eu-west-1.compute.internal", "Association": { "PublicIp": "52.210.200.157", "PublicDnsName": "ec2-52-210-200-157.eu-west-1.compute.amazonaws.com", "IpOwnerId": "amazon" }, "Primary": true, "PrivateIpAddress": "172.31.25.83" } ], "PrivateDnsName": "ip-172-31-25-83.eu-west-1.compute.internal", "Attachment": { "Status": "attached", "DeviceIndex": 0, "DeleteOnTermination": true, "AttachmentId": "eni-attach-7f9031a0", "AttachTime": "2016-09-05T12:19:54.000Z" }, […]
  • 50. docker run -d --link web-app:backend-host --volumes-from web-app --env 'VCL_CONFIG=/data/path/to/varnish.vcl' million12/varnish Create new Varnish Cache Server as Docker Container
  • 52. 250 users → 3 sec 420 users → crash!!! Overheating a Fiat Uno without Turbo (Varnish)
  • 53. 500 users → <2,5 sec Overheating a Fiat Uno with Turbo (Varnish)
  • 54. “There are only two hard things in Computer Science: cache invalidation and naming things.” https://martinfowler.com/bliki/TwoHardThings.html Martin Fowler
  • 55. Jan Löffler CTO Plesk ● @jlsoft2 ● jan@plesk.com ● http://www.slideshare.net/jlsoft/ ● https://www.jan-loeffler.de
  • 58. WordPress Management Free SSL everywhere http2 80+ extensions CLI Automatic Updates Site Migration Free support 32+ languages Server Security DNS
  • 64. “When you walk through your website architecture and you wonder who could be so stupid to test it with 20.000 parallel requests per second. But if you want to be successful and play in the first league, it is important to think about it before your traffic increases” Jan Löffler @jlsoft2