SlideShare a Scribd company logo
1 of 48
Download to read offline
Scalable Plone hosting
with Amazon EC2
for Rice University’s
Rhaptos open learning
platform
Nate Aune - Jazkarta.com
Plone Conference 2010
Bristol, UK
1Sunday, November 7, 2010
Agenda
• Benefits of cloud computing
• What services does Amazon provide?
• 5 minute launch of Plone on EC2
• Case study: Rhaptos hosting on EC2
• Questions?
2Sunday, November 7, 2010
What makes the Cloud
so attractive?
3Sunday, November 7, 2010
Abstract resources
Focus on your needs, not on hardware specs.
As your needs change, so should your resources.
4Sunday, November 7, 2010
On-demand provisioning
Ask for what you need, exactly when you need it.
Get rid of it when you don’t need it.
5Sunday, November 7, 2010
Scalability in minutes
Scale out or in depending on usage needs.
6Sunday, November 7, 2010
Pay per consumption
No contracts or long-term commitments.
Pay only for what you use.
7Sunday, November 7, 2010
Efficiency of Experts
Utilize the skills, knowledge and resources of experts.
8Sunday, November 7, 2010
Most applications need:
• Compute
• Storage
• Messaging
• Payment
• Distribution
• Scale
• Analytics
9Sunday, November 7, 2010
Flexible infrastructure
• Elastic Computing Cloud (EC2)
• Amazon Machine Images (AMI)
• Elastic IPs
• Elastic Block Storage (EBS)
• Auto-scaling
• Elastic Load Balancing (ELB)
10Sunday, November 7, 2010
Other services
• Simple Storage Solution (S3)
• CloudWatch (monitoring)
• CloudFront (CDN)
11Sunday, November 7, 2010
http://uec-images.ubuntu.com/
Text
12Sunday, November 7, 2010
mr.awsome
Buildout recipe to manage EC2 instances
13Sunday, November 7, 2010
Add an AWS part to buildout
[buildout]
parts = aws
[aws]
recipe = zc.recipe.egg
eggs = mr.awsome
entry-points =
aws=mr.awsome:aws
assh=mr.awsome:aws_ssh
arguments = configpath="${buildout:directory}/etc"
14Sunday, November 7, 2010
Make a etc/aws.conf file
[securitygroup:demo-server]
description = Bristol Demo Server
connections =
tcp 22 22 0.0.0.0/0
tcp 80 80 0.0.0.0/0
tcp 8080 8080 0.0.0.0/0
[instance:demo-server]
keypair = bristol-keypair
securitygroups = demo-server
region = us-east-1
placement = us-east-1a
instance_type = t1.micro
image = ami-480df921
startup_script = startup-demo-server
fabfile = fabfile.py
15Sunday, November 7, 2010
Make a bash script:
etc/startup-demo-server
#!/bin/bash
set -e -x
export DEBIAN_FRONTEND=noninteractive
wget http://www.enfoldsystems.com/pubkey.gpg
apt-key add ./pubkey.gpg
echo "deb http://dist.clients.enfoldsystems.com/ubuntu lucid
universe" >> /etc/apt/sources.list
apt-get update && apt-get upgrade -y
apt-get install plone-default -y
/etc/init.d/plone-default
16Sunday, November 7, 2010
Set your access keys
#!/bin/bash
export AWS_ACCESS_KEY_ID="<your_access_key_id>"
export AWS_SECRET_ACCESS_KEY="<your_secret_access_key>"
Set these environment variables.
$ source setkeys.sh
$ env
File: setkeys.sh
17Sunday, November 7, 2010
Start the demo server
$ ./bin/aws start demo-server
INFO: Instance 'demo-server' unavailable
INFO: Creating instance 'demo-server'
INFO: Instance created, waiting until it's available
....
INFO: Instance 'demo-server' available
INFO: Instance running.
INFO: Instances DNS name ec2-50-16-25-92.compute-1.amazonaws.com
INFO: Instances public DNS name ec2-50-16-25-92.compute-1.amazonaws.com
18Sunday, November 7, 2010
Benefits of EC2
• Seamless disaster recovery with repeatable
deployments using buildout and mr.awsome
• Easy launching of testing, staging and QA
servers that are isolated from your
production environment (stop when not
used to avoid paying for them)
• Pay-for-what-you-use metered pricing to
launch servers on-demand during peak
periods
• Auto-scaling to launch new Zeo client
machines and shut them down when no
longer needed
19Sunday, November 7, 2010
Connexions & Rhaptos
A case study in deploying OSS to the cloud
20Sunday, November 7, 2010
s
Log In Contact Us Report a Bug
Search
Search Site
Home Content Lenses About Us Help MyCNX
FEATURED CONTENT
New features
1 2 3
MY ACCOUNT
SPOTLIGHT
Skip
ConnexionsSections
You are here: Home
Connexions is:
a place to view and share educational material made of
small knowledge chunks called modules that can be
organized as courses, books, reports, etc. Anyone may view
or contribute:
authors create and collaborate
instructors rapidly build and share custom collections
learners find and explore content
More about us ...
Advanced Algebra II
The world of second-year
algebra comes alive in Kenny
Felder's Advanced Algebra II.
Felder, a high school math
teacher in North Carolina,
designed his course using a
nontraditional approach to a very
traditional subject. Centered
around a Homework and
Activities book, along with
accompanying Conceptual
Explanations and Teacher's Guide collections,
Advanced Algebra II tackles topics by focusing on
comprehension rather than straight lecture delivery.
Advanced Algebra II was selected by California's Free
Digital Textbook Initiative to be included in a list of
free textbooks available to California schools starting
in Fall 2009.
Collaborative Statistics
Collaborative Statistics was
written by two faculty members
FIND CONTENT
16547 reusable modules woven into 1007 collections.
or browse by ...
Language
Popularity
Title, author, etc.
CREATE CONTENT
Creating content in Connexions is as easy as 1, 2, 3:
Get an account
and log in to
your workspace.
Make a module
from scratch or
convert it from a
Word doc.
Publish your
works, sharing
them with the world.
Jump right in
Get an account
How to create a module in
minutes
How to create a collection
with existing modules
Guides and tutorials
New author guide
Connexions Tutorial and
Reference
Username
Password
Log in
Get an account
Forgot your password?
User feedback
"I enjoy using
the
Connexions
site and the
philosophy
behind it
encourages
one to learn
new fields and
to network with others. Your
site is my new homeschool on
the internet. It is helping me
to grow as a writer of
academic materials as I read
what others have written so as
to shape my own. I am also
amazed at the range of
institutions where your writers
come from. Thanks for the use
of these great facilities."
Go
Arts
Business
Humanities
Mathematics and Statistics
Science and Technology
Social Sciences
Search Content
Subject
21Sunday, November 7, 2010
Search
Login Preferences Help/Guide About Trac
Wiki Timeline Roadmap Browse Source View Tickets New Ticket Search
Start Page Index History Last Change
Welcome to Connexions and Rhaptos Software Development
Connexions ( cnx.org) is legos for education. It is a world-wide repository and publishing system to build textbooks, courses, lessons, and
journals. Individual authors, major content publishers, and educational organizations all contribute. Lenses provide a way for high-quality material
to be endorsed, recommended, categorized, and aligned to standards. Rhaptos is the open source software that runs the Connexions site and
Enterprise Rhaptos is the software for running private content installations. Read more about Connexions and Rhaptos mission and architecture
here.
Enterprise Rhaptos Connexions and Rhaptos Development
API's for Accessing Data Quality Assurance and Testing
Enterprise Rhaptos
Enterprise Rhaptos enables the creation, sharing, modification, and vetting of educational materials accessible to anyone, anywhere, anytime via
the World Wide Web. Rhaptos' unique features of permanent versions of all materials, a simple, semantic document language, and a powerful
lensing system for post-publication quality control, customized tagging, and community-based search and discovery are the engine behind a truly
reusable repository of knowledge and learning. Enterprise Rhaptos allows companies and individual organizations to host their own private
authoring platform and publishing repository.
Installation Instructions for Enterprise Rhaptos
API's for Accessing Connexions Data
Table of Contents
Welcome to Connexions and Rhaptos Software Development
Enterprise Rhaptos
API's for Accessing Connexions Data
Accessing content, feeds, and statistics
Downloading, transforming and branding content
Software Architecture and Application Programming Interfaces
Connexions Rhaptos Development
Developer Resources (Getting involved)
Roadmap, Designs, Desires
Starting Points for Connexions and Rhaptos Software Development
Quality Assurance and Testing
Test, Release, and Configuration Docs
Using the Connexions Rhaptos Trac Bug System
Release and Configuration Details for Connexions and Rhaptos
More about TRAC
22Sunday, November 7, 2010
Virtualization of Rhaptos
Two primary reasons to move to the cloud:
1) Hurricane territory (disaster recovery)
2) Increase adoption by other universities
Cost was also a consideration but not a
primary reason for carrying out the project.
23Sunday, November 7, 2010
Deploy to Amazon EC2
with Python scripts
• Define server profiles with OS dependencies
and turn into an AMI (Amazon Machine Image)
• Install & configure application on EBS volume
• Take snapshot of volume
• Launch new AMIs and attach EBS volume
created from saved snapshot.
24Sunday, November 7, 2010
25Sunday, November 7, 2010
Distributed Architecture
Internet
Webserver
Cache Sys
Load Balancer
s1
s3
s4 s5
s2
proxy
frontend1
frontend2
frontend3
backend
26Sunday, November 7, 2010
[macro:base-securitygroup]
connections =
tcp 22 22 0.0.0.0/0
tcp 80 80 0.0.0.0/0
[securitygroup:backend]
<= macro:base-securitygroup
description = Bristol backend machine running Zeo server
[securitygroup:frontend1]
<= macro:base-securitygroup
description = Bristol frontend machine running Zeo client 1
connections =
tcp 8080 8080 0.0.0.0/0
[securitygroup:frontend2]
<= macro:base-securitygroup
description = Bristol frontend machine running Zeo client 2
connections =
tcp 8080 8080 0.0.0.0/0
[securitygroup:proxy]
<= macro:base-securitygroup
description = Bristol proxy machine running Apache, Varnish, HAProxy
aws.conf - define security groups
27Sunday, November 7, 2010
[macro:base-instance]
image = ami-480df921
keypair = bristol-keypair
region = us-east-1
placement = us-east-1c
instance_type = t1.micro
fabfile = fabfile.py
[instance:backend]
<= macro:base-instance
securitygroups = backend
startup_script = backend-startup.sh
ip = xxx.xxx.xxx.xxx
[instance:frontend1]
<= macro:base-instance
securitygroups = frontend1
startup_script = frontend-startup.sh
ip = xxx.xxx.xxx.xxx
[instance:frontend2]
<= macro:base-instance
securitygroups = frontend2
startup_script = frontend-startup.sh
ip = xxx.xxx.xxx.xxx
[instance:proxy]
<= macro:base-instance
securitygroups = proxy
startup_script = proxy-startup.sh
ip = xxx.xxx.xxx.xxx
28Sunday, November 7, 2010
[buildout]
parts =
backend-script
frontend-script
proxy-script
[backend-script]
recipe = collective.recipe.template
input = deployment/templates/zope-startup-script.sh
output = deployment/backend-startup.sh
svn_url = http://svn.jazkarta.com/.../bristol-buildout/trunk
buildout_config = backend.cfg
[frontend-script]
recipe = collective.recipe.template
input = deployment/templates/zope-startup-script.sh
output = deployment/frontend-startup.sh
svn_url = http://svn.jazkarta.com/.../bristol-buildout/trunk
buildout_config = frontend.cfg
[proxy-script]
recipe = collective.recipe.template
input = deployment/templates/proxy-startup-script.sh
output = deployment/proxy-startup.sh
svn_url = http://svn.jazkarta.com/.../bristol-buildout/trunk
buildout_config = proxy.cfg
29Sunday, November 7, 2010
#!/bin/bash
set -e -x
export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get upgrade -y
echo "----- Install system packages for Plone"
apt-get -y install python2.6-dev subversion build-essential
echo "----- Create an unprivileged user zope with password disabled"
adduser zope --disabled-password --gecos ""
echo "----- Check out the buildout"
cd /home/zope
echo 'pn' | svn co http://svn.jazkarta.com/.../.../trunk buildout
echo "----- Make the zope user the owner of this directory"
chown -R zope:zope buildout
echo "----- Run the buildout as user zope"
cd buildout
sudo -u zope python2.6 bootstrap.py -c backend.cfg
sudo -u zope ./bin/buildout -v -c backend.cfg
echo "----- Start Zeo processes"
sudo -u zope ./bin/supervisord
sudo -u zope ./bin/supervisorctl status
echo "----- Make sure that Supervisor starts on reboot"
ln -s /home/zope/buildout/etc/supervisor /etc/init.d/supervisor
chmod +x /etc/init.d/supervisor
update-rc.d supervisor defaults
30Sunday, November 7, 2010
[buildout]
backend-dns-name = ec2-174-129-192-63.compute-1.amazonaws.com
frontend1-dns-name = ec2-174-129-116-33.compute-1.amazonaws.com
frontend2-dns-name = ec2-184-73-240-104.compute-1.amazonaws.com
Must define the FQDN
of the Zeo clients and
Zeo servers
When these names are resolved *on* the server, the DNS
server returns the private IP, which means you avoid paying
bandwidth charges for outgoing/incoming traffic.
31Sunday, November 7, 2010
$ ./bin/aws start backend
$ ./bin/aws start frontend1
$ ./bin/aws start frontend2
$ ./bin/aws start proxy
Start up the servers
with one command
32Sunday, November 7, 2010
Fault tolerant
Eliminating single points of failure.
33Sunday, November 7, 2010
Distributed Architecture
Internet
Webserver
Cache Sys
Load Balancer
s1
s3
s4 s5
s2
34Sunday, November 7, 2010
Heartbeat
monitors Zeo
server and moves to
backup in case of
failure
DRDB
Distributed storage
system similar in
principle in RAID,
but which works
over the network.
35Sunday, November 7, 2010
document jazhar_diagrams.graffle
modified 26 Oct 2009 20:51+0100 page 2
logical server
architecture
...
plone-fe-1.seas.harvard.eduplone-fe-0.seas.harvard.edu
plone-zope-0.web.private plone-zope-1.web.private
plone-zeo-0.web.private plone-zeo-1.web.private
Zope Client
ZEO Server ZEO Server
Zope Client Zope Client Zope Client
Apache
Varnish
Deliverance
Pound
browser clients
backend
frontend
internet
standard
connection
failover
connection
Apache
Varnish
Deliverance
Pound Supervisor
Supervisor
• HTTP:8221
• HTTP:8222 • HTTP:8223
• HTTP:8220
• HTTP:8889
• HTTP:9999• HTTP:80
• HTTPS:443
• HTTP:8000
• HTTP:9999
ldap
LDAPSupervisor
• HTTP:9999 • LDAP:389• HTTP:8222 • HTTP:8223
Supervisor
• HTTP:9999
host host
passive
resource
active
resource
Supervisor
• HTTP:9999
• HTTP:8220
• HTTP:8889
• HTTP:80
• HTTPS:443
• HTTP:8000
36Sunday, November 7, 2010
Improvements to the
deployment process
• time to launch a new site
was days
• brittle non-repeatable
installation process
• delay in procuring
hardware and installing
OS dependencies
• time to launch a new site
was minutes
• streamlined and
automated installation
process
• virtual machines are
launched instantly and
OS dependencies are
already installed on the disk
image.
Before After
37Sunday, November 7, 2010
Fabric
Scripts to deploy to remote hosts.
http://www.fabfile.org
38Sunday, November 7, 2010
Fabric
set(fab_user='plone',
fab_hosts=['localhost'],
local='/home/plone/prod/',
remote='/opt/zope/prod/',
site='budapest.buildout')
def deploy():
local('cd $(local)$(site)')
local('tar cvfz $(site).tgz buildout --exclude=.svn --exclude=*.pyc')
run('cd $(remote)$(site); ./bin/supervisorctl shutdown')
run('rm -rf $(remote)$(site)')
put('$(site).tar.gz', '$(remote)$(site).tar.gz')
run('cd $(root)$(site) && tar zxf $(site).tar.gz')
start()
def start():
run('cd $(remote)$(site)')
run('./bin/supervisord')
39Sunday, November 7, 2010
Deploy
$ fab deploy
• Provides a local packaging of the source into
a tarball
• Removes the old remotely deployed code
• Puts the source on the remote host
• Restarts the site
What does this one command do?
40Sunday, November 7, 2010
Benefits of Fabric
• Chain local-command, remote-command,
and remote-copy commands
• Substitute variables, and the splitting of
distinct operations (like in the case of the
'restart' command) so you run them
separately, with a fab restart, for example.
41Sunday, November 7, 2010
Example Fabric file
• See Alex Clark’s Fabric file:
• http://github.com/aclark4life/Debian-Deploy-
Plone/blob/master/fabfile.py
42Sunday, November 7, 2010
collective.hostout
Buildout-based recipe for deploying to remote host
http://plone.org/products/collective.hostout
43Sunday, November 7, 2010
[buildout]
extends = buildout.cfg
parts += hostout prod
auto-checkout += collective.hostout
[sources]
collective.hostout = svn https://svn.plone.org/svn/collective/collective.hostout/trunk
[hostout]
recipe = collective.hostout
user = root
#password = blah
identity-file = /Users/nateaune/id_rsa-gsg-keypair
pre-commands =
# ${buildout:directory}/bin/supervisorctl shutdown || echo 'Unable to shutdown'
# post-commands =
# ${buildout:directory}/bin/supervisord
#effective-user = zope
[prod]
recipe = collective.hostout
extends = hostout
host = ec2-75-101-211-135.compute-1.amazonaws.com
buildout = buildout.cfg
path = /opt/zope/prod
44Sunday, November 7, 2010
Run the deploy
commands
$ ./bin/buildout -N
Installing prod.
Generated script '/bin/hostout'.
$ bin/hostout deploy
Invalid hostout hostouts are: prod
$ bin/hostout deploy prod
...
45Sunday, November 7, 2010
Go to Dylan’s talk
• Deploying with collective.hostout with
Dylan Jay.
• Today at 16:10-16:55 in Duchess 1+2.
46Sunday, November 7, 2010
Sprint idea
• Make a site to launch demo Plone sites using :
• t1.micro instances (free for 1st year)
• Enfold’s Ubuntu package
• xdv to show multitude of themes
• Could later include bundles of popular add-ons:
PloneEdu, multimedia, etc.
47Sunday, November 7, 2010
Questions?
• http://rhaptos.org
• http://pypi.python.org/pypi/mr.awsome
• http://fabfile.org
• http://pypi.python.org/pypi/collective.hostout
•
48Sunday, November 7, 2010

