The document discusses how buildout is used to create repeatable Python application deployments. Buildout uses a configuration file and recipes to automate the installation of applications and their dependencies. It describes how buildout is used to deploy complex Plone and Django applications across multiple servers. Buildout solves the problems of repeatable and easy application deployment through its use of recipes, parts, and versions control of dependencies.
Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !Florent BENOIT
Développer dans le cloud en Java ? Yes we can !
Grace à Eclipse Che et Codenvy vous pouvez facilement compiler, executer ou développer votre projet Java. L'environnement d'execution utilise Docker
Tutorial on the usage of Sumatra (http://neuralensemble.org/sumatra/) with git. Presented at the Bernstein Center for Computational Neuroscience in May 2015.
Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...Anne Nicolas
Containerisation is a new player in the embedded world. Provisionning and rapid deployment doesn’t really make sense for embedded devices, but the extra security that container partitionning brings to the table is quickly becoming a “must have” for every embedded device.
However, the embedded world has its own constraints. Generic distributions like debian or Fedora are rarely used and tools like dockers can’t build software with custom build-chains the way Yocto or buildroot does it.
This talk will quickly review what are linux containers, why they are usefull in the embedde world, and then will study ways to generate container images using the yocto infrastructure and integrate them in another yocto image without breaking the package-based update system that Yocto provides.
The following is my Agenda
* Why I don’t choose Jenkins or GitLab CI?
* What is Drone CI?
* Drone Infrastructure
* How to install Drone in five minutes?
* Integrate your project
* Create your Drone plugin
* Try drone CLI without drone server
more detail information you can find that in Udemy: https://www.udemy.com/devops-oneday/?couponCode=DRONE-DEVOPS
GeoServer is an amazing project, and an amazing project to work on!
Please attend this workshop to:
* Get Started with the GeoServer codebase
* Orientation with a Tour of the GeoServer architecture
* Introduction the service dispatch framework, includin creating your own service
* Built chain and test facilities
* Create a custom function for use with map styling
* Create a custom process for use with style transformations and web processing service
* Anatomy of a successful pull request
Attendees will build their own GeoServer, learn a bit about how our community operates, and enjoy extending the base application.
If you are a developer looking to support GeoServer, or join us for a sprint or bug-stomp, this workshop is great introduction.
This course features hands-on development. We encourage and expect you to bring your favourite Java development environment.
For a good time with open source join GeoServer today!
Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !Florent BENOIT
Développer dans le cloud en Java ? Yes we can !
Grace à Eclipse Che et Codenvy vous pouvez facilement compiler, executer ou développer votre projet Java. L'environnement d'execution utilise Docker
Tutorial on the usage of Sumatra (http://neuralensemble.org/sumatra/) with git. Presented at the Bernstein Center for Computational Neuroscience in May 2015.
Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...Anne Nicolas
Containerisation is a new player in the embedded world. Provisionning and rapid deployment doesn’t really make sense for embedded devices, but the extra security that container partitionning brings to the table is quickly becoming a “must have” for every embedded device.
However, the embedded world has its own constraints. Generic distributions like debian or Fedora are rarely used and tools like dockers can’t build software with custom build-chains the way Yocto or buildroot does it.
This talk will quickly review what are linux containers, why they are usefull in the embedde world, and then will study ways to generate container images using the yocto infrastructure and integrate them in another yocto image without breaking the package-based update system that Yocto provides.
The following is my Agenda
* Why I don’t choose Jenkins or GitLab CI?
* What is Drone CI?
* Drone Infrastructure
* How to install Drone in five minutes?
* Integrate your project
* Create your Drone plugin
* Try drone CLI without drone server
more detail information you can find that in Udemy: https://www.udemy.com/devops-oneday/?couponCode=DRONE-DEVOPS
GeoServer is an amazing project, and an amazing project to work on!
Please attend this workshop to:
* Get Started with the GeoServer codebase
* Orientation with a Tour of the GeoServer architecture
* Introduction the service dispatch framework, includin creating your own service
* Built chain and test facilities
* Create a custom function for use with map styling
* Create a custom process for use with style transformations and web processing service
* Anatomy of a successful pull request
Attendees will build their own GeoServer, learn a bit about how our community operates, and enjoy extending the base application.
If you are a developer looking to support GeoServer, or join us for a sprint or bug-stomp, this workshop is great introduction.
This course features hands-on development. We encourage and expect you to bring your favourite Java development environment.
For a good time with open source join GeoServer today!
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Runwesley chun
Many people ask, "Which one is better for me: App Engine, Cloud Functions, or Cloud Run?" To help you learn more about them, understand their differences, appropriate use cases, etc., why not deploy the same app to all 3? With this "test drive," you only need to make minor config changes between platforms. You'll also learn one of Google Cloud's AI/ML "building block" APIs as a bonus as the sample app is a simple "mini" Google Translate "MVP". This is a 45- 60-minute talk that reviews the Google Cloud serverless compute platforms then walks through the same app and its deployments. The code is maintained at https://github.com/googlecodelabs/cloud-nebulous-serverless-python
This workshop will walk through the process of creating a video player application that will have a mobile device as a remote control and a pc somewhere as the server. The talk will show some of the easy to implement features and best practices.
Suse Studio: "How to create a live openSUSE image with OpenFOAM® and CFD tools"Baltasar Ortega
Una descripción de Suse Studio, además de una magnífica explicación de su utilización de la mano de Alberto Passalacqua.
"How to create a live
openSUSE image with OpenFOAM® and CFD tools"
Open Source Development
Building your own Custom Firefox (or LibreOffice/OpenOffice)
from the Nightly or Developer Source Code
GIT / Mercurial (code sharing / version control)
What's new in HTML5 and JavaScript 2015
ECMAScript 2015 (ES6)
const, class, let, for of, function*, import
Setting up Notifications, Alerts & Webhooks with Flux v2 by Alison DowdneyWeaveworks
Watch the recording here: https://youtu.be/cakxixc-yQk
❗️ Notifications & Alerts ⚠️
When operating a cluster, different teams may wish to receive notifications about the status of their GitOps pipelines. For example, the on-call team would receive alerts about reconciliation failures in the cluster, while the dev team may wish to be alerted when a new version of an app was deployed and if the deployment is healthy.
Webhook Receivers
The GitOps toolkit controllers are by design pull-based. In order to notify the controllers about changes in Git or Helm repositories, you can setup webhooks and trigger a cluster reconciliation every time a source changes. Using webhook receivers, you can build push-based GitOps pipelines that react to external events.
Alison Dowdney, Developer Experience Engineer at Weaveworks and CNCF Ambassador, walks through how to define a provider, an alert, git commit status, exposing the webhook receiver and defining a git repository and receiver.
Resources
Flux2 Documentation: https://fluxcd.io/docs/
Flux Guide: Setup Notifications: https://fluxcd.io/docs/guides/notifications/
Flux Guide: Setup Webhook receivers: https://fluxcd.io/docs/guides/webhook-receivers/
Flux Roadmap: https://fluxcd.io/docs/roadmap/
Alison's Demo Repo: https://github.com/alisondy/flux-demos
Creating new Tizen profiles using the Yocto ProjectLeon Anavi
Presentation for Tizen Developer Conference 2015 Shenzhen.
Tizen is an open source Linux based software platform for Internet of Things, mobile, wearable and embedded devices. Tizen:Common provides a generic development environment for Tizen 3 which key features include Wayland, Weston, EFL, and the Crosswalk web runtime. The Yocto Project offers easy to use tools to create meta layers for new Tizen 3 profiles that inherit and expand the features of Tizen:Common. This talk will focus the Tizen architecture and it will provide guidelines for creating and building new Tizen profiles, based on Tizen:Common, using the Yocto Project for devices with Intel or ARM processors. It will also provide information about hidden gems in Tizen on Yocto and practical examples for packaging and deploying HTML5 applications through Yocto recipes for the open source hardware development boards MinnowBoard Max (Intel) and Humming Board (Freescale I.MX6 ARM SoC).
eXoer on the grill: eXo Add-ons factory using Docker and CodenvyeXo Platform
Few months ago, Codenvy released a great tutorial about “Creating an eXo Factory Using Codenvy and Docker” http://blog.codenvy.com/creating-codenvy-factory-exo-extensions-development which gave great details about how eXo, Codenvy and Docker can work together to give developers an easy way to code eXo add-ons.
In this presentation we will bring insights about how we used Codenvy’s Factories (with Docker recipes) to give developers a one-click easy way to begin coding eXo Add-ons.
eXoers on the Grill aims to provide some incentive & fresh air for our staff in order to constantly re-think our methods, spread good practices, promote some technology or tools, generate ideas, etc... All the teams are invited to contribute by picking up some hot topics of their choice and spread to other teams.
This presentation was given at the Linux Open Administration Days in Antwerpen, Belgium. It covers how puppetmanaged.org, a set of common puppet modules can be implemented in any current existing puppet setup.
Puppet Camp Silicon Valley 2015: How TubeMogul reached 10,000 Puppet Deployme...Nicolas Brousse
TubeMogul grew from few servers to over two thousands servers and handling over one trillion http requests a month, processed in less than 50ms each. To keep up with the fast growth, the SRE team had to implement an efficient Continuous Delivery infrastructure that allowed to do over 10,000 puppet deployment and 8,500 application deployment in 2014. In this presentation, we will cover the nuts and bolts of the TubeMogul operations engineering team and how they over come challenges.
This 7-second Brain Wave Ritual Attracts Money To You.!nirahealhty
Discover the power of a simple 7-second brain wave ritual that can attract wealth and abundance into your life. By tapping into specific brain frequencies, this technique helps you manifest financial success effortlessly. Ready to transform your financial future? Try this powerful ritual and start attracting money today!
APNIC Foundation, presented by Ellisha Heppner at the PNG DNS Forum 2024APNIC
Ellisha Heppner, Grant Management Lead, presented an update on APNIC Foundation to the PNG DNS Forum held from 6 to 10 May, 2024 in Port Moresby, Papua New Guinea.
1.Wireless Communication System_Wireless communication is a broad term that i...JeyaPerumal1
Wireless communication involves the transmission of information over a distance without the help of wires, cables or any other forms of electrical conductors.
Wireless communication is a broad term that incorporates all procedures and forms of connecting and communicating between two or more devices using a wireless signal through wireless communication technologies and devices.
Features of Wireless Communication
The evolution of wireless technology has brought many advancements with its effective features.
The transmitted distance can be anywhere between a few meters (for example, a television's remote control) and thousands of kilometers (for example, radio communication).
Wireless communication can be used for cellular telephony, wireless access to the internet, wireless home networking, and so on.
Multi-cluster Kubernetes Networking- Patterns, Projects and GuidelinesSanjeev Rampal
Talk presented at Kubernetes Community Day, New York, May 2024.
Technical summary of Multi-Cluster Kubernetes Networking architectures with focus on 4 key topics.
1) Key patterns for Multi-cluster architectures
2) Architectural comparison of several OSS/ CNCF projects to address these patterns
3) Evolution trends for the APIs of these projects
4) Some design recommendations & guidelines for adopting/ deploying these solutions.
# Internet Security: Safeguarding Your Digital World
In the contemporary digital age, the internet is a cornerstone of our daily lives. It connects us to vast amounts of information, provides platforms for communication, enables commerce, and offers endless entertainment. However, with these conveniences come significant security challenges. Internet security is essential to protect our digital identities, sensitive data, and overall online experience. This comprehensive guide explores the multifaceted world of internet security, providing insights into its importance, common threats, and effective strategies to safeguard your digital world.
## Understanding Internet Security
Internet security encompasses the measures and protocols used to protect information, devices, and networks from unauthorized access, attacks, and damage. It involves a wide range of practices designed to safeguard data confidentiality, integrity, and availability. Effective internet security is crucial for individuals, businesses, and governments alike, as cyber threats continue to evolve in complexity and scale.
### Key Components of Internet Security
1. **Confidentiality**: Ensuring that information is accessible only to those authorized to access it.
2. **Integrity**: Protecting information from being altered or tampered with by unauthorized parties.
3. **Availability**: Ensuring that authorized users have reliable access to information and resources when needed.
## Common Internet Security Threats
Cyber threats are numerous and constantly evolving. Understanding these threats is the first step in protecting against them. Some of the most common internet security threats include:
### Malware
Malware, or malicious software, is designed to harm, exploit, or otherwise compromise a device, network, or service. Common types of malware include:
- **Viruses**: Programs that attach themselves to legitimate software and replicate, spreading to other programs and files.
- **Worms**: Standalone malware that replicates itself to spread to other computers.
- **Trojan Horses**: Malicious software disguised as legitimate software.
- **Ransomware**: Malware that encrypts a user's files and demands a ransom for the decryption key.
- **Spyware**: Software that secretly monitors and collects user information.
### Phishing
Phishing is a social engineering attack that aims to steal sensitive information such as usernames, passwords, and credit card details. Attackers often masquerade as trusted entities in email or other communication channels, tricking victims into providing their information.
### Man-in-the-Middle (MitM) Attacks
MitM attacks occur when an attacker intercepts and potentially alters communication between two parties without their knowledge. This can lead to the unauthorized acquisition of sensitive information.
### Denial-of-Service (DoS) and Distributed Denial-of-Service (DDoS) Attacks
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptxBrad Spiegel Macon GA
Brad Spiegel Macon GA’s journey exemplifies the profound impact that one individual can have on their community. Through his unwavering dedication to digital inclusion, he’s not only bridging the gap in Macon but also setting an example for others to follow.
7. Zope
● Official definition: Free, open-source,
object-oriented web application server
written in Python.
● A way to publish python objects in a web
environment.
● Originally developed to replace/improve
CGI-based development
8. Zope
● Introduced object oriented databases
(ZODB) in 2001
● Through-the-web development (don't tell
anyone)
● Restricted python (stripped-down python
for security reasons)
● DTML or ZPT as template language
9. But we also do Django
● Official definition: high-level python web
framework that encourages rapid
development and clean, pragmatic
design.
● A framework to develop sites easily and
fastly usually with SQL based data-schema
and storage
10. Zope until .../2.5/2.6
● Monolithic tarball
● Even included python (2.1) in earlier
versions
● Add-ons developed as “Products”: folders
with __init__.py and some initialisation
code
● Drop add-ons on a folder and restart
11. Zope 2.7/2.8/2.9
● From monolithic -> installable thing
● ./configure && make && make install
● System python or custom compiled
● Zope instance: install once, create N
instances
● ZEO for database decoupling
13. Plone is a CMS
● Simple and powerful
● Adaptable workflow
● Security (users, groups, roles,
permissions)
● Extensibility
● Usability
14. But the installation....
● Plone 1.x, 2.0, 2.1, 2.5, 3.0, 3.1:
● Tarball Zope 2.6, 2.7, → 2.8, 2.9 and 2.10
● Plone 3 (2007) and 3.1 (2008):
● Zope → Zope 3: small reusable components
● Plone 3.2 (2009):
● Tarball → eggs
● Everyone started developing “python eggs” for
Plone
15. Buildout to the rescue
● Jim Fulton (creator of Zope), created
zc.buildout
● To solve 2 problems:
● Application-centric assembly and deployment
● Repeatable assembly of programs from
python eggs
17. Complex installation
● With python eggs, the installation is not
to tar xzf Plone-3.2.0.tgz
● But, python setup.py install a lot of eggs:
● Plone 3.x: +150
● Plone 4.x: +250
● Complex setups possible
19. Plone Architecture
Apache/Nginx
:80
Zope (w Plone)
:8082
ZEO (w ZODB)
:8084
Zope (w Plone)
:8081
Zope (w Plone)
:8083
SERVER 1 SERVER 2 SERVER 3
20. Needs
● Easy deployment (2-3 commands)
● Repeatable:
● We need to run several times in development
(each time we add new eggs)
● We need to run it in several servers (own,
development, production, ...)
21. How solves it buildout?
● ini-format config file (buildout.cfg)
● Ordered execution of “parts”
● Each “part” runs a “recipe”:
● python egg that given an input, does
something
● Nothing else
22. Extending buildout
● Buildout parts can be extended from other
files and override options (OOP concept)
● Extension can happen over-the-net
(extends= http://myserver/buildout.cfg)
● Known Good Set of eggs for proper
installation
● Create your own recipe
23. Why repeatable?
● You can set exact versions of eggs
● You say which files you download from
where
● The generated filesystem layout is always
the same
● If all versions are set correctly you will
always get the same installation
24. How you develop new eggs?
● They have no exact version:
● We can switch from given versions to source
checkouts (svn, git, hg, …) easily using an
extension: mr.developer
● Extensions are similar to recipes
● Enable and deactivate develop-eggs
25. Buildout example (minimal)
[buildout]
parts =
installation
[installation]
recipe = zc.recipe.egg
eggs = feedparser
interpreter = custompy
Creates a python interpreter (custompy) with feedparser in the path
27. Q: You use this for django?
● A: Yes!
● Q: Why?
● A: because we came to django after
Plone, and we knew how it worked and
we were used to it. All our deployments
are done in the same way
28. Q: but...
● A: yes, we could install django with pip in
a virtualenv... but we were used to use a
more complex solution that allowed us to
create bigger things
30. What recipes do?
● Plone world:
● Create a Zope instance and put all eggs in
the path
● Configure port numbers, database location,
blob file location, object cache sizes, …
● Create a ZEO instance to decouple the
database (configure ports, paths, etc)
31. What recipes do?
● Django world:
● Create an interpreter with django installed
without polluting the system installation
● Run static file collector
● Create WSGI scripts
● Install gunicorn and configure to run with
nginx
32. What recipes do?
● Any world:
● Create supervisor/circusd scripts to run
services
● Download packages from svn/git/hg
● Download tarballs
● Create cronjobs
33. What recipes do?
● Any world:
● Install Apache/nginx
● Configure load balancers (pound/haproxy)
● Update po files and upload to Google Docs for
easy translation
● Create egg omelette to easily navigate on
installed eggs
● ...
34. Real life examples
● In all of our servers we have +120
buildouts
● Everyone knows (Plone or django
developer) how to run them:
● ./bin/buildout -vv
● It's predictable
35. Example architecture with
buildout: www.bertsozale.com
NGINX :80
(system package) VARNISH :8081 HAPROXY :8082
ZOPE :8083 ZOPE :8083 ZOPE :8083
ZEO :8084 All in one server
36. Example architecture: EEA
APACHE
:80
POUND
:8080
ZEO :8080
ZOPE
:8081
ZOPE
:8082
ZOPE
:8083
ZOPE
:8084
ZOPE
:8081
SERVER 2
ZOPE
:8082
ZOPE
:8083
ZOPE
:8084
ZOPE
:8081
SERVER 3
ZOPE
:8082
ZOPE
:8083
ZOPE
SERVER 1 :8084
SERVER 4
SERVER 5
37. Example architecture: EEA
● 4 servers, everything configured using
one buildout file.
● https://github.com/eea/esdrt.buildout
● EEA Sysadmins encourage buildout setup
● Repeatability
● No need of root user to install things
38. Buildout vs fabric?
● Use of buildout does not exclude use of
fabric.
● Fabric also used for automation and
repeatable environments
● All is about what is best for you:
● Simple fab file? → do it
● A lot of deploy code lines? → try buildout
39. Buildout & fabric
● Use of buildout doesn't exclude fabric (did
I say that?)
● Use fabric to run update and run
buildout:
● Update git checkout
● Run buildout
● Restart services
40. Buildout & fabric
● Some EEA projects use it
● We don't, we ssh & run buildout
● But there is literature about this:
● http://tinyurl.com/fab-buildout
● http://tinyurl.com/fab-buildout-so
● Fabric is a way to run commands on
remote servers
41. Buildout: Summary
● Assemble and deploy simple and complex
setups
● Repeatable → installed ecosystem is
always the same
● Specially suited for python based
applications (Plone, Zope, Django,
Pyramid), but also for non-python things:
Apache, Pound, HAProxy, Memcached, ...
42. Buildout (the bad part)
● If your deployments are not similar,
finding and searching recipes can be
hard.
● Error messages, sometimes are not
helpful.
● setuptools & distribute fight in the last 6
months
We are a team of 15 people working on internet since 2001
We are not all developers:
Management: 1
Content authoring, client support and management help: 4
Designers: 2
Developers: 9
In simple language: we do websites
But what kind of websites?
We build sites for our customers so that they can manage the site through the web, without HTML, FTP or any other prior knowledge.
They manage the sites using a WYSIWYG editor
We also do much R&D, and many of our projects come after much time invested on R&D: we now work with real-time-twitter-stream parsing and content curation for instance.
And we do everything in python, and we are proud of it.
We love python
Both for our internal scripts and also for all web development we do
OK, I admit we do some WordPress...
We come from Zope world
In 2001 one of the founders discovered Zope and Python
Zope has been recognized as a python killer app
People say that Zope has used several concepts that later have been widely used.
There are two quotes in one Zope book by Phillip J. Eby (creator of setuptools) that say:
“Where Zope leads, Python follows”
“Those who do not studay Zope, are condemned to reinvent it”
The story says that Zope was invented in a plane, by Jim Fulton who was going to teach CGI development, and thought that object publishing was a saner way to do web-development
Zope encouraged web-based-development to develop quick and powerful dynamic sites through the web
Yes python scripts and templates were written in a form in a management area
But, for security reasons, a stripped-down version of python was used: only some of the standard library packages could be used
They invented 2 templating languages:
DTML: something like PHP, mixing DTML tags and HTML tags
ZPT: using XML namespaces to create XML-valid documents
If you needed to do more powerful things, you could write normal python packages on the filesystem
But not everything is Zope in CodeSyntax.
Although we developed mysql based applications on top of Zope writing raw SQL queries, we finally adopted Django to do SQL-schema-driven applications
Django is also great!
First versions of Zope were monolithic tarballs, that you needed to extract and run using a custom script.
The filesystem products were just dropped in a given folder on the filesystem, and everything worked quite nicely.
With Zope 2.7, Zope brought the concept of “Zope instance”: you install Zope once, and then you can create several instances:
You just have to install Zope ones
You can even install products that can be used in all of your instances
But you can install custom products/packages only in your instance
Zope need to be compiled with a given python version and run cmmi
You can also create an independent ZEO instance, with that you can install the database in a separate instance on the same server or in another one.
But for large websites, we thought that we needed an integrated powerfull environment, and found Plone, which has many things already done (we can understand Zope as a set of tools, and Plone a product built on top of those tools that provides more features).
As a complex product, Plone installation was each time more comples:
On first versions, Plone was released as a tarball: download, untar it inside Zope and worked
But people started using and developing products for Plone (extending core functionality), and at the same time, Zope started to be rewritten into Zope 3, to provide small reusable components, providing a way to upgrade independent components of Zope, and encourage reusability outside Zope.
That's why with Plone 3.2 everyone started writing standard python eggs and something needed to be done with the installation, because doing python setup.py install to all products was a no-go
So, the creator of Zope, Jim Fulton, wrote zc.buildout to install Zope 3 applications, and Plone got benefit from that to install Plone.
This is a typical Plone setup, with a web server, the application server, in which Plone is installed, and the database server.
Everything can be installed on the same server or split across several servers
As you see, Plone's installation needed to install a lot of python eggs, and needed to create several scripts to run zope instances, configure database connection, ….
And the installation can be splitted across several servers, so the installation needs to be easy and repeatable.
You don't want to run the same application with different egg versions on the same server (all instances need to have the same version setup).
And if you split everything on 3 (or more) servers, you need to have everywhere the same versions
So, we (and Plone developers, and sysadmins), needed something that could be run easily and fastly (when in development several times a day)
It needed to be repeatable: we want the same layout, and same set of versions on development or production servers
And that's why buildout was created
Buildout gets that defining an ordered execution of “parts”.
Each part is run by a “recipe”
And a recipe is a “do something” script.
Each recipe knows what to do.
You can even create your own recipes, or extend one buildout file from another.
For instance:
In development servers, you need to start Zope in “debug mode”, on production not;
In development servers you install just one instance; on production 2;
In development servers the port numbers are ones; on production others
This is achieved creating your own file, saying there that you extend another one, and overriding the values. It's just and OOP thing.
Why we say this is repeatable?
Because the installation is done on all servers in the same way
You say in the buildout configuration file which files or which packages and which versions to download.
The generated filesystem layout is always the same
If all versions are set, the installation result will be always the same.
Is this just for deployment or also for development?
You need to say buildout the versions of product you install (feedparser = 5.1.2), but what if you are developing a new product?
We use an extension, called “mr.developer”, that easily plugs into buildout the so-called “develop eggs”, eggs without a fixed version that are being developed.
Moreover this extension eases the way to checkout and clone packages from git/svn/mercurial/etc.
Show plonebuildout.cfg
And yes, we use this for django too.
Perhaps django installation is easier without buildout (virtualenv & pip), but we came into django after learning buildout for Plone, and buildout worked so well that we adopted buildout also for
Yes, OK, … we could do it with pip and virtualenv, but this way, we use everywhere the same deploying mechanism and everyone know how to run things.
Show djangobuildout.cfg
What can buildout recipe do?
In plone environments the basic recipes:
Create zope instances from zope installation
Create ZOE instances to decouple data-base installation
Configure paths, environment vars, database locations, paths, por numbers, object cache sizes....
In django worlds:
Install django in an isolated environment
Run static file collectors
Create WSGI scripts
But you have many other recipes to do almost everything:
Create supervisor or circus scripts and configurations to run the services
Download packages
Create cron jobs
Install apache
Configure load balancers depending on the server instance setup
Upload PO files to a Google Doc to easily translate interface messages
Create egg omelette to navigate in eggs...
Search pypi for recipes...
But this is used in real-life?
All Plone installations since 2009 are installed using buildout.
Buildout is the responsible of the most web-traffic on pypi
In all of our servers we have more than 120 buildouts
This is an example architecture we installed with buildout in one server (it was quite big server) for a customer.
It installed varnish (caching server), haproxy (load balancer), several Zope instances and a database server.
We also tested to put a database slave in another machine, and the master database was replicated life there to have a live backup-copy
In another project for the European Environment Agency, we have this setup in 5 servers, everything installed using buildout
One server with Apache and Pound:
Three servers, each with 4 zope instances
Another server with the databse.
All this complex setup (remember, you need to deploy the exact same versions of everything on all servers), is handled by one or two buildout files, and everything is public.
You can check the configuration files on github.
The EEA sysadmins even encourage this buildout setup (they are not Plone experts), because all setups across their premises are handled in the same way, the users have the same permission-set and errors can be found easily.
And what about fabric? Cannot you use fabric?
Yes, the use of buildout doesn't exclude fabric (or any other tool).
Fabric is a tool for automation and running remote task.
Everything is about what is best for you.
We feel confortable with buildout, we also think that it's easier to reuse all those existing recipes than building tasks with fabric.
Anyway, we don't exclude the use of fabric, if that suits you, use it!
You can even use it with buildout.
There's literature about using fabric with buildout: not to handle the installation of all those packages, but to run buildout on the server and to update the svn/git checkouts.
So, as a summary:
Buildout helps you assembling and deploying both simple and complex applications.
Those setups are repeatable: everywhere you run them, you will get the same setup
It's specially suited for python applications (Zope, Plone, Django, pyramid), …. but you can also install Apache, Pound, HAProxy, Memcached, ...)