More Related Content

What's hot

[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders
[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders
[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReadersRakuten Group, Inc.
 
Tackling complexity in giant systems: approaches from several cloud providers
Tackling complexity in giant systems: approaches from several cloud providersTackling complexity in giant systems: approaches from several cloud providers
Tackling complexity in giant systems: approaches from several cloud providersPatrick Chanezon
 
Cloud Foundry Japan Community Meetup
Cloud Foundry Japan Community MeetupCloud Foundry Japan Community Meetup
Cloud Foundry Japan Community MeetupPatrick Chanezon
 
PowerPoint Presentation
PowerPoint PresentationPowerPoint Presentation
PowerPoint Presentationlalitjangra9
 
Portrait of the Developer As "The Artist" - English Version
Portrait of the Developer As "The Artist" - English VersionPortrait of the Developer As "The Artist" - English Version
Portrait of the Developer As "The Artist" - English VersionPatrick Chanezon
 
OpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampOpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampAnne Gentle
 
Markup languages and warp-speed documentation
Markup languages and warp-speed documentationMarkup languages and warp-speed documentation
Markup languages and warp-speed documentationLois Patterson
 
Depolying Drupal with Git, Drush Make and Capistrano
Depolying Drupal with Git, Drush Make and CapistranoDepolying Drupal with Git, Drush Make and Capistrano
Depolying Drupal with Git, Drush Make and Capistranolibsys
 
Rethinking system design
Rethinking system designRethinking system design
Rethinking system designBryan Ollendyke
 
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26Derek Ashmore
 
PHP Architect Virtual Cloud summit
PHP Architect Virtual Cloud summitPHP Architect Virtual Cloud summit
PHP Architect Virtual Cloud summitKirsten Hunter
 
Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)bcantrill
 
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)Panagiotis Kanavos
 
Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016
Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016
Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016Pavel Chunyayev
 
Moving Windows Applications to the Cloud
Moving Windows Applications to the CloudMoving Windows Applications to the Cloud
Moving Windows Applications to the CloudRightScale
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Pavel Chunyayev
 
Modern Automated Site Provisioning for SharePoint Online
Modern Automated Site Provisioning for SharePoint OnlineModern Automated Site Provisioning for SharePoint Online
Modern Automated Site Provisioning for SharePoint OnlineDocFluix, LLC
 
Java Night 2010 SteamCannon
Java Night 2010 SteamCannonJava Night 2010 SteamCannon
Java Night 2010 SteamCannonmarekgoldmann
 
Mediawiki to Confluence migration
Mediawiki to Confluence migrationMediawiki to Confluence migration
Mediawiki to Confluence migrationNils Hofmeister
 

What's hot (20)

[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders
[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders
[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders
 
Tackling complexity in giant systems: approaches from several cloud providers
Tackling complexity in giant systems: approaches from several cloud providersTackling complexity in giant systems: approaches from several cloud providers
Tackling complexity in giant systems: approaches from several cloud providers
 
Cloud Foundry Japan Community Meetup
Cloud Foundry Japan Community MeetupCloud Foundry Japan Community Meetup
Cloud Foundry Japan Community Meetup
 
PowerPoint Presentation
PowerPoint PresentationPowerPoint Presentation
PowerPoint Presentation
 
Portrait of the Developer As "The Artist" - English Version
Portrait of the Developer As "The Artist" - English VersionPortrait of the Developer As "The Artist" - English Version
Portrait of the Developer As "The Artist" - English Version
 
OpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampOpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot Camp
 
Markup languages and warp-speed documentation
Markup languages and warp-speed documentationMarkup languages and warp-speed documentation
Markup languages and warp-speed documentation
 
Depolying Drupal with Git, Drush Make and Capistrano
Depolying Drupal with Git, Drush Make and CapistranoDepolying Drupal with Git, Drush Make and Capistrano
Depolying Drupal with Git, Drush Make and Capistrano
 
Rethinking system design
Rethinking system designRethinking system design
Rethinking system design
 
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
 
PHP Architect Virtual Cloud summit
PHP Architect Virtual Cloud summitPHP Architect Virtual Cloud summit
PHP Architect Virtual Cloud summit
 
Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)Joyent circa 2006 (Scale with Rails)
Joyent circa 2006 (Scale with Rails)
 
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)
 
Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016
Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016
Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016
 
Moving Windows Applications to the Cloud
Moving Windows Applications to the CloudMoving Windows Applications to the Cloud
Moving Windows Applications to the Cloud
 
Drupal Basics
Drupal BasicsDrupal Basics
Drupal Basics
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015
 
Modern Automated Site Provisioning for SharePoint Online
Modern Automated Site Provisioning for SharePoint OnlineModern Automated Site Provisioning for SharePoint Online
Modern Automated Site Provisioning for SharePoint Online
 
Java Night 2010 SteamCannon
Java Night 2010 SteamCannonJava Night 2010 SteamCannon
Java Night 2010 SteamCannon
 
Mediawiki to Confluence migration
Mediawiki to Confluence migrationMediawiki to Confluence migration
Mediawiki to Confluence migration
 

Similar to Scalable Plone hosting with Amazon EC2 for Rice University’s Rhaptos open learning platform

EBSCO Digital Transformation with AWS
EBSCO Digital Transformation with AWS EBSCO Digital Transformation with AWS
EBSCO Digital Transformation with AWS Kenzan
 
Introduction to Orchestration and DevOps with OpenStack
Introduction to Orchestration and DevOps with OpenStackIntroduction to Orchestration and DevOps with OpenStack
Introduction to Orchestration and DevOps with OpenStackAbderrahmane TEKFI
 
ECM and Open Source Software: A Disruptive Force in ECM Solutions
ECM and Open Source Software: A Disruptive Force in ECM SolutionsECM and Open Source Software: A Disruptive Force in ECM Solutions
ECM and Open Source Software: A Disruptive Force in ECM SolutionsJeff Potts
 
AWS re:Invent 2016: Open Source at AWS—Contributions, Support, and Engagement...
AWS re:Invent 2016: Open Source at AWS—Contributions, Support, and Engagement...AWS re:Invent 2016: Open Source at AWS—Contributions, Support, and Engagement...
AWS re:Invent 2016: Open Source at AWS—Contributions, Support, and Engagement...Amazon Web Services
 
DeveloperWeek Global 2020 - OpenJS Foundation - The First 25 Years of Javascr...
DeveloperWeek Global 2020 - OpenJS Foundation - The First 25 Years of Javascr...DeveloperWeek Global 2020 - OpenJS Foundation - The First 25 Years of Javascr...
DeveloperWeek Global 2020 - OpenJS Foundation - The First 25 Years of Javascr...Bethany Nicolle Griggs
 
Weekly lecture appsterdam_19mar2014
Weekly lecture appsterdam_19mar2014Weekly lecture appsterdam_19mar2014
Weekly lecture appsterdam_19mar2014Microsoft
 
A Lap Around Windows Azure
A Lap Around Windows AzureA Lap Around Windows Azure
A Lap Around Windows AzureDave Bost
 
How Azure helps to build better business processes and customer experiences w...
How Azure helps to build better business processes and customer experiences w...How Azure helps to build better business processes and customer experiences w...
How Azure helps to build better business processes and customer experiences w...Maxim Salnikov
 
A Linux Enthusiast's Perspective on Microsoft OSS & Azure
A Linux Enthusiast's Perspective on Microsoft OSS & AzureA Linux Enthusiast's Perspective on Microsoft OSS & Azure
A Linux Enthusiast's Perspective on Microsoft OSS & AzureMicheal Colhoun
 
Alex Wade, Digital Library Interoperability
Alex Wade, Digital Library InteroperabilityAlex Wade, Digital Library Interoperability
Alex Wade, Digital Library Interoperabilityparker01
 
Conf42-Python-Building Apache NiFi 2.0 Python Processors
Conf42-Python-Building Apache NiFi 2.0 Python ProcessorsConf42-Python-Building Apache NiFi 2.0 Python Processors
Conf42-Python-Building Apache NiFi 2.0 Python ProcessorsTimothy Spann
 
Puppet Keynote by Ralph Luchs
Puppet Keynote by Ralph LuchsPuppet Keynote by Ralph Luchs
Puppet Keynote by Ralph LuchsNETWAYS
 
Current state of affairs cloud computing
Current state of affairs   cloud computingCurrent state of affairs   cloud computing
Current state of affairs cloud computingChirag Jog
 
Cilip Seminar 6th October - Integrating With Open Source
Cilip Seminar 6th October - Integrating With Open SourceCilip Seminar 6th October - Integrating With Open Source
Cilip Seminar 6th October - Integrating With Open SourceJonathan Field
 
Acs south coast nsw openness
Acs south coast nsw opennessAcs south coast nsw openness
Acs south coast nsw opennessNick Hodge
 
SQL Saturday 2016 - Porto, Docker Containers and SQL Server coexistence​
SQL Saturday 2016 - Porto, Docker Containers and SQL Server coexistence​SQL Saturday 2016 - Porto, Docker Containers and SQL Server coexistence​
SQL Saturday 2016 - Porto, Docker Containers and SQL Server coexistence​Pedro Sousa
 
My 3 years with an OpenStack startup
My 3 years with an OpenStack startupMy 3 years with an OpenStack startup
My 3 years with an OpenStack startupJules Fakhoury
 

Similar to Scalable Plone hosting with Amazon EC2 for Rice University’s Rhaptos open learning platform (20)

EBSCO Digital Transformation with AWS
EBSCO Digital Transformation with AWS EBSCO Digital Transformation with AWS
EBSCO Digital Transformation with AWS
 
Introduction to Orchestration and DevOps with OpenStack
Introduction to Orchestration and DevOps with OpenStackIntroduction to Orchestration and DevOps with OpenStack
Introduction to Orchestration and DevOps with OpenStack
 
Dean4j@Njug5
Dean4j@Njug5Dean4j@Njug5
Dean4j@Njug5
 
ECM and Open Source Software: A Disruptive Force in ECM Solutions
ECM and Open Source Software: A Disruptive Force in ECM SolutionsECM and Open Source Software: A Disruptive Force in ECM Solutions
ECM and Open Source Software: A Disruptive Force in ECM Solutions
 
AWS re:Invent 2016: Open Source at AWS—Contributions, Support, and Engagement...
AWS re:Invent 2016: Open Source at AWS—Contributions, Support, and Engagement...AWS re:Invent 2016: Open Source at AWS—Contributions, Support, and Engagement...
AWS re:Invent 2016: Open Source at AWS—Contributions, Support, and Engagement...
 
DeveloperWeek Global 2020 - OpenJS Foundation - The First 25 Years of Javascr...
DeveloperWeek Global 2020 - OpenJS Foundation - The First 25 Years of Javascr...DeveloperWeek Global 2020 - OpenJS Foundation - The First 25 Years of Javascr...
DeveloperWeek Global 2020 - OpenJS Foundation - The First 25 Years of Javascr...
 
Weekly lecture appsterdam_19mar2014
Weekly lecture appsterdam_19mar2014Weekly lecture appsterdam_19mar2014
Weekly lecture appsterdam_19mar2014
 
OSCELOT
OSCELOTOSCELOT
OSCELOT
 
2011 03-03-blti-umass
2011 03-03-blti-umass2011 03-03-blti-umass
2011 03-03-blti-umass
 
A Lap Around Windows Azure
A Lap Around Windows AzureA Lap Around Windows Azure
A Lap Around Windows Azure
 
How Azure helps to build better business processes and customer experiences w...
How Azure helps to build better business processes and customer experiences w...How Azure helps to build better business processes and customer experiences w...
How Azure helps to build better business processes and customer experiences w...
 
A Linux Enthusiast's Perspective on Microsoft OSS & Azure
A Linux Enthusiast's Perspective on Microsoft OSS & AzureA Linux Enthusiast's Perspective on Microsoft OSS & Azure
A Linux Enthusiast's Perspective on Microsoft OSS & Azure
 
Alex Wade, Digital Library Interoperability
Alex Wade, Digital Library InteroperabilityAlex Wade, Digital Library Interoperability
Alex Wade, Digital Library Interoperability
 
Conf42-Python-Building Apache NiFi 2.0 Python Processors
Conf42-Python-Building Apache NiFi 2.0 Python ProcessorsConf42-Python-Building Apache NiFi 2.0 Python Processors
Conf42-Python-Building Apache NiFi 2.0 Python Processors
 
Puppet Keynote by Ralph Luchs
Puppet Keynote by Ralph LuchsPuppet Keynote by Ralph Luchs
Puppet Keynote by Ralph Luchs
 
Current state of affairs cloud computing
Current state of affairs   cloud computingCurrent state of affairs   cloud computing
Current state of affairs cloud computing
 
Cilip Seminar 6th October - Integrating With Open Source
Cilip Seminar 6th October - Integrating With Open SourceCilip Seminar 6th October - Integrating With Open Source
Cilip Seminar 6th October - Integrating With Open Source
 
Acs south coast nsw openness
Acs south coast nsw opennessAcs south coast nsw openness
Acs south coast nsw openness
 
SQL Saturday 2016 - Porto, Docker Containers and SQL Server coexistence​
SQL Saturday 2016 - Porto, Docker Containers and SQL Server coexistence​SQL Saturday 2016 - Porto, Docker Containers and SQL Server coexistence​
SQL Saturday 2016 - Porto, Docker Containers and SQL Server coexistence​
 
My 3 years with an OpenStack startup
My 3 years with an OpenStack startupMy 3 years with an OpenStack startup
My 3 years with an OpenStack startup
 

More from Jazkarta, Inc.

Traveling through time and place with Plone
Traveling through time and place with PloneTraveling through time and place with Plone
Traveling through time and place with PloneJazkarta, Inc.
 
Questions: A Form Library for Python with SurveyJS Frontend
Questions: A Form Library for Python with SurveyJS FrontendQuestions: A Form Library for Python with SurveyJS Frontend
Questions: A Form Library for Python with SurveyJS FrontendJazkarta, Inc.
 
The User Experience: Editing Composite Pages in Plone 6 and Beyond
The User Experience: Editing Composite Pages in Plone 6 and BeyondThe User Experience: Editing Composite Pages in Plone 6 and Beyond
The User Experience: Editing Composite Pages in Plone 6 and BeyondJazkarta, Inc.
 
WTA and Plone After 13 Years
WTA and Plone After 13 YearsWTA and Plone After 13 Years
WTA and Plone After 13 YearsJazkarta, Inc.
 
Collaborating With Orchid Data
Collaborating With Orchid DataCollaborating With Orchid Data
Collaborating With Orchid DataJazkarta, Inc.
 
Spend a Week Hacking in Sorrento!
Spend a Week Hacking in Sorrento!Spend a Week Hacking in Sorrento!
Spend a Week Hacking in Sorrento!Jazkarta, Inc.
 
Plone 5 Upgrades In Real Life
Plone 5 Upgrades In Real LifePlone 5 Upgrades In Real Life
Plone 5 Upgrades In Real LifeJazkarta, Inc.
 
Accessibility in Plone: The Good, the Bad, and the Ugly
Accessibility in Plone: The Good, the Bad, and the UglyAccessibility in Plone: The Good, the Bad, and the Ugly
Accessibility in Plone: The Good, the Bad, and the UglyJazkarta, Inc.
 
Getting Paid Without GetPaid
Getting Paid Without GetPaidGetting Paid Without GetPaid
Getting Paid Without GetPaidJazkarta, Inc.
 
An Open Source Platform for Social Science Research
An Open Source Platform for Social Science ResearchAn Open Source Platform for Social Science Research
An Open Source Platform for Social Science ResearchJazkarta, Inc.
 
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...Jazkarta, Inc.
 
Anatomy of a Large Website Project
Anatomy of a Large Website ProjectAnatomy of a Large Website Project
Anatomy of a Large Website ProjectJazkarta, Inc.
 
Anatomy of a Large Website Project - With Presenter Notes
Anatomy of a Large Website Project - With Presenter NotesAnatomy of a Large Website Project - With Presenter Notes
Anatomy of a Large Website Project - With Presenter NotesJazkarta, Inc.
 
The Mountaineers: Scaling the Heights with Plone
The Mountaineers: Scaling the Heights with PloneThe Mountaineers: Scaling the Heights with Plone
The Mountaineers: Scaling the Heights with PloneJazkarta, Inc.
 
Plone Hosting: A Panel Discussion
Plone Hosting: A Panel DiscussionPlone Hosting: A Panel Discussion
Plone Hosting: A Panel DiscussionJazkarta, Inc.
 
Academic Websites in Plone
Academic Websites in PloneAcademic Websites in Plone
Academic Websites in PloneJazkarta, Inc.
 
Online Exhibits in Plone
Online Exhibits in PloneOnline Exhibits in Plone
Online Exhibits in PloneJazkarta, Inc.
 
Online exhibits in Plone
Online exhibits in PloneOnline exhibits in Plone
Online exhibits in PloneJazkarta, Inc.
 

More from Jazkarta, Inc. (20)

Traveling through time and place with Plone
Traveling through time and place with PloneTraveling through time and place with Plone
Traveling through time and place with Plone
 
Questions: A Form Library for Python with SurveyJS Frontend
Questions: A Form Library for Python with SurveyJS FrontendQuestions: A Form Library for Python with SurveyJS Frontend
Questions: A Form Library for Python with SurveyJS Frontend
 
The User Experience: Editing Composite Pages in Plone 6 and Beyond
The User Experience: Editing Composite Pages in Plone 6 and BeyondThe User Experience: Editing Composite Pages in Plone 6 and Beyond
The User Experience: Editing Composite Pages in Plone 6 and Beyond
 
WTA and Plone After 13 Years
WTA and Plone After 13 YearsWTA and Plone After 13 Years
WTA and Plone After 13 Years
 
Collaborating With Orchid Data
Collaborating With Orchid DataCollaborating With Orchid Data
Collaborating With Orchid Data
 
Spend a Week Hacking in Sorrento!
Spend a Week Hacking in Sorrento!Spend a Week Hacking in Sorrento!
Spend a Week Hacking in Sorrento!
 
Plone 5 Upgrades In Real Life
Plone 5 Upgrades In Real LifePlone 5 Upgrades In Real Life
Plone 5 Upgrades In Real Life
 
Accessibility in Plone: The Good, the Bad, and the Ugly
Accessibility in Plone: The Good, the Bad, and the UglyAccessibility in Plone: The Good, the Bad, and the Ugly
Accessibility in Plone: The Good, the Bad, and the Ugly
 
Getting Paid Without GetPaid
Getting Paid Without GetPaidGetting Paid Without GetPaid
Getting Paid Without GetPaid
 
An Open Source Platform for Social Science Research
An Open Source Platform for Social Science ResearchAn Open Source Platform for Social Science Research
An Open Source Platform for Social Science Research
 
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
 
Anatomy of a Large Website Project
Anatomy of a Large Website ProjectAnatomy of a Large Website Project
Anatomy of a Large Website Project
 
Anatomy of a Large Website Project - With Presenter Notes
Anatomy of a Large Website Project - With Presenter NotesAnatomy of a Large Website Project - With Presenter Notes
Anatomy of a Large Website Project - With Presenter Notes
 
The Mountaineers: Scaling the Heights with Plone
The Mountaineers: Scaling the Heights with PloneThe Mountaineers: Scaling the Heights with Plone
The Mountaineers: Scaling the Heights with Plone
 
Plone Hosting: A Panel Discussion
Plone Hosting: A Panel DiscussionPlone Hosting: A Panel Discussion
Plone Hosting: A Panel Discussion
 
Plone+Salesforce
Plone+SalesforcePlone+Salesforce
Plone+Salesforce
 
Academic Websites in Plone
Academic Websites in PloneAcademic Websites in Plone
Academic Websites in Plone
 
Plone
PlonePlone
Plone
 
Online Exhibits in Plone
Online Exhibits in PloneOnline Exhibits in Plone
Online Exhibits in Plone
 
Online exhibits in Plone
Online exhibits in PloneOnline exhibits in Plone
Online exhibits in Plone
 

Recently uploaded

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 

Recently uploaded (20)

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 

Scalable Plone hosting with Amazon EC2 for Rice University’s Rhaptos open learning platform

  • 1. Scalable Plone hosting with Amazon EC2 for Rice University’s Rhaptos open learning platform Nate Aune - Jazkarta.com Plone Conference 2010 Bristol, UK 1Sunday, November 7, 2010
  • 2. Agenda • Benefits of cloud computing • What services does Amazon provide? • 5 minute launch of Plone on EC2 • Case study: Rhaptos hosting on EC2 • Questions? 2Sunday, November 7, 2010
  • 3. What makes the Cloud so attractive? 3Sunday, November 7, 2010
  • 4. Abstract resources Focus on your needs, not on hardware specs. As your needs change, so should your resources. 4Sunday, November 7, 2010
  • 5. On-demand provisioning Ask for what you need, exactly when you need it. Get rid of it when you don’t need it. 5Sunday, November 7, 2010
  • 6. Scalability in minutes Scale out or in depending on usage needs. 6Sunday, November 7, 2010
  • 7. Pay per consumption No contracts or long-term commitments. Pay only for what you use. 7Sunday, November 7, 2010
  • 8. Efficiency of Experts Utilize the skills, knowledge and resources of experts. 8Sunday, November 7, 2010
  • 9. Most applications need: • Compute • Storage • Messaging • Payment • Distribution • Scale • Analytics 9Sunday, November 7, 2010
  • 10. Flexible infrastructure • Elastic Computing Cloud (EC2) • Amazon Machine Images (AMI) • Elastic IPs • Elastic Block Storage (EBS) • Auto-scaling • Elastic Load Balancing (ELB) 10Sunday, November 7, 2010
  • 11. Other services • Simple Storage Solution (S3) • CloudWatch (monitoring) • CloudFront (CDN) 11Sunday, November 7, 2010
  • 13. mr.awsome Buildout recipe to manage EC2 instances 13Sunday, November 7, 2010
  • 14. Add an AWS part to buildout [buildout] parts = aws [aws] recipe = zc.recipe.egg eggs = mr.awsome entry-points = aws=mr.awsome:aws assh=mr.awsome:aws_ssh arguments = configpath="${buildout:directory}/etc" 14Sunday, November 7, 2010
  • 15. Make a etc/aws.conf file [securitygroup:demo-server] description = Bristol Demo Server connections = tcp 22 22 0.0.0.0/0 tcp 80 80 0.0.0.0/0 tcp 8080 8080 0.0.0.0/0 [instance:demo-server] keypair = bristol-keypair securitygroups = demo-server region = us-east-1 placement = us-east-1a instance_type = t1.micro image = ami-480df921 startup_script = startup-demo-server fabfile = fabfile.py 15Sunday, November 7, 2010
  • 16. Make a bash script: etc/startup-demo-server #!/bin/bash set -e -x export DEBIAN_FRONTEND=noninteractive wget http://www.enfoldsystems.com/pubkey.gpg apt-key add ./pubkey.gpg echo "deb http://dist.clients.enfoldsystems.com/ubuntu lucid universe" >> /etc/apt/sources.list apt-get update && apt-get upgrade -y apt-get install plone-default -y /etc/init.d/plone-default 16Sunday, November 7, 2010
  • 17. Set your access keys #!/bin/bash export AWS_ACCESS_KEY_ID="<your_access_key_id>" export AWS_SECRET_ACCESS_KEY="<your_secret_access_key>" Set these environment variables. $ source setkeys.sh $ env File: setkeys.sh 17Sunday, November 7, 2010
  • 18. Start the demo server $ ./bin/aws start demo-server INFO: Instance 'demo-server' unavailable INFO: Creating instance 'demo-server' INFO: Instance created, waiting until it's available .... INFO: Instance 'demo-server' available INFO: Instance running. INFO: Instances DNS name ec2-50-16-25-92.compute-1.amazonaws.com INFO: Instances public DNS name ec2-50-16-25-92.compute-1.amazonaws.com 18Sunday, November 7, 2010
  • 19. Benefits of EC2 • Seamless disaster recovery with repeatable deployments using buildout and mr.awsome • Easy launching of testing, staging and QA servers that are isolated from your production environment (stop when not used to avoid paying for them) • Pay-for-what-you-use metered pricing to launch servers on-demand during peak periods • Auto-scaling to launch new Zeo client machines and shut them down when no longer needed 19Sunday, November 7, 2010
  • 20. Connexions & Rhaptos A case study in deploying OSS to the cloud 20Sunday, November 7, 2010
  • 21. s Log In Contact Us Report a Bug Search Search Site Home Content Lenses About Us Help MyCNX FEATURED CONTENT New features 1 2 3 MY ACCOUNT SPOTLIGHT Skip ConnexionsSections You are here: Home Connexions is: a place to view and share educational material made of small knowledge chunks called modules that can be organized as courses, books, reports, etc. Anyone may view or contribute: authors create and collaborate instructors rapidly build and share custom collections learners find and explore content More about us ... Advanced Algebra II The world of second-year algebra comes alive in Kenny Felder's Advanced Algebra II. Felder, a high school math teacher in North Carolina, designed his course using a nontraditional approach to a very traditional subject. Centered around a Homework and Activities book, along with accompanying Conceptual Explanations and Teacher's Guide collections, Advanced Algebra II tackles topics by focusing on comprehension rather than straight lecture delivery. Advanced Algebra II was selected by California's Free Digital Textbook Initiative to be included in a list of free textbooks available to California schools starting in Fall 2009. Collaborative Statistics Collaborative Statistics was written by two faculty members FIND CONTENT 16547 reusable modules woven into 1007 collections. or browse by ... Language Popularity Title, author, etc. CREATE CONTENT Creating content in Connexions is as easy as 1, 2, 3: Get an account and log in to your workspace. Make a module from scratch or convert it from a Word doc. Publish your works, sharing them with the world. Jump right in Get an account How to create a module in minutes How to create a collection with existing modules Guides and tutorials New author guide Connexions Tutorial and Reference Username Password Log in Get an account Forgot your password? User feedback "I enjoy using the Connexions site and the philosophy behind it encourages one to learn new fields and to network with others. Your site is my new homeschool on the internet. It is helping me to grow as a writer of academic materials as I read what others have written so as to shape my own. I am also amazed at the range of institutions where your writers come from. Thanks for the use of these great facilities." Go Arts Business Humanities Mathematics and Statistics Science and Technology Social Sciences Search Content Subject 21Sunday, November 7, 2010
  • 22. Search Login Preferences Help/Guide About Trac Wiki Timeline Roadmap Browse Source View Tickets New Ticket Search Start Page Index History Last Change Welcome to Connexions and Rhaptos Software Development Connexions ( cnx.org) is legos for education. It is a world-wide repository and publishing system to build textbooks, courses, lessons, and journals. Individual authors, major content publishers, and educational organizations all contribute. Lenses provide a way for high-quality material to be endorsed, recommended, categorized, and aligned to standards. Rhaptos is the open source software that runs the Connexions site and Enterprise Rhaptos is the software for running private content installations. Read more about Connexions and Rhaptos mission and architecture here. Enterprise Rhaptos Connexions and Rhaptos Development API's for Accessing Data Quality Assurance and Testing Enterprise Rhaptos Enterprise Rhaptos enables the creation, sharing, modification, and vetting of educational materials accessible to anyone, anywhere, anytime via the World Wide Web. Rhaptos' unique features of permanent versions of all materials, a simple, semantic document language, and a powerful lensing system for post-publication quality control, customized tagging, and community-based search and discovery are the engine behind a truly reusable repository of knowledge and learning. Enterprise Rhaptos allows companies and individual organizations to host their own private authoring platform and publishing repository. Installation Instructions for Enterprise Rhaptos API's for Accessing Connexions Data Table of Contents Welcome to Connexions and Rhaptos Software Development Enterprise Rhaptos API's for Accessing Connexions Data Accessing content, feeds, and statistics Downloading, transforming and branding content Software Architecture and Application Programming Interfaces Connexions Rhaptos Development Developer Resources (Getting involved) Roadmap, Designs, Desires Starting Points for Connexions and Rhaptos Software Development Quality Assurance and Testing Test, Release, and Configuration Docs Using the Connexions Rhaptos Trac Bug System Release and Configuration Details for Connexions and Rhaptos More about TRAC 22Sunday, November 7, 2010
  • 23. Virtualization of Rhaptos Two primary reasons to move to the cloud: 1) Hurricane territory (disaster recovery) 2) Increase adoption by other universities Cost was also a consideration but not a primary reason for carrying out the project. 23Sunday, November 7, 2010
  • 24. Deploy to Amazon EC2 with Python scripts • Define server profiles with OS dependencies and turn into an AMI (Amazon Machine Image) • Install & configure application on EBS volume • Take snapshot of volume • Launch new AMIs and attach EBS volume created from saved snapshot. 24Sunday, November 7, 2010
  • 26. Distributed Architecture Internet Webserver Cache Sys Load Balancer s1 s3 s4 s5 s2 proxy frontend1 frontend2 frontend3 backend 26Sunday, November 7, 2010
  • 27. [macro:base-securitygroup] connections = tcp 22 22 0.0.0.0/0 tcp 80 80 0.0.0.0/0 [securitygroup:backend] <= macro:base-securitygroup description = Bristol backend machine running Zeo server [securitygroup:frontend1] <= macro:base-securitygroup description = Bristol frontend machine running Zeo client 1 connections = tcp 8080 8080 0.0.0.0/0 [securitygroup:frontend2] <= macro:base-securitygroup description = Bristol frontend machine running Zeo client 2 connections = tcp 8080 8080 0.0.0.0/0 [securitygroup:proxy] <= macro:base-securitygroup description = Bristol proxy machine running Apache, Varnish, HAProxy aws.conf - define security groups 27Sunday, November 7, 2010
  • 28. [macro:base-instance] image = ami-480df921 keypair = bristol-keypair region = us-east-1 placement = us-east-1c instance_type = t1.micro fabfile = fabfile.py [instance:backend] <= macro:base-instance securitygroups = backend startup_script = backend-startup.sh ip = xxx.xxx.xxx.xxx [instance:frontend1] <= macro:base-instance securitygroups = frontend1 startup_script = frontend-startup.sh ip = xxx.xxx.xxx.xxx [instance:frontend2] <= macro:base-instance securitygroups = frontend2 startup_script = frontend-startup.sh ip = xxx.xxx.xxx.xxx [instance:proxy] <= macro:base-instance securitygroups = proxy startup_script = proxy-startup.sh ip = xxx.xxx.xxx.xxx 28Sunday, November 7, 2010
  • 29. [buildout] parts = backend-script frontend-script proxy-script [backend-script] recipe = collective.recipe.template input = deployment/templates/zope-startup-script.sh output = deployment/backend-startup.sh svn_url = http://svn.jazkarta.com/.../bristol-buildout/trunk buildout_config = backend.cfg [frontend-script] recipe = collective.recipe.template input = deployment/templates/zope-startup-script.sh output = deployment/frontend-startup.sh svn_url = http://svn.jazkarta.com/.../bristol-buildout/trunk buildout_config = frontend.cfg [proxy-script] recipe = collective.recipe.template input = deployment/templates/proxy-startup-script.sh output = deployment/proxy-startup.sh svn_url = http://svn.jazkarta.com/.../bristol-buildout/trunk buildout_config = proxy.cfg 29Sunday, November 7, 2010
  • 30. #!/bin/bash set -e -x export DEBIAN_FRONTEND=noninteractive apt-get update && apt-get upgrade -y echo "----- Install system packages for Plone" apt-get -y install python2.6-dev subversion build-essential echo "----- Create an unprivileged user zope with password disabled" adduser zope --disabled-password --gecos "" echo "----- Check out the buildout" cd /home/zope echo 'pn' | svn co http://svn.jazkarta.com/.../.../trunk buildout echo "----- Make the zope user the owner of this directory" chown -R zope:zope buildout echo "----- Run the buildout as user zope" cd buildout sudo -u zope python2.6 bootstrap.py -c backend.cfg sudo -u zope ./bin/buildout -v -c backend.cfg echo "----- Start Zeo processes" sudo -u zope ./bin/supervisord sudo -u zope ./bin/supervisorctl status echo "----- Make sure that Supervisor starts on reboot" ln -s /home/zope/buildout/etc/supervisor /etc/init.d/supervisor chmod +x /etc/init.d/supervisor update-rc.d supervisor defaults 30Sunday, November 7, 2010
  • 31. [buildout] backend-dns-name = ec2-174-129-192-63.compute-1.amazonaws.com frontend1-dns-name = ec2-174-129-116-33.compute-1.amazonaws.com frontend2-dns-name = ec2-184-73-240-104.compute-1.amazonaws.com Must define the FQDN of the Zeo clients and Zeo servers When these names are resolved *on* the server, the DNS server returns the private IP, which means you avoid paying bandwidth charges for outgoing/incoming traffic. 31Sunday, November 7, 2010
  • 32. $ ./bin/aws start backend $ ./bin/aws start frontend1 $ ./bin/aws start frontend2 $ ./bin/aws start proxy Start up the servers with one command 32Sunday, November 7, 2010
  • 33. Fault tolerant Eliminating single points of failure. 33Sunday, November 7, 2010
  • 34. Distributed Architecture Internet Webserver Cache Sys Load Balancer s1 s3 s4 s5 s2 34Sunday, November 7, 2010
  • 35. Heartbeat monitors Zeo server and moves to backup in case of failure DRDB Distributed storage system similar in principle in RAID, but which works over the network. 35Sunday, November 7, 2010
  • 36. document jazhar_diagrams.graffle modified 26 Oct 2009 20:51+0100 page 2 logical server architecture ... plone-fe-1.seas.harvard.eduplone-fe-0.seas.harvard.edu plone-zope-0.web.private plone-zope-1.web.private plone-zeo-0.web.private plone-zeo-1.web.private Zope Client ZEO Server ZEO Server Zope Client Zope Client Zope Client Apache Varnish Deliverance Pound browser clients backend frontend internet standard connection failover connection Apache Varnish Deliverance Pound Supervisor Supervisor • HTTP:8221 • HTTP:8222 • HTTP:8223 • HTTP:8220 • HTTP:8889 • HTTP:9999• HTTP:80 • HTTPS:443 • HTTP:8000 • HTTP:9999 ldap LDAPSupervisor • HTTP:9999 • LDAP:389• HTTP:8222 • HTTP:8223 Supervisor • HTTP:9999 host host passive resource active resource Supervisor • HTTP:9999 • HTTP:8220 • HTTP:8889 • HTTP:80 • HTTPS:443 • HTTP:8000 36Sunday, November 7, 2010
  • 37. Improvements to the deployment process • time to launch a new site was days • brittle non-repeatable installation process • delay in procuring hardware and installing OS dependencies • time to launch a new site was minutes • streamlined and automated installation process • virtual machines are launched instantly and OS dependencies are already installed on the disk image. Before After 37Sunday, November 7, 2010
  • 38. Fabric Scripts to deploy to remote hosts. http://www.fabfile.org 38Sunday, November 7, 2010
  • 39. Fabric set(fab_user='plone', fab_hosts=['localhost'], local='/home/plone/prod/', remote='/opt/zope/prod/', site='budapest.buildout') def deploy(): local('cd $(local)$(site)') local('tar cvfz $(site).tgz buildout --exclude=.svn --exclude=*.pyc') run('cd $(remote)$(site); ./bin/supervisorctl shutdown') run('rm -rf $(remote)$(site)') put('$(site).tar.gz', '$(remote)$(site).tar.gz') run('cd $(root)$(site) && tar zxf $(site).tar.gz') start() def start(): run('cd $(remote)$(site)') run('./bin/supervisord') 39Sunday, November 7, 2010
  • 40. Deploy $ fab deploy • Provides a local packaging of the source into a tarball • Removes the old remotely deployed code • Puts the source on the remote host • Restarts the site What does this one command do? 40Sunday, November 7, 2010
  • 41. Benefits of Fabric • Chain local-command, remote-command, and remote-copy commands • Substitute variables, and the splitting of distinct operations (like in the case of the 'restart' command) so you run them separately, with a fab restart, for example. 41Sunday, November 7, 2010
  • 42. Example Fabric file • See Alex Clark’s Fabric file: • http://github.com/aclark4life/Debian-Deploy- Plone/blob/master/fabfile.py 42Sunday, November 7, 2010
  • 43. collective.hostout Buildout-based recipe for deploying to remote host http://plone.org/products/collective.hostout 43Sunday, November 7, 2010
  • 44. [buildout] extends = buildout.cfg parts += hostout prod auto-checkout += collective.hostout [sources] collective.hostout = svn https://svn.plone.org/svn/collective/collective.hostout/trunk [hostout] recipe = collective.hostout user = root #password = blah identity-file = /Users/nateaune/id_rsa-gsg-keypair pre-commands = # ${buildout:directory}/bin/supervisorctl shutdown || echo 'Unable to shutdown' # post-commands = # ${buildout:directory}/bin/supervisord #effective-user = zope [prod] recipe = collective.hostout extends = hostout host = ec2-75-101-211-135.compute-1.amazonaws.com buildout = buildout.cfg path = /opt/zope/prod 44Sunday, November 7, 2010
  • 45. Run the deploy commands $ ./bin/buildout -N Installing prod. Generated script '/bin/hostout'. $ bin/hostout deploy Invalid hostout hostouts are: prod $ bin/hostout deploy prod ... 45Sunday, November 7, 2010
  • 46. Go to Dylan’s talk • Deploying with collective.hostout with Dylan Jay. • Today at 16:10-16:55 in Duchess 1+2. 46Sunday, November 7, 2010
  • 47. Sprint idea • Make a site to launch demo Plone sites using : • t1.micro instances (free for 1st year) • Enfold’s Ubuntu package • xdv to show multitude of themes • Could later include bundles of popular add-ons: PloneEdu, multimedia, etc. 47Sunday, November 7, 2010
  • 48. Questions? • http://rhaptos.org • http://pypi.python.org/pypi/mr.awsome • http://fabfile.org • http://pypi.python.org/pypi/collective.hostout • 48Sunday, November 7, 2